大型网站软件系统的特点
- 高并发、大流量
- 高可用
- 海量数据
- 用户分布广泛,网络情况复杂
- 安全环境恶劣
- 需求快速变更,发布频繁
- 渐进式发展
大型网站架构演化发展历程
- 所有资源在一台服务器上,使用免费开源的技术(操作系统使用linux,应用程序使用php开发,发布在Apache上,数据库使用mySQL)(LAMP)
- 应用服务和数据服务分离
- 使用缓存改善网站性能
- 使用应用服务器集群改善网站的并发处理能力
- 数据库读写分离
- 使用反向代理和CDN加速网站响应
- 使用分布式文件系统和分布式数据库系统
- 使用NoSQL和搜索引擎
- 业务拆分
- 分布式服务
网站架构模式
-
分层(7层通信协议,应用层-服务层-数据层)(横向切分)
-
分割(根据功能和服务分割,如在应用层将不同业务进行分割)(纵向切分)
-
分布式(不同模板(分层和分割出的)部署到不同的服务器上)
常见的分布式方案:
- 分布式应用和服务
- 分布式静态资源
- 分布式数据和存储
- 分布式计算
- 分布式配置
- 分布式锁
- 分布式文件系统
-
集群(多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务)
-
缓存(将数据存放在距离计算最近的位置以加快处理速度)(前提条件:1、数据访问热点不均衡,2、数据在某个时间段内有效,不会很快过期)
常见的缓存:
- CDN(内容分发网络,部署在距离终端用户最近的网络服务商)
- 反向代理(属于网站前端架构,部署在网站的前端)
- 本地缓存
- 分布式缓存(数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据)
-
异步(业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作)
单服务器中:多线程共享内存队列实现异步
分布式系统中:多个服务器集群通过分布式信息队列实现异步
优点:提高系统可用性、加快网站响应速度、消除并发访问高峰
缺点:影响用户体验、影响业务流程
-
冗余(数据冗余备份,服务至少两台服务器构成一个集群,实现服务高可用)
冷备份:数据库定期备份,存档保存
热备份:在线业务高可用,数据库主从分离
-
自动化(发布过程自动化、自动化代码管理、自动化测试、自动化安全检测、自动化部署、自动化监控、自动化报警、自动化失效转移、自动化失效恢复、自动化降级、自动化分配资源)
-
安全(密码和手机验证码身份认证、网络通信加密、敏感信息加密处理、验证码识别,XSS攻击、SQL注入等)
大型网站核心架构要素
性能
性能测试
性能测试指标:响应时间、并发量、吞吐量、性能计数器
性能测试方法:性能测试、负载测试、压力测试、稳定性测试
性能优化
Web前端性能优化:
- 浏览器访问优化:减少http请求、使用浏览器缓存、启动压缩、CSS放在页面最上面,JavaScript放在页面最下面、减少Cookie传输
- CDN加速
- 反向代理
应用服务器性能优化:
- 分布式缓存
- 异步操作
- 使用集群
- 代码优化(多线程(解决线程安全的主要手段:将对象设计为无状态对象、使用局部对象、并发访问资源时使用锁)、资源复用(资源复用的两种模式:单例和对象池)、选择合适的数据结构、垃圾回收)
存储性能优化:
- 硬件:固态硬盘(SSD)、机械硬盘
- 磁盘存储方式和算法:B+树、LSM
- 磁盘数据读写:RAID、HDFS
可用性(高可用)
高可用的主要手段:
-
数据和服务的冗余备份和失效转移
-
通过负载均衡进行无状态服务的失效转移(无状态服务是指应用服务器不保存业务的上下文信息,仅根据每次请求提交的数据进行相应的业务逻辑处理,多个服务器之间完全对等,请求提交到任意服务器,处理结果都完全一样)
-
应用服务器集群的Session管理(Web应用中将多次请求修改使用的上下文对象称为会话Session)
单机:Session由部署在服务器上的Web容器(如Jboss)管理
负载均衡的集群环境(可能将请求分发到任意一个应用服务器):Session复制(几台服务器之间同步Session对象)、Session绑定(利用负载均衡的源地址Hash算法,将源于同一个IP的请求分发到同一台服务器)、利用Cookie记录Session、Session服务器(利用独立部署的Session服务器统一管理Session)
高可用的服务:
- 分级管理(核心应用和服务优先使用更好的硬件)
- 超时设置
- 异步调用
- 服务降级
- 幂等性设计(幂等性指服务重复调用和调用一次产生的结果相同)
高可用的数据:
- CAP(可用性、伸缩性、一致性)原理(数据持久性、数据可访问性、数据一致性)
- 数据备份(冷备份、异步热备份(多份数据副本的写入操作异步完成,Master存储器和Slave存储器,数据写入时由主存储器的写操作代理模块将数据写入本机存储系统后立即返回操作成功响应,然后通过异步线程将写操作数据同步到从存储服务器)、同步热备份(多份数据副本的写入操作同步完成))
- 失效转移(三部分:失效确认(确认服务器宕机的手段:心跳检测、应用程序访问失败报告)、访问转移、数据恢复)
高可用网站的软件质量保证:
- 网站发布(发布过程每次关闭服务器都是集群中的一小部分,并在发布完成后立即可以访问,整个发布过程不影响用户使用)
- 自动化测试
- 预发布验证
- 代码控制(主干开发、分支发布)
- 自动化发布
- 灰度发布(分批发布,功能稳定了,再将其他服务器变为新版本,不好回退)
网站运行监控:
- 监控数据采集(用户行为日志采集(服务器端日志收集、客户端浏览器日志收集)、服务器性能监控、运行数据报告)
- 监控管理(系统报警、失效转移、自动优雅降级)
伸缩性
通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求(不需要改变网站的软硬件设计)
网站架构的伸缩性设计:
- 不同功能进行物理分离实现伸缩
- 单一功能通过集群规模实现伸缩
应用服务器集群的伸缩性设计:
- HTTP重定向负载均衡
- DNS域名解析负载均衡
- 反向代理负载均衡
- IP负载均衡
- 数据链路层负载均衡
- 负载均衡算法(轮询、加权轮询、随机、最少连接、源地址散列)
分布式缓存集群
数据库存储服务器集群
扩展性
能快速响应市场需求变化,增加新业务可以实现对现有产品透明无影响
利用分布式服务(如:利用分布式消息队列降低系统耦合性)
安全性
XSS攻击、注入攻击、CSRF攻击、其他攻击和漏洞
Web应用防火墙、网站安全漏洞扫描
加密技术:单向散列加密、对称加密、非对称加密、密钥安全管理
信息过滤与反垃圾:文本匹配、分类算法、黑名单