分布式协同是分布式应用中不可缺少的,通常担任协调者的角色,或者说是将多机协同的职责从分布式应用中独立出来,以减少系统的耦合性和增强扩充性。Apache的Zookeeper, google的Chubby都是分布式协同的实现者。
fourinone实际上可以单独当做Zookeeper用,它使用最少的代码实现了Zookeeper的所有功能,并且力图做到功能更强但是使用更简洁。
一、实现原理
fourinone对分布式协同的实现, 是通过建立一个domain,node两层结构的节点信息去完成,domain可以是分类或者包,node可以是具体属性,domain和node都是自己根据需求设计命名,比如可以将domain命名为“a.b.c...”表示一个树型类目。
一个domain下可以有很多个node,每个node只指定一个domain,可以通过domain返回它下面所有的node。
domain不需要单独建立,通常在建立node时,如果不存在domain会自动创建。
如果domain下没有node了,该domain会自动删除。
如果删除domain,该domain下面node也都会删除。
每个node下可以存放一个值,可以是任意对象。
所有的节点信息存放在parkserver里,parkserver提供协同者的功能。如下图所示:
从上图可以看到,其他分布式进程可以通过parkserver的用户接口ParkLocal,对节点进行增加、修改、删除、指定心跳、指定权限等操作,并且结合parkserver提供同步备份、领导者选举、过期时间设置等功能,共同来实现众多分布式协同功能,比如:
1、分布式配置,多个机器的应用公用一个配置信息,并且挂掉能够领导者选举,详细见
指南和demo
2、分布式锁,多个机器竞争一个锁,当某个机器释放锁或者挂掉,其他机器可以竞争到锁继续,详细见
指南和demo
3、集群管理,集群内机器可以互相感知和领导者选举,详见
指南和demo
二、核心API
ParkLocal核心api说明:
//创建node,可以根据是否需要权限和心跳属性调用不同方法
public ObjectBean create(String domain, Serializable obj);//自动创建node
public ObjectBean create(String domain, String node, Serializable obj);
public ObjectBean create(String domain, String node, Serializable obj, AuthPolicy auth);
public ObjectBean create(String domain, String node, Serializable obj, boolean heartbeat);
public ObjectBean create(String domain, String node, Serializable obj, AuthPolicy auth, boolean heartbeat);
//更新node
public ObjectBean update(String domain, String node, Serializable obj);
//获取node
public ObjectBean get(String domain, String node);
//获取最新node,需要传入旧node进行对照
public ObjectBean getLastest(String domain, String node, ObjectBean ob);
//获取最新domain
public List<ObjectBean> get(String domain);
//获取最新domain下所有node,需要传入旧的node集合对照
public List<ObjectBean> getLastest(String domain, List<ObjectBean> oblist);
//删除node
public ObjectBean delete(String domain, String node);
//强行设置domain可删除
public boolean setDeletable(String domain);
//删除domain及下所有node
public List<ObjectBean> delete(String domain);
//添加node的事件监听
public void addLastestListener(String domain, String node, ObjectBean ob, LastestListener liser);
//添加domain的事件监听
public void addLastestListener(String domain, List<ObjectBean> oblist, LastestListener liser);
三、权限机制:
public ObjectBean create(String domain, String node, Serializable obj, AuthPolicy auth);
通过上面方法创建node时,可以指定一个权限参数,有只读(AuthPolicy.OP_READ)、读写(AuthPolicy.OP_READ_WRITE)、所有(AuthPolicy.OP_ALL)三种属性,默认为AuthPolicy.OP_ALL
注意:这里的权限属性是指创建进程对其他使用进程的权限约束,而不包括它自己。也就是对node的创建进程来说,它拥有对该node和domain所有操作权限(读写删,只要它不退出或者中止)
建设现在创建了一个domain为d,node为n的节点, 对于其他使用进程来说,操作权限如下表所示:
从上表可以发现,当创建进程指定node的权限为AuthPolicy.OP_ALL时,其他使用进程可以删除该node,但是不能删除其domain,这是为什么呢?
因为domain下通常还有其他node,它们的权限并不都是AuthPolicy.OP_ALL,比如还有一个n1的node权限为AuthPolicy.OP_READ,按照正常操作,该使用进程无法删除n1,假设它可以删除domain,那么它最后间接删除了n1,于是发生了悖论,因此,为了避免风险,所有的使用进程只能根据权限删除node,但是无法删除domain。
不过你允许承担这样的删除风险,也可以在创建进程里强行指定该domain可删除,通过在domain创建后,调用:
public boolean setDeletable(String domain);
该方法只能被domain的创建进程调用,其他使用进程没有权限调用。
强行指定可删除后,其他进程可以直接删除该domain及所含node并忽略后果。
四、相对于zookeeper的优势
Zookeeper无疑是一款成功的开源产品,并拥有广泛的信任者和应用场景,和以往一样,老外作者在apache网站上发布了一款产品,我们的工程师马上会虚心的学习和忠心的捍卫,而国产原创的产品往往会遭到百般质疑,因为我们的原创更多是抄袭和粗制滥造,我们的国产更多是框架集成而不是架构设计,所以这种情感上的倾向性不是一天能改变。
做产品对比和列举优势往往容易引起激烈争论,会被认为是在宣传和引导产品使用,实际上在都能满足功能需求的情况下,选择使用哪款产品更多的是个政治问题,而不是技术问题,领导意志及工程师本身的熟悉程度和爱好等等都是决定因素。
这里我们仅仅从技术角度阐述几点优势,Zookeeper做为一个chubby和paxos模仿品,缺乏创新型的设计改进,它仍然存在以下缺点:
1、树型配置节点的繁琐复杂,性能低下。为了保证这种结构,Zookeeper需要维持一套虚拟文件结构的开销,对于目录结构深的树节点,造成性能影响,而配置信息结构实际上往往不一定需要树结构。
2、“观察”(watch)机制的僵化设计:zookeeper没有获取最新版本信息的方法支持,它只能粗暴的在每次写入更新等方法时注册一个watch,当这些方法被调用后就回调,它不考虑信息内容是否变化,对于没有使信息内容发生改变的更新,zookeeper仍然会回调,并且zookeeper的回调比较呆板,它只能用一次,如果信息持续变化,必须又重新注册watch。而fourinone的事件处理则可以自由控制是否持续响应信息变化。
3、领导者选举机制实现的太过局限,集群只有两个节点,zookeeper无法进行领导者选举,zookeeper的领导者选举必须要奇数节点的奇怪限制。另外,ZooKeeper的领导者选举实现虽然比原始的Paxos要简化,但是它仍然存在领导者(Leader)、跟随者(Follower)、观察者(observer)、学习者 (Learner)等众多角色和跟随状态(Following)、寻找状态(Looking)、观察状态(Observing)、领导状态 (Leading)等复杂状态。相对于fourinone的领导者选举,zookeeper仍然不够直观简洁,难以用较少配置和代码演示。
4、Windows系统上几乎不支持,需要安装linux壳,并且仅建议用于学习研究。Fourinone支持windows、linux集群混合使用。
Fourinone提出一种新的分布式协同系统设计,在满足zookeeper所有功能下,并克服了以上缺点,提出了新的配置结构、变化事件机制、简化的领导者选举实现,能更好的满足分布式协调需求。
五、演示demo
下面是一个操作节点的演示demo,请留意各自节点的权限范围,程序说明:
1、 ParkServerDemo: 启动parkserver(它的IP端口已经在配置文件的PARK部分的SERVERS指定
2、 ParkSet:往parkserver里创建了d1n1、d2n2、d3n3、d4n4共4个节点,分别对应只读、读写,所有,所有+强行删除权限
3、 ParkGet:依次对d1n1、d2n2、d3n3、d4n4进行读、写、删除、删除domain操作,观察结果输出,如果没有权限操作,parkserver会输出信息,并且操作返回的结果对象为空
启动命令和顺序:
Javac –classpath fourinone.jar; *.java
Java –classpath fourinone.jar; ParkServerDemo
Java –classpath fourinone.jar; ParkSet
Java –classpath fourinone.jar; ParkGet
如果没有fourinone.jar,可以到以下地址下载:
http://www.skycn.com/soft/68321.html
附件是demo源码

- 大小: 25.1 KB

- 大小: 19.4 KB
分享到:
相关推荐
fourinone是一款基于Java开发的分布式协调服务框架,旨在为分布式应用提供一致性哈希(Consistent Hashing)、分布式锁、分布式计数器等关键功能。在4.05.06这个版本中,它引入了全新的分布式数据库引擎——CoolHash...
fourinone是一款分布式协调服务框架,它的设计思路是将任务分配者(工头)和任务执行者(工人)通过一个协调者(职介所)进行连接,实现任务的分布式处理。这个框架的核心概念包括工头进程、工人进程以及职介所服务...
- **分布式协同与锁机制**:提供分布式协调和锁机制,简化消息队列功能,支持多机之间的协作和通信。 **2. 特点** - **轻量级**:Fourinone 2.0版本仅包含一个150KB的JAR文件和一个配置文件,无需其他依赖。 - **...
SSO单点登录概要设计说明书.doc
奥塔北煤矿6.0 Mta新井设计说明书.docx
内容概要:本文详细介绍了基于S7-200 PLC和组态王软件构建喷泉控制系统的全过程。首先明确了系统的IO分配,包括启动按钮、停止按钮以及喷泉水泵的连接方式。接着展示了梯形图程序的设计,涵盖了基本的启停控制逻辑、定时循环和模式切换机制。随后提供了详细的接线图原理图,解释了输入输出部分的具体接线方法。最后讲述了组态王的画面设计,包括创建工程、定义变量和绘制监控界面等步骤。此外还分享了一些调试过程中遇到的问题及解决方案。 适合人群:对自动化控制感兴趣的初学者和技术人员,尤其是那些希望深入了解PLC编程和人机界面设计的人群。 使用场景及目标:适用于小型喷泉项目的实际控制系统开发,旨在帮助读者掌握PLC编程技巧、熟悉组态软件的应用,并能够独立完成类似的自动化控制系统设计。 其他说明:文中不仅包含了理论知识讲解,还附带了许多实践经验分享,如硬件配置建议、常见错误规避措施等,有助于提高实际操作能力。
计算机二级PPT精选二十套(标红)
保险公司IT变更管理流程设计说明书.doc.doc
毕业设计说明书A江坝后式厂房双曲拱坝设计.pdf
内容概要:文档《计算机二级MS精选300道选择题.docx》涵盖了计算机二级考试中Microsoft Office软件(Word、Excel、PowerPoint)及计算机基础知识的选择题。题目涉及软件操作技巧、功能应用、常见问题解决等方面,旨在帮助考生熟悉并掌握相关知识点,提高应试能力。文档内容详尽,涵盖面广,从基础操作到高级应用均有涉及,适合考生全面复习备考。 适用人群:准备参加计算机二级考试的学生及相关从业人员,特别是需要强化Office软件操作技能和计算机基础知识的人员。 使用场景及目标:①考生可以在复习过程中使用这些选择题进行自我检测,巩固所学知识;②教师可以将其作为教学辅助材料,帮助学生更好地理解和掌握课程内容;③培训机构可以用这些题目作为测试题库,评估学员的学习效果。 其他说明:文档不仅提供了大量的选择题,还详细解析了每道题目的答案,有助于考生深入理解知识点。此外,题目内容紧跟最新考试大纲,确保考生能够获得最有效的备考资料。
内容概要:本文介绍了一种创新的方法,利用多目标黏菌优化算法(MOSMA)来优化支持向量机(SVM)的参数C和gamma,从而提高回归预测的效果。首先详细解释了MOSMA的工作原理,包括黏菌权重更新、快速非支配排序以及自适应参数调整等关键技术点。接着展示了具体的Python代码实现,涵盖数据预处理、适应度函数定义、参数更新规则等方面。实验结果显示,在风电功率预测等多个应用场景中,相较于传统的网格搜索方法,MOSMA能够更快更有效地找到最优参数组合,显著提升了预测性能。 适合人群:从事机器学习研究或应用开发的技术人员,尤其是关注SVM参数优化及回归预测领域的从业者。 使用场景及目标:适用于需要进行高效参数寻优的回归预测任务,如风电功率预测、设备负载预测等。主要目标是通过改进SVM参数配置,获得更高的预测精度和更好的泛化能力。 其他说明:文中提供了完整的代码示例和详细的实施步骤指导,帮助读者快速理解和应用这一先进的优化技术。此外,还讨论了一些常见的注意事项和技术细节,如数据标准化、参数范围设定、并行化改造等。
毕业设计 某油库设计说明书.pdf
Q235钢板焊接工艺设计说明书.docx
75t循环流化床锅炉设计说明书.doc
(最新修订版)直列四缸柴油机配气机构设计毕业论文设计说明书.doc
内容概要:《deepseek大模型生态报告 2025年2月》详细介绍了DeepSeek大模型的背景、应用现状、技术特点及其产业生态。DeepSeek由杭州深度求索公司创立,通过一系列技术创新,如多层注意力架构(MLA)、FP8混合精度训练框架、DualPipe跨节点通信等,显著降低了训练成本和提高了模型性能。DeepSeek在国内和国际市场迅速崛起,登顶苹果应用商店免费APP下载排行榜,并被多家企业和机构接入,包括华为、三大运营商、微软、英伟达等。其开源策略和低成本优势对全球科技供应链和资本市场产生了深远影响,尤其是在AI领域。 适合人群:对人工智能、大模型技术感兴趣的科技爱好者、研究人员、企业家及政策制定者。 使用场景及目标:①了解DeepSeek大模型的技术创新和应用现状;②探讨DeepSeek对全球AI产业生态的影响;③分析DeepSeek在不同行业(如金融、医疗、教育、制造等)的具体应用案例。 其他说明:报告还涵盖了各国政府及相关机构对DeepSeek的态度和政策回应,以及DeepSeek对未来AI技术发展和国际竞争格局的启示。此外,报告深入剖析了DeepSeek在技术架构、数据策略和工程实践方面的突破,揭示了其成功背后的组织文化和创新机制。
内容概要:本文详细介绍了利用粒子群算法解决电动汽车区域综合能源系统中光伏电站、充电桩运营商和电网公司在定价上的三方博弈问题。通过MATLAB代码实现了粒子群算法的具体应用,包括参数设置、适应度函数设计、粒子更新策略以及结果可视化。文中展示了如何将三方定价变量编码成多维粒子,并通过目标函数计算和约束处理确保粒子在合理的解空间内搜索最优解。最终得到的电价曲线反映了不同时间段内的供需变化,验证了算法的有效性和实用性。 适合人群:从事能源系统优化、智能算法应用的研究人员和技术开发者。 使用场景及目标:适用于需要进行能源系统优化调度的场景,特别是涉及多方利益协调的问题。目标是找到光伏电价、充电桩电价和电网电价的最佳组合,使得三方利益达到最优平衡。 其他说明:建议在调试过程中关注特定时段的电价突变,适当调整参数如社会认知系数和社会学习因子,以获得更好的收敛效果。此外,初始粒子的位置选择对收敛速度有很大影响,推荐采用高斯扰动等方法进行初始化。
WY02锥齿轮的加工工艺规程及工时定额计算 课程设计说明书.docx
项目管理制度范文.docx