可靠、可扩展与可维护的应用系统
可靠性⌗
故障与失效⌗
- 故障(faults)或者错误:组件偏离其正常规格,可以提供容错(fault-tolerant)机制
- 失效(failure)意味系统作为一个整体停止
硬件故障⌗
软件错误⌗
人为失误⌗
避免优化方式:
- 以最小出错方式设计系统。抽象、提供管理界面,使“做正确的事很轻松”,防止限制过多。
- 分离最容易出错的地方,提供沙箱用以放心尝试。
- 充分测试。
- 提供快速恢复机制尽量减少故障影响:快速回滚,提供校验数据的工具。
- 设置详细而清晰的监控系统
- 培训和流程
可扩展性⌗
描述负载⌗
- QPS
- 数据库写入比例
- 同时在线活动用户数
- 缓存命中率等。
描述性能⌗
- 吞吐量(throughput)/每秒处理数据量
- 延迟(latency)/响应时间(response time):延迟是处理时间,响应时间是客户端看到的。
最好通过百分位数来监控指标:p50/p80/p90/p95/p99/p999,p50 指标表示一半请求在这个指标之下,一半在这个指标之上。
应对负载增加⌗
- 无状态很方便扩容
- 但有状态的分布式面临一定的挑战
可维护性⌗
可运维性:运维更轻松⌗
监控、文档、自动化、良好的默认配置、可手动控制系统状态让系统自我修复(比如熔断机制)。
简单性:简化复杂度⌗
抽象!
可演化性:易于改变⌗
- TDD
- 重构