来源 | 悟空聊架构

作者 | 悟空聊架构

头图 | 下载于视觉中国

种子节点

假如我是一个小病毒,有很多触角,人类把我的触角称为冠,所以给我起了个学术名:冠状病毒。可能与人类走得太近,我被传到了人类的的手上,随后又通过他接触的食物进入到了他的口中,进而进入到了他的体内。

进入到人体中后,我欺骗了人类的免疫系统,顺利进入到人体细胞中,释放自己的 RNA,通过正常细胞的 RNA 聚合酶来复制自己的 RNA,从而复制出更多的病毒,进而攻击人体肺部器官。

过了几天后,这名人类出现了发烧现象,同时伴有咳嗽症状,而我的同伴也通过喷嚏传到了其他人体中,同样开始大量复制自己。

一传十,十传百,这个地级市已有数千名人类被病毒感染。而我就被称作种子节点,而那名人类被称作零号病人。

Gossip 协议

人体内的正常细胞对我的传染性非常感兴趣。

正常细胞:“冠状大哥,你是怎么这么快进行传播的啊?”

我:“其实我是利用了 Gossip 协议。”

我:Gossip 主要有三大功能,直接邮寄、反熵、谣言传播。

Gossip 的中文意思就是流言蜚语,该协议就像流言蜚语一样,利用一种随机、带有传染性的方式,将信息传播到整个网络中,并在一定时间内,使得系统内的所有节点数据一致。这个就是实现了最终一致性的协议。


1.直接邮寄

直接发送需要更新的数据到其他节点,当数据发送失败时,将数据缓存下来,然后重传。如下图所示,人类 A 直接将病毒传染给了 C 和 E,而 B 和 D 没有被感染到,需要重新传染。

直接邮寄

优点:实现容易,数据同步及时。

缺点:可能会因为重试的缓存队列满了而丢数据。无法实现最终一致性。

那如何实现最终一致性呢?那就要用到第二种功能了:反熵。

2.反熵

反熵这个名词怎么理解呢?

熵指混乱程度,反熵就是消除不同节点间数据的差异,提升节点间数据的相似度。

反熵的过程:

  • (1)集群中的节点,每隔段时间就随机选择某个其他节点。

  • (2)互相交换自己的所有数据来消除两者之间的差异。

  • (3)实现数据的最终一致性。

下面举个病毒传染的例子来说明反熵。

首先人类 A 被感染了两种病毒,分别是病毒 T 和病毒 R,如下图所示:

人类 A 感染了两种病毒

人类  E 被感染了三种病毒,分别是病毒 T、病毒 S、病毒 Y,如下图所示:

人类 E 被感染了四种病毒

人类 A 将携带的病毒 T 和 R 传染给了人类 E,而 E 本来就携带了病毒 T,所以最后会被传染四种病毒:T、S、Y、R。也就是说通过反熵的方式,修复了人类 E 中缺失的病毒 R。如下图所示:

人类 E 被感染了四种病毒

其实,反熵主要有三种方式:推、拉、推和拉。

2.1 推

推:将自己的副本数据推给对象,修复对方副本中的熵。

如下图所示,人类 A 将病毒 R 传染(推)给了人类 E,E 中就包含所有 A 的病毒了。

2.2 拉

拉:拉取对方中的所有副本数据,修复自己副本中的熵。

如下图所示:人类 A 只有病毒 T 和 R,经过主动拉方式后,将人类 E 的病毒 S 和 病毒 Y 同步到人类 A 身上了,最后,人类 A 携带四种病毒:T、R、S、Y。

拉方式

2.3 推拉

推拉:同时修复自己副本和对象副本中的熵。

如下图所示:人类 A 和 人类 E 通过推拉的方式最后都被感染了相同的四种病毒:T、R、S、Y。

推拉

2.4 反熵的缺点

(1)通过上面推、拉、推拉的方式,我们可以主要到,反熵是需要节点两两交换和比对自己所有的数据,这样来看的话,通讯成本是很高的,所以不建议实际场景中频繁地执行反熵。

那有没有办法来减少反熵的次数呢?

答案是有的,我们可以通过引入校验和等机制来降低需要对比的数据量和通讯信息。

(2)执行反熵时,相关节点都是已知的,且节点数量不能太多。如果节点动态变化或节点数过多,反熵就不合适。

那有没有办法来解决动态、多节点的最终一致性呢?

答案是有的,那就要用到 Gossip 协议的第三种传播功能了,谣言传播或者叫流行病传播。

