Cocklebur集群的工作原理

  在集群正常工作时,整个集群只会有一个Leader,其他都是Follower。Client可以注册到某个Follower,当然也可以注册到Leader,为了减轻Leader压力,一般要选择注册到Follower。读操作直接向Follower请求数据,而写数据则直接向Leader提交请求(在Client注册到Follower时已经得知当前的Leader的地址信息并缓存在Client本地,如果Client提交写操作时发现目标主机已经不是Leader则将重新向Follower询问Leader地址)。这种状态下的集群,Leader和Follower的状态(维护的数据)满足最终一致性,而Leader拥有最新数据。

图一、Cocklebur对外服务示意图

  注意,由于最终一致性可能会导致Follower的数据更新延迟,对于整个集群来说,读数据时必然是延迟的,但是写数据时Leader是必经之路,Leader可以保证数据永远都是最新的。所以写当一个Client读到延迟信息时发出特定目的写操作时可能会失败,但最终集群的数据一定不会发生错误。

  这就好像是你明明看到一个空的座位(读取数据),当你要去坐的时候发现已经有人做了(尝试要写数据时,因为坐位子相当于是改变了座位的状态)。这实际上对于座位来说并没有什么不合适的,因为谁先来的就应该是谁坐,而不是谁先看到就谁坐,因为看到并不算改变了它的状态。所以通过这个例子,你可以想想分布式锁的场景。

Cocklebur主要功能模块

而从cocklebur总体设计来看,其主要功能模块如下图所示:

图二、Cocklebur基础功能模块

  除了Thrift RPC序列化框架是第三方库之外,其他cocklebur不依赖其他库。而负责通信这部分属于十分基础的技术,故不详细介绍。另外大家可以看到,cocklebur并没有实现ACL(访问控制列表,访问权限相关),其实ACL可以在数据操作模块完成,本人时间有限所以就没有实现ACL。之后的博客也主要围绕上面四块展开,介绍完功能模块设计,就开始介绍一些主要的控制流程。

  类Paxos选举算法:目前Paxos的工程实现都不是Paxos原版,都是在其基础上进行了化简和改变。这样有助于节约带宽、化简设计等等。该部分主要功能就是负责集群启动选举Leader,以及当集群不构成集群对外服务条件时进行重新选举。最终目的就是尽可能让集群最快的对外服务。那么什么是集群对外服务条件呢?那就是当前有Leader且Leader与其领导的Followers能够组成一个多数派(超过集群节点半数)。

  DataTree目录结构:内存版的文件系统或者指的是一个数据结构。分布式锁以及名字空间、共享文件就是通过这样的数据结构去实现的。其实这个数据结构并不是很难理解,因为Tree这种结构很擅长去组织层次化的东西,正如xml,json,文件目录那样应用广泛。

  日志快照系统:用于为每个节点容灾考虑设计,事实上光写日志就可以保证容灾,快照是为了更快的去恢复当前内存状态,就像你玩游戏的检查点(check point),下次开机玩就不用从第一关开始了。

  数据操作的Client/Server:一方面集群要对外服务,提供Client和Server。另一方面,集群节点之间内部同步数据时也需要使用这些组件。另外注册-通知机制(观察者模式)也是这部分实现的。

