可靠性

故障与失效

  • 故障(faults)或者错误:组件偏离其正常规格,可以提供容错(fault-tolerant)机制
  • 失效(failure)意味系统作为一个整体停止

硬件故障

软件错误

人为失误

避免优化方式:

  • 以最小出错方式设计系统。抽象、提供管理界面,使“做正确的事很轻松”,防止限制过多。
  • 分离最容易出错的地方,提供沙箱用以放心尝试。
  • 充分测试。
  • 提供快速恢复机制尽量减少故障影响:快速回滚,提供校验数据的工具。
  • 设置详细而清晰的监控系统
  • 培训和流程

可扩展性

描述负载

  • QPS
  • 数据库写入比例
  • 同时在线活动用户数
  • 缓存命中率等。

描述性能

  • 吞吐量(throughput)/每秒处理数据量
  • 延迟(latency)/响应时间(response time):延迟是处理时间,响应时间是客户端看到的。

最好通过百分位数来监控指标:p50/p80/p90/p95/p99/p999,p50 指标表示一半请求在这个指标之下,一半在这个指标之上。

应对负载增加

  • 无状态很方便扩容
  • 但有状态的分布式面临一定的挑战

可维护性

可运维性:运维更轻松

监控、文档、自动化、良好的默认配置、可手动控制系统状态让系统自我修复(比如熔断机制)。

简单性:简化复杂度

抽象!

可演化性:易于改变

  • TDD
  • 重构