work|分布式系统设计理念为何这么难学?( 二 )
本文插图
在任何系统中 , 都无可避免的需要考虑节点down掉的问题 , 分布式系统也一样 。 在中心化分布式设计中 , leader和Work也一样都存在down掉的可能性 。 如果leader掉的话 , 整个系统都陷入瘫痪 , 按照最简单的设计思路 , leader节点需要一个从节点或者备用节点 , 在主节点down掉之后 , 从主节点或者备用主节点可以手动或者自动实现leader节点服务 。 至于一个Work节点down掉 , 一般不会使整个系统陷入瘫痪 , 除非全部Work节点同时down掉 。 一个Work节点down掉 , 但是会影响这个节点当前正在执行的任务 , 所以在必要的条件下可以设计成任务需要Ack才好 , 即:一个任务的完成需要确认 , 如果长时间没有确认 , leader会发起重新分配任务的操作 。
说到leader的问题 , 现在目前大多数分布式系统都具备了自动选举leader的功能 , 这还要感谢paxos , raft等选举算法 。 在leader不可用的时候 , 这些系统会自动根据节点情况选举出新的leader节点来继续提供服务 , 这大大提高了系统可用性 。
在所有的中心化设计中 , 数据的写操作都发生在leader节点 , 这在某种程度上类似于单机系统 , 所以这种中心化设计并不适合那些大量写的操作 。
去中心化
在去中心化分布式系统设计中 , 节点类型并不区分Leader和Work , 所有节点都是相等的 。 所以任何一个节点down掉都不会导致整个系统瘫痪 , 这是它的优势 。 但是获取系统中每个节点的信息却比中心化设计要难很多 , 在中心化设计中 , leader节点存储着系统中所有的节点信息 , 并可以实时把这些信息同步到其他节点 , 同时可以利用相应算法来达到一致性的要求 。 去中心化的设计中 , 每个节点只能依靠和其他节点不断通信来获取整个系统的节点信息 , 这在技术难度上要比中心化高出很多 。
本文插图
在网络中 , 网络是不可靠的 。 恰恰是这个原因 , 又加大了每个节点互相通信的难度 。 在极限情况下 , 去中心化的设计方案会出现多个小范围的“团伙” , 这就是所说的脑裂 。 比如:现在一个由10个节点组成的分布式系统 , 有可能由于网络原因会划分为两个5节点互相通信的两个“团伙”
如果出现脑裂的情况 , 目前主流的解决方案和数据库死锁的处理情况类似 , 自爆一个对系统影响比较小的 。
本文插图
完全中心化和去中心化的系统并不常见 , 反而现在慢慢出现的是二者的搭配者 , 表面看似去中心化 , 设计理念却是中心化的思路 , 在这种架构下 , leader是程序根据某种算法选举出来的 , 而且在系统leader发生故障的时候 , 系统会自动重新选举leader节点 。
【work|分布式系统设计理念为何这么难学?】
推荐阅读
- 人工智能|敏捷开发框架的开发运用之智能办公管理系统的开发
- 产品|全国唯一户外15米远距离AI测温系统深兰猫头鹰获工信部嘉奖
- Android系统|超值的“超大杯”HiFi播放器,索尼NW-A105HN评测
- Android系统|国人笑而不语!Android 11新要求 相机默认不能设置为“美颜”模式
- IOS系统|苹果免签封装如何实现?苹果免签封装会不会掉签?
- 摄影|传音主导首个移动终端计算摄影系统国际标准获ITU-T正式立项
- Android系统|想玩转MIUI12全局小窗,你要先清楚它的各种打开方式
- windows系统|半年过去了:Win10 5月更新磁盘碎片整理工具问题依然存在
- Android系统,鲁大师|最新UI排名出炉:小米MIUI第九,魅族消失,黑马出现!
- Android系统|MIUI12与EMUI10.1尴尬了,流畅度不如它
