PacificA是微软的在基于log的分布式存储系统中的复制技术。
由于配置管理器维护着当前配置的真实情况,因此主节点不必保持不变。
这是因为配置的本地视图在不同服务器上是不必同步的。
特别是,我们必须避免这样的情况,一个老主节点和一个新主节点都在同一时间处理查询-老主节点可能没有意识到一个重配置信息已经被新主节点创建,并且已将它从配置中移除。由于新主节点可以处理新的更新,老主节点可能还在处理过期状态的查询,因此这样就违反了强一致性。 
我们的方案是使用租约。通过周期性发送标灯的方式,主节点从每一个从节点那里请求一个租约,在发送标灯后等待确认。
如果从最后一个确认标灯发送的时间开始,一个指定的租约期限已过,主节点就认为租约过期。
当从节点上的任何租约过期时,主节点不再认为自己是一个主节点,并且停止所有查询或更新处理。
这种情况下,主节点会联系配置管理器从当前配置中移除从节点。只要发送者仍然保留主节点在当前配置中,从节点就认为标灯有效。
如果从主节点收到最后一个标灯开始的宽限周期已过,从节点认为对主节点的租约已过期,并将联系配置管理器去移除当前主节点,并把自己变成一个新主节点。
假设没有时钟偏差,只要宽限周期相同于或者大于租约周期,那么主节点上的租约会在从节点上处理之前被裁定为过期。
从节点会先假设配置发生改变,如果仅且如果它的租约对老主节点过期时,从节点会尝试扮演主节点的角色。
因此在新主节点被确定前,老主节点就已经被重新分配,于是主节点依旧保持不变。 
我们使用租约机制作为失效检测机制。类似的失败检测机制被用于其他系统当中,如GFS,Boxwood和Bigtable/Chubby。
这里的关键的不同点是在这些系统当中租约是从中心实体获取的。而在我们的情景里,用于失效检测的监控总是处于两个服务器之间,由于数据处理在彼此之间已经存在:当处理更新的时候主节点与从节点们通讯;标灯与确认消息同样也是介于主节点与从节点之间。以这种方式,失效检测能够准确的捕获用于复制的通信通道的状态。
当通信通道繁忙的时候,数据处理消息也可以自行处理就像标灯与确认消息一样。 只有在通信通道空闲的时候,实际的标灯与确认消息才会被发送,从而可以最小化失败检测的开销。进一步来讲,在中心化的实现当中要考虑负载消除与对中心实体的依赖。负载是很明显的,因为标灯与确认消息总是定期的在系统中的中心实体和每一个服务器间交换;交换的时间间隔必须相当小,才能保证快速的失效检测。在中心化方案中,中心实体的不可用(如由于网络分区)会导致整个系统的不可用,因为当中心实体丢失租约信息时,所有的主节点不得不进行重新分配。

PacificA中的租约与失效检测解读的更多相关文章

  1. 关于iOS开发中info.plist文件的解读

    我们建立一个工程后,会在Supporting files下面看到一个"工程名-Info.plist"的文件,这个是对工程做一些运行期配置的文件,很重要,不能删除.  下面就对其ke ...

  2. cocos2dx 中触摸事件分发一些解读

    触摸事件分发中几个代码解读: 怎么说呢,感觉cocos2dx中的消息分发机制,相对于android中触摸事件分发机制要简单的多.因为android中要做区域判断,过滤器,以及父子组件分发给谁等等的逻辑 ...

  3. 关于Struts2中 Action 配置method的解读

    为Action配置method属性: 将Action类中的每一个处理方法都定义成一个逻辑Action方法. <!DOCTYPE struts PUBLIC "-//Apache Sof ...

  4. 9. spring项目中web.xml详解解读

    引言:本篇博客的内容大部分都来自网上,有的是直接copy,有的是自己整理而来.既然网上已经有了,为啥还有自己copy呢? 感觉是因为网上的东西太散了或者是样式不够美观,所以自己又copy了一遍.如有侵 ...

  5. Unity中UGUI之Canvas属性解读版本二

    Canvas Render Modes(渲染模式) 1.在screen空间中渲染2.在world空间中渲染 Screen Space-Overlay 在这个渲染模式中,UI元素将在场景的上面.如果场景 ...

  6. Unity中UGUI之Canvas属性解读版本一

    Canvas的基本属性 1.Canvas Scaler组件 : Canvas Scaler组件用于设置处于不同组件下Canvas画布中的元素的缩放模式. Ui Scaler Mode : 设置UI的缩 ...

  7. linux系统中/etc/syslog.conf文件解读

    1: syslog.conf的介绍 对于不同类型的Unix,标准UnixLog系统的设置,实际上除了一些关键词的不同,系统的syslog.conf格式是相同的.syslog采用可配置的.统一的系统登记 ...

  8. Jwt在javaweb项目中的应用核心步骤解读

    1.引入jwt依赖 <!--引入JWT依赖,由于是基于Java,所以需要的是java-jwt--> <dependency> <groupId>io.jsonweb ...

  9. javascript组件封装中一段通用代码解读

    有图有真相,先上图. 相信很多想去研究源码的小伙伴一定被这段代码给吓着了把,直接就打消了往下看下去的想法.我刚开始看的时候也是有点一头雾水,这是什么东东这么长,但是慢慢分析你就会发现其中的奥秘,且听我 ...

随机推荐

  1. Hammer.js分析(二)——manager.js

    “Manager”是所有识别器实例的容器,它为你设置的元素安装了交互事件监听器,并设置了触摸事件特性. manager.js中的代码会涉及到input.js和recoginzer.js中的内容,这里会 ...

  2. Java 图的遍历-LeetCode200

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  3. 1Z0-053 争议题目解析681

    1Z0-053 争议题目解析681 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 681.The environmental variable ORACLE-BASE is set ...

  4. hibernate笔记--组件映射方法

    假设我们需要保存学生student的信息,student中有一个address属性,我们知道像这种信息其值可能会有多个,就像一个人会有两个以上的手机号,这种情况在hibernate中应该这样配置: 新 ...

  5. Kooboo CMS 无聊随笔(2)

    上次写了一篇博客 http://www.cnblogs.com/kmsfan/p/Kooboo_CMS_suibi.html 作为这个系列的开篇,简单的介绍了一下Kooboo CMS的一些基本情况和界 ...

  6. Nodejs之MEAN栈开发(四)---- form验证及图片上传

    这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能.开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R ...

  7. 分离与继承的思想实现图片上传后的预览功能:ImageUploadView

    本文要介绍的是网页中常见的图片上传后直接在页面生成小图预览的实现思路,考虑到该功能有一定的适用性,于是把相关的逻辑封装成了一个ImageUploadView组件,实际使用效果可查看下一段的git效果图 ...

  8. Buff系统设计

    我就随便一写,你也就随便一看吧.   什么是BUFF?   或许直接回答这个问题,那么你收获到的答案将是五花八门的.这个问题暂时放下不谈,我们可以去看其他的游戏应该是怎么设计的. 我经常玩的游戏里边B ...

  9. 体验VS2015 Update 2 的 Android 和 Python

    趁着假期不用加班,又遇到build 2016的劲爆消息--Xamarin免费集成到VS中 所以立马把vs升级到update 2体验一下下(之前也体验过). 在安装的时候也是只勾选了部分,不需要太多(全 ...

  10. 初入网络系列笔记(3)HTTP协议最简单的掌握

    一.借鉴说明,本博文借鉴以下博文 1.starok,HTTP必知必会,http://www.cnblogs.com/starstone/p/4890409.html 2.CareySon,HTTP协议 ...