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
moji2016
V2EX  ›  Python

如何构建高性能 Web 网站

  •  
  •   moji2016 · 2015-12-18 09:27:37 +08:00 · 5880 次点击
    这是一个创建于 3053 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如让 Web 网站的,页面响应速度更快,支持的在线人数更多。是用 CDN,mysql 主从分离, redis,还有性能高的 web 框架,比如 java 的 spring,go 的 revel , nodejs 的 express , python 的 flask 居中, rails 次之, php 的 laravel 性能最低。在众多的因素中, web 框架自身的性能占高性能的 web 站点中的多少比例。

    例如本站 v2ex,从支持 100 人在线,到 1000 人在线,到 10000 人在线,到 100000 人, 1000000 人在线等,是换站点 WEB 框架为高性能的语言的 WEb 框架就能解决。还是必须要增加硬件和 CDN , redis 缓存, mysql 主从分离这些才能解决。哪种方案性价比高。框架本身性能可以忽略不计吗?哪怕你用最慢的 laravel 框架。

    总而言之一句话,应付大流量,并且页面快速响应,不断掉,上面哪些因素占主要的。哪些是可以忽略的次要因素。

    32 条回复    2015-12-19 00:34:47 +08:00
    nonozone
        1
    nonozone  
       2015-12-18 09:36:11 +08:00   ❤️ 2
    这个首先要考虑你所要面对的具体状况。现在 100 人在线就考虑 100 人在线的情况, 1000 人再考虑 1000 的时候。

    凭空谈有啥好谈的,不同的情况所采取的方式肯定也不同,各种成本,是技术成本比较高,还是操作成本比较高还是单纯的金钱成本,都有取舍。哪种方案都不是千面杀手。
    TangMonk
        2
    TangMonk  
       2015-12-18 09:42:00 +08:00
    moji2016
        3
    moji2016  
    OP
       2015-12-18 09:43:12 +08:00
    @nonozone 关键是现在算不出来用户量增长的速度,所以要考虑尽可能多的满足快的增长。
    附各框架性能链接:
    https://www.techempower.com/benchmarks/#section=data-r11&hw=peak&test=query
    当前好像 php 最易用 laravel 框架性能最低。
    moji2016
        4
    moji2016  
    OP
       2015-12-18 09:46:10 +08:00
    @TangMonk 如果一开始选择了最好用的,但是性能最低的框架, 以后网站打不开了,会不会有大的麻烦和烦恼。就像刚开始配置了一台赛扬的机器,结果确发现慢得打开几个程序就卡死。这时维修更换成本会不会太大了些。 web 框架是不是也和 CPU 装机这种是一个道理,一样吗。
    oott123
        5
    oott123  
       2015-12-18 09:47:58 +08:00 via Android
    算不出增长的网站,要么不合法,要么烧钱…
    反正两者来钱都很快,扛不住了就上机器,上不了了就出钱找人重写…
    JohnLou
        6
    JohnLou  
       2015-12-18 09:50:05 +08:00
    @moji2016 我用的 CI 框架在 10 几块钱一个月的虚拟主机上跑得秒开,之后赶时髦换成 laravel 明显没那种体验了又换回来 CI ,我觉得框架并不是越先进越好,我用 CI 三年了,源码都快背熟了,哪里可以优化就优化提速。
    moji2016
        7
    moji2016  
    OP
       2015-12-18 09:54:48 +08:00
    @oott123 是不是 PHP 的框架和网站,每当内存和 CPU 加一倍时,性能就会提升一倍,支持的访问量就多一倍呢。
    Lucups
        8
    Lucups  
       2015-12-18 09:55:39 +08:00
    要考虑的因素太多了。

    你的网站主要是什么业务?视频?论坛?博客?图库?不用的业务场景重点优化对象不同。
    另外就是现在云服务多如牛毛,可以适当地用上。比如图片视频的什么的占流量的直接放云存储,不要放应用服务器。

    此外就是监控,根据日志分析你的应用瓶颈在哪,然后做有针对性的优化。
    moji2016
        9
    moji2016  
    OP
       2015-12-18 09:57:42 +08:00
    @JohnLou 是的,在当前情况下,用 CI3 感觉像穿中山装的感觉,看上面的测评 ci 也比 laravel 性能好,比 flask 略低。和 java go nodejs 哪些框架没得比。 ci 比 rails 略高。为何没有 django rails 这可是世界上有大型网站使用的技术。 laravel 也能通过架构解决大型站点的性能问题吗,像 rails 和 django 一样,因为没有大型成功网站案例,所以目前对他的性能可用性抱怀疑态度。
    wy315700
        10
    wy315700  
       2015-12-18 10:00:34 +08:00
    感觉楼主是来黑 PHP 的
    okeydokey
        11
    okeydokey  
       2015-12-18 10:02:36 +08:00   ❤️ 1
    @moji2016 可以看下《构建高性能 web 站点》,网站初期活下来时关键,因此一开始选用最好用的,后期真的做大了再考虑性能,这些都是幸福的烦恼,不用太担心,有那么多轮子可以借鉴,淘宝初期就是 php 后来才切到 java 的
    yernsun
        12
    yernsun  
       2015-12-18 10:05:53 +08:00
    看看是计算密集型的还是数据业务密集型的吧,计算密集的,程序语言肯定是比较重要的。如果是数据业务密集型,那么瓶颈往往都在 DB 上,换程序语言不如加缓存、提高磁盘 IO 甚至优化 SQL 来的实在。
    kongkongyzt
        13
    kongkongyzt  
       2015-12-18 10:16:06 +08:00   ❤️ 1
    我猜楼主可能没有做过高并发和海量流量的项目, 或者是没有很完整地经历过一个网站从单机起步, 随着流量的增长架构不断进化的过程, 当然, 并不是什么人都有机会经历这个过程收获技术上的巨大成长的

    一般来说, 制约性能的主要问题往往不是使用的编程语言和框架, 这些框架的测试有一定的参考性, 但不是性能热点, 对于一般的业务来说, 性能开销很大程度上集中在网络, 磁盘 IO, 数据库和你所设计的架构, 而做的优化也会和你的架构, 你的业务形式息息相关. 性能优化的方式和手段有很多, 常见的比如异步化, 服务化(RPC, web service), 分布式. 我觉得最立竿见影的方式是负载均衡, 效果比较明显.很多公司到最后采用自研框架的形式, 我觉得性能倒不是非常重要的原因, 而是业务需要高度的定制化, 原来的开源框架已经不能满足业务的需求了
    nonozone
        14
    nonozone  
       2015-12-18 10:18:58 +08:00
    @moji2016 技术不确定的时候,就先把业务搞好。只要业务发展起来了,后面的技术都可以慢慢改善。但是前期技术高大上,但是业务层面萎靡不振,又有何用。

    并且就算你技术上感觉上已经搞了一个非常牛逼的结构,你会发现,一旦跟你业务结合起来的时候,麻烦的问题一样一个接着一个。

    反正就是,先从你熟悉的弄。不熟悉的东西,一方面你无法评测这个是不是适合自己,而是出现问题自己也不知道怎么解决。
    baoma511
        15
    baoma511  
       2015-12-18 10:20:14 +08:00
    k9982874
        16
    k9982874  
       2015-12-18 10:23:45 +08:00
    web 简单就是堆机器上 haproxy
    baoma511
        17
    baoma511  
       2015-12-18 10:24:00 +08:00
    不过我也理解楼主,我目前也有这样的状态,当然,前期要把架构选型做好,方便后期扩展和升级,还有就是我深深的理解,随便做一个站很容易,想做一个不随便的站真的不容易,会牵涉到很多东西,不单单是业务方面的,还有网络方面的,加油!
    reeco
        18
    reeco  
       2015-12-18 10:30:20 +08:00
    你的机器<10 所有应用 all in one 的时候,性能瓶颈在于 orm 和 io ,在框架上想方设法节省的一点性能可能一句 SELECT 就浪费了
    tonyVex
        19
    tonyVex  
       2015-12-18 10:35:17 +08:00
    磁盘 IO , CDN ,高可用,负载均衡,缓存,读写分离等 。架构上面 ,不同应用不同的场景切入点不一样。
    zonghua
        20
    zonghua  
       2015-12-18 11:20:24 +08:00 via iPhone
    我好奇 Spring 映射的 rmurl 多了会不会影响性能
    c742435
        21
    c742435  
       2015-12-18 11:52:13 +08:00 via Android
    一个这样问问题的人 /团队,很大可能没有构建那样高性能系统的技术实力。
    告诉你个最简单的办法,上云,数据库鼠标点点就能扩展,业务服务器鼠标点点就能随便加。等到云满足不了你们的需求了,你们也有钱招能搞定的人了。
    moji2016
        22
    moji2016  
    OP
       2015-12-18 12:05:59 +08:00
    @c742435 框架性能测试中,那些排名高的框架,和那些排名低下的框架,之间不做选择吗。
    ryd994
        23
    ryd994  
       2015-12-18 13:00:48 +08:00 via Android
    一开始能考虑一下可扩展性自然是好的,考虑一下就够了。
    Web 前端一般是可以直接用 loadbalancer 直接横向扩展的。最后的瓶颈一般落在数据库等后端上。所以前端框架就算选错了,多用点资源也没什么大不了的。
    ryd994
        24
    ryd994  
       2015-12-18 13:04:40 +08:00 via Android
    @moji2016 会什么用什么,什么顺手用什么。还有比 flask 更快的 bottle 呢,还有更快的不用框架裸写 wsgi 呢。互联网企业一般开发重点不在性能上,因为入我上面所说,横向扩展不难。重点一般是迭代周期和可用性。只要能快速出新功能,而且顶住不出大篓子,就是好框架。
    shajiquan
        25
    shajiquan  
       2015-12-18 13:19:03 +08:00
    Google 有很多项目,在很多项目发起时,都做了大量的提前优化,因为感觉会人多到爆。但事实并非如此。

    前几天看新闻有讲。
    loading
        26
    loading  
       2015-12-18 13:28:20 +08:00 via Android
    从一开始就用 go …
    c742435
        27
    c742435  
       2015-12-18 15:14:52 +08:00 via Android
    @shajiquan Google 有钱有技术,而且真的有可能人多到爆。
    Google 绝对不会问楼主的问题。

    @loading 一开始就有 go 开发能力的团队还是少。
    loading
        28
    loading  
       2015-12-18 15:16:20 +08:00 via Android
    @c742435 直接找 python 和 go ,差不太多。
    cnbiglee
        29
    cnbiglee  
       2015-12-18 15:21:04 +08:00
    如果预计不到以后的情况,那就到一个阶段做一个改进。可以到时看瓶颈在哪,再决定做哪方面的改进。
    liujiangbei
        30
    liujiangbei  
       2015-12-18 18:13:30 +08:00
    空谈误国,实干兴邦,楼主提到的这些技术栈都能构建高性能 web 站点。楼主应该从实际情况出发,找到瓶颈是什么?
    neoblackcap
        31
    neoblackcap  
       2015-12-18 18:51:25 +08:00
    我见过很多刚开始就考虑高性能的公司,现在他们都死了。

    便宜,高性能,好找人,只能取两者
    Daddy
        32
    Daddy  
       2015-12-19 00:34:47 +08:00
    没什么,归结起来就是:心太大,总想着一步到位。 还没网站,更没运营,就想着最高起点,用最好的语言,用最好的服务器,用最好的宽带。

    还没女朋友,就想着各种旅行、各种姿势、各种体位……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   920 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:29 · PVG 06:29 · LAX 15:29 · JFK 18:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.