人多力量大 - 分布式导言

一个人抗一个木头会很重,如果两个人一起抗木头,两个人承担的分量会少点,如果三个人呢?那么三个人承担的分量会更少. 换言之,如果从整体上看,三个人的力量要大于两个人
现在的应用的数据变得越来越大,业务的流量越来越多了,分布式成为了一个不可避免的趋势。
这篇文章主要谈谈

  • 背景
  • 分布式系统的整体设计目标
  • 分布式系统需要解决的具体问题

背景

从一个简单的例子开始: 计算一个nxn的矩阵,可以有两种办法

  • 在一台机器上直接计算出来,把结果存放到数据库或者缓存中.
  • 将矩阵划分为四个象限(每个象限为n/2),然后这四个象限分别由四个节点独自处理,处理好的结果最好再后再汇总起来,存放在某个地方.

第一种办法就是单机处理,第二种办法就是分布式处理。
第二种办法可以看作分布式处理的最简单模型, 它涉及了

  • 计算
  • 存储
  • 节点之间的通信 - 这里的节点可以是真实的物理机器,或者虚拟机或手机,或者世界上任意可计算的设备

分布式系统的整体设计目标

从上面的例子,我们可以看到要计算一个矩阵,我们需要CPU计算,然后保存结果。把这个例子延伸到多台机器上,我们可能会面临如下问题:

  • 分布式计算
  • 分布式存储
  • 分布式通信 - 这是一个很自然而然的概念,毕竟不同的机器是需要通信的.
  • 分布式资源池化 - 不同机器上的 GPU, 内存形成逻辑上性能更强的GPU, 内存.

将上面这四个问题领域合成一个大问题就是: 在某种资源的基础上,通过某种通信方式,进行某种计算,把计算的结果存储在某个地方,然后对外提供一个服务。

这个结论受极客时间上的某位专家的启发.

本着站在巨人肩膀上的原则,将上面的结论和我之前提出的又快又好的指标进行整合

分布式系统的整体目标和远景就是:如何又快又好的实现这个大问题?

分布式系统需要解决的具体问题

节点之间的通信问题

  • 直来直往 - 想要和谁说话,直接找那个人. 这就是RPC问题
  • 专职中介 - 想和谁说话,找专门的中介就可以了。 这就是消息队列问题

一个集群中的节点管理和互相协作的问题

  • 国不可一日无君 - 一个集群中的leader节点挂了,如何产生一个新的Leader节点, 这就是分布式选举问题.
  • 共商国事 - 如何制定一个国家政策得到大家的认可?在分布式领域就是共识问题。
  • 国家是有秩序的 - 文明有礼,排队买票. 一个集群中的资源,在某个时间窗口只允许特定节点访问,这就是分布式互斥问题.
  • 有始有终 - 一个人做事最好不要半吊子,要么不做,要么完成。在分布式领域,这就是分布式事务问题.

分布式资源管理和负载调度

  • 单体调度
  • 两层调度
  • 共享状态调度

分布式数据存储

  • 分布式缓存

分布式高可靠

  • 负载均衡
  • 流量控制
  • 故障隔离
  • 故障恢复