如何构建高性能 Web 网站

2015-12-18 09:27:37 +08:00
 moji2016

比如让 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 框架。

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

5906 次点击
所在节点    Python
32 条回复
nonozone
2015-12-18 09:36:11 +08:00
这个首先要考虑你所要面对的具体状况。现在 100 人在线就考虑 100 人在线的情况, 1000 人再考虑 1000 的时候。

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

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

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

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

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

反正就是,先从你熟悉的弄。不熟悉的东西,一方面你无法评测这个是不是适合自己,而是出现问题自己也不知道怎么解决。
baoma511
2015-12-18 10:20:14 +08:00
k9982874
2015-12-18 10:23:45 +08:00
web 简单就是堆机器上 haproxy
baoma511
2015-12-18 10:24:00 +08:00
不过我也理解楼主,我目前也有这样的状态,当然,前期要把架构选型做好,方便后期扩展和升级,还有就是我深深的理解,随便做一个站很容易,想做一个不随便的站真的不容易,会牵涉到很多东西,不单单是业务方面的,还有网络方面的,加油!
reeco
2015-12-18 10:30:20 +08:00
你的机器<10 所有应用 all in one 的时候,性能瓶颈在于 orm 和 io ,在框架上想方设法节省的一点性能可能一句 SELECT 就浪费了
tonyVex
2015-12-18 10:35:17 +08:00
磁盘 IO , CDN ,高可用,负载均衡,缓存,读写分离等 。架构上面 ,不同应用不同的场景切入点不一样。
zonghua
2015-12-18 11:20:24 +08:00
我好奇 Spring 映射的 rmurl 多了会不会影响性能

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

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

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

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

© 2021 V2EX