也谈分布式系统中的网络模型和故障模型

更新时间:2023-05-09 14:24:21 阅读: 评论:0

也谈分布式系统中的⽹络模型和故障模型
⽂章⽬录
1. 写在前⾯
中的⽹络模型和故障模型是个⽼⽣常谈的问题了。
关于⽹络模型,相信⼤家都知道分为:同步⽹络和异步⽹络。
对于故障模型,⼤家可能会有点懵。因为⽆论是在各种教材上还是在各种博客中关于该模型的划分都很杂、很乱,甚⾄相互之间有些⽭盾。举例来说,⼤家可能看到过下⾯这两张图。这两张图分别对故障模型进⾏了划分,但划分结果却迥然不同。
此外,⼤家有没有思考过这个问题:
⽹络模型和故障模型的关系是什么?⼤家似乎在讨论故障模型的时候,直接就忽略⽹络模型了
在本篇博客中,我们也想谈谈这两个模型。对于故障模型,我们努⼒将现有的各种划分结果进⾏统⼀,使得我们的划分结果更加系统科学。此外,我们也尝试从新的⾓度理解⽹络模型,并回答⽹络模型和故障模型的关系。
2. 再理解⽹络模型
⽹络模型分为:同步⽹络和异步⽹络,两者的不严谨定义分别如下所⽰:
同步⽹络:⽹络中消息传递的延迟有上限,节点的处理延迟延迟有上限
异步⽹络:⽹络中消息传递的延迟没有上限,节点的处理延迟⽆上限
这⾥需要指出的是,尽管“⽹络模型”这个词字⾯上只包含了“⽹络”,但其实际上对节点处理延迟也进⾏了规定。 此外,在我们看来,同步⽹络和异步⽹络的最⼤区别在于故障的可检测性。具体来说,在同步⽹络中,其他节点或⽹络的故障可以通过 超时(ping/timeout)进⾏检测;⽽在异步⽹络中,这些故障是⽆法进⾏检测的。 由于我们只能通过**超时(ping/timeout)**在同步⽹络中进⾏故障检测,可检测的故障也只有节点崩溃或⽹络链路断开这种错误(就故障⽽⾔,节点崩溃和⽹络链路断开是等价的,这在3.1节种将进⾏讨论)。 记住这个结论,该结论将在第4节中⽤到。
2.1 ⼀个疑问
看久了故障模型和⽹络模型,我曾经有的⼀个疑问是:
同步⽹络中是否保证了⽹络链路不会发⽣断开?
答案是不保证。同步⽹络中也会出现链路断开,因此才需要使⽤**超时(ping/timeout)**进⾏检测。当然,异步⽹络中更不会保证链路不断开。
3. 故障模型的划分
综合⽐较多个划分结果,我们将故障模型重新划分如下图所⽰,相应的解释如下表。
故障划分解释
Byzantine failure节点可以任意篡改发送给其他节点的数据
Authentication detectable byzantine failure
(ADB)
Byzantine failure的特例;节点可以篡改数据,但不能伪造其他节点的数据Respon failure ADB的特例,节点可以返回错误数据,但只能返回受限的错误数据
Performance failure⼜名timing failure, 节点未在特定时间段内收到数据,即时间太早或太晚
Omission failure Performance failure的特例;节点收到数据的时间⽆限晚,即收不到数据
Crash failure Omission failure的特例;在omission failure的基础上,增加了节点停⽌响应的假设,也即持续性地
omission failure
Fail-stop failure Crash failure的特例;在Crash failure的基础上增加了错误可检测的假设
从图中我们可以看出,越在外层的错误模型(如Byzantine failure)所作的假设越少,越在内层的错误模型(如Crash failure)所作的假设越多。也即,⼀个在内层模型中可⾏的共识⽅案未必可以在外层模型中可⾏。
以下,我们分别讨论故障模型的⼀个疑问和两个分类。
3.1 ⼀个疑问
⼀直以来,我对故障模型存在⼀个疑问:
故障模型是针对节点还是针对⽹络⽽⾔的?也即:故障模型中的故障讨论的是节点故障还是⽹络故障
我思考的结论是两者(节点故障和⽹络故障)都包括。 我个⼈对此的理解是:从分布式系统中节点的
⾓度来看,节点故障和⽹络故障是⽆法区分的,甚⾄⼀定程度上是等价的。举例来说:“⽹络延迟”和“节点处理速率慢”等价;“⽹络链路断开”和“节点宕机”等价;“⽹络链路中路由器篡改数据”和“节点恶意篡改数据”等价。因此,故障模型中的故障是将节点和⽹络包含在⼀起进⾏讨论的。
这⾥顺便对Omission failure故障模型的含义进⾏深⼊讨论。
将Omission failure和Performance failure以及Crash failure进⾏对⽐,Omission failure故障模型的含义包括两个层⾯:
针对某个特定消息来说,节点A可能永远⽆法收到来⾃节点B回复(即:存在消息丢失)
但对于该消息之后的消息,节点A可能重新收到来⾃节点B回复(即:恢复对后续消息的响应)
由于我们已经说明了节点故障和⽹络故障的等价性。
当故障是节点故障时,Omission failure描述了以下场景:节点B在短暂宕机后,⼜恢复了运转;与此同时,⽹络⼀直在正常连接。
当故障是⽹络故障时,Omission failure描述了以下场景:⽹络在短暂断开后,可能⼜恢复了连接;但与此同时,节点B⼀直在正常运转。这种场景实际上是我们熟悉的⽹络分区现象。
也就是说:⽹络分区故障实际上是Omission failure的⼀个特例。
3.2 按照故障发⽣的领域分类(Domain of failure occurrence)
3.2.1 值故障 (Value failure)
值故障的含义是节点接收到的数据值发⽣了故障。
Byzantine failure
Authentication detectable byzantine failure (ADB)
Respon failure
3.2.2 时间故障(Time failure)
时间故障的含义是节点接收到数据的事件发⽣的故障。
这⾥的time failure和上表中的Performance failure那⼀⾏中的timing failure不同。这⾥将最⾥层的4个故障统称为time failure
Performance failure
Omission failure
Crash failure
Fail-stop failure
3.3 按照⽤户对数据的感知分类(Perception by the system urs)
3.3.1 ⾮⼀致性故障 (Inconsistent failure)
⾮⼀致性故障是指其他节点从同⼀节点中接收到的数据是不⼀致的。
Byzantine or arbitary failures
Authentication detectable byzantine failure (ADB)
3.3.2 ⼀致性故障 (Consistent failure)
⼀致性故障是指其他节点从同⼀节点中接收到的数据是⼀致的,在此基础上出现的其他故障。
Respon failure
Performance failure
Omission failure
Crash failure
Fail-stop failure
4. ⽹络模型和故障模型的关系
4.1 再讨论Fail-stop failure模型
在开始⽹络模型和故障模型的关系之前,我们先讨论⼀下Fail-stop failure这个特殊的故障模型。
前⾯我们介绍了Fail-stop failure这个模型,其是在Crash failure模型的基础上增加了故障可检测的假设。回顾我们在第2节中的理解:同步⽹络和异步⽹络最⼤的区别在于故障的可检测性。 因此,Fail-stop failure模型本质上是在Crash failure模型的基础上增加了“同步⽹
络”的假设。 那么为什么在其他⼏类模型中不增加“同步⽹络”的假设,使其演变为另⼀种模型呢?
4.2 是否可以对其他模型增加“同步⽹络”的假设?
回顾我们在第2节中的结论,同步⽹络中可检测的故障只有节点崩溃或⽹络链路断开这种故障。⽽这种故障正对应于Crash failure。
也就是说,在除Crash failure和Fail-stop failure之外的其他5类故障模型中,同步⽹络和异步⽹络的假设并不会对模型产⽣影响。 因此,⽆需对其他模型怎加“同步⽹络”的假设。
4.3 ⽹络模型和故障模型的正交性
⼀定程度上来看,⽹络模型和故障模型是正交的。但,是否将不同的⽹络模型和故障模型进⾏叠加,需要考虑其叠加后的意义。
正如4.2节中所说,在除Crash failure之外的其他5类故障模型,叠加⽹络模型不会分化出新的模型。因⽽,我们在众多的教材和博客中,都不会看到它们相叠加的讨论。
参考链接
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.

本文发布于:2023-05-09 14:24:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/102068.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:故障   模型   节点   数据   划分   链路
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图