求基于 Python 开发大流量在线服务的经验教训
rt之前发了个帖子,询问现在有哪些大流量在线服务是用 python 作为主力语言。现在问题改下,如果真的要以 python 来开发,可能面临哪些问题,如何解决?
python 性能是差些,对付大流量 web 使用异步框架应该足够了,况且还有使用 rust 底层 web 框架 github.com/sparckles/Robyn
你这个问题意义不大,1. 大部分人和大部分公司不会选择 python 的方案,原因是 java 在国内环境下更合适,直接原因就是招人随便招都有一帮卷 B 来找你2. springcloud 生态整合了开发中的一些重要节点,比如微服务和分布式容器化部署,服务注册与发现,管理与更新,均衡负载和智能路由,故障和容错和灾备,以及开发过程中的链路追踪等等问题。这些问题不是说 Python 不能解决,只是说生态导致语言自然分化出了不同定位,你强行要逆趋势而行就要支付对应的代价,有一些过程目前的开源工具做的不是很好,有一些过程需要你自己实现,这些过程中任意一个单拿出来都说不上很难,但一箩筐打包还是令人头疼的工作。3. 所以你用 java 开发这叫顺势而动,用 python 开发这叫逆天而行。单说坑,python 没什么坑,使用量这么高的语言有什么坑,但是因为你逆天而行所以可以说到处都是坑。4. 而你使用动态类型语言的优势则是开发周期短,然后如果你资金和技术够,那么另起炉灶会让你对项目有完全的掌握力度。这些优势在资本密集型项目中不具备什么价值。5. 所以最后问题就变成,你既然都有大流量了,何须在意成本,直接花钱铺路,javaer 帮你把问题解决得服服帖帖。除非你实际上没有大流量,开发还想省钱,然后同时你是个技术专家,非常清楚自己要做什么,那你就用自己熟悉的技术栈。不过如果你是技术专家的话你还来 v2 问什么
大流量,如果是我,绝对不会用 python
Instagram, django 的框架, 当然魔改了一部分, 抗的住十亿流量, 成为独脚兽之前语言不是啥问题吧
流量大语言性能差点多加服务器就好了,关键是架构要能方便的加服务器
为啥限定是 python ?即使是那几个说的 python 大项目,也是用 python 当胶水,具体的实际中间件,性能敏感的地方还是用 c++,golang 甚至 rust 重写了的。
用 Python 就别讲究性能,Python 的最大优势在于可以当脚本用,开发方便才是 Python 的优势,性能真没必要
这就比较无聊了,用什么开发业务就是用什么语言,比如你牙齿是每天磨损最多的地方,然后你换了钢牙,能说你这人是钢做的?
豆瓣好像是吧, 还有那个问答社区,v2 之前也是
V2EX 现在是什么语言?
有没有 c 底层的 python web 组件/框架?
我的意思是,仅仅 python 搞高性能,短期内是扯淡呢。 用 python 就得多种语言一起用。python 做快速原型,业务代码,遇到性能问题可以快速切换语言再搓一遍
你这个问题有歧义如果你的需求是 web 后端 api ,我可以肯定的说没有任何问题因为 Instagram 和早中期字节使用完全没有问题,字节是这 2 年才换的 go 但是历史还是遗留不少 python但是你说你的需求是音视频实时编解码之类的,那 python 肯定不合适python 最大的问题不是性能,而是弱类型,其次是如果做业务的话生态显然不如 java
国外例子有 Instagram ,但不能说没有坑:被收购了之后为了性能 Facebook 就魔改出了 Cinder 。
豆瓣之前是,已经转 GO 了,你去查下他们转 GO 的原因不就知道了么
你的业务大到 python 无法支撑的时候还会缺钱重构?就算没人,有钱你也可以直接加机器行了
每个人对大流量的定义和理解都是不一样的,有可能你以为的大流量,在别人看来就是洒洒水,或者反过来。。。没有参照物的话,这种回答没啥用。
你说的大流量是多大?
用 Python 做过单机几千 qps 的项目,也用 Go 做过多机高可用一天几个请求的项目。说实话绝大部分 web 服务的瓶颈不在语言。
一般流量压力不再语言,在数据库;另 Python 是动态强类型
楼上说的非常到点子上。WEB 程序,性能瓶颈真的不在语言上了,WEB 服务多也算是 IO 密集型的。很多时候要在 IO 瓶颈上找问题。做过一个在日在线七八十万的项目,纯 Python 全部用 asyncio 异步。性能上完全没什问题。机器配制 两台 4C8G 组负载. 一台也能顶得住,但两台可靠性更好.
绝大部分商业项目都等不到谈性能的那天(例如 YouTube 、Dropbox 、Quora 、Instagram 等 Python Web 第一梯队)当然,如果团队人水平菜鸡(例如连 JIT 、GC 的概念都搞不明白的,也不想思考的) 建议还是无脑用 Golang 、Java 。
在 web 开发方面,python 远比不上 java1.java 生态更好,各种库全,缓存,日志,数据库操作等2.java 开发速度更快,我用 python 框架 flask 写过一个 web 应用,增删查改写的恶心,更别说复杂 sql3.python 是动态语言,代码写错了也能正常跑起来。多人开发同一个项目时,有同事漏提交代码,或者合并代码冲突覆盖,我用 java 会提示编译报错,跑不起来4.python 写法一旦不规范,过段时间我都看不懂自己写的是什么了
你这也太厉害了,用 py 做几 K QPS 。。
你菜而已。。。
大部分的应用瓶颈不是在开发应用的语言,而是 SQL......
没有什么经验,自己真的太菜了,做过那么多项目,并发上千的都很少见。而且,遇到瓶颈,基本都是大力出奇迹,能硬件解决的绝不动软件,基本上在代码没有 BUG 的情况下,没人会去优化代码。这年头,优化代码体现不了工作能力,写一个从硬件到基础软件的升级改造方案,才是领导眼中的价值体现。
和语言没啥太大关系,生态和开发人员的数量和薪资才是关键
大部分 web 都是 IO bound ,堆机器可解。机器比人便宜
堆机器 硬件比人工便宜多了
都需要架构设计,没啥问题,78 年前我在前司做的几亿用户的 app ,日活千万,后端也就全 Python ,后来用 go 改写了部分接口,机器省了 70%。
经验教训就是不要用 python 写,手动狗头,开个玩笑;虽然顶是顶得住,但是正经的说,python 的性能本来就容易受到代码质量的影响,在招聘层面上想找到比较有水平的人员也相对困难,何必呢
开发一时爽,重构火葬场。 如果急着出产品那就上 Python,东西堆出来再说。----但如果业务太复杂,而你又没有很 NB 的代码规范约束,开发测试用例,分析工具什么的,只靠人肉 DEBUG ,那么大部分的代码迟早会变成一座没人能看懂的屎山,并且任何一个因素都可能导致它在某个地方随机爆发。于是你一定会用 Go/Java/Rust 之类重构。---Python 对程序员的要求太低了,如果一个人只会 Python 的话,我觉得这个人的水平还是要小心考虑一下的。---据说 YouTube 当年用过 Python ,但是后来放弃了.Ref: www.zhihu.com/question/21017354/answer/652602653
以前有个文章的,成人网站 python 优化 www.oschina.net/news/40379/how-i-made-porn-20x-more-efficient-with-python
db 和 redis 做好隔离就好了,不要写复杂 sql ,redis 不要 hotkey bigkey ,基本上就是加机器的事情……对比起性能,当你业务够的时候还不如想想避免团队的人乱来搞魔法
假如告诉 100 年前的人如今人人都有能远隔万里就能面对面聊天的手机电脑,他们恐怕只会想到例如驿站被替代,邮差被替代之类的吧,就好像很多人觉得 AI 来了程序员就要失业了,但是…
打开浏览器就能用(只支持 chrome 系的浏览器),可以编辑本地文件,可以预览 markdown 。 源代码: github.com/xieyuheng/x-editor…
不管是热门的、冷门的,还是常用的、偶尔用的,只要实用好用的。 抛砖引玉: Wisereminder: 免费的事件提醒工具,可以用作每日的工作提醒。 Motrix: 一款全能的…