Goosip 协议的信息传播和扩散通常需要由种子节点发起。整个传播过程可能需要一定的时间,由于不能保证某个时刻所有节点都收到消息,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议。

Gossip协议是一个多主协议,所有写操作可以由不同节点发起,并且同步给其他副本。Gossip内组成的网络节点都是对等节点,是非结构化网络。

消息类型

=======================================================================

Gossip 协议的消息传播方式有两种:Anti-Entropy(反熵传播)和Rumor-Mongering(谣言传播)。

反熵传播是以固定的概率传播所有的数据。所有参与节点只有两种状态:Suspective(病原)、Infective(感染)。这种节点状态又叫做simple epidemics(SI model)。过程是种子节点会把所有的数据都跟其他节点共享,以便消除节点之间数据的任何不一致,它可以保证最终、完全的一致。缺点是消息数量非常庞大,且无限制;通常只用于新加入节点的数据初始化。

谣言传播是以固定的概率仅传播新到达的数据。所有参与节点有三种状态:Suspective(病原)、Infective(感染)、Removed(愈除)。这种节点状态又叫做complex epidemics(SIR model)。过程是消息只包含最新 update,谣言消息在某个时间点之后会被标记为 removed,并且不再被传播。缺点是系统有一定的概率会不一致,通常用于节点间数据增量同步。

通信方式

=======================================================================

Gossip 协议最终目的是将数据分发到网络中的每一个节点。根据不同的具体应用场景,网络中两个节点之间存在三种通信方式:推送模式、拉取模式、Push/Pull。

  • Push: 节点 A 将数据 (key,value,version) 及对应的版本号推送给 B 节点,B 节点更新 A 中比自己新的数据

  • Pull:A 仅将数据 key, version 推送给 B,B 将本地比 A 新的数据(Key, value, version)推送给 A,A 更新本地

  • Push/Pull:与 Pull 类似,只是多了一步,A 再将本地比 B 新的数据推送给 B,B 则更新本地

如果把两个节点数据同步一次定义为一个周期,则在一个周期内,Push 需通信 1 次,Pull 需 2 次,Push/Pull 则需 3 次。虽然消息数增加了,但从效果上来讲,Push/Pull 最好,理论上一个周期内可以使两个节点完全一致。直观上,Push/Pull 的收敛速度也是最快的。

总结

=====================================================================

综上所述,我们可以得出Gossip是一种去中心化的分布式协议,数据通过节点像病毒一样逐个传播。因为是指数级传播,整体传播速度非常快,很像现在美国失控的2019-nCoV(新冠)一样。它具备以下优势:

  • 扩展性:允许节点的任意增加和减少,新增节点的状态 最终会与其他节点一致。

  • 容错:任意节点的宕机和重启都不会影响 Gossip 消息的传播,具有天然的分布式系统容错特性。

  • 去中心化:无需中心节点,所有节点都是对等的,任意节点无需知道整个网络状况,只要网络连通,任意节点可把消息散播到全网。

  • 一致性收敛:消息会以“一传十的指数级速度”在网络中传播,因此系统状态的不一致可以在很快的时间内收敛到一致。消息传播速度达到了 logN。

  • 简单

    同样也存在以下缺点:

  • 消息延迟:节点随机向少数几个节点发送消息,消息最终是通过多个轮次的散播而到达全网;不可避免的造成消息延迟。

  • 消息冗余:节点定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤;不可避免的引起同一节点消息多次接收,增加消息处理压力。

Gossip协议由于以上的优缺点,所以适合于AP场景的数据一致性处理,常见应用有:P2P网络通信、Apache Cassandra、Redis Cluster、Consul。

读者福利


感谢你看到了这里!

我这边整理很多2021最新Java面试题(含答案)和Java学习笔记,如下图

总结

面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。

我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

下面我就把我整理的面试资料分享给有需要的读者朋友——戳这里免费获取

面试题及解析总结

大厂面试场景

知识点总结

[外链图片转存中…(img-QKHC64hF-1628614893482)]

大厂面试场景

[外链图片转存中…(img-VkyoSER1-1628614893485)]

知识点总结

