背景:
在分布式中,最难解决的一个问题就是多个节点间数据同步问题。为了解决这样的问题,涌现出了各种奇思妙想。只有在解决了如何进行信息同步的基础之上才衍生出形形色色的应用。这里开始介绍几种分布式通信协议。

简单即有效——totem协议:
totem协议也许你还比较陌生,但是corosync就是totem协议的一个开源实现。比较火的HA软件pacemaker就是基于corosync来提供各种服务的。说起totem协议,最简单的形象就是,他将多个节点组成一个令牌环。多个节点手拉手形成一个圈,大家依次的传递token。只有获取到token的节点才有发送消息的权利。简单有效的解决了在分布式系统中各个节点的同步问题,因为只有一个节点会在一个时刻发送消息,不会出现冲突。当然,如果有节点发生意外时,令牌环就会断掉,此时大家不能够通信,而是重新组建出一个新的令牌环。

进化的二段提交——paxos协议:
说起paxos,需要稍微提提二段提交。简单来说,二阶段提交就是1.一个节点询问其他节点,我是不是可以进行消息提交。2.如果收到所有人的同意,则告诉大家,开始提交吧。这个协议在实际中并不能很好的解决分布式中信息同步问题。例如只要有节点失效,就会发生得不到所有人同意的结果,在超时后,这一次提交失败,等一系列问题。但是paxos在对二段提交进行了优化后,得到了一个比较好的解决办法。
paxos协议引入了多数派,以及消息编号的概念。在1准备时,询问2/n+1的参与者,要求他们保证不会接受小于编号n的提交。
2.如果得到了2/n+1的回复,则可以开始告诉2/n+1的参与者进行消息的提交。
可以明显的看出,这就是对二段提交的一个优化版。就是这么一个比较巧妙的思想,解决了一些二阶段提交带来的问题。
顺便说一句,这个协议的作者Leslie Lamport。他刚刚获得2013年图灵奖。
奇思妙想——gossip协议:
gossip协议是一个神奇的协议。它常用于P2P的通信协议,这个协议就是模拟人类中传播谣言的行为而来。简单的描述下这个协议,首先要传播谣言就要有种子节点。种子节点每秒都会随机向其他节点发送自己所拥有的节点列表,以及需要传播的消息。任何新加入的节点,就在这种传播方式下很快地被全网所知道。这个协议的神奇就在于它从设计开始就没想到信息一定要传递给所有的节点,但是随着时间的增长,在最终的某一时刻,全网会得到相同的信息。当然这个时刻可能仅仅存在于理论,永远不可达。

基础协议的对比:
简单的介绍了这几种协议,下面我们来看看他们的对比:

最新文章

  1. mysql批量替换单字段
  2. 升级ruby后再安装cocodPod
  3. Nginx:Pitfalls and Common Mistakes
  4. 新浪微博客户端(47)-在TextView中插入表情
  5. String的类型的数据
  6. Oracle中创建用户和授权
  7. MIFARE系列5《存储结构》
  8. Python基础 字符串的魔法
  9. 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)
  10. maven 如何解决因本地jar导致的编译错误
  11. ios registerNib: and registerClass:
  12. Android开发UI之个性化控件之Menu
  13. I2C的主机从机模拟
  14. swift的struct本节描述结构的类型
  15. Modernizr
  16. Jquery和Javascript对象之间的转换
  17. <CentOS7>如何设置hostname
  18. Vue 爬坑之路(十一)—— 基于 Nuxt.js 实现服务端渲染(SSR)
  19. Perl IO:随机读写文件
  20. zabbix源码安装 令人窒息的操作

热门文章

  1. inner join 与 left join 之间的区别
  2. Elasticsearch笔记四之配置参数与核心概念
  3. 【bzoj1941】【Sdoi2010】Hide and Seek
  4. Spring mvc 下载文件处理
  5. java 日期类 小结
  6. 最详细的div边距合并的问题和解决方法
  7. SQL Server 容易忽略的错误
  8. pods "xxx" is forbidden: SecurityContext.RunAsUser is forbidden
  9. Python爬虫入门教程 60-100 python识别验证码,阿里、腾讯、百度、聚合数据等大公司都这么干
  10. 基于Win10极简SonarQube C#代码质量分析