3 流行病传播

3.1 过程

Gossip 协议的第三种传播功能,流行病传播,也就是广泛地散播病毒。

如下图所示:A 传染给了 B 和 E,B 传染给了 C 和 D,D 传染给了 F 和 G。最后 ABCDEFG 都被感染了。

流行病传播过程

在分布式系统中,当一个节点有了新数据后,这个节点变成活跃状态,并周期性地联系其他节点向其发送新数据,直到所有节点都存储了该数据,可以理解为之前讲的反熵中的推的方式。如下图所示:

流行病传播方式&图片来源于网络

3.2 缺点

流行病传播的方式有如下缺点:

  • 时间随机:所有节点达到一致性是一个随机性的概率。可以改进反熵的流程:使用闭环修复。

  • 消息冗余:同一节点会多次接收同一消息,增加消息处理的压力,每一次通信都会对网络带宽、CPU 资源造成负载,进而影响达到最终一致性的时间。

  • 拜占庭问题:如果有恶意节点出现,那么其他节点也会出问题。所以需要先修复故障节点。

3.3 优点

  • 支持动态、多节点:允许动态增加或减少节点,支持非常多的节点。

  • 大多数节点:不需要大多数节点正常运行也能达到最终一致性

  • 容错:任何节点重启或宕机都不会影响 Gossip 协议的运行,天然的分布式系统容错特性。

  • 去中心化:节点都是对等的,没有特殊节点。任何节点出现问题都不会阻止其他节点继续执行反熵。

  • 速度快:因为每个节点都可以进行传播,所以速度是指数级的,就像现在的新冠病毒一样。

因为 Gossip 协议是一个带冗余的容错算法,为了保证最终一致性的算法。虽然所有节点达到一致的时间点不明确,但也可以通过改进反熵的执行过程来达到可预测,比如闭环反熵(不在本文展开论述)。

总结

本文通过一个携带冠状病毒的蝙蝠传染人类的故事来讲解了 Gossip 协议。

  • Gossip 协议是一种异步修复、实现最终一致性的协议。优先考虑反熵。

  • 反熵在存储组件中用得比较多。比如 Cassandra、InfluxDB。

  • 谣言传播(流行病传播)具有传染性,节点之间相互传染。适合动态变化的分布式系统。比如 Cassandra 动态管理集群的节点状态。

  • 实际场景,直接邮寄一定要实现,性能损耗最低。通过发送更新数据或缓存重传就能修复数据的不一致。

  • 在存储组件中,节点已知,采用反熵修复数据副本的不一致。

  • 集群节点变化时,或节点较多时,采用谣言传播方式,来同步更新多节点的数据,来实现最终一致性。

  • Gossip 的三种功能其实都是为了实现反熵,第一种用消息队列,第二种用推拉消息,第三种用散播谣言。

  • 如果节点出现故障,需要先修复故障节点。

更多阅读推荐

  • 都在说云原生,它的技术图谱你真的了解吗?

  • SRE 是如何保障稳定性的

  • 如何写出让 CPU 跑得更快的代码?

  • Serverless 在 SaaS 领域的最佳实践

  • 云原生人物志 | Pulsar翟佳:社区的信任最重要

  • 一目了然的 Docker 环境配置指南

