1
lihongjie0209 OP 1. 运行效率较低。知乎目前机房机柜空间已经不足,按照目前的用户和流量增长速度,可预见将在短期内服务器资源告急(针对这一点,知乎正在由单机房架构升级为异地多活架构);
2. Python 过于灵活的语言特性,导致多人协作和项目维护成本较高。 关于 Python 性能 和 维护性 的问题其实其他语言社区都有在讨论, 可是在一些 Python 用户选择无视. 希望这篇文章可以叫醒一些装睡的 Python 用户. |
2
bolide2005 2018-11-28 18:16:35 +08:00
“知乎目前机房机柜空间已经不足”
知乎现在是自建服务器? |
3
lihongjie0209 OP @bolide2005 这个不清楚, 可以去知乎的文章下面问一下
|
4
huobazi 2018-11-28 18:35:05 +08:00
ruby 表示不服
|
5
hitrust 2018-11-28 18:38:18 +08:00 1
应该说知乎用 python 用的不好呀,
|
6
XIVN1987 2018-11-28 18:39:12 +08:00
我觉得关键还是性能,,省了 80%的处理器,,这都是钱啊!!
至于说动态妨碍协作,,感觉 type hints 能缓解这个问题。。 |
7
guog 2018-11-28 18:48:15 +08:00 via Android 2
应该是广告加的太猛了吧(🐶保命
|
8
lihongjie0209 OP @hitrust 用的不好还是不好用?
|
9
guog 2018-11-28 18:51:37 +08:00 via Android
以前打开一个问题只是当前问题的回答,现在呢,底下都是些什么乱七八糟的推荐啊,还采用头条式的那种自动加载一堆推荐
|
10
hitrust 2018-11-28 18:51:49 +08:00
@lihongjie0209 用的不好,自然也就会说不好用
|
11
lihongjie0209 OP 这样说的话:
goto 用的不好, 所以不好用 |
12
miniyao 2018-11-28 19:40:00 +08:00
知乎的 Python 开发能力,是不是比豆瓣差很多?
|
13
feverzsj 2018-11-28 19:47:51 +08:00
就是喜欢瞎折腾,zhihu 已经把一手好牌打烂了
|
14
trait 2018-11-28 19:52:36 +08:00 1
@hitrust 知乎显然还不能像 google facebook 一样财大气粗到请一群 PL 大佬给 python 那垃圾设计,写一套类型 /静态检查
|
15
lihongjie0209 OP @trait 自己花钱写还不如用现成的编译器呢
|
16
trait 2018-11-28 20:07:13 +08:00
@lihongjie0209 所以知乎就放弃 python 这种大项目巨坑了啊
|
18
trait 2018-11-28 20:40:41 +08:00
|
20
petelin 2018-11-28 21:13:25 +08:00
@bolide2005 我所知的是他们在用腾讯云, 专门开了一个机房给他们, redis 集群都有几千台机器了. 充分说明, 跑得慢,只能加一堆一堆的缓存. 就知乎那么点东西, 居然有几千台 redis 你敢信.
|
21
trait 2018-11-28 21:27:35 +08:00 1
@hitrust PL 和编译器开发做的越多,感觉越强烈,google/facebook 的选择还是很明智的,连前端都出 ts,python 这种脚本语言就应该去做脚本适合的事
|
22
azh7138m 2018-11-28 21:55:07 +08:00 via Android
@trait ts 开 no any 的话,其实是把 js 的一些用法给干掉了,回到了静态类型的语言上面
|
23
bolide2005 2018-11-28 22:02:30 +08:00
@petelin #19 老哥 6
|
24
niubee1 2018-11-28 22:12:14 +08:00 1
这个逼装不下去了, 当年 Twitter 换 Java 也是引起群嘲
|
25
junjieyuanxiling 2018-11-28 22:41:13 +08:00 via Android
“节约了超过 80% 的服务器资源。”
卧槽…… |
27
janxin 2018-11-28 23:43:29 +08:00 1
知乎几个问题叠加的吧:一个是现在服务器费用挺高的,总是得找个法子省钱了;另外一个是历史原因还在用 Python2,想上 Type Hint 有这样那样的问题,升级成 3 想了想还不如用 Go 重写?
|
28
wph95 2018-11-28 23:52:44 +08:00
python 过于灵活导致的很多问题 可以通过 code review 解决
所以本质是 程序猿的水平不行,而不是语言。 然而程序猿难控制水平,换 个工程友好型的语言来提升门槛,也不失一个办法。但是国内 golang 程序猿就那么点,比较看衰 |
29
q397064399 2018-11-29 00:01:34 +08:00 5
@wph95 #28 总是有人幻想大公司写 Python 跟你司写 Python 是一回事
在大型项目上,Python 是个烂语言吗? - 黄玄的回答 - 知乎 https://www.zhihu.com/question/21017354/answer/508114846 到知乎这个级别的公司,他们完全可以自己造一套轮子 来解决问题,包括 golang 依赖的模块化 微服务调用链跟踪 等一系列的中间件 他们都可以造一套,但是..你司的产品经理 催你的业务明天上线,醒醒吧 |
30
pathbox 2018-11-29 00:03:44 +08:00 via iPhone
难道 瓶颈不是数据库么?
|
31
firebroo 2018-11-29 01:06:07 +08:00 via Android
编译型语言的效率真的不是解释型语言可以比的。。🤣
|
32
zhangdawei 2018-11-29 01:12:00 +08:00 via iPhone
@q397064399 这个说的在理
|
33
XIVN1987 2018-11-29 01:25:34 +08:00 2
@firebroo
其实知乎这篇文章也说明,至少在写网站事情上,python 的性能与编译语言的性能差距没那么大 很多性能比较中,python 的性能只有 go、java 之类语言性能的几十分之一,,但在这里性能只高 5 倍,,虽然还是差很多,但显然也说明,实际使用的时候性能差距没有跑分那么大的差距 而且考虑到,重写(重构)本身就能提升性能,,所以差距可能连 5 倍都没有 |
35
kiwi95 2018-11-29 01:47:51 +08:00 via Android
Python 性能差,肉眼可以感知的慢
|
36
scnace 2018-11-29 01:58:22 +08:00 via Android
逼乎之前那几次宕机怕不是没有 return error 直接 panic 了(逃
|
37
lihongjie0209 OP @q397064399 总有人说可以写 C 扩展什么的, 我就笑笑不说话
|
38
est 2018-11-29 09:22:05 +08:00 5
python 不行。你们千万别用 python。谁用谁孙子。
|
39
zhangqilin 2018-11-29 09:26:17 +08:00
别说 Python 好维护
我们小公司两个组代码两种风格 每次都还得再理解 |
40
lihongjie0209 OP @est 写小脚本还是要用的
|
41
sujin190 2018-11-29 09:40:36 +08:00
@petelin #20 几千台。。认真的么?
我怎么记得还是去年哪看到知乎分享啥架构的,说支撑每日百万异步任务啥的来着,这就几千台 redis 了 每天 100 亿请求他们有么?那么按这个估算他们平均每台服务器处理不到 100 万啊,这么弱分明是系统设计的渣吧,和语言有啥关系! |
42
SuperMild 2018-11-29 10:09:28 +08:00
先不说 Python, 就说 Golang, 真是个好东西,首先易学,特性啊概念啊啥的非常少,黑魔法几乎没有,代码清晰易读到炸裂,运行效率还蛮高。本来懂 Python 的人,静下心来学一个星期 Go,基本就能实战了,如果加上公司里还有人指导、答疑的话,简单培训几节课,整个 Python 团队迁移到 Go 也不是不可能,剩下的只是搬砖一点点迁移代码而已。
|
43
q397064399 2018-11-29 10:15:18 +08:00 2
@lihongjie0209 #37 他们忘记了那些大公司跟中小型公司的技术体系是完全的两回事,像知乎 这种级别的公司,有自己的技术框架支持开发部门, 小公司开发人员 100 以内 用 golang 就是自己找不痛快, 什么轮子都得从头造, 别看大公司吹得火,这种没有广泛社区支援的语言生态系统,你自己用起来就完全是另外一回事。
|
47
Mrun 2018-11-29 10:31:51 +08:00
@q397064399 #43 应该也还好吧,golang 大部分的轮子目前都有了
|
48
lihongjie0209 OP @q397064399 就想知道那些跟着大公司上贼船的小公司现在怎么想. Python 之前的布道师老是拿着知乎说事.
|
49
find456789 2018-11-29 10:39:13 +08:00
那么问题来了 ,知乎之前用的 python 哪个版本? 如果换成最新版的 python,性能会不会有所改善? 能改善多少?
|
50
www5070504 2018-11-29 10:43:11 +08:00 1
感觉本帖气氛不像是讨论 所以多说无益
|
51
www5070504 2018-11-29 10:43:52 +08:00
至少我现在用的 openstack 还是 python 写的
|
52
zts1993 2018-11-29 10:45:26 +08:00
"关于 Python 性能 和 维护性 的问题其实其他语言社区都有在讨论, 可是在一些 Python 用户选择无视. 希望这篇文章可以叫醒一些装睡的 Python 用户.
" |
53
q397064399 2018-11-29 10:45:43 +08:00 1
@Mrun #47 golang 那个真的不成熟,很多东西都没有,连个像样的 ORM 都没有,新旧语言本身没有任何语法之争,在互联网这个写业务的场景,什么语法那都是一把梭,关键是新旧语言生态的基础设施问题,公司架子打好了,这样就方便来人填业务,你要天天折腾在这些框架跟基础设施上,老婆孩子不都交给老王了? 研究技术归研究技术,公司里面产品跟老板都是看你产出的,不关心你技术怎么样,只有当了一定量级别,技术才会发挥重要的业务保障作用。
有一定体量的公司,很多东西都是内部 负责基础设施的部门 会根据当前的业务场景 自己定制的工具,这些没开源的东西 你根本就看不到,你在外面的中小型公司就像 井底之蛙之样。 那些吹 Python 的 你看知乎那帖子里面,人家是把 Python 当成静态语言来写,还有各种措施来保障你的类型不出错。 百度的 golang 建设 有一整套的发布 依赖 错误定位 调用管理 等等中间件来支撑,你有吗? 你有吗? |
54
feverzsj 2018-11-29 10:54:34 +08:00 1
其实 b 乎这点东西,用 c++重写的话,只需要一台服务器就够了
|
55
ipoh 2018-11-29 10:56:19 +08:00
@lihongjie0209 人家小公司用个 Python 有啥问题,PHP 一样可以来跑业务。反倒是知乎,有精力多想想怎么改善用户体验留住用户,别老让人下载破 APP
|
56
abcbuzhiming 2018-11-29 11:09:29 +08:00 1
@sujin190
https://mp.weixin.qq.com/s/YKJ-Y6EZevvMK8MX38xE3w 你自己去看人家的分享, ● 机器内存总量约 70TB,实际使用内存约 40TB ; ● 平均每秒处理约 1500 万次请求,峰值每秒约 2000 万次请求; ● 每天处理约 1 万亿余次请求; ● 单集群每秒处理最高每秒约 400 万次请求; ● 集群实例与单机实例总共约 800 个; ● 实际运行约 16000 个 Redis 实例; ● Redis 使用官方 3.0.7 版本,少部分实例采用 4.0.11 版本。 1.6w 个实例,怎么也有几千赢家机器了 |
57
abcbuzhiming 2018-11-29 11:10:33 +08:00 3
@wph95 大哥,你真以为 code review 不要成本的吗?明明静态语言靠 IDE 就能解决的问题你们要引入新的过程来解决,真以为不要成本的吗?
|
58
SimbaPeng 2018-11-29 11:16:00 +08:00 2
非要把动态语言的缺点拿去跟静态语言的优点比?
一个个口口声声都是大项目,又有几个接手过真正的大项目?发出来看看? 哪个大项目不是从小项目做起来的?知乎、Twitter 从一开始做就是大项目了? 知乎当年直接用 go 不一定做得起来,Twitter 当年直接用 scala 也不一定做得起来。 |
59
abcbuzhiming 2018-11-29 11:18:17 +08:00
@trait 知乎有个专门的贴:为什么 2010 年前后诞生的语言(如 Golang, Rust, Swift)都是强类型 + 静态( https://www.zhihu.com/question/31100089 )。回答过这个问题,第一代脚本语言,包括现在的 php,javascript,python 都做错了一件事情,因为想要类型推导,把参数类型限定符也去掉了,这在合作型项目里就是灾难,所以现在 php 和 python 都在重新加回参数类型限定符。js 则直接出现了 ts 这样的强类型扩展
|
60
Linxing 2018-11-29 11:18:58 +08:00
ins 的用户群体难道比知乎少?
|
61
abcbuzhiming 2018-11-29 11:26:46 +08:00
@SimbaPeng 不需要什么大项目,合作型项目,哪怕只有两个人,只要这两个人不是自律性非常强的人,我都不推荐使用没有参数类型限定的语言,否则重构火葬场就不是开玩笑。还有朋友你别搞错了,这和动态静态没卵关系,核心是语言本身有没有参数类型检查。objc 就不算传统的静态语言,但是它就有参数类型检查。
|
62
matrix1010 2018-11-29 11:41:01 +08:00
创业公司使用 Django 还是不错的,框架很成熟。比如 leetcode,用的就是 Django。
|
63
araraloren 2018-11-29 11:59:59 +08:00
容我猜猜 可能是 项目大了 不好管理了,然后想推倒重来?
|
64
windfarer 2018-11-29 12:02:32 +08:00 1
说不定是换了个 CTO/架构师
|
65
laike9m 2018-11-29 12:23:26 +08:00 1
@trait 原来可能是比较难维护,但加了 type hints 之后根据我的经验来看已经能做到不错的可读性和可维护性,虽然性能依旧是个问题吧
|
66
laike9m 2018-11-29 12:25:12 +08:00
@zhangqilin 没有统一的编程风格难道不是你们公司的问题。。。
|
67
laike9m 2018-11-29 12:27:04 +08:00
Python 不是不可以黑,但很多人黑不到点上,看起来就很尴尬。
|
68
R4mble 2018-11-29 13:03:17 +08:00
80%, 这数字也太吓人了
|
69
yufeiminds 2018-11-29 13:22:04 +08:00
@bolide2005 江湖传闻是自建机房,北京酒仙桥
|
70
SimbaPeng 2018-11-29 13:25:16 +08:00
|
71
maemual 2018-11-29 13:26:18 +08:00
@yufeiminds #69 瞎说。。。
|
73
yufeiminds 2018-11-29 13:32:41 +08:00
@maemual 求辟谣~
|
74
maemual 2018-11-29 13:35:40 +08:00
@yufeiminds #73 我就是知乎社区的。
|
75
walkerliu 2018-11-29 13:42:35 +08:00
果然程序员们碰到讨论语言优劣的贴子都得开撕~
|
76
btv2bt 2018-11-29 13:46:26 +08:00 via Android
哈哈,每次这个时候我就想起 ins 也用的 py
|
79
xemtof 2018-11-29 13:49:56 +08:00
@find456789 py2 到 py3 性能机会没有变化,甚至可能变慢
|
80
mimzy 2018-11-29 14:12:25 +08:00
@xemtof #79 仅供参考:《 Instagram 在 PyCon 2017 的演讲摘要》 http://www.zlovezl.cn/articles/instagram-pycon-2017/
|
81
ericgui 2018-11-29 14:17:44 +08:00
老老实实用 Java 不好吗?
|
82
lihongjie0209 OP @ericgui java 太老 太死板 , 对于 Python 用户来说
|
84
wph95 2018-11-29 14:41:16 +08:00 1
@abcbuzhiming 说的用了静态语言 用了 ide 就没有 bug 一样。说的修 bug 不要成本一样。
不是撕逼,当前国内环境的确可以牺牲 code review 换取速度,换取时机。但同时间不稳定也是风险。 这个是一个风险的取舍,就看你乐不乐意拿一些更好的正规合理的机制去买稳定性 买个保险一样。 换语言算是个机制,但用语言当门槛,总觉得很搞笑。 pinterest 也并不算 fb,google 这种大公司,用 django 的。 |
85
pathbox 2018-11-29 14:53:52 +08:00 via iPhone
@q397064399 golang 生态已经比你想象的要完善了
|
86
wph95 2018-11-29 14:55:50 +08:00
@q397064399 所以本质原因是公司机制的问题,换个语言 pm 就不催你了?
知乎这文章 python 换成 php,ruby 大家都会这么怪语言。 我不是说 python 语言好。我只是想表达 文章本末倒置了。 作为一个前 golang 工程师,他那文章不敢说,但是总觉得再把 golang 变 flask。 golang 最知名 if err != nil 思想被干掉了 |
87
zhoubug 2018-11-29 15:19:00 +08:00
instagram 和 fb 内部很多基础服务其实都是用 cpp,facebook code blog 上有提到过优化效果,py 可能只是一些纯业务层
https://instagram-engineering.com/c-futures-at-instagram-9628ff634f49 This enabled us to reduce the number of instances of the Suggested Users service from 720 to 38. cpu 利用率大幅提高,延迟大幅减少 ,服务器数量从 720 减少到 38 台。 当然大厂和小厂的选择各有其道理。但就语言来说,开发的效率重在周边基础组件的积累。就哪 modern cpp 来说配合一些成熟组件用来做互联网开发也一样可以很快。而且可以一劳永逸 很多服务做好 今年不打理。 |
88
qdcanyun 2018-11-29 15:28:15 +08:00
@laike9m 主要矛盾不在 Type Hints 与可维护性上,Golang 的性能带来的低成本是不能拒绝的优势。各种上 C
扩展的组件,Cython 的逻辑,Cache 什么的都上了之后,CPU 成本开销还是很大外加机房受限什么的,选择 Golang 来解决 |
89
6IbA2bj5ip3tK49j 2018-11-29 15:33:17 +08:00
哈哈哈,知乎 Python 大牛光顾着开 live 卖爬虫课程了。
|
90
laike9m 2018-11-29 15:37:57 +08:00
@qdcanyun 我回复的那条是在说 Python 大项目的可维护性不足。我觉得你们换 Go 也 make sense,不过其实我还挺想了解之前那些优化具体起了什么效果,以及 bottleneck 到底在哪的哈。如果能再写篇文章就好了。
|
92
sujin190 2018-11-29 15:57:58 +08:00
@abcbuzhiming #56 每天 3000 万日活,每秒 1500 万请求,这每日使用时长都快赶上微信了吧,我怎么这么不信呢,吹的吧
|
93
sujin190 2018-11-29 16:02:18 +08:00
@abcbuzhiming #56 擦了,人家说的是 redis 每秒请求数,但是对 redis 来说不算复杂吧
但是知乎最近虽然在文章分析算法上感觉做了很多,但是这么多内存使用量来说,还是做的渣 |
96
niubee1 2018-11-29 17:19:55 +08:00
@lihongjie0209 说 Java 太老太死板? JVM 下一帮子小弟呢, Kotlin 怎么样? 还有一大堆 Java 的遗产可以选用, 简直就是百亿富豪家的小儿子.
|
97
trait 2018-11-29 17:29:24 +08:00 via iPhone
@fyxtc 这楼难道说的不是大型项目,跟 ml 什么关系。既然说到 ml,python 还是担心一下性能接近 C 的 Julia 吧
|
98
myyou 2018-11-29 17:37:52 +08:00
@niubee1 只要有 jvm 都是太老太死板,Kotlin 跟新版 java 比并没有多大优势,而且主要是集中在移动端在用。
|
99
fyxtc 2018-11-29 17:47:14 +08:00
@trait 你这人真是有意思,先是说 py 不适合大项目,现在意思又暗指 py 搞 ml 也很有问题,真是无脑黑。担心这担心那的,还要替别人的岗位担心,辛苦了,走好
|
100
lihongjie0209 OP @niubee1 我是友军, 我主要用 JAVA. 我的观点是对于 Python 用户来说, Java 限制太多, 有点死板
|