
比如让 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 框架。
总而言之一句话,应付大流量,并且页面快速响应,不断掉,上面哪些因素占主要的。哪些是可以忽略的次要因素。
1 nonozone Dec 18, 2015 这个首先要考虑你所要面对的具体状况。现在 100 人在线就考虑 100 人在线的情况, 1000 人再考虑 1000 的时候。 凭空谈有啥好谈的,不同的情况所采取的方式肯定也不同,各种成本,是技术成本比较高,还是操作成本比较高还是单纯的金钱成本,都有取舍。哪种方案都不是千面杀手。 |
3 moji2016 OP @nonozone 关键是现在算不出来用户量增长的速度,所以要考虑尽可能多的满足快的增长。 附各框架性能链接: https://www.techempower.com/benchmarks/#section=data-r11&hw=peak&test=query 当前好像 php 最易用 laravel 框架性能最低。 |
4 moji2016 OP @TangMonk 如果一开始选择了最好用的,但是性能最低的框架, 以后网站打不开了,会不会有大的麻烦和烦恼。就像刚开始配置了一台赛扬的机器,结果确发现慢得打开几个程序就卡死。这时维修更换成本会不会太大了些。 web 框架是不是也和 CPU 装机这种是一个道理,一样吗。 |
5 oott123 Dec 18, 2015 via Android 算不出增长的网站,要么不合法,要么烧钱… 反正两者来钱都很快,扛不住了就上机器,上不了了就出钱找人重写… |
6 JohnLou Dec 18, 2015 @moji2016 我用的 CI 框架在 10 几块钱一个月的虚拟主机上跑得秒开,之后赶时髦换成 laravel 明显没那种体验了又换回来 CI ,我觉得框架并不是越先进越好,我用 CI 三年了,源码都快背熟了,哪里可以优化就优化提速。 |
8 Lucups Dec 18, 2015 要考虑的因素太多了。 你的网站主要是什么业务?视频?论坛?博客?图库?不用的业务场景重点优化对象不同。 另外就是现在云服务多如牛毛,可以适当地用上。比如图片视频的什么的占流量的直接放云存储,不要放应用服务器。 此外就是监控,根据日志分析你的应用瓶颈在哪,然后做有针对性的优化。 |
9 moji2016 OP @JohnLou 是的,在当前情况下,用 CI3 感觉像穿中山装的感觉,看上面的测评 ci 也比 laravel 性能好,比 flask 略低。和 java go nodejs 哪些框架没得比。 ci 比 rails 略高。为何没有 django rails 这可是世界上有大型网站使用的技术。 laravel 也能通过架构解决大型站点的性能问题吗,像 rails 和 django 一样,因为没有大型成功网站案例,所以目前对他的性能可用性抱怀疑态度。 |
10 wy315700 Dec 18, 2015 感觉楼主是来黑 PHP 的 |
11 okeydokey Dec 18, 2015 @moji2016 可以看下《构建高性能 web 站点》,网站初期活下来时关键,因此一开始选用最好用的,后期真的做大了再考虑性能,这些都是幸福的烦恼,不用太担心,有那么多轮子可以借鉴,淘宝初期就是 php 后来才切到 java 的 |
12 yernsun Dec 18, 2015 看看是计算密集型的还是数据业务密集型的吧,计算密集的,程序语言肯定是比较重要的。如果是数据业务密集型,那么瓶颈往往都在 DB 上,换程序语言不如加缓存、提高磁盘 IO 甚至优化 SQL 来的实在。 |
13 kongkongyzt Dec 18, 2015 我猜楼主可能没有做过高并发和海量流量的项目, 或者是没有很完整地经历过一个网站从单机起步, 随着流量的增长架构不断进化的过程, 当然, 并不是什么人都有机会经历这个过程收获技术上的巨大成长的 一般来说, 制约性能的主要问题往往不是使用的编程语言和框架, 这些框架的测试有一定的参考性, 但不是性能热点, 对于一般的业务来说, 性能开销很大程度上集中在网络, 磁盘 IO, 数据库和你所设计的架构, 而做的优化也会和你的架构, 你的业务形式息息相关. 性能优化的方式和手段有很多, 常见的比如异步化, 服务化(RPC, web service), 分布式. 我觉得最立竿见影的方式是负载均衡, 效果比较明显.很多公司到最后采用自研框架的形式, 我觉得性能倒不是非常重要的原因, 而是业务需要高度的定制化, 原来的开源框架已经不能满足业务的需求了 |
14 nonoone Dec 18, 2015 @moji2016 技术不确定的时候,就先把业务搞好。只要业务发展起来了,后面的技术都可以慢慢改善。但是前期技术高大上,但是业务层面萎靡不振,又有何用。 并且就算你技术上感觉上已经搞了一个非常牛逼的结构,你会发现,一旦跟你业务结合起来的时候,麻烦的问题一样一个接着一个。 反正就是,先从你熟悉的弄。不熟悉的东西,一方面你无法评测这个是不是适合自己,而是出现问题自己也不知道怎么解决。 |
16 k9982874 Dec 18, 2015 web 简单就是堆机器上 haproxy |
17 baoma511 Dec 18, 2015 不过我也理解楼主,我目前也有这样的状态,当然,前期要把架构选型做好,方便后期扩展和升级,还有就是我深深的理解,随便做一个站很容易,想做一个不随便的站真的不容易,会牵涉到很多东西,不单单是业务方面的,还有网络方面的,加油! |
18 reeco Dec 18, 2015 你的机器<10 所有应用 all in one 的时候,性能瓶颈在于 orm 和 io ,在框架上想方设法节省的一点性能可能一句 SELECT 就浪费了 |
19 tonyVex Dec 18, 2015 磁盘 IO , CDN ,高可用,负载均衡,缓存,读写分离等 。架构上面 ,不同应用不同的场景切入点不一样。 |
20 zonghua Dec 18, 2015 via iPhone 我好奇 Spring 映射的 rmurl 多了会不会影响性能 |
21 c742435 Dec 18, 2015 via Android 一个这样问问题的人 /团队,很大可能没有构建那样高性能系统的技术实力。 告诉你个最简单的办法,上云,数据库鼠标点点就能扩展,业务服务器鼠标点点就能随便加。等到云满足不了你们的需求了,你们也有钱招能搞定的人了。 |
23 ryd994 Dec 18, 2015 via Android 一开始能考虑一下可扩展性自然是好的,考虑一下就够了。 Web 前端一般是可以直接用 loadbalancer 直接横向扩展的。最后的瓶颈一般落在数据库等后端上。所以前端框架就算选错了,多用点资源也没什么大不了的。 |
24 ryd994 Dec 18, 2015 via Android @moji2016 会什么用什么,什么顺手用什么。还有比 flask 更快的 bottle 呢,还有更快的不用框架裸写 wsgi 呢。互联网企业一般开发重点不在性能上,因为入我上面所说,横向扩展不难。重点一般是迭代周期和可用性。只要能快速出新功能,而且顶住不出大篓子,就是好框架。 |
25 shajiquan Dec 18, 2015 Google 有很多项目,在很多项目发起时,都做了大量的提前优化,因为感觉会人多到爆。但事实并非如此。 前几天看新闻有讲。 |
26 loading Dec 18, 2015 via Android 从一开始就用 go … |
27 c742435 Dec 18, 2015 via Android |
29 cnbiglee Dec 18, 2015 如果预计不到以后的情况,那就到一个阶段做一个改进。可以到时看瓶颈在哪,再决定做哪方面的改进。 |
30 liujiangbei Dec 18, 2015 空谈误国,实干兴邦,楼主提到的这些技术栈都能构建高性能 web 站点。楼主应该从实际情况出发,找到瓶颈是什么? |
31 neoblackcap Dec 18, 2015 我见过很多刚开始就考虑高性能的公司,现在他们都死了。 便宜,高性能,好找人,只能取两者 |
32 Daddy Dec 19, 2015 没什么,归结起来就是:心太大,总想着一步到位。 还没网站,更没运营,就想着最高起点,用最好的语言,用最好的服务器,用最好的宽带。 还没女朋友,就想着各种旅行、各种姿势、各种体位…… |