
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
分布式编程开发是目前大多数软件开发程序员都在学习与使用的一种软件开发技术,而今天我们就通过案例分析来了解一下,分布式编程开发都有哪些注意事项。
分布式通过异构、冗余实现容错和扩展能力。
CAP:一致性、可用性、分区容错。 一致性要求不高的,通常采用 AP; 资金敏感的,通常采用 CP。
BASE: 基本可用,软状态、最终一致性。牺牲强一致性来获得可用性。
协议:Paxos,Raft
选举算法
选举算法是分布式系统的基础。许多分布式都是基于 Master-Slaves 或 Leader - Followers 模式。一般 Leader 负责写数据,而 Followers 负责同步写入的数据到自己的副本上保持与主一致。
选举算法:Bully 算法、FastLeader 算法(ZK)。Bully -- ID 最大的作为 Leader ,有频繁换主的风险。
选举机制的组成部分:
选举轮次标识:时间戳或编号,防止过期选举消息干扰;
选举检查项:比如服务器状态;
选举依据:根据什么来比较,判断谁应当成为 Leader ;
投票统计:每个服务器都投出自己的一票,并接收别人的投票做某种处理,和自己的投票来做统计;
选出 Leader : 根据统计结果,大部分服务器都能达到共识,Leader 从共识中产出。
ZK
实现分布式协同服务。CP 模型、ZAB 协议、ZNode、树形结构、Watch 通知。 ZK 只能存少量元数据,不适合做分布式存储系统。
ZK 的数据结构:节点以树的形式组织起来。节点分 持久/ 临时节点,有序/无序节点。
ZK 服务器数最好为奇数个:1. 偶数个只允许更少服务器崩溃,更脆弱; 2. 防止脑裂现象。
ZK 以事务的方式执行所有操作,并确保所有事务以原子方式执行,不受其它事务的干扰。ZK 事务具有原子性和幂等性。zxId 作为事务的标识。zxId 是 64 位的值,分为 32 位时间戳和32位的计数器。32位时间戳可以用于识别当前时段的 Leader 和事务时间戳。
选举算法: 每个服务拥有一个 Eo (sId, zxId) ,并向其它服务器发送自己的 Eo (sId, zxId) 。 收到 Er 的每个服务器将 Er 与 Eo 进行比较。如果 Er.zxId > Eo.zxId 或者 Er.zxId = Eo.zxId AND Er.sId > Eo.sId ,则用 Er 替换 Eo 。最终大部分服务器都会拥有相同的 Er。从而选举出具有 Er 的那个服务作为 Leader 。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。