分布式技术原理与算法解析
聂鹏程
智载云帆 CTO,前华为分布式 Lab 资深技术专家
39663 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 43 讲
分布式技术原理与算法解析
15
15
1.0x
00:00/00:00
登录|注册

32 | 答疑篇:如何判断并解决网络分区问题?

适用于获取锁的节点可靠性有一定保证的场景
类似于分布式锁的机制
适用于有一个稳定可靠的三方节点或组件的场景
引入第三方组件或节点作为仲裁者
适用于动态节点加入的场景,但不适用于多个分区的情况
保留具备大多数节点的子集群
适用于少数分区,不适用于多个分区和动态节点加入的场景
固定票数策略
子集内节点间可互相通信,而子集之间的节点不可通信
形成不同子集
一部分Slave节点只能与主Master节点连通,另一部分只能与备Master节点连通
主节点与备节点之间网络不通
基于共享资源的方式处理网络分区
设置仲裁机制
Keep Majority
Static Quorum
集群跨多个网络部署时
无法判断问题何时会被恢复
无法通过程序判断问题出在哪里
非集中式架构的网络分区形态
集中式架构的网络分区形态
子集和子集间网络不通
分布式集群中节点形成不同的子集
网络分区有哪些常见的处理方法?
网络分区出现概率较高的场景
网络分区最微妙的地方在哪里?
如何判断是否发生了网络分区?
什么是网络分区?
如何判断并解决网络分区问题呢?

该思维导图由 AI 生成,仅供参考

你好,我是聂鹏程。今天,我来继续带你打卡分布式核心技术。
到目前为止,“分布式技术原理与算法解析”专栏已经接近尾声了。在这里,我首先要感谢你坚持学习每一篇文章,以及对每一道思考题的积极思考与讨论,并在此基础上扩展了类似问题。
比如 @Jackey、@Eternal、@leslie、@mt11912、@小白啊、@随心而至等同学,一直在跟着专栏的更新节奏学习,并非常积极地在留言区留言讨论、总结自己的理解,并查询相关资料补充文中未讲解到或没有深入展开的问题。
今天,我梳理了文后的留言,发现大家对最近几篇文章介绍的分布式高可靠问题特别感兴趣,特别是我没有详细展开的网络分区问题。
比如,在第 4 篇文章“分布式选举:国不可一日无君”中,我给你留下的思考题是集群中是否会存在双主的场景,很多同学提到双主是网络分区导致的。
再比如,在第 31 篇文章“分布式高可用之故障恢复:知错能改,善莫大焉”中,我给你留下的思考题是,如何判断以及处理网络分区。
因此,在今天这篇文章中,我将会与你深入探讨网络分区问题,以帮助你进一步理解并解决业务中的故障恢复问题。

什么是网络分区?

我们先来看看网络分区到底是什么吧。在第 31 篇文章分享故障恢复时,我与你介绍了故障类型中的网络故障,网络分区就是其中的一种故障类型。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何判断和解决网络分区问题,这是分布式系统中常见的故障类型。文章探讨了网络分区的判断方法和出现概率较高的场景,并介绍了处理网络分区的方法,包括Static Quorum、Keep Majority、设置仲裁机制和基于共享资源的方式。强调了处理网络分区问题时需要考虑的均衡策略。其中,Static Quorum方法不适用于处理多个分区和动态节点加入的场景;Keep Majority方法适用于动态节点场景下分区问题,但不适用于处理多个分区的情况;而基于仲裁和共享资源的网络分区处理方法适用于有一个稳定可靠的三方节点或组件的场景。文章总结了网络分区处理方法的本质,即在产生分区后,选出一个分区,保证同时最多有一个分区对外提供服务。文章以简洁明了的方式介绍了网络分区问题及其处理方法,为读者提供了深入了解分布式系统中网络分区问题的指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式技术原理与算法解析》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • gg
    引入仲裁者方案感觉行不通: 仲裁者和所有集群节点之间的网络也有可能出现故障

    作者回复: 具体问题需要具体分析,引入仲裁者,如果集群节点之间与仲裁者之间网络出现问题,可以根据具体的业务选择策略,比如能连上仲裁者的集群节点活着,连不上的节点自杀等。没有完美的方案,基本都是根据不同的业务,不同的需求和可容忍度选择策略。

    2020-06-27
    2
    4
  • 有铭
    引入仲裁者?那仲裁者自己不就是一个薄弱点,仲裁者挂了咋办呢
    2019-12-11
    5
    7
  • 受教了,老师讲的网络分区,应该就是脑裂。 脑裂最大的问题就是会破坏数据的一致性(如果提供的全是数据的读服务,是没有任何问题的,不过只有读没有写这种服务应该是不存在的,否则数据从哪里来呢?可能存在阶段性的,比如:学位信息),所以,为了数据的一致性,需要仅保留一个分区提供服务,就好似天无二日国无二君。 下面的问题就是权衡保留那个分区的问题了,一般都会选择半数或大多数原则。其实我觉得网络分区,怎么发现是一个难题,搞一个观察者一直观察是个法子,如果观察者和别观察者之间也发生网络断链了呢?用心跳机制,来报警。 感觉老师没讲分布式系统中,监控和报警这一块的内容,这一块也是极为重要的基础设施,发现问题、定位问题、解决问题,特别是分布式系统的问题,没有这些基本会手忙脚乱到处抓瞎。
    2020-02-20
    1
    2
  • leslie
    "网络分区"个人一直觉得是应当算是分布式架构中一个难点:简单的说可能是单独的一小块资源,一个最小集群,可是它只是其中的一部分,例如数据库集群主要就两类,投票或者单独用一台keeplive,可是向上还有一层。 网络分区一定程度上难的应当是嵌套的带来的问题;一套分布式系统里面可能会有多个子系统,例如数据系统、应用系统。。。每个系统内部有又有一套小的,最小模式的网络分区容易;难的其实是自上而下的排查或者自下而上的排查。这是我个人这些年OPS经历中感到最不好处理的事情,如同算法的"动态规划"拆分到最下面策略就哪些。
    2019-12-11
    1
    2
  • 黄骏
    一般的分布式共识算法(paxos、raft)应该是Keep Majority 配合多数(超过总数1/2)分区胜出的原则,在多个分区场景,如果任一个分区的数量都不超过总数1/2,那么集群此时不可用。
    2024-01-04归属地:湖北
    1
  • Jackey
    之前只考虑了非集中式的分布式系统,没有考虑集中式的。现在有种茅塞顿开的感觉
    2019-12-11
    1
  • yml435
    一个比较好的仲裁者就是DB;因为现在几乎所有的集群提供服务都离不开DB,如果DB出现故障那整个集群是不可用的;如果出现脑裂后,可以各分区的主节点都向约定好的DB表中定时写入一条数据,用乐观锁机制,当发现乐观锁出现版本号不对时,这说明至少还有一个分区存在,这时可以通过简单的比较各分区主节点序号大小来选择最终哪个分区提供服务;
    2022-07-07
  • new life
    关于网络分区的处理方法,其本质就是,在产生分区后,选出一个分区,保证同时最多有一个分区对外提供服务 ----------------------------------------- 选出一个分区来对外提供服务 其他分区服务停了 感觉有点简单粗暴,如果这个分区扛不住请求压力 又要触发 限流 降级 等一系列操作
    2019-12-12
  • 阿卡牛
    CAP中的网络分区不是指每个分区都可以对外提供服务,但要在数据一致性和可用性间选一个,文稿中说的是只保留一个分区,有点搞不懂
    2019-12-11
    3
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部