文章目录

  • 1. 写在前面
  • 2. 再理解网络模型
    • 2.1 一个疑问
  • 3. 故障模型的划分
    • 3.1 一个疑问
    • 3.2 按照故障发生的领域分类(Domain of failure occurrence)
      • 3.2.1 值故障 (Value failure)
      • 3.2.2 时间故障 (Time failure)
    • 3.3 按照用户对数据的感知分类(Perception by the system users)
      • 3.3.1 非一致性故障 (Inconsistent failure)
      • 3.3.2 一致性故障 (Consistent failure)
  • 4. 网络模型和故障模型的关系
    • 4.1 再讨论Fail-stop failure模型
    • 4.2 是否可以对其他模型增加“同步网络”的假设?
    • 4.3 网络模型和故障模型的正交性
  • 参考链接

1. 写在前面

分布式系统中的网络模型和故障模型是个老生常谈的问题了。

  • 关于网络模型,相信大家都知道分为:同步网络和异步网络。
  • 对于故障模型,大家可能会有点懵。因为无论是在各种教材上还是在各种博客中关于该模型的划分都很杂、很乱,甚至相互之间有些矛盾。举例来说,大家可能看到过下面这两张图。这两张图分别对故障模型进行了划分,但划分结果却迥然不同。

此外,大家有没有思考过这个问题:

  • 网络模型和故障模型的关系是什么?大家似乎在讨论故障模型的时候,直接就忽略网络模型了

在本篇博客中,我们也想谈谈这两个模型。对于故障模型,我们努力将现有的各种划分结果进行统一,使得我们的划分结果更加系统科学。此外,我们也尝试从新的角度理解网络模型,并回答网络模型和故障模型的关系。

2. 再理解网络模型

网络模型分为:同步网络和异步网络,两者的不严谨定义分别如下所示:

  • 同步网络:网络中消息传递的延迟有上限,节点的处理延迟延迟有上限
  • 异步网络:网络中消息传递的延迟没有上限,节点的处理延迟无上限

这里需要指出的是,尽管“网络模型”这个词字面上只包含了“网络”,但其实际上对节点处理延迟也进行了规定。
此外,在我们看来,同步网络和异步网络的最大区别在于故障的可检测性。具体来说,在同步网络中,其他节点或网络的故障可以通过 超时(ping/timeout) 进行检测;而在异步网络中,这些故障是无法进行检测的。
由于我们只能通过**超时(ping/timeout)**在同步网络中进行故障检测,可检测的故障也只有节点崩溃网络链路断开这种错误(就故障而言,节点崩溃网络链路断开是等价的,这在3.1节种将进行讨论)。
记住这个结论,该结论将在第4节中用到。

2.1 一个疑问

看久了故障模型和网络模型,我曾经有的一个疑问是:

同步网络中是否保证了网络链路不会发生断开?

答案是不保证。同步网络中也会出现链路断开,因此才需要使用**超时(ping/timeout)**进行检测。当然,异步网络中更不会保证链路不断开。

3. 故障模型的划分

综合比较多个划分结果,我们将故障模型重新划分如下图所示,相应的解释如下表。

故障划分 解释
Byzantine failure 节点可以任意篡改发送给其他节点的数据
Authentication detectable byzantine failure (ADB) Byzantine failure的特例;节点可以篡改数据,但不能伪造其他节点的数据
Response 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 failurePerformance 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)
  • Response 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 users)

3.3.1 非一致性故障 (Inconsistent failure)

非一致性故障是指其他节点从同一节点中接收到的数据是不一致的。

  • Byzantine or arbitary failures
  • Authentication detectable byzantine failure (ADB)

3.3.2 一致性故障 (Consistent failure)

一致性故障是指其他节点从同一节点中接收到的数据是一致的,在此基础上出现的其他故障。

  • Response 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 failureFail-stop failure之外的其他5类故障模型中,同步网络和异步网络的假设并不会对模型产生影响
因此,无需对其他模型怎加“同步网络”的假设。

4.3 网络模型和故障模型的正交性

一定程度上来看,网络模型和故障模型是正交的。但,是否将不同的网络模型和故障模型进行叠加,需要考虑其叠加后的意义。
正如4.2节中所说,在除Crash failure之外的其他5类故障模型,叠加网络模型不会分化出新的模型。因而,我们在众多的教材和博客中,都不会看到它们相叠加的讨论。

