..
DDIA: 分布式系统摘要
前言
为什么需要分布式系统?
-
扩展性
当数据量或者读写负载超过了单台机器的处理上限,需要将负载分到多台机器上去
-
容错与高可用性
如果单台机器出现故障,我们却希望整个系统继续提供服务,那么需要采用多台机器进行冗余。这样当某些节点失效后,其他节点可以迅速接管。
-
延迟考虑
假设客户端遍布世界各地,通常需要考虑在全球范围内部署服务,以便用户就近访问最近的提供服务的节点,从而减小延迟。
扩展系统能力
当负载增加到需要更强的处理能力时,最简单的方法是使用配置更好的机器(垂直扩展)。由一个残做系统管理跟多的 CPU,内存,磁盘等,通过内部总线去连接;这样一个共享内存的架构中,所有组件的集合可以看作一个超大的机器。
共享内存架构的弊端:
- 成本增长过快:有时候硬件指标提升了两倍,但是性能并不一定提升两倍;那么就会需要更多的配置
- 有限的容错能力:无法提供异地容错的能力
无共享结构
无共享结构也被称为水平扩展,其中各个节点之间的通信全部通过传统的网络,不需要特殊的硬件,并且核心逻辑主要依靠软件来实现。
无共享结构的弊端:
- 引入更多的复杂性:多节点的分布可能会使得数据存在不一致等问题,那么为了实现多节点数据一致性需要做更多较为复杂的工作
复制与分区
将数据分布在多节点时通常有两种方式:
-
复制
多节点上保存相同的数据副本;通过复制,可以更有效的提供冗余:如果某些节点不可用,那么可以通过其他节点继续提供数据访问服务;同时,复制也能提高系统性能。
-
分区
将圈梁的数据库拆分成多个较小的子集即为分区,不同分区分配给不同的节点(分片)。
复制与分区虽然是不同的概念,但是通常被放在一起组合使用。