Skip to content
Xiaoyu's Blog
Go back

深入理解分布式系统(前两章)

第一章:认识分布式系统

🤪
分布式系统的产生源于系统垂直扩展能力有限,不可能将单体应用所在服务器的cpu、内存、ssd等硬件设施无限扩展,所以只能水平扩展。以多台机器、多进程的方式处理高并发请求。

1.1 分布式系统的特点:

1.2 分布式系统的优势:

1.3 分布式系统带来的挑战:

20世纪90年代,L.PeterDeutsch等人受到SunMicrosystems公司内部发生的问题的启发,总结出了分布式计算的谬误(The Fallacies of DistributedComputing) 这些谬误如下:
(1)网络是可靠的
(2)延迟为零
(3)带宽是无限的
(4)网络是安全的
(5)拓扑结构不会改变
(6)单一管理员
(7)传输成本为零
(8)网络是同构的

1.4 分布式系统带来的问题:

1.5 每个程序员都应该知道的数字

JefTDean曾在他关于分布式系统的分享l中列出了“每个程序员都应该了解的数字(Numbers Eveyone Should Know)”,对计算机各类操作的耗时做了大致估计。笔者认为,无论进行何种系
统的设计和开发,这些数字都非常有用。这些数字如表1-1所示。

这些数字是在2009年给出的,计算机发展到今天,这些数字确实有些过时。笔者找到了
2020年各类操作的最新数据,如表l-2所示。不过,这些数字的重点在于它们之间的数量级和
比例,而不是具体的数字大小。

第二章:分布式系统模型

我们从分布式系统中的两个经典思想实验开始:两将军问题和拜占庭将军问题。

2.1 两将军问题

两将军问题(Two Generals`Problem)是计算机领域中的一个思想实验,是指两支由不同
的将军领导的军队,正准备进攻一座坚固的城市。军队在城市附近的两个山丘扎营,中间有—
个山谷将两个山丘隔开,两个将军交流的唯一方法是派遣信使穿越山谷。然而,山谷被城市的
守卫者占领,并且途经该山谷传递信息的信使有可能会被俘虏,如图2-1所示。

两将军问题虽然已被证明无解,但计算机科学家们仍然找到了工程上的解决方案,我们熟
悉的传输控制协议(TCP)的“三次握手”就是两将军问题的一个工程解。
这个思想实验还表明,在一个分布式系统中,一个节点没有办法确认另一个节点的状态,
一个节点想要知道某个节点的状态的唯一方法是通过发送信息进行交流来尽量得知。这跟人与
人之间的交流类似,我们没有心灵感应,所以让别人知道你的想法的唯—方式是通过语言、文
字或肢体语言等来交流。

2.2 拜占庭将军问题

拜占庭将军问题的由来可以追溯到20世纪80年代的计算机科学领域。这个问题最早是由Leslie Lamport等人在1982年提出的,用于描述在分布式系统中的信任问题。问题的名称来自于古代拜占庭帝国的将军们需要在没有中央指挥官的情况下,通过传递消息来决定进攻还是撤退。
💡

拜占庭将军问题是一个思想实验,用来描述在一个分布式系统中,由于网络通信的不可靠性和节点的故障,如何在存在恶意节点的情况下达成一致。

在这个问题中,拜占庭帝国的多个将军需要就进攻或撤退向其他将军达成一致,但其中一些将军可能是叛徒,故意发送错误的消息以破坏一致性。叛徒将军可以发送虚假的命令,误导其他将军的决策。

这个问题的关键是如何确保忠诚将军之间的一致性,即使叛徒将军试图破坏它。在没有中央控制的情况下,如何通过分布式的通信来达成共识是一个具有挑战性的问题。

解决拜占庭将军问题是分布式系统中的一个重要挑战,需要使用各种协议和算法来实现容错性和一致性。这个问题的研究对于确保分布式系统的安全性和可靠性具有重要意义。

在分布式系统中,每个节点可以看作是一个将军,节点之间通过网络进行通信。由于网络通信的不可靠性和节点的故障,可能会导致消息丢失、延迟、篡改等问题。而且,系统中可能存在恶意节点,它们可能发送虚假的消息以破坏系统的一致性。

拜占庭将军问题的关键是如何在存在恶意节点的情况下,保证忠诚节点之间的一致性。这意味着如果一个将军发出进攻的命令,其他忠诚的将军都会接受并执行该命令,而不是受到叛徒将军的干扰。

解决拜占庭将军问题需要设计具有容错性和一致性的协议和算法。这些协议和算法需要考虑消息的可靠传递、节点的故障检测、恶意节点的识别等方面。拜占庭将军问题的研究对于确保分布式系统的安全性和可靠性具有重要意义。

2.3 系统模型

这两个思想实验告诉我们,现实中的分布式系统,节点和网络都可能出现各种各样的故障。
我们的系统模型就是根据不同种类的故障抽象出来的。
在设计一个分布式系统的时候,我们必须清楚系统会发生哪种故障,然后寻找对应的解。
不同的系统模型有着不同的算法和架构。
我们按网络、节点故障和时间三种类型划分系统模型。

2.3.1 网路链路模型

  1. 可靠链路

    (1)可靠传递:如果进程p和q都正常工作,则进程P发送到进程q的每个消息都会被链
    路传递。
    (2)没有重复:每条消息最多传递一次。
    (3)不会无中生有:链路不会自己生成消息。

  2. 公平损失链路

    1. 公平损失:如果发送方和接收方都是正常运行的,且发送方不断重复发送消息,则消息
      最终会被送达。
    2. 有限重复:消息只会重复发送有限的次数。
    3. 不会无中生有:链路不会自己生成消息。这个特点和可靠链路一样。
  3. 任意链路

    任意链路(ArbitraIyLmk)是最弱的—种网络链路模型。这种网络链路允许任意的网络链
    路执行任何操作,可能有恶意软件修改网络数据包和流量。就像你在外面的商场或咖啡店连接
    不明的wifi—样,wifi所有者可能是不可信的,不仅会监听你的数据’甚至修改你的数据包,听起来很可怕,但这是最接近互联网的模型。

2.3.2 节点故障类型

2.3.3 按时间划分系统模型

同步(Synchronous)系统模型是指,一个消息的响应时间在一个有限且已知的时间范围内。
异步(Asynchronous)系统模型是指,一个消息的响应时间是无限的,无法知道—条消息什么
时候会到达。


Share this post:

Previous Post
颜值是第一生产力吗?
Next Post
重学Vue-Day01