零. 核心问题
  - 网站可用性如何衡量?
    
  
- 如何设计高可用的系统?
    
  
一. 网站可用性的衡量
1. 可用性度量
  - 9的多少数量来衡量
    
      - 90% 小于36天12小时
- 99% 小于87小时36分钟
- 99.9% 小于8小时46分钟
- 99.99% 小于52分钟33秒
- 99.999% 小于5分钟15秒
- 99.9999% 小于31.5秒
 
2. 可用性考核
二. 高可用的应用
1. 负载均衡进行无状态服务的失效转移
  - 无状态,实现所有服务器完全对等
- 失效转移,某一个出现问题能够及时剔除
2. 应用服务器集群的Session管理
  - 业务总是有状态的
- Session,多次请求使用的上下文对象
    
      - Session复制
   	- 每台都备份一份
   		- 空间/带宽浪费较多
- Session绑定
   	- 通过负载均衡将请求分发到同一台服务器
   	- 一旦宕机就会导致无法完成业务处理
- 利用Cookie存储Session
   	- Cookie大小受限
   	- 传输耗费性能
   	- 浏览区关闭Cookie会导致不可用
- Session服务器
   	- Session服务集群统一管理Session
 
三. 高可用的服务
1. 分级管理
2. 超时设置
3. 异步调用
  - 通过消息队列等异步方式,避免一个服务失败导致整个过程失败
    
  
4. 服务降级
  - 访问高峰,服务因大量并发而性能下降,为保证核心应用和功能的正常运行
    
      - 拒绝服务
        
      
- 关闭功能
        
          - 关闭部分不重要的服务
- 节约系统开销,为重要的服务和功能让出资源
 
 
5. 幂等性设计
四. 高可用的数据
1. CAP原理
  - C: Consistency(数据一致性)
    
      - 多份副本数据不一致
- 所有程序都能访问得到相同的数据
 
- A: Availability(数据可用性)
    
      - 多份副本其中某个损坏,需要将访问切换到可用的副本上
- 任何时候程序能都可与读写访问
 
- P: Partition Tolerance(分区耐受性)
    
  
- 大型网站通常选择AP,一定程度上放弃C
    
      - 数据强一致性
        
          - 各个副本的数据在物理存储中总是一致
- 数据更新操作结果操作响应总是一致,不处于不确定状态
 
- 数据用户一致
        
          - 各个副本的数据在物理存储中可能不一致
- 终端用户访问,通过纠错和教研机制,可以确定一个一致且正确的数据
 
- 数据最终一致
        
          - 各个副本的数据在物理存储中可能不一致
- 终端用户访问,可能不一致
- 但是经过一段时间的自我恢复和修正,数据最终会达成一致
 
 
2. 数据备份
  - 冷备份
    
      - 缺点
        
          - 不能保证数据一致性
- 备份结束时间后更新的数据会丢失
- 不能保证可用性,恢复时间较长
 
- 优点
        
      
 
- 热备份
    
      - 异步热备
        
          - 操作成功保证写入一个成功,其他副本的写入异步完成
- 分为主存储服务器和从服务器
- 正常情况下只连接主存储器
 
- 同步热备
        
          - 多分数据副本的写入操作同步完成
- 存储服务器没有主从之分
- 性能由最慢那台决定
 
- 实践中通常做法
        
          - 写操作只访问Master数据库
- 读操作只访问Slave数据库
 
 
3. 失效转移
  - 失效确认
    
  
- 访问转移
    
  
- 数据恢复
    
      - 部分服务宕机时,数据存储的副本减少,必须将副本的数量恢复到系统设定的值
- 系统从正常的服务复制数据
 
五. 高可用软件质量保证
1. 网站发布
  - 关闭服务器集群中的一小部分
- 发布过的服务可以立即访问
- 整个发布过程不影响用户使用
2. 自动化测试
3. 预发布验证
  - 避免环境不一致导致上线异常
- 通过预发布服务器进行预发布验证
- 与线上的唯一不同是没有配置在负载均衡服务器上
4. 代码控制
  - 主干开发,分支发布
    
      - 主干代码反应目前整体应用的状态一目了然,便于管理和控制
 
- 分支开发,主干发布
    
  
5. 自动化发布
6. 灰度发布(AB测试)
  - 将服务器分成若干部分
- 每天只发布一部分服务器
- 观察运行稳定没有问题
- 如果发现问题回滚已发布的服务器
六. 网站运行监控
1. 监控数据采集
  - 用户行为日志收集
    
  
- 服务器性能监控
    
  
- 运行数据报告
    
  
2. 监控管理
  - 系统报警
    
  
- 失效转移
    
  
- 自动优雅降级
    
      - 访问高峰时,主动关闭部分功能
- 确保资源用在核心功能的访问上
 
总结
  - 先求生存
- 再求发展
- 追求高概率稳定性