分布式系统简介

什么是分布式系统

计算机系统有两大基础任务——存储和计算,分布式系统编程是用多台计算机解决像单台计算机一样处理存储和计算问题。而这些问题是不适合用单台计算机去解决。不适合不是说不行,如果你有无限资源而且不考成本,你可以购买或者找人那设计那种单体计算机。但是很少有人拥有无限的资源。因此我们必须在某些实际成本收益曲线上找到适合自己的位置。在较小规模上,升级硬件是不错选择,但是随着问题规模的增加,你将通过靠升级单个节点硬件来解决问题,或者成本变得过高,分布式系统将会是最好的选择。

分布式系统(distributed system)的目标可以归纳为可拓展性,可拓展性包含

  • 大小可伸缩性:添加更多节点将使系统线性更快​​;扩大数据集不应增加延迟
  • 地理可伸缩性:应该可以使用多个数据中心,以减少响应用户查询所花费的时间,同时以合理的方式处理跨数据中心的延迟。
  • 管理可伸缩性:添加更多节点不会增加系统的管理成本(例如,管理员与机器的比例)。

衡量可拓展性有四个关键的指标性能、延时、可用性和容错

  • 性能:它的特点是与时间和资源相比,计算机系统完成的有用工作量。
  • 延时:是事物开始和发生之间的时间。
  • 可用性:系统处于运行状态的时间比例。如果用户无法访问系统,则称该系统不可用。
  • 容错:以归结为,预估可能遇到的故障,然后设计可以容忍的系统或算法。

分布式系统受两个物理因素的约束:

  • 节点数(随所需的存储和计算能力而增加)
  • 节点之间的距离

由这两个物理因素带入如下三个问题

  • 独立节点数量的增加会增加系统发生故障的可能性(降低可用性并增加管理成本)
  • 独立节点数量的增加可能会增加节点之间通信的需求(随着规模的增加而降低性能)
  • 地理距离的增加会增加远端节点之间通信的延迟(延迟会带来一致性问题)

这三个问题是非常难完全解决的,CAP定理告诉我们完美的分布式系统是不存在的。

CAP定理

CAP定理最初是由计算机科学家Eric Brewer提出的一个猜想。它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性(Consistency):所有节点同时看到相同的数据(每次请求都能拿到最新的数据)。
  • 可用性(Availability):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(每次请求都能得到响应,但是数据可能不是最新的)。
  • 分区容错性(Partition tolerance):尽管由于网络或者节点故障,但是整个服务仍能对外提供服务(是否允许有节点故障)。

根据定理,分布式系统只能满足三项中的两项而不可能满足全部三项。

如上图显示,具有所有三个属性的交叉部分是无法实现的。然后我们得到这三种两两结合的不同的系统类型:

CA(一致性+可用性)。示例包括完全严格的仲裁协议,例如2PC(两阶段提交)。 CP(一致性+分区容错性)。示例包括多数派仲裁协议,其中少数派分区不可用,例如Paxos,Raft算法。 AP(可用性+分区容错性)。示例包括使用冲突解决方案的协议,例如Gossip协议。

CA和CP系统设计均提供相同的一致性模型:高度一致性。唯一的区别是CA系统不能容忍任何节点故障。在CP系统中2n+1个节点中可以容忍n个节点故障。CA系统不支持分区,它们通常使用两阶段提交算法,并且在传统的分布式关系数据库中很常见。

总结

本小节简要介绍了分布式系统的概念,以及分布式系统的挑战。我们还介绍了分布式系统中非常出名的CAP定理,我们知道了AP,CA,CP系统的设计侧重点。本章节后续会介绍这三个系统的代表协议(算法)Gossip,2PC,Raft(Paxos可能更有名,但是产业界实现很少,Raft目前用得更多)。

参考资料