转载:https://jingyan.baidu.com/article/456c463b95e6030a583144b6.html
为了解高并发网站的建设,看到了这篇比较完整的网站变迁历史,明白了痛苦使系统进步,健壮的系统是一点点的完善与进步。
关键词:拆分,缓存,分担
(1)物理分离webserver和db
问题 : webserver和db在同一台服务器上,性能上的相互影响
解决方案:两台服务器,webserver 和 db分布在不同的机器上。
(2)增加页面缓存
问题 : 访问量的增加,一些更新频次比较低的数据,每次访问都需要查找db,db压力增大
解决方案:使用缓存机制减少对数据读的压力,使用静态页面技术(squid)
(3) 增加页面片段缓存
问题 : 访问量增加,尝到页面静态化的好处
解决方案:在动态页面中将相对静态的部分静态化(esi)
(4)数据 缓存
问题 : 经常重复性读取的数据,如用户信息,大频次的读取增加了db压力
解决方案:对这部分数据采用缓存的手段,减轻db压力
(5)增加webserver(2台)
问题 : 访问量增加,单台webserver的瓶颈和宕机
解决方案:增加多台webserver,但是多台webserver需要考虑负载均衡 (apache 自带的负载均衡或lvs等,分布式缓存,分布式文件系统)
(6)分库
问题 : 访问量增加数据库读写增多,数据库链接竞争激烈
解决方案:数据库集群或者分库,集群数据库支持的不好,一般采用分库策略
(7)分表,DAL和分布式缓存
问题 : 单表数据量过大,访问变慢
解决方案:将单表数据拆分到多表,本地缓存转换为分布式缓存
(8)增加更多的webserver
问题 :访问量增加,apache阻塞很多请求,但是单个请求处理速度比较快
解决方案:增加更过的webserver
(9)数据库读写分离和廉价存储方案
问题 : webserver的增加,db的瓶颈出现,读写比例很高
解决方案:读写分离,减轻数据库压力
(10)大型分布式应用和廉价服务器(拆分应用 微服务)
问题 : 业务上功能需求越来越多,造成web应用越来越大,局部应用的bug可能造成整个网站的瘫痪,过大的应用复制,启动比较慢,造成部署维护不方便
解决方案:拆分为分布式应用,微服务。分布式应用需要提供一个高性能稳定的通讯框架;应用拆分,需要业务整理和系统依赖关系控制;运维管理(依赖管理,
运营状况监控,错误追踪,监控和报警等);
结语:
1)webserver和db,就像一个扁担上的两个桶,任何一个优化后都会形成新的不平衡。优化困难方后形成新的平衡。在不平衡中寻找平衡。
2)业务产生数据,数据流量的洪峰会对应用造成极大压力,通过拆分来分担压力(集群的力量大于单体),通过缓存来拦截压力向后传导(短流程)