..

DDIA: 分布式系统摘要

前言

为什么需要分布式系统?

  1. 扩展性

    当数据量或者读写负载超过了单台机器的处理上限,需要将负载分到多台机器上

  2. 容错与高可用性

    如果单台机器出现故障,我们却希望整个系统继续提供服务,那么需要采用多台机器进行冗余。这样当某些节点失效后,其他节点可以迅速接管。

  3. 延迟考虑

    假设客户端遍布世界各地,通常需要考虑在全球范围内部署服务,以便用户就近访问最近的提供服务的节点,从而减小延迟。

扩展系统能力

当负载增加到需要更强的处理能力时,最简单的方法是使用配置更好的机器(垂直扩展)。由一个残做系统管理跟多的 CPU,内存,磁盘等,通过内部总线去连接;这样一个共享内存的架构中,所有组件的集合可以看作一个超大的机器。

共享内存架构的弊端:

  • 成本增长过快:有时候硬件指标提升了两倍,但是性能并不一定提升两倍;那么就会需要更多的配置
  • 有限的容错能力:无法提供异地容错的能力

无共享结构

无共享结构也被称为水平扩展,其中各个节点之间的通信全部通过传统的网络,不需要特殊的硬件,并且核心逻辑主要依靠软件来实现。

无共享结构的弊端:

  • 引入更多的复杂性:多节点的分布可能会使得数据存在不一致等问题,那么为了实现多节点数据一致性需要做更多较为复杂的工作

复制与分区

将数据分布在多节点时通常有两种方式:

  1. 复制

    多节点上保存相同的数据副本;通过复制,可以更有效的提供冗余:如果某些节点不可用,那么可以通过其他节点继续提供数据访问服务;同时,复制也能提高系统性能

  2. 分区

    将圈梁的数据库拆分成多个较小的子集即为分区,不同分区分配给不同的节点(分片)。

复制与分区虽然是不同的概念,但是通常被放在一起组合使用。