引子:
分布式系统中,如何确认一个节点是否工作正常?
如果有3副本A、B、C,并通过中心结点M来管理。其中A为主副本。
未接触过分布式的直观的处理方法是在每个副本与中心节点M中维护一个心跳,期望通过心跳是否存在而判断对方是否依旧存活。
心跳方法其实根本无法解决分布式下的这个问题。考虑如下场景:
M在某时刻未能预期收到主节点A的心跳,M认为A已经异常,于是从B、C中选取一个B作为主节点。但实际上A并未异常,而是由于网络瞬时阻塞、或是M本身出现异常使A这消息暂时未收到。这时,系统中出现A、B两个都是主节点的情况,称“双主”问题,从节点C可能同时从这两个主节点同步数据,这会引发很严重的数据错误。
因此,需要更合理的机制来判断节点是否正常工作。
主要思路有两种:一是设计能容忍双主的分布式协议,二是用lease机制。
一涉及去中心化,不讨论。
lease的原理:
lease的思想非常简单,既然中心节点需要获取目标节点是否异常的情况,同时又要考虑网络出问题等异常,那就干脆考虑各种异常情况在内,只单方面给对方一个期限,在这个期限内,我认为你是正常的,不正常也认为正常。超出这个期限,我就认为你异常了。由于网络延迟等原因,这个期限不能使用相对时间,而必须使用绝对时间。比如,1点之间,节点A就是主节点。这样就能避免双主问题。节点A为如果收到这个lease,即得到了中心节点的授权,1点前绝对只有自己是主。心跳依旧照发,只是每次中心节点都只根据lease是否有效来判断节点状况,不会出问题。
lease是一种颁发的带期限的承诺,有两方面的意义:颁发者在承诺期限内一定遵守承诺,被颁发者在承诺期限内可放心行使承诺的内容;期限过了以后,被颁发者一定不可再行使承诺。
lease与活锁
lease的颁发往往是被动的,比如A节点需要中心节点的某个承诺,比如读并缓存,则会向中心节点请求lease,中心节点回复最新可缓存的数据与一个lease,在此lease期限内,中心节点保证目标节点缓存内容与中心节点一致。
按lease方案,如果中心节点需要修改对应数据,必须等全部lease失效。问题是等lease失效的过程中,可能有新的请求元数据的请求到达,这时中心节点又会继续颁发新的lease,使得lease一直不结束,形成“活锁”,即修改请求等待lease失效,而又源源不断颁发新lease而一直无法完成。
解决活锁的办法:当有修改请求在等待着lease失效时,如果后续有读请求,则只返回请求数据而不颁发新lease,或者是只颁发目前最长的lease。
解决活锁后,修改请求仍然需要等待全部lease结束,写请求可能阻塞太久。可以在写请求到达时,中心节点主动给各节点发取消lease的消息。如果全部正确返回,则写可立即进行。如果有异常,那就正常等待lease结束。
lease的容错:
由于仅依赖于绝对时间,因此lease机制天生即可容忍网络、lease接收方的出错。
对于中心节点异常,比如宕机,只需要在颁发者恢复后,等待一个最大lease期限就可保证所有lease失效;另一方面,颁发者宕机可能使得全部节点没有lease,系统处于不可用状态,解决的方法就是使用一个小集群而不是单一节点作为颁发者。
颁发者与被颁发者之间的时钟可能也存在误差,只需要颁发者考虑时钟误差即可。
lease时间长短一般取经验值10秒。太短网络压力大,太长则收回承诺时间过长影响可用性。
应用:
GFS中,Master通过lease机制决定哪个是主副本,lease在给各节点的心跳响应消息中携带。收不到心跳时,则等待lease过期,再颁发给其他节点。
Niobe中,主副本持有从副本颁发的lease,当lease过期时,主从分别会在中心节点上标记对方不可用,而中心节点是全局一致的,两者只有一个会成功。如果主成功了,从不可用,需要重新与主同步才能可用;如果从成功了,则自己成为新主。
chubby中,paxos选主后,从节点会给主颁发lease,在期限内不选其他节点为主。另一方面,主节点给每个client节点发送lease,用于判断client死活。
zookeeper中,选主不用lease,而是直接发现没有主则选主。其余和chubby一致。
http://blog.csdn.net/mindfloating/article/details/7903219
相关推荐
- **Lease机制分析**: 租约的获取、更新和过期过程。 - **确定节点状态**: 通过租约的有效期判断节点是否存活。 - **有效期时间选择**: 如何合理设置租约的有效期。 #### 八、Quorum机制 - **约定**: 一组用于保证...
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
轻量级密码算法LBlock的FPGA优化实现.docx
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
Git 资料 progit-zh-v2.1.1.pdf
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
篮球计分器FPGA附程序..doc
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
内容概要:本文档全面介绍了Linux开发的基础知识、应用场景、环境搭建、常用命令、Shell脚本编程以及C/C++和Python开发等内容。首先阐述了Linux开发的重要性及其在服务器端开发、嵌入式开发和系统运维等领域的广泛应用。接着详细讲解了如何选择合适的Linux发行版并安装系统,配置开发环境,包括安装必要的开发工具和配置SSH服务。文档还深入讲解了Linux基础命令,如文件和目录操作、文件内容查看与编辑、进程管理和权限管理。此外,介绍了Shell脚本编程的基本语法,包括变量、条件语句、循环语句和函数定义。针对C/C++和Python开发,文档分别讲解了编译器安装、程序编写与编译、调试方法及使用虚拟环境等内容。最后,简要介绍了Linux内核开发的相关知识,包括下载编译内核、内核模块开发等,并推荐了相关学习资源。 适合人群:对Linux开发感兴趣的初学者及有一定经验的研发人员,尤其是希望深入掌握Linux开发技能的开发者。 使用场景及目标:①掌握Linux开发环境的搭建与配置;②熟悉Linux基础命令和Shell脚本编程;③学习C/C++和Python在Linux下的开发流程;④了解Linux内核开发的基本概念和技术。 阅读建议:此文档内容丰富,涵盖面广,建议读者根据自身需求选择性阅读,并结合实际操作进行练习。特别是对于初学者,应先掌握基础命令和开发环境的搭建,再逐步深入到编程语言和内核开发的学习。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
街道级行政区划shp数据,wgs84坐标系,直接使用。
内容概要:本文档《word练习题.docx》是一份详细的Word操作练习指南,涵盖了从基础到高级的各种功能。文档分为三个主要部分:内容编辑、页面布局和高效文档。内容编辑部分包括文本格式化、段落设置、项目编号、制表位、边框与底纹等练习;页面布局部分涉及分节符、分栏、页眉页脚、水印等设置;高效文档部分则聚焦于样式管理、导航窗格、题注、书签、超级链接、脚注与尾注、交叉引用等功能。每个练习都有具体的操作步骤,帮助用户掌握Word的各种实用技巧。 适合人群:适用于Word初学者及希望提高Word技能的中级用户,尤其是需要频繁使用Word进行文档编辑和排版的办公人员。 使用场景及目标:①帮助用户熟悉Word的基本操作,如文本编辑、格式设置等;②提升用户的文档排版能力,学会设置复杂的页面布局;③提高工作效率,掌握高效文档管理技巧,如样式应用、题注和交叉引用等。 其他说明:此文档不仅提供了具体的练习题目,还附带了详细的步骤说明,用户可以根据指引逐步完成每个练习。此外,文档中的一些练习涉及到智能文档和Office智能客户端的应用,有助于用户了解Word在企业级应用中的潜力。建议用户按照章节顺序逐步学习,实践每一个练习,以达到最佳的学习效果。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
全球腐败感知数据(2000-2023)——3000行 33个指标 关于数据集 该数据集包含3000行和33列,涵盖了2000年至2023年的腐败感知指数(CPI)数据和各种治理指标。它包括国家排名、分数和其他指标,如公共部门腐败、司法腐败、贿赂指数、商业道德、民主指数、法治、政府效率、经济指标和人类发展指数。 这些数据可用于: 腐败趋势分析 腐败对GDP、人类发展指数和治理的影响 跨国比较 数据可视化和机器学习模型 该数据集对研究人员、数据分析师、政策制定者和对研究全球腐败趋势非常有用。
毕业设计(论文) 基于FPGA的数字频率计设计.doc
街道级行政区划shp数据,wgs84坐标系,直接使用。
NTI1NDU3NTAyODMwOTQxMzI0M18xNzQ0Nzk1MTk1OTgz_6.JPG