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

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

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