求基于 Python 开发大流量在线服务的经验教训

2024-04-20 16:36:24 +08:00
 craftx
rt
之前发了个帖子,询问现在有哪些大流量在线服务是用 python 作为主力语言。
现在问题改下,如果真的要以 python 来开发,可能面临哪些问题,如何解决?
7576 次点击
所在节点    Python
38 条回复
pyKane
2024-04-20 21:41:02 +08:00
楼上说的非常到点子上。
WEB 程序,性能瓶颈真的不在语言上了,WEB 服务多也算是 IO 密集型的。
很多时候要在 IO 瓶颈上找问题。
做过一个在日在线七八十万的项目,纯 Python 全部用 asyncio 异步。性能上完全没什问题。机器配制 两台 4C8G 组负载. 一台也能顶得住,但两台可靠性更好.
R4rvZ6agNVWr56V0
2024-04-20 22:35:11 +08:00
绝大部分商业项目都等不到谈性能的那天(例如 YouTube 、Dropbox 、Quora 、Instagram 等 Python Web 第一梯队)
当然,如果团队人水平菜鸡(例如连 JIT 、GC 的概念都搞不明白的,也不想思考的) 建议还是无脑用 Golang 、Java 。
james2013
2024-04-20 22:55:19 +08:00
在 web 开发方面,python 远比不上 java
1.java 生态更好,各种库全,缓存,日志,数据库操作等
2.java 开发速度更快,我用 python 框架 flask 写过一个 web 应用,增删查改写的恶心,更别说复杂 sql
3.python 是动态语言,代码写错了也能正常跑起来。多人开发同一个项目时,有同事漏提交代码,或者合并代码冲突覆盖,我用 java 会提示编译报错,跑不起来
4.python 写法一旦不规范,过段时间我都看不懂自己写的是什么了
chenqh
2024-04-20 22:58:44 +08:00
@keakon 你这也太厉害了,用 py 做几 K QPS 。。
FlyingBackscratc
2024-04-20 23:23:20 +08:00
@james2013 你菜而已。。。
niubee1
2024-04-20 23:49:27 +08:00
大部分的应用瓶颈不是在开发应用的语言,而是 SQL......
coolair
2024-04-20 23:59:20 +08:00
没有什么经验,自己真的太菜了,做过那么多项目,并发上千的都很少见。
而且,遇到瓶颈,基本都是大力出奇迹,能硬件解决的绝不动软件,基本上在代码没有 BUG 的情况下,没人会去优化代码。
这年头,优化代码体现不了工作能力,写一个从硬件到基础软件的升级改造方案,才是领导眼中的价值体现。
qiyilai
2024-04-21 10:33:58 +08:00
和语言没啥太大关系,生态和开发人员的数量和薪资才是关键
dayeye2006199
2024-04-21 14:04:15 +08:00
大部分 web 都是 IO bound ,堆机器可解。机器比人便宜
chentt
2024-04-21 14:56:17 +08:00
堆机器 硬件比人工便宜多了
zagfai
2024-04-21 16:52:40 +08:00
都需要架构设计,没啥问题,78 年前我在前司做的几亿用户的 app ,日活千万,后端也就全 Python ,后来用 go 改写了部分接口,机器省了 70%。
kkbblzq
2024-04-21 17:51:16 +08:00
经验教训就是不要用 python 写,手动狗头,开个玩笑;虽然顶是顶得住,但是正经的说,python 的性能本来就容易受到代码质量的影响,在招聘层面上想找到比较有水平的人员也相对困难,何必呢
weeevv
2024-04-21 18:04:52 +08:00
开发一时爽,重构火葬场。
如果急着出产品那就上 Python,东西堆出来再说。
----
但如果业务太复杂,而你又没有很 NB 的代码规范约束,开发测试用例,分析工具什么的,只靠人肉 DEBUG ,那么大部分的代码迟早会变成一座没人能看懂的屎山,并且任何一个因素都可能导致它在某个地方随机爆发。
于是你一定会用 Go/Java/Rust 之类重构。
---
Python 对程序员的要求太低了,如果一个人只会 Python 的话,我觉得这个人的水平还是要小心考虑一下的。
---
据说 YouTube 当年用过 Python ,但是后来放弃了.
Ref: https://www.zhihu.com/question/21017354/answer/652602653
zhuangzhuang1988
2024-04-21 21:53:27 +08:00
testcgd
2024-04-22 00:39:37 +08:00
db 和 redis 做好隔离就好了,不要写复杂 sql ,redis 不要 hotkey bigkey ,基本上就是加机器的事情……对比起性能,当你业务够的时候还不如想想避免团队的人乱来搞魔法
lijiachang
2024-04-22 21:21:32 +08:00
如果团队技术栈是 Python 的话,用 Django 没什么问题
haiku
2024-04-22 21:55:01 +08:00
OpenAI 就是 Python 后端吧,可以看下它们的事故报告

Python 我讨厌的地方主要是 AsyncIO 生态一般,写起来割裂,其他还好

纯 Web 逻辑 Go 挺不错的
so1n
2024-04-22 23:33:53 +08:00
之前写过一个项目,Java 的服务是在我们的后面,结果我的服务没问题,Java 的天天扛不住挂了,所以一切还是看人

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1034197

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX