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 DbContext 线程安全

    先看这一段异常信息: A second operation started on this context before a previous asynchronous operation compl ...

  2. Yii2的深入学习--事件Event

    我们先来看下事件在 Yii2 中的使用,如下内容摘自 Yii2中文文档 事件可以将自定义代码“注入”到现有代码中的特定执行点.附加自定义代码到某个事件,当这个事件被触发时,这些代码就会自动执行.例如, ...

  3. Thymeleaf 模板的使用

    Thymeleaf是现代化服务器端的Java模板引擎,不同与JSP和FreeMarker,Thymeleaf的语法更加接近HTML,并且也有不错的扩展性.详细资料可以浏览官网.本文主要介绍Thymel ...

  4. 图片每天换及纯css3手风琴特效

    <a target="_blank" id="a"><img id="img" /></a> <s ...

  5. 机器学习 1 linear regression 作业(二)

    这个线性回归的作业需要上传到https://inclass.kaggle.com/c/ml2016-pm2-5-prediction 上面,这是一个kaggle比赛的网站.第一次接触听说这个东西,恰好 ...

  6. SOA、ESB、NServiceBus、云计算 总结

    SOA SOA 是通过功能组件化.服务化,来实现系统集成.解决信息孤岛,这是其主要目标.而更进一步则是实现更快响应业务的变化.更快推出新的应用系统.与此同时,SOA 还实现了整合资源,资源复用. SO ...

  7. 趣味python编程之经典俄罗斯方块

    国庆期间闲不住,用python把经典俄罗斯方块实现了一遍,找到了些儿时的乐趣.因此突发奇想,打算用python写点经典又确实有趣的小程序形成系列.正统编程之余也给自己找点儿乐趣,换个角度写程序. 原计 ...

  8. C#中AppDomain.CurrentDomain.BaseDirectory及各种路径获取方法

    // 获取程序的基目录.System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径,包含文件名System.Diagnostics.Proces ...

  9. Lind.DDD.Repositories.Redis层介绍

    回到目录 之前已经发生了 大叔之前介绍过关于redis的文章,有缓存,队列,分布式pub/sub,数据集缓存以及仓储redis的实现等等,而今天在Lind.DDD的持久化组件里,redis当然也有一席 ...

  10. Idea开发环境中搭建Maven并且使用Maven打包部署程序

    1.配置Maven的环境变量 a.首先我们去maven官网下载Maven程序,解压到安装目录,如图所示: b.配置M2_HOME的环境变量,然后将该变量添加到Path中 备注:必须要有JAVA_HOM ...