大规模病毒入侵,全靠分布式相关推荐

  1. 病毒入侵计算机的危害,那些年电脑中过的病毒,中病毒的危害又有哪些

    相信大家都知道电脑它已经成为现在人们生活中的一部分,不管是娱乐还是工作,同时它也给人们带来很多的方便,但是我们知道如果没有合理的应用讲呢就是会中病毒,这样给我们使用就会带来了一些烦恼. ​下面小编就来 ...

  2. 病毒入侵的故事—BBC细胞的暗战The Hidden Life of the Cell

    写在前面 本周推荐一部英国BBC的的精彩科普纪录片<人体奥秘之细胞的暗战>英文名<Our Secret Universe: The Hidden Life of the Cell&g ...

  3. 华为鸿蒙osbeta多场景展示,华为发布鸿蒙系统:全场景分布式OS

    华为在8月9日下午举行的2019华为开发者大会上,正式推出了Harmony(鸿蒙) OS.余承东表示:鸿蒙是一款基于微内核的全场景分布式OS. 华为发布鸿蒙系统:基于微内核的全场景分布式OS 华为 M ...

  4. python病毒usb文件自动安装_win7禁USB自动安装驱动功能避免木马病毒入侵

    用户在限制USB设备使用方面,首先考虑的就是禁止其自动播放,以避免木马病毒入侵,但很多时候,这样的方法并不是很有效.如果你是Win7用户,那就可以通过它独有的"权限控制"技术,从源 ...

  5. 华为鸿蒙开源!敢为全球第一全场景分布式 OS,可替换 Android!

    作者 | 胡巍巍 发自东莞篮球中心出品 | CSDN(ID:CSDNnews) 鸿蒙真的来了!余承东宣布,鸿蒙的英文名叫HarmonyOS! 对于华为来讲,8月9日是华为开发者大会2019的首日,对于 ...

  6. 如何防止U盘病毒入侵方法

    如何防止U盘病毒入侵方法 来源:鲁大师下载 作者:鲁大师官方网站  打印 一,U盘病毒感染机理: 对于大多数U盘病毒来说他们都是通过系统的自动播放功能以及AUTORUN文件实现打开U盘时自动运行病毒程 ...

  7. 局域网病毒入侵原理和防御

    局域网病毒入侵原理及现象 计算机病毒在网络中泛滥已久,而其在局域网中也能快速繁殖,导致局域网计算机的相互感染,使整个公司网络瘫痪无法正常运做,其损失是无法估计的. 一.局域网病毒入侵原理及现象 一般来 ...

  8. 计算机网络被病毒攻击怎么办,电脑被病毒入侵了怎么办

    电脑病毒,即计算机病毒,它是一种认为制造的(有意识或无意识地)破坏计算机系统运行和破坏计算机文件的一种程序,电脑中病毒以后我们必须正确操作才能避免更大的损失,电脑被病毒入侵了怎么办呢? 1.不要重启 ...

  9. 数据泄露事件频发,病毒入侵猖獗,装上MCK就能杜绝

    随着信息化的快速发展,越来越多的企事业单位建立了自己的网站,但是随着网站的大量增加,网站安全问题也日益突出. 2017年,CNCERT监测发现境内外约2.4万个IP地址对我国境内2.9万余个网站植入后 ...

  10. ARP病毒入侵原理和解决方案

    近些天,ARP病毒入侵网络,使大多网吧及家庭都陷入苦难!!中招现象:掉线~~~~~~` 在这里我在网上到的相关资料,网络高手的研究一下~~ 解决ARP攻击的方法 [故障原因] 局域网内有人使用ARP欺 ...

最新文章

  1. 关于 Java 性能调优的 11个简单技巧,多少人知道?
  2. Python基础——PyCharm版本——第五章、循环(for、while、break、continue)
  3. GNS3 搭配 secureCRT 安装配置与使用心得
  4. chrome linux添加图标,分享|在 Linux 下体验谷歌 Material风格的GTK和图标主题Paper
  5. you are not authorized to view this page
  6. mysql foreign key_MYSQL外键(Foreign Key)的使用
  7. opencv常用函数整理(一)
  8. 在ASP中常见的错误80004005信息和解决办法
  9. 浏览器 本地html 图片不显示图片,网页图片显示不出来几种常见的解决方案
  10. Stata: 快速呈现常用分布临界值表
  11. 计算机英语第二版期末翻译试题答案,开放英语I期末翻译测试题
  12. 爬取北京市公交线路信息
  13. 产品读书.心理学《梦的解析》
  14. Spring Cloud Open Feign系列【23】OAuth2FeignRequestInterceptor、BasicAuthRequestInterceptor拦截器解析
  15. 谨防网上骗子社会工程!
  16. 删除计算机用户时拒绝访问权限,win10打开管理员账户拒绝访问怎么办
  17. 特征可视化技术(CAM)
  18. 似然函数的意义与极大似然估计
  19. 在Windows上如何安装和彻底卸载Adobe Flash Player教程
  20. 客户机操作系统已禁用cpu_CPU硬件辅助虚拟化技术

热门文章

  1. ❤️ 前端如何与后端对接?当年差点和后端同学打起来了!
  2. Android平台渗透测试套件--zANTI2.5
  3. 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)
  4. WiFi覆盖下的生活 享受便利的同时 别忘记了安全
  5. 服务器网卡不显示了,重装系统后网络适配器怎么不见了?没有网络适配器解决方法...
  6. ZZULIOJ 1138: C语言合法标识符
  7. 一句话理解:过拟合和欠拟合
  8. Semantic-UI 的词语
  9. 移动用户体验设计:iOS APP体验设计
  10. 发光环绕文字特效怎么做?教程来了