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. MVC的基类

    设计一个验证用户身份是否登陆的基类BaseController /// <summary> /// 所有需要进行登录控制的控制器基类 /// </summary> public ...

  2. DIB位图(Bitmap)的读取和保存

    设备无关位图(Device Independent Bitmap)是可以保存在磁盘的位图文件,可以从磁盘读取到内存或者从内存保存到磁盘上.它的文件结构是标准化的,可以在Windows/Linux/Un ...

  3. java中List对象列表去重或取出以及排序

    面试碰到几次list的去重和排序.下面介绍一种做法: 1. list去重 1.1 实体类Student List<Student>容量10k以上,要求去重复.这里Student的重复标准是 ...

  4. Not a git repository (or any of the parent directories): .git

    今天准备在win10上面安装git,想把代码发布到github中,按照教程的方法一步一步下来,当配置完ssh和用户名,邮箱之后,发现下拉不下来github中的代码,出现如下错误. 说是没有发现仓储,很 ...

  5. C#编程总结--总目录

    C#编程总结--总目录 多年的C#实战经历,希望通过一个系列课程对C#编程做系统总结. 总结过去,展望未来.新的一年,新的征程,新的开始! 希望我们在2014梦想成真,马到成功! 1.C#编程总结(一 ...

  6. PHP 检测机器人,屏蔽内页

    PHP 检测机器人,屏蔽内页 <?php // SpiderHelper::rewrite301(); // SpiderHelper::showRobotTxt(); class Spider ...

  7. 【Java每日一题】20161215

    package Dec2016; public class Ques1215 { static final int num1 = 2; static final int num2 = 3; stati ...

  8. luogg_java学习_09_泛型_集合

    这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 泛型 泛型介绍 1).类内部的属性的类型可以由外部决定: 2) ...

  9. 03-树1 树的同构 (C语言链表实现)

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h& ...

  10. java web学习总结(十) -------------------HttpServletRequest对象

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...