1 可靠、可扩展与可维护的应用系统
1.1 认识数据系统
- 系统中的常见模块:数据库,缓存,索引,流式处理,批处理等等
- 系统的需求越来越广泛,需要将任务分解,每个组件负责高效完成其中一部分,多个组件依靠应用层代码驱动有机衔接起来。
- 面临的问题:可靠性,可扩展性和可维护性
1.2 可靠性
- 可靠性:即使发生了某些故障(faults),系统仍可以继续正常工作
- 3种故障及应对方法:
- 硬件故障
- 为硬件添加冗余,如对磁盘配置RAID,双电源,热插拔CPU等。
- 通过软件容错补充
- 软件错误
- 检查评估软件bug,监控
- 人为失误(如配置错误)
- 分离容易出错的地方,充分测试,快速回滚配置,监控系统
- 硬件故障
1.3 可扩展性
- 可扩展性:负载增加时,有效保持系统性能的相关技术策略
- 系统性能评价指标
- 吞吐量:单位时间内处理的数据量
- 响应时间:客户端从发送请求到接收响应之间的间隔
- 不建议使用性能数据的平均值来考察性能,最好使用百分数和中位数
- 响应时间中位数小于200ms(意味着一半的用户在200ms内收到响应)
- 应对负载增加的方法
- 垂直扩展:升级到更强大的机器
- 水平扩展:将负载分布到更多更小的机器
- 垂直扩展和水平扩展之间做取舍
- 无状态服务扩展到多台机器容易,有状态服务扩展到多台机器复杂,需要取舍,比如可以将数据库垂直扩展,其他水平扩展
- 没有通用的系统,需要针对应用进行定制
- 考虑的因素:数据读取量、写入量、待存储的数据量、数据的复杂程度、响应时间要求,访问模式
- 哪些操作是频繁的
1.4 可维护性
- 三个设计原则:可运维性,简单性,可演化性