本文是我读《大型网站技术架构》一书的总结。
一 大型网站架构的演化
1.大型网站的特点:高并发、高可用、海量数据、用户分布广泛,网络情况复杂、安全环境恶劣、需求快速变更,发布频繁、渐进式发展
2.网站的演化过程
1)Linux+PHP+apache+MySQL
2)服务器分离,变成三台服务器:应用XXX、文件服务器、数据库服务器
3)因网站访问特点:80%的业务访问集中在20%的数据上。所以网站使用缓存,有两种:1;缓存在应用服务器上的本地缓存;2 缓存在专门的分布式缓存服务器上的远程缓存
4)应用服务器不堪重负后,使用集群解决网站的高并发的问题,同时在前面搞个负载均衡调度服务器
5)数据库主从分离,从而实现读写分离,但是会导致一定的延迟。
6)使用反向代理和CDN(content delivery network 内容分发系统)加速网站响应
7)分布式文件系统和分布式数据库系统
8)使用NoSQL和搜索引擎
9)业务拆分,应用之间通过超链接建立关系,或者通过消息列队进行数据分发
10)分布式服务
二、大型网站架构模式
1)分层 应用层、服务层、数据层
2)分割 纵向的切分,将网站不同的功能和服务分割开来
3)分布式 分层和分割的一个主要目的便是为了切分后的模块便于分布式部署
4)集群 多台服务器部署相同的应用构成一个集群,通过负载均衡设备共同对外提供服务
5)缓存 将数据存放在距离计算最近的位置以加快处理速度
CDN:内容分发网络,部署在距离终端用户最近的网络资源服务商,缓存的一般是一些静态资源
反向代理:属于网站前端架构的一部分,在这里缓存网站静态资源
本地缓存:在应用服务器本地缓存数据热点
分布式缓存:大型网站数据太多,单机缓存肯定不够,需要分布式缓存,将数据缓存在一个专门的分布数缓存集群中
6)异步 生产者消费者模式,两者不存在直接调用
提高系统可用性。系统故障后,数据会在消息列队服务器中存储,生产者服务器可以继续处理业务,系统表现无故障,等消费者好了后在继续处理
加快网站响应速度。不需要等待消费者就可以返回,响应延迟减少
消除并发访问高峰。
7)冗余 数据进行冗余备份。访问和负载很小的服务也必须部署至少两台服务器构成一个集群,其目的就是通过冗余实现服务的高可靠
8)自动化 比如自动化管理,发布过程自动化,自动化测试等
9)安全 手机短信验证
三、大型网站核心架构要素
软件架构:有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计
1)性能 2)可用性3)伸缩性4)扩展性5)安全性
四、瞬时响应:网站的高性能架构
4.1 Web前端性能优化
4.2 应用服务器性能优化
4.3 存储性能优化
五、网站的高可用架构
5.1高可用的应用
1、通过负载均衡进行无状态服务的失效转移
2、有状态的服务存进session。session的方案有四种:1)、使用session复制,把每一个session复制到每一个应用服务器中,但是这种在集群规模较大时,占用过多的带宽,导致没法使用;2)session绑定,利用均衡负载的原地址hash算法实现,使同一ip的请求总是访问同一个ip服务器,但是这个方案不符合我们高可用的要求;3)利用cookie记录session,缺点在于cookie有限制。4)独立部署session服务器
5.2 高可用的服务
1、分级管理 核心应用服务优先使用更好的硬件
2、 超时设置
3、异步调用 消息列队
4、 服务降级 一个是拒绝一部分人的服务 另一个是关闭部分功能
5、 幂等性设计
5.3 高可用的数据
1、CAP原理:存储系统无法同时满足数据一致性、数据可用性、分区耐受性
数据一致性分为:数据强一致、数据用户一致、数据最终一致
2、数据备份 分为热备冷备 热备又分异步方式和同步方式
3、转移失效 分三步:确认失效-》访问转移-》数据恢复
5.4 高可用的网站软件质量
网站发布可以使用火车发布模型,每过一关就是过一个站,不行的就下来。
灰度发布模式:将集群服务器分成若干部分,每天只发布一部分服务器
5.5 网站运行监控
1、用户行为日志收集 2、服务器性能监控 3、运行数据报告
六、网站的伸缩性架构
6.1网站架构的伸缩性设计
6.2 应用服务器集群的伸缩性设计
6.3 分布式缓存集群的伸缩性设计
6.4 数据存储服务器集群的伸缩性设计
七、网站的可扩展架构
八:网站的安全架构
8.1 攻击与防御
8.2 信息加密技术及秘钥