申明:本文仅是对《大型网站技术架构核心原理与案例分析》的一点摘要,纯属个人阅读后加强记忆所用
大型网站软件系统的特点:1)高并发,大流量 2)高可用 3)海量数据 4)用户分布广泛,网络情况复杂 5)安全环境恶劣 6)需求变更快,发布频繁 7)渐进式发展
大型网站架构演化发展历程:
初始阶段网站用户量小,仅将网站部署在一台服务器上即可,也即应用服务器、文件服务器、数据库等直接部署在一台物理机上,这个时候通常使用LAMP(Linux、Apache、Mysql、PHP)实现网站的搭建,随着用户量的增长网站会渐渐经历一下一些阶段:
1)应用服务器、文件服务器、数据库服务器分离,将不同的部分部署在独立的物理机上以提高网站的性能
2)增加缓存服务器,减轻网站的压力,提升网站的性能
3)当单台服务器无法满足高并发需求的时候则可以使用应用服务器集群提升网站的并发处理能力,如果整个网站的瓶颈不是应用服务器而是数据库和缓存等部件的时候则可以采用使用缓存服务器集群和数据库读写分离的方式增加网站的处理能力
4)随着网站业务的发展,传统的关系数据库可能会不再适用,这个时候就可以考虑使用NoSQL来替代,活着采用二者结合的方式,
5)当网站达到很大的规模,大到以至于用技术手段很难解决(成本太高或者完全不可能用技术手段解决,例如淘宝网)规模问题时,那我们应该做的就是拆分业务,为不同的业务部署独立的服务器,而业务服务器之间的互通则可以采用消息通信的方式
6)当业务被拆分得越来越小,服务器数量越来越多的时候,网站的复杂性也会随之成指数级增长,这个时候就可以考虑从业务中分离出公共的业务,将这些公共的业务独立实现成模块,而其他的业务则通过对公共业务的调用和组合的方式来完成
7)最后不得不提的是可以在适当的时候为整个服务器加入反向代理和搜索引擎,这样既可以提高网站的响应速度,也可以满足万展查询的多样化需求
1)分层,如典型的MVC
2)分割,也就是前面提到的业务拆分,分割相关性小或者没有什么相关性的业务
3)分布式,将不同的业务分开部署在不同的服务器上,根据具体的需求分配不同物理配置的服务器给不同的业务
4)集群,这是保证网站高可用性的一个基础,集群方式的服务器不会因为某台服务器宕机而导致整个网站无法提供服务
5)缓存,包括CDN、反向代理、本地缓存、分布式缓存
6)异步,异步的好处主要有一下几点:提高可用性,加快响应速度,消除并发访问高峰
7)冗余,数据定期备份,搭建容灾站点
8)自动化,包括自动化发布、自动化代码管理、自动化测试、自动化安全检测、自动化监控报警、自动化失效转移、中华降级、自动化资源分配
9)安全
性能:浏览器端使用浏览器缓存,页面压缩,合理布局页面,合并请求,减少cookie传输这些都是很好的性能优化手段,浏览器到服务器中间可以采用CDN和反向代理缓存热点文件,加快请求响应速度,服务器端则采用本地缓存、分布式缓存,异步返回的方式提升性能
可用性:保证高可用性的主要手段是冗余,例如服务器集群和数据备份
伸缩性:当网站在现有的基础上已经无法满足大量用户访问需求是,则要增加服务器,而新增服务器则要在不影响原有服务器的基础上提供与原有服务器无差别的服务,这就是网站的伸缩性。保证伸缩性有两个难点,一个是缓存一个是数据库,解决办法:缓存可采用一致性hash算法,而服务器这采用路由分区(当然这只是最常见的方法)。
扩展性:扩展性是指当网站有行的功能添加进来是可以对原有的业务不产生影响或者影响很小,这就需要网站采用可伸缩式架构,比如事件驱动和分布式服务
安全性:这个就不用多说了
用户视角:请求响应速度快
开发人员视角:响应延迟少,吞吐量大,并发处理能力强,系统稳定性高
运维人员视角:运营商带宽充足,服务器硬件配置合理,数据中心网络架构合理,服务器和网络带宽利用率高
性能测试指标
1)响应时间 2)并发数 3)吞吐量 4)性能计数器
性能测试方法
1)性能测试,按网站规划目标对系统不断加压,测试系统性能能否达到预期
2)负载测试,对系统不断加压知道系统某项或多项想能指标达到安全临界值
3)压力测试,在超过安全负载的情况下对系统继续加压,知道系统奔溃或不能再处理请求,以获得系统最大承受能力
4)稳定性测试,在给系统一定的压力的条件下让系统运行较长的一段时间,以检测系统是否可以长时间稳定运行
性能优化策略
1)web前端:减少(合并)http请求,使用浏览器缓存,启用压缩,css放在页面最上面、javascript放在最下面,减少cookie传输
2)CDN加速
3)反向代理
4)服务器端:分布式缓存,异步操作,使用集群,代码优化
5)存储性能优化,使用性能更好的磁盘(如固态硬盘,目前成本很高),使用合理的数据库存储结构(如B+树和LSM树等),根据业务需求有针对性的对磁盘进行RAID