第一章 可靠性、可伸缩性、可维护性
现今很多应用程序都是数据密集型(data-intensive),而非计算密集型(compute-intensive)。因此CPU很少成为这类应用的瓶颈,更大的问题通常来自数据量、数据复杂性、以及数据的变更速度。影响这类程序的三个关键因素是可靠性、可伸缩性、可维护性。
- 可靠性:程序在困境中仍能正常工作。
困境一般指:硬件故障、软件故障和人为错误。硬件故障包括机房断电、错误拔网线、硬盘崩溃等,一般通过增加单个硬件的冗余度即可解决,足以让服务器运行很多年。硬件故障几乎是独立发生,而软件故障往往跨节点相关,造成系统失效。但硬件故障、软件故障导致的服务中断仅占20%左右,主要原因在于人为错误。人是最不可靠的。
正常工作指:正确完成功能,并能达到期望的性能水准
- 可伸缩性:描述系统应对负载增长能力的术语
负载增长:系统负载已经从一万个并发用户增长到十万个并发用户,或者从一百万增长到一千万
负载参数:动作的查询频率。以推特为例子,用户查询的频率与关注者发推文频率的不同,决定了系统给用户呈现关注者推文的实现方法。而关注者又可按粉丝量进一步划分为名流和其他,进一步完善方法。
描述性能:吞吐量和响应时间。响应时间往往关注百分点和中位数。
应对方法:纵向伸缩和横向伸缩。
- 可维护性:可操作性、简单性、可演化性(即可扩展性)。