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. EntityFramework 7 Join Count LongCount 奇怪问题

    先吐槽一下,EF7 目前来说,真对的起现在的版本命名:"EntityFramework": "7.0.0-beta1". 这篇博文纪录一下:当 Linq 查询中 ...

  2. geotrellis使用(二十一)自动导入数据

    目录 前言 整体介绍 前台界面 后台控制 总结 一.前言        之前Geotrellis数据导入集群采用的是命令行的方式,即通过命令行提交spark任务来ingest数据,待数据导入完毕再启动 ...

  3. 学习总结之 WebApi 用户登录和匿名登录,及权限验证

    近些天,看了一些博客园大牛关于webApi项目的的文章,也有请教师兄一些问题,自己做了个Demo试了试,收获甚多.感谢感谢,下面是我一些学习的总结,如若有错的地方请多多指教!! WebApi登陆与身份 ...

  4. C++ 与 php 的交互 之----- C++ 获取 网页文字内容,获取 php 的 echo 值。

    转载请声明出处! http://www.cnblogs.com/linguanh/category/633252.html 距离上次 谈 C++ 制作json 或者其他数据传送给 服务器,时隔两个多月 ...

  5. EXP/IMP迁移案例,IMP遭遇导入表的表空间归属问题

    生产环境: 源数据库:Windows Server + Oracle 11.2.0.1 目标数据库:SunOS + Oracle 11.2.0.3 1.确认迁移需求:源数据库cssf 用户所有表和数据 ...

  6. 重温Servlet学习笔记--session对象

    session的类型是属于HttpSession,HttpSession是由javaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端. HttpSession是servle ...

  7. 重温JSP学习笔记--El函数库

    EL函数库(由JSTL提供的) * 导入标签库:<%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/f ...

  8. linux 安装 nginx 及反向代理配置

    Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,以下为Linux centos平台下安装nginx并配置反向代理的过程(采用源码安装的方式) 一:安装 ...

  9. CSS魔法堂:小结一下Box Model与Positioning Scheme

    前言  对于Box Model和Positioning Scheme中3种定位模式的细节,已经通过以下几篇文章记录了我对其的理解和思考.  <CSS魔法堂:重新认识Box Model.IFC.B ...

  10. Final Cut Pro X效果插件开发总结

    一.介绍 最近公司需要针对Final Cut Pro(FCP)开发一款效果插件,用于对公司自己开发的视频格式进行后期处理.Final Cut Pro是苹果公司推出的一款视频剪辑软件,因此需要在OSX平 ...