参考链接

  1. Fault tolerance, Chap08
  2. Failure modes in distributed systems
  3. Failure semantic - Wikipedia
  4. Understanding omission failure in distributed systems
  5. Modes of failure
  6. Failure modes and models
  7. What we talk about when we talk about distributed systems
  8. Crash Recovery with Partial Amnesia Failure Model Issues
  9. 分布式系统中的网络模型和故障模型
  10. 分布式系统一致性的发展历史 (二)
  11. Faults and fault-tolerance

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

  1. NET Core微服务之路:再谈分布式系统中一致性问题分析

    前言 一致性:很多时候表现在IT系统中,通常在分布式系统中,必须(或最终)为多个节点的数据保持一致.世间万物,也有存在相同的特征或相似,比如儿时的双胞胎,一批工厂流水线的产品,当然,我们不去讨论非IT ...

  2. 分布式系统中只有两个难题

    分布式系统抽象 讨论编程语言时,我们使用通用术语并用函数.运算符.类.变量和指针来定义我们的程序.通用的词汇可以帮助我们避免每次都为了描述某些东西而发明新词.我们的定义越精确.越没有歧异,听众也就越容 ...

  3. 理解分布式系统中的缓存架构(上)

    本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景. 1. 缓存概述 缓存概述 2. 缓存的分类 缓存主要分为以下四类 缓存的分类 2.1 CDN缓存 基本介绍 CDN(Conte ...

  4. 编写程序计算交错序列_外文翻译 | FlyMC:高度可扩展地测试分布式系统中的复杂交错...

    作者:Jeffrey F. Lukman, Huan Ke, Cesar A. Stuardo等 日期:2019年3月25日 原文链接: https://ucare.cs.uchicago.edu/p ...

  5. 分布式系统中的进程标识

    陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 昨天跟朋友聊天,谈到了分布式系统中如何为进程取标识符(process identifier),写篇博客简单 ...

  6. 深入理解分布式系统中的缓存架构(上)

    转载自   深入理解分布式系统中的缓存架构(上) 本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景. 1 缓存概述 2 缓存的分类 缓存主要分为以下四类 2.1 CDN缓存 基本 ...

  7. 02 从亚马逊的实践,谈分布式系统的难点

    参见:  https://blog.csdn.net/william_n/article/details/103564312 1.学习/操作 1.从目前已经公开的资料来看,分布式服务化架构思想实践最早 ...

  8. 在分布式系统中使用 DDD

    在使用 DDD 的思想时,最让人迷惑的就是如何组织代码,也就是通常所说的系统架构的问题.在前面提到 DDD 可以很好地指导代码组织,其中举了两个例子,单体和微服务架构下 DDD 如何指导代码的组织方式 ...

  9. 4. 分布式系统中的同步

    一般来说,去中心化的算法具有以下特性. 相关信息分布在多台计算机上. 进程只根据本地信息做出决定. 不应该有一个单一的临界点,它的失败会导致算法的崩溃. 没有通用的时钟或其他准确的全球时间来源. 前三 ...

最新文章

  1. 如何查找基因在发表研究中的表达
  2. 【错误记录】Android Studio 向 GitHub 提交代码报错 ( Push failed: Failed with error: Could not read from remote )
  3. 2018java计算机二级考试试题和答案,2018年计算机等级考试二级JAVA习题答案(1)
  4. 深入理解Flink ---- 系统内部消息传递的exactly once语义
  5. 微信小程序云开发教程-分页查询
  6. js实现xml转json和json转xml
  7. 利用微信JSSDK调用微信扫一扫功能
  8. 通过SecurityUtils获取Subject详解
  9. Java高性能序列化工具Kryo序列化
  10. 一键生成?从照片生成人脸 3D 模型 #AvatarMe
  11. 2015061710 - 海豹突击队的忠告
  12. python将矩阵顺时针旋转90度_在Python中将方形矩阵逆时针旋转90度的程序
  13. 坦克大战第一个不爆炸
  14. 如何做好中小企业中层管理者
  15. wux tab 颜色扩展
  16. HTC下一款Android手机即将上市
  17. input禁止键盘及中文输入
  18. Multiple markers at this line - Missing semicolon
  19. 将list存入到文件当中
  20. 全球区块链产业投资与中国区块链企业发展趋势

热门文章

  1. 认识PV、UV、UV价值
  2. repost ACM算法竞赛生涯
  3. 【已解决】ThinkPad E440 Win7蓝牙无法连接
  4. linux文件读取程序,Linux系统编程:文件的读取写入
  5. java---解惑--
  6. eigen冲突 sophus 安装_SVO-SLAM环境搭建指南
  7. SAP 固定资产增值和减值
  8. 大型互联网公司如何防止黑客入侵?(下)
  9. 第十一届“认证杯”数学中国数学建模国际赛 (2022 CERTIFICATE AUTHORITY CUP INTERNATIONAL
  10. 中考计算机必背知识点,语文中考必背知识考点(完整版)