分布式架构,Java高级工程师必看系列相关推荐

  1. Java高级工程师必看系列,从基础到源码统统帮你搞定

    1.Java基础 Java基础务必要有一个非常牢固的根基,尤其是对于JVM和并发编程的掌握情况**(属于进阶内容,但也是Java最为重要的基础内容)**,不论是面试还是工作,基础不好,写不出高质量.漂 ...

  2. Java高级工程师必看系列,已拿到offer

    1.为什么要使用分布式锁 使用分布式锁的目的,无外乎就是保证同一时间只有一个客户端可以对共享资源进行操作. 1.1举一个很长的例子 系统 A 是一个电商系统,目前是一台机器部署,系统中有一个用户下订单 ...

  3. Java高级工程师必看系列,面试真题解析

    前言 今年因为这个疫情,感觉这是从工作以来过的最久的一个年了,在家呆的时间不是一般的久,算一算有好几个月呢!我大概是3月底快4月了才出门,投了超多的简历,天天面试面试面试面试面试面试面试-庆幸的是还是 ...

  4. 安卓开发入门教程!Android高级工程师必看系列,赶紧收藏!

    前言 Android开发前几年火爆一时,市场饱和后Android程序员每一名程序员都想成为架构师,但这期间,需要付出的辛苦和努力远超过我们的想象. 我对Android工程师的调研发现:97% 的And ...

  5. 安卓开发贴吧!Android高级工程师必看系列,建议收藏

    缘起 经过近十年的发展,Android技术优化日新月异,如今Android 10.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS.到了各大厂商手里,改源码.自定义系统, ...

  6. android中高级面试题,Android高级工程师必看系列

    1.写在前面 本人目前就读于华南理工软件工程专业大四,2021年春季招聘拿了腾讯.CVTE.华为.YY等公司的实习offer,在腾讯深圳实习,已拿到转正offer,只投了阿里和华为两家公司,运气较好, ...

  7. Java常见面试题 Java面试必看 (二)

    Java常见面试题 Java面试必看 (一) 十一.Spring Boot/Spring Cloud 104.什么是 spring boot? Spring Boot 是由 Pivotal 团队提供的 ...

  8. 视频教程-Java工程师必学系列课程之4--《Java Swing》视频课程-Java

    Java工程师必学系列课程之4--<Java Swing>视频课程 某知名科技公司技术总监,10年以上大型J2EE项目的实战研发经验,参与并主持开发"内蒙古电力集团考试系统&qu ...

  9. 新基建必看系列——一文看懂爆火的智慧灯杆未来趋势及竞争格局

    新基建必看系列--一文看懂爆火的智慧灯杆未来趋势及竞争格局 智慧灯杆是集照明.视频监控.交通管理.环境监测.通信等多功能于一体的新型信息基础设施,由基础设施及杆体,照明设施,交通.视频监控等其他杆载设 ...

  10. Java常见面试题 Java面试必看 (一)

    本篇博客是本人收集网上Java相关的资料整理所得,仅供参考. 一.Java基础 1.JDK 和 JRE区别 JDK(Java Development Kit)是针对Java开发员的产品,是整个Java ...

最新文章

  1. 雷鸣----总结下男人30岁之前要知道的事
  2. 05-JDBC学习手册:JDBC2.0 新特性之批量处理数据
  3. Amazon S3和Swift鉴权机制分析
  4. ​Redis分布式锁,你真的用对了吗?
  5. 事件机制(事件冒泡与事件捕获)
  6. centos6.5 安装hadoop1.2.1亲测版
  7. 飞书成小米数万员工协作工具,雷军:越用越顺手
  8. js双通信java,js和java的http通信
  9. 搭建Hadoop开发环境(全过程)
  10. css实现背景图片透明内容不透明
  11. 返回短语的缩写python_邮件缩写短语
  12. Linux 查看显卡型号
  13. java图片的放大与缩小
  14. vue移动端下拉刷新组件、上拉加载组件
  15. 中小水库中的水情遥测系统如何实现远程监控和自动报警?
  16. Python教程:函数多个返回值与丢弃返回值
  17. 学会了这个配音方法,我的视频居然成了热门爆款
  18. menuconfig的执行过程
  19. 广域网优化的技术实现和展望
  20. Access学习要点2----Access2010中如何运行SQL执行SQL语句

热门文章

  1. 根据汉字自动生成拼音
  2. win10分辨率设置_电脑显示器分辨率超频教程:1080P超2K分辨率的方法
  3. UiPath常用元素识别
  4. python语言程序设计基础笔记(三)计算机思维
  5. excel如何把顺序倒过来_excel表格数据前后顺序颠倒-求助:怎样使excel的数据顺序倒过来...
  6. SQL Server中自定义函数:用指定的分隔符号分割字符串
  7. 大数据处理技术与人工智能技术
  8. BUUCTF之随便注
  9. css+html实现时间轴
  10. EasyExcel 实现冻结行和列