【分布式协调器】Paxos的工程实现-cocklebur简介(二)的更多相关文章

  1. 【分布式协调器】Paxos的工程实现-cocklebur简介(一)

    初识分布式协调器 分布式协调器的“协调”二字让人摸不到头脑,怎么就协调了,用的着协调吗?实际上这个东西在之前就是为了提供分布式锁服务而设计的,伟大的google公司发明了chubby,雅虎随后也推出了 ...

  2. 中小研发团队架构实践之分布式协调器.Net版ZooKeeper

    原文:中小研发团队架构实践之分布式协调器.Net版ZooKeeper 一.ZooKeeper是什么  Apache ZooKeeper是由Apache Hadoop的子项目发展而来,于2010年11月 ...

  3. 中小研发团队架构实践之分布式协调器ZooKeeper

    一.ZooKeeper是什么  Apache ZooKeeper是由Apache Hadoop的子项目发展而来,于2010年11月正式成为了Apache的顶级项目. ZooKeeper是一个开放源代码 ...

  4. 【分布式协调器】Paxos的工程实现-cocklebur选举

    其实整个项目中一个最主要的看点就是选举算法,而这部分也是逻辑最复杂最难理解的部分.不同的实现在不同的场景下的策略也不尽相同,而且场景非常之多.接下来我们一起来看一下Cocklebur的实现思路. 一个 ...

  5. 【分布式协调器】Paxos的工程实现-Cocklebur状态转移

    集群中的主机经过选举过程由Looking状态变为了Leadering或Following状态.而这些状态之间转移的条件是什么呢?先来个直观的,上状态图. 图 4.1 Cocklebur选举过程中的状态 ...

  6. 中小型研发团队架构实践:分布式协调服务ZooKeeper

    一.ZooKeeper 是什么 Apache ZooKeeper 由 Apache Hadoop 的子项目发展而来,于 2010 年 11 月正式成为了 Apache 的顶级项目. 相关厂商内容 优秀 ...

  7. 【分布式协调】之理解paxos

    感叹一下 不得不说近几年国内软件行业发生了巨大的变化,之前几乎所有应用都围绕桌面展开,而近几年很多让人神魂颠倒的关键词一个接一个的映入眼帘:web2.0.移动应用.云计算.大数据.互联网的浪潮一波接着 ...

  8. SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

    原文:SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC) 在可更新订阅中,在订阅设置更新方法,将 "排队更新" 设置为 " ...

  9. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

随机推荐

  1. 海量IT资料 + 各种平台下的Oracle安装文件 + 公开课录像 + 各种视频教程资料

    觉得老师的公开课讲的都挺好的,这里把我录的一些公开课视频分享给大家,都用的是<屏幕录像专家>来录制的,是lxe格式的,大家用这个软件来播放就可以了,后边的公开课录像文件也会慢慢添加进去的, ...

  2. iOS Build Active Architecture Only 属性的理解(及 not found for architecture i386 的解决方案)

    最近做项目过程遇到一个问题: 涉及到这个属性:Build Active Architecture Only Yes .No的区别: 设置为yes,是只编译当前的architecture版本,是为了编译 ...

  3. gFTP的安装与使用

    gFTP是X Window下的一个用Gtk开发的多线程FTP客户端工具,它与Microsoft Windows下运行的CuteFTP等FTP工具极为类似.本文介绍了gFTP的编译.安装.启动及使用方法 ...

  4. android apk 防止反编译技术第四篇-对抗JD-GUI

    又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊.好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法.前三篇我们讲了加壳技术(http://my.oschina.net ...

  5. JavaScript继承方式详解[转]

    js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于对象的,它没有类的概念.所以,要想实现 ...

  6. finereport普通报表的移动端自适应方案

    移动端报表呈现,首先要求的是页面随手机屏幕大小自动放缩(自适应),下面给出一个普通报表中的finereport移动端自适应方案,适用于finereport 7.1之前的版本. 首先,了解一下当前我们可 ...

  7. [转]jqGrid 属性、事件全集

    本文转自:http://blog.csdn.net/rosanu_blog/article/details/8334070 以下是jqGrid 最常用的属性和事件,经过一段时间的整理,终于弄的差不多了 ...

  8. 将域名从GODADDY转移到namesilo

    1.首先登陆Godaddy的网站http://www.godaddy.com,登陆到后台控制面板,选择要转移的域名 如图所示,进入域名控制面板 2.对域名进行解锁,如果不进行解锁的话,域名是无法进行转 ...

  9. (一)观察者模式-C++实现

    观察者模式: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并被自动更新. 它有四种角色: 主题(Subject):一个接口,规定了具体主题需要实现的方法. ...

  10. HDU 5130 Signal Interference --计算几何,多边形与圆的交面积

    题意: 求所有满足PB <= k*PA 的P所在区域与多边形的交面积. 解法: 2014广州赛区的银牌题,当时竟然没发现是圆,然后就没做出来,然后就gg了. 圆的一般式方程: 设A(x1,y1) ...