总览
《数据密集型应用系统设计》非常好的一本书。全书分为三部分:
- 数据系统的一般原则
- 单机数据系统转向分布式系统
- 派生数据的系统
这里是第一部分。
数据系统基础原则
-
可靠性
- 容忍软硬件失效,人为错误
-
可扩展性
- 评测负载与性能,延迟百分位数,吞吐量
-
可维护性
- 可运维,简单与可演化性
第1章 可靠、可扩展、可维护的应用系统
问题来源:
当今应用都属于数据密集型(data-intensive
),而不是计算密集型(compute-intensive
)
数据应用系统常用模块:
- 数据库
- 高速缓存
- 索引
- 流式处理:持续发送消息至另一个进程
- 批处理:定期处理大量的累积数据
本书将这个些都归类于:数据系统(data system
)
Redis既可以用户数据存储,也适用于消息队列
ApacheKafka可作为消息队列,同时也具备持久化存储保证。
缓存层Memcached
全文索引服务器Elasticsearch/Solr
可靠性Reliability
简单说:即使发生某些错误,系统仍然可以正常工作。
硬件故障
添加冗余来减少系统故障率。云平台(AmazonWebServices,AWS
)强调总体灵活性与弹性,不是单台机器的可靠性,所以云服务器虚拟机实例的可靠性相对较差。
软件错误
没有什么好的解决办法。
人为错误
假定人是不可靠的来设计系统.设计接口原则:使做正确的事情很简单,使做错误的事情很难。
可扩展性Scalability
描述系统应对负载增加能力的术语。
描述负载
有一个twitter的例子很好。负载多是由系统的关键业务参数决定。
描述性能
批处理系统如Hadoop
,通常关心吞吐量throughout
。在线系统更看重响应时间responsetime
。
采用百分位数(percentiles
)描述响应时间。如中位数是50ms,则说明有50%的请求响应时间大于50ms。通常使用p95,p99,p999.亚马逊采用p999.描述、定义服务质量目标(ServiceLevelObjecti