演化历程
- 初始阶段
- 一台服务器
- Lamp
- 用户增多导致访问性能变差,存储空间不足
- 应用服务和数据服务分离
- 三台服务器
- 应用服务器处理业务逻辑,需要更快的CPU
- 数据服务器需要快速磁盘检索和数据缓存,需要更快的硬盘和更大的内存
- 文件服务器需要存储用户上传的文件,需要更大的硬盘
- 用户增多导致数据库压力太大,访问延迟
- 使用缓存改善性能
- 80%的业务访问集中在20%的数据上
- 把常用数据缓存在内存中,减少数据库的访问压力
- 应用服务器本地缓存
- 分布式缓存
- 使用应用服务器集群改善网站并发处理能力
- 增加服务器分担原有服务器的访问及存储压力
- 负载均衡调度服务器将用户访问请求分发到应用服务器集群中的某一台
- 数据库读写分离
- 应用服务器写数据时访问主数据库
- 主数据库通过主从复制将数据更新同步到从数据库
- 应用服务器通过从数据库读数据
- 使用反向代理和CDN加速网站响应
- 不同地区用户访问网站时速度差异太大,为留住用户要加速网站响应
- 反向代理和CDN的原理都是缓存
- CDN部署在网络提供商的机房,用户可从距离自己最近的网络提供商机房获取数据
- 反向代理部署在网站中心机房,请求到达中心机房后先访问反向代理服务器
- 使用分布式文件系统和分布式数据库系统
- 使用NoSQL和搜索引擎
- 提高数据检索效率
- 业务拆分
- 将一个网站拆分成多个不同应用(首页、商铺、订单、买家、卖家)
- 每个应用独立部署维护
- 应用间通过超链接建立关系,或通过消息队列进行数据分发
- 分布式服务
- 每个应用系统需要执行许多相同的业务操作
- 将共同的业务提取出来,独立部署
- 应用系统只管理用户界面
- 云计算
- 为其他网站提供架构服务
- 计算、存储、网络都可按需购买,线性伸缩
架构模式
- 分层
- 将系统在横向维度上切分成几个部分,每个部分负责单一职责
- 应用层,服务层,数据层
- 通过上下层的依赖和调用组成系统
- 合理规划层次边界和接口
- 分层是逻辑上的,物理上可灵活处理
- 分割
- 对软件的纵向切分
- 在应用层,将购物、论坛、搜索、广告分割成不同应用
- 由独立团队负责,部署在不同服务器上
- 将不同模块部署在不同服务器上
- 分布式
- 用更多的计算机完成同样的功能
- 处理更大的并发量,为更多用户提供服务
- 常用方案
- 分布式应用和服务
- 分布式静态资源:动静分离
- 分布式数据和存储:NoSQL
- 分布式计算:Hadoop
- 集群
- 多台服务器部署相同的应用,通过负载均衡设备共同对外提供服务
- 可提供更好的并发性能
- 提高系统可用性
- 缓存
- 将数据库放在离计算最近的位置以加快处理速度
- 减轻后端应用和数据存储的负载压力
- 前提
- 数据访问热点不均衡,某些数据会被更频繁地访问
- 数据在某个时间段内有效,不会很快过期
- 常用方案
- CDN
- 反向代理
- 本地缓存
- 分布式缓存
- 异步
- 单一服务器内部通过多线程共享内存队列实现
- 分布式多个服务器集群通过分布式消息队列实现
- 生产者消费者模式
- 特性
- 提高系统可用性
- 加快网站响应速度
- 消除并发访问高峰
- 冗余
- 自动化
- 安全
架构要素
- 性能
- 优化手段
- 浏览器缓存/页面压缩/页面布局/减少Cookie传输
- CDN
- 服务器本地缓存和分布式缓存
- 异步操作将请求发送至消息队列等待后续任务处理,当前请求直接返回响应给用户
- 集群
- 多线程,内存管理
- 索引、缓存、SQL优化、NoSQL
- 衡量指标
- 响应时间
- 吞吐量
- 系统性能计数器等
- 测试方法
- 性能测试
- 负载测试
- 压力测试
- 稳定性测试
- 优化手段
- 可用性
- 99.99%时间可用,4个9,一年53分钟
- 通过负载均衡进行无状态服务的失效转移
- 应用服务器集群的Session管理
- Session复制:需占用系统资源,用户太多时不适用
- Session绑定:将Session绑定在某台特定服务器,不符合高可用要求
- Cookie记录Session:记录信息有限,简单易用,可用性高
- Session服务器
- CAP原理
- 数据一致性:所有应用程序都能访问得到相同的数据
- 数据可用性:任何时候,任何应用程序都可读写访问
- 数据持久性:将数据备份,保证数据不丢失
- 伸缩性
- 通过增加资源的方式增强计算处理事务的能力
- 如向网站添加新的服务器
- 网站架构
- 不同功能进行物理分离
- 单一功能使用集群
- 应用服务器集群
- HTTP重定向负载均衡
- DNS域名解析负载均衡
- 反向代理负载均衡
- IP负载均衡
- 数据链路层负载均衡
- 分布式缓存集群
- 数据存储服务器集群
- 关系型数据库
- NoSQL数据库
- 扩展性
- 对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力
- 系统架构设计层面的开闭原则
- 将一个大系统切分成N个低耦合的子模块的能力
- 利用分布式消息队列降低系统耦合
- 利用分布式服务打造可复用的业务平台
- 安全性
- 网站攻防
- XSS攻击:跨站点脚本攻击
- 注入攻击
- DSRF攻击:跨站点请求伪造
- 信息加密
- 单向散列:MD5,、SHA
- 对称加密:DES、RC
- 非对称加密:RSA、HTTPS
- 网站攻防