V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
craftx
V2EX  ›  Python

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

  •  
  •   craftx · 2024-04-20 16:36:24 +08:00 · 6908 次点击
    这是一个创建于 422 天前的主题,其中的信息可能已经有所发展或是发生改变。
    rt
    之前发了个帖子,询问现在有哪些大流量在线服务是用 python 作为主力语言。
    现在问题改下,如果真的要以 python 来开发,可能面临哪些问题,如何解决?
    38 条回复    2024-04-22 23:33:53 +08:00
    livenux
        1
    livenux  
       2024-04-20 16:42:40 +08:00
    python 性能是差些,对付大流量 web 使用异步框架应该足够了,况且还有使用 rust 底层 web 框架 https://github.com/sparckles/Robyn
    LeeReamond
        2
    LeeReamond  
       2024-04-20 16:47:08 +08:00   ❤️ 7
    你这个问题意义不大,
    1. 大部分人和大部分公司不会选择 python 的方案,原因是 java 在国内环境下更合适,直接原因就是招人随便招都有一帮卷 B 来找你
    2. springcloud 生态整合了开发中的一些重要节点,比如微服务和分布式容器化部署,服务注册与发现,管理与更新,均衡负载和智能路由,故障和容错和灾备,以及开发过程中的链路追踪等等问题。这些问题不是说 Python 不能解决,只是说生态导致语言自然分化出了不同定位,你强行要逆趋势而行就要支付对应的代价,有一些过程目前的开源工具做的不是很好,有一些过程需要你自己实现,这些过程中任意一个单拿出来都说不上很难,但一箩筐打包还是令人头疼的工作。
    3. 所以你用 java 开发这叫顺势而动,用 python 开发这叫逆天而行。单说坑,python 没什么坑,使用量这么高的语言有什么坑,但是因为你逆天而行所以可以说到处都是坑。
    4. 而你使用动态类型语言的优势则是开发周期短,然后如果你资金和技术够,那么另起炉灶会让你对项目有完全的掌握力度。这些优势在资本密集型项目中不具备什么价值。
    5. 所以最后问题就变成,你既然都有大流量了,何须在意成本,直接花钱铺路,javaer 帮你把问题解决得服服帖帖。除非你实际上没有大流量,开发还想省钱,然后同时你是个技术专家,非常清楚自己要做什么,那你就用自己熟悉的技术栈。不过如果你是技术专家的话你还来 v2 问什么
    BeiChuanAlex
        3
    BeiChuanAlex  
       2024-04-20 16:48:29 +08:00
    大流量,如果是我,绝对不会用 python
    shinession
        4
    shinession  
       2024-04-20 17:13:11 +08:00
    Instagram, django 的框架, 当然魔改了一部分, 抗的住十亿流量, 成为独脚兽之前语言不是啥问题吧
    crysislinux
        5
    crysislinux  
       2024-04-20 17:17:06 +08:00 via Android
    流量大语言性能差点多加服务器就好了,关键是架构要能方便的加服务器
    luozic
        6
    luozic  
       2024-04-20 17:35:52 +08:00
    为啥限定是 python ?即使是那几个说的 python 大项目,也是用 python 当胶水,具体的实际中间件,性能敏感的地方还是用 c++,golang 甚至 rust 重写了的。
    Hopetree
        7
    Hopetree  
       2024-04-20 17:40:56 +08:00
    用 Python 就别讲究性能,Python 的最大优势在于可以当脚本用,开发方便才是 Python 的优势,性能真没必要
    FlyingBackscratc
        8
    FlyingBackscratc  
       2024-04-20 17:41:36 +08:00   ❤️ 1
    @luozic 这就比较无聊了,用什么开发业务就是用什么语言,比如你牙齿是每天磨损最多的地方,然后你换了钢牙,能说你这人是钢做的?
    akira
        9
    akira  
       2024-04-20 18:26:55 +08:00
    豆瓣好像是吧, 还有那个问答社区,v2 之前也是
    craftx
        10
    craftx  
    OP
       2024-04-20 18:33:17 +08:00
    @akira V2EX 现在是什么语言?
    craftx
        11
    craftx  
    OP
       2024-04-20 18:36:50 +08:00
    @livenux 有没有 c 底层的 python web 组件/框架?
    luozic
        12
    luozic  
       2024-04-20 18:53:54 +08:00
    @FlyingBackscratc 我的意思是,仅仅 python 搞高性能,短期内是扯淡呢。 用 python 就得多种语言一起用。python 做快速原型,业务代码,遇到性能问题可以快速切换语言再搓一遍
    codegenerator
        13
    codegenerator  
       2024-04-20 19:28:44 +08:00
    你这个问题有歧义
    如果你的需求是 web 后端 api ,我可以肯定的说没有任何问题
    因为 Instagram 和早中期字节使用完全没有问题,字节是这 2 年才换的 go 但是历史还是遗留不少 python
    但是你说你的需求是音视频实时编解码之类的,那 python 肯定不合适
    python 最大的问题不是性能,而是弱类型,其次是如果做业务的话生态显然不如 java
    lithiumii
        14
    lithiumii  
       2024-04-20 19:37:34 +08:00 via Android
    国外例子有 Instagram ,但不能说没有坑:被收购了之后为了性能 Facebook 就魔改出了 Cinder 。
    RockShake
        15
    RockShake  
       2024-04-20 19:56:32 +08:00
    豆瓣之前是,已经转 GO 了,你去查下他们转 GO 的原因不就知道了么
    louisxxx
        16
    louisxxx  
       2024-04-20 20:01:57 +08:00
    你的业务大到 python 无法支撑的时候还会缺钱重构?就算没人,有钱你也可以直接加机器行了
    cdlnls
        17
    cdlnls  
       2024-04-20 20:05:56 +08:00 via Android
    每个人对大流量的定义和理解都是不一样的,有可能你以为的大流量,在别人看来就是洒洒水,或者反过来。。。没有参照物的话,这种回答没啥用。
    suyuyu
        18
    suyuyu  
       2024-04-20 20:06:39 +08:00
    你说的大流量是多大?
    keakon
        19
    keakon  
       2024-04-20 21:17:03 +08:00   ❤️ 2
    用 Python 做过单机几千 qps 的项目,也用 Go 做过多机高可用一天几个请求的项目。说实话绝大部分 web 服务的瓶颈不在语言。
    ben1024
        20
    ben1024  
       2024-04-20 21:30:44 +08:00
    一般流量压力不再语言,在数据库;
    另 Python 是动态强类型
    pyKane
        21
    pyKane  
       2024-04-20 21:41:02 +08:00   ❤️ 1
    楼上说的非常到点子上。
    WEB 程序,性能瓶颈真的不在语言上了,WEB 服务多也算是 IO 密集型的。
    很多时候要在 IO 瓶颈上找问题。
    做过一个在日在线七八十万的项目,纯 Python 全部用 asyncio 异步。性能上完全没什问题。机器配制 两台 4C8G 组负载. 一台也能顶得住,但两台可靠性更好.
    R4rvZ6agNVWr56V0
        22
    R4rvZ6agNVWr56V0  
       2024-04-20 22:35:11 +08:00
    绝大部分商业项目都等不到谈性能的那天(例如 YouTube 、Dropbox 、Quora 、Instagram 等 Python Web 第一梯队)
    当然,如果团队人水平菜鸡(例如连 JIT 、GC 的概念都搞不明白的,也不想思考的) 建议还是无脑用 Golang 、Java 。
    james2013
        23
    james2013  
       2024-04-20 22:55:19 +08:00 via Android
    在 web 开发方面,python 远比不上 java
    1.java 生态更好,各种库全,缓存,日志,数据库操作等
    2.java 开发速度更快,我用 python 框架 flask 写过一个 web 应用,增删查改写的恶心,更别说复杂 sql
    3.python 是动态语言,代码写错了也能正常跑起来。多人开发同一个项目时,有同事漏提交代码,或者合并代码冲突覆盖,我用 java 会提示编译报错,跑不起来
    4.python 写法一旦不规范,过段时间我都看不懂自己写的是什么了
    chenqh
        24
    chenqh  
       2024-04-20 22:58:44 +08:00
    @keakon 你这也太厉害了,用 py 做几 K QPS 。。
    FlyingBackscratc
        25
    FlyingBackscratc  
       2024-04-20 23:23:20 +08:00   ❤️ 15
    @james2013 你菜而已。。。
    niubee1
        26
    niubee1  
       2024-04-20 23:49:27 +08:00
    大部分的应用瓶颈不是在开发应用的语言,而是 SQL......
    coolair
        27
    coolair  
       2024-04-20 23:59:20 +08:00
    没有什么经验,自己真的太菜了,做过那么多项目,并发上千的都很少见。
    而且,遇到瓶颈,基本都是大力出奇迹,能硬件解决的绝不动软件,基本上在代码没有 BUG 的情况下,没人会去优化代码。
    这年头,优化代码体现不了工作能力,写一个从硬件到基础软件的升级改造方案,才是领导眼中的价值体现。
    qiyilai
        28
    qiyilai  
       2024-04-21 10:33:58 +08:00
    和语言没啥太大关系,生态和开发人员的数量和薪资才是关键
    dayeye2006199
        29
    dayeye2006199  
       2024-04-21 14:04:15 +08:00
    大部分 web 都是 IO bound ,堆机器可解。机器比人便宜
    chentt
        30
    chentt  
       2024-04-21 14:56:17 +08:00 via iPhone
    堆机器 硬件比人工便宜多了
    zagfai
        31
    zagfai  
       2024-04-21 16:52:40 +08:00
    都需要架构设计,没啥问题,78 年前我在前司做的几亿用户的 app ,日活千万,后端也就全 Python ,后来用 go 改写了部分接口,机器省了 70%。
    kkbblzq
        32
    kkbblzq  
       2024-04-21 17:51:16 +08:00
    经验教训就是不要用 python 写,手动狗头,开个玩笑;虽然顶是顶得住,但是正经的说,python 的性能本来就容易受到代码质量的影响,在招聘层面上想找到比较有水平的人员也相对困难,何必呢
    weeevv
        33
    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
        34
    zhuangzhuang1988  
       2024-04-21 21:53:27 +08:00
    testcgd
        35
    testcgd  
       2024-04-22 00:39:37 +08:00 via Android   ❤️ 1
    db 和 redis 做好隔离就好了,不要写复杂 sql ,redis 不要 hotkey bigkey ,基本上就是加机器的事情……对比起性能,当你业务够的时候还不如想想避免团队的人乱来搞魔法
    lijiachang
        36
    lijiachang  
       2024-04-22 21:21:32 +08:00
    如果团队技术栈是 Python 的话,用 Django 没什么问题
    haiku
        37
    haiku  
       2024-04-22 21:55:01 +08:00
    OpenAI 就是 Python 后端吧,可以看下它们的事故报告

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

    纯 Web 逻辑 Go 挺不错的
    so1n
        38
    so1n  
       2024-04-22 23:33:53 +08:00
    之前写过一个项目,Java 的服务是在我们的后面,结果我的服务没问题,Java 的天天扛不住挂了,所以一切还是看人
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5707 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 02:30 · PVG 10:30 · LAX 19:30 · JFK 22:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.