大型网站技术架构-核心原理与案例分析–(李智慧)
1 大型网站结构演化
1.1 大型网站软件系统的特点
- 高并发,大流量
- 高可用
- 海量数据
- 用户分布广泛,网络情况复杂
- 安全环境恶劣
- 需求快速变更,发布频繁
- 渐进式发展
1.2 大型网站结构演化发展历程
- 初始阶段的网站架构 > 单服务器 应用程序+文件+数据库
- 应用服务器和数据服务器分离
- 使用缓存改善网站性能
- 使用应用服务器集群改善王章的并发处理能力
- 数据库读写分离
- 使用反向代理和CDN加速网站响应
- 使用分布式文件系统和分布式数据库系统
- 使用NoSql和搜索引擎
- 业务拆分
- 分布式服务
![image](001 - 较构图)
1.3 大型网站架构演化的价值观
- 核心价值是随网站多需灵活应对
- 驱动大型网站技术发展的主要力量是网站的业务发展
1.4 网站架构设计误区
- 一味追随大公司的解决方案
- 为了技术而技术
- 企图用技术解决所有问题 > 例如大数据量的分页,阿里在一定页数后直接返回null
2 大型网站架构模式
2.1 网站架构模式
- 高性能
- 高可用 > redis哨兵 > mysql keepalived
- 易伸缩
- 可扩展 > 雪花算法分布式ID
- 安全
2.1.1 分层
- 网络协议7层
2.1.2 分割
- 按照业务纵向分割
2.1.3 分布式
- 分布式应用和服务
- 分布式静态资源 > js css logo 独立域名
- 分布式数据和存储
- 分布式计算 > MapReduce 移动计算而不是移动数据
- 分布式配置 > config
- 分布式锁 > 分布式环境下实现并发和协同
- 分布式文件 > 云存储
2.1.4 集群
- 负载均衡实现集群
2.1.5 缓存
- CDN > 即内容分发网络. 部署在距离终端用户最近的网络服务商,缓存静态资源
- 反向代理 > 属于网站前端架构的一部分. 缓存网站的静态资源
- 本地缓存 > 缓存热点数据. 使用本机内存缓存数据
- 分布式缓存 > 缓存频繁访问的数据(统计数据访问)> 数据在某一个时间段内有效,不会很快过期
2.1.6 异步
- 使用异步降低业务的耦合性
- 单一服务器内,可通过多线程共享内存队列的方式实现异步.处于业务操作前面的线程降输出写入到队列,后面的线程从队列中读取数据进行处理.
- 分布式系统,通过分布式消息队列实现异步. RabbitMQ
==作用==
- 提高系统可用性 > 消费服务器发生故障,数据会缓存在消息队列中.
- 加快网站的响应速度
- 消除并发访问高峰 > 将并发访问放到消息队列中,等待消费者服务器处理.实现消峰
2.1.7 冗余
服务集群 数据备份
冷备份 > 定期存档保存
热备份 > 主从分离,主从同步
灾备数据中心 > 全球范围内部署
2.1.8 自动化
==发布过程自动化== > 减少人为干预,减少故障
- 自动化代码管理 > 代码版本控制,代码分支创建合并等过程自动化. git 的加强 –>todo
- 自动化测试
- 自动化安全检测 findbug
- 自动化部署
- 自动化监控
- 自动化报警
- 自动化失效转移 > 将失效的服务器从集群中隔离出去
- 自动化失效不想恢复
- 自动化降级
- 自动化分配资源
2.1.9 安全
- 通过==密码==和==手机验证码==进行身份认证
- 登录,交易等操作,需要对网络进行通信加密
- 服务器上存储的==敏感数据==如用户信息进行加密
- 防止机器人攻击,使用==验证码==进行识别
- 对于常见的XSS攻击,SQL注入,进行编码转换等响应处理
- 对于垃圾信息,敏感信息进行==过滤==
- 对交易转账,进行==风险控制==
##好的设计模式绝对不是模仿,不是生搬硬套某个模式,而是对问题深刻理解之上的创造与创新,即使是”微创新”,也是让人耳目一新的似曾相识.##
3 大型网站核心架构要素
3.1 性能
==衡量指标==: 响应时间,并发数,吞吐量(TPS 每秒事务数,HPS 每秒http请求数,QPS 每秒查询数)等 OPS
- 在浏览器端,可以通过浏览器缓存,使用页面压缩,合理布局页面,减少cookie传输等手段改善性能.
- CDN 反向代理
- 在应用服务器端, 本地缓存,分布式缓存
- 异步操作
- 高并发请求下,集群
- 在代码层,多线程,改善内存管理
- 在数据库服务器端,索引,缓存,sql优化. NoSQL
3.2 可用性 7X24可用
- 预发布验证
- 自动化测试 > 性能测试 负载测试 压力测试 稳定性测试
- 自动化发布
- 灰度发布 > AB测试
3.3 伸缩性
3.4 扩展性
3.5 安全性
CAP 原理
- 数据持久性
- 数据可访问性
- 数据一致性