深入浅出分布式技术原理
陈现麟
伴鱼技术中台负责人,前小米工程师
21241 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
深入浅出分布式技术原理
15
15
1.0x
00:00/00:00
登录|注册

02|新的挑战:分布式系统是银弹吗?我看未必!

故障处理、异步网络、时钟同步和共识协调如何与 CAP 理论相互影响?
CAP 理论:一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)
Paxos 或 Raft:解决多进程间的同步问题
多进程同步:跨机器进程同步复杂
一言堂:进程内线程同步简单
TrueTime API:Google Spanner 使用 GPS 和原子钟
时间服务器:通过 NTP 调整本地时间
时间穿越问题:事件排序可能不准确
多个时钟:每个节点有自己的时钟,存在误差
全局时钟:单一时钟确保事件顺序
退避策略:防止重试导致系统雪崩
幂等性:确保请求精确执行一次
重试机制:处理响应超时情况
超时机制:确保请求方在超时时间内得到响应
复杂性:网络不确定性导致调用不确定性
分布式系统:组件间通过网络通信
单体系统:组件间直接调用,无网络依赖
设计要求:每个组件必须高可用
增加复杂性:需要在不可靠硬件上通过软件容错
分布式系统:节点宕机或网络故障导致部分系统失效
用户心智负担减轻:系统不会给出错误结果
单体系统:硬件异常导致系统崩溃
分布式系统的挑战与 CAP 理论的关系
设计原则:容错、确保请求至少执行一次、事件排序准确性、进程间共识
分布式系统由多个计算机节点组成,面临部分失败、异步网络、时钟同步和共识协调的挑战
共识算法
分布式系统
单体系统
解决方案
分布式系统
单机系统
应对策略
远程调用
本地调用
部分失败
全部失败
思考题
总结
共识协同
时钟同步
异步网络
故障处理
分布式系统的新挑战与设计原则

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

你好,我是陈现麟。
通过上一节课的介绍,你已经了解了分布式系统出现的原因和引入的新问题,并且我们一起讨论了这些新问题的处理思路。你对分布式系统的全局已经有了一个初步的认识,这就为后面的学习打下了良好的基础。
下一步,我们要从根本上理解分布式系统的设计方法和原则,这就需要你时刻谨记单体系统和分布式系统之间的差别。从本质上来说,单体系统是以单进程的形式运行在一个计算机节点上,而分布式系统是以多进程的形式运行在多个计算机节点上,二者的本质差别就导致了分布式系统面临着四个方面的新问题,分别是:故障处理、异步网络、时钟同步和共识协同
所以,在这节课中,我们会从上述的四个方面来比较单体系统和分布式系统的差别,一起来探讨分布式系统会面临哪些新的挑战,而这些挑战又是怎么影响分布式系统的架构和设计的。

全部失败与部分失败

故障处理是所有系统都必须考虑的关键问题,所以我们从故障处理的角度开始分析。
单体服务系统中,在硬件正常的时候,对于一个确定的输入,总会得到一个确定的输出。就算是在内存、磁盘损坏等硬件异常的时候,对于一个确定的输入,计算机也会直接出现无法启动或崩溃的情况,而不是给出一个模棱两可或不正确的结果。
这种全部失败的处理逻辑,会大大减轻用户使用计算机的心智负担,让我们明确地知道,如果系统内部发生了故障,计算机不会给出错误的结果,而是会全部崩溃。那么处理计算机系统崩溃的方法就非常明确和简单了,重启计算机,重新运行程序即可。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

分布式系统设计与原则是本文的核心内容。文章首先介绍了单体系统和分布式系统的本质差别,指出分布式系统面临的四个新问题:故障处理、异步网络、时钟同步和共识协同。在故障处理方面,分布式系统需要接受系统中每一个部分可能出现故障的情况,并通过软件来容错,构建高可用的系统。在异步网络方面,文章讨论了远程调用带来的复杂性,强调了在分布式系统设计中需要充分考虑通过网络进行远程调用导致的不确定性,并提出了解决方案。时钟同步方面,文章强调了分布式系统中各个节点的本地时钟存在误差,不能依赖各自时钟对事件进行排序,提出了解决方案。最后,文章讨论了分布式系统内部多个实例或服务之间的协同问题,指出需要达成共识来解决跨机器的多进程同步问题。整体而言,本文深入剖析了分布式系统的设计方法和原则,为读者提供了对分布式系统的全局认识和新问题的处理思路。

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

全部留言(12)

  • 最新
  • 精选
  • 努力努力再努力
    分布式系统面临的4个方面的新问题 (分布式系统就是因为要解决这些问题 才会变成现在这样) 1. 故障处理 (全部失败 / 部分失败)通过软件来容错 1.1 节点宕机 1.2 网络分区 2. 异步网络 (本地调用和远程调用)采用超时机制 1.1 远程调用模型面临的网络排队 1.2 丢包 1.3 请求服务崩溃 响应超时: 要进行重试 3. 时钟同步 (全局时钟 和 多个时钟) 3.1 计算机中 时间的作用 3.1.1 记录事件发生的时间 3.1.2 事件之间发生的顺序 3.2 谨记 系统中各个节点的本地时钟是存在误差的,不能依赖各自的时钟对事件进行排序 3.2.1 去请求同一个时间服务器获得事件对发生时间 3.2.2 Google 在 Spanner 中使用的,通过 GPS 和原子钟实现 TrueTime API 来解决 4. 共识协同 (一言堂 和 共识) (跨机器的多线程同步问题) 4.1 选一个服务来做同步操作的管理者 4.2 管理者 肯定也要高可用 -》 同步服务的选主问题 4.2.1 Paxos 和 Raft 共识算法解决 思考题 CAP 一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance) 1. 故障处理 AP 2. 异步网络 AP 超时机制保证可用性 3. 时钟同步 CP 保证了一致性 和 事件发生的顺序 4. 共识协调 CP 强一致性 共识算法 Raft 协议 成熟的工业算法实现,比如蚂蚁金服的 JRaft、Zookeeper 的 ZAB、Consul 的 Raft、 百度的 braft、Apache Ratis;

    作者回复: 你好,努力努力再努力 对课程的总结非常棒~ 思考题部分我再补充一些: 分布式系统中的部分失败和异步网络会导致出现网络分区,所以需要在 CAP 理论中,分区容错(P)是必须选择的,同时它们也影响可用性(A),共识协调和 CAP 理论中的强一致性是等价的问题,如果我们在 CAP 理论中选择强一致性(C),那么可以通过数据的强一致性来解决时钟同步面临的事件排序的问题。

    2022-01-25
    22
  • 良记
    是不是可以简单理解为:分布式系统面临发挑战是“点→线→面”? “点”是每个服务自己本身的故障/异常处理,“线”是服务与服务之间的网络/时钟异常处理,“面”是整个服务体现出来的异常结果处理,包括幂等性,协同等问题。

    作者回复: 👍,可以这样理解

    2022-02-19
    7
  • 兔子先生
    老师,上一节也提到分布式系统引入新问题,这一节也是引入的新问题,为啥要分开讲呢?

    作者回复: 上一篇是从分布式系统内部工作节点的协调问题的角度来讲的,让大家对分布式系统形成整体的印象,更上层一些;这一篇是从挑战的角度来讲的,主要是来讲分布式系统的难点在什么地方,更底层一些。

    2022-02-02
    2
    4
  • 掂过碌蔗
    分布式系统面临故障处理(部分失败)、异步网络、时钟同步和共识协调是手段;CAP 是目的。

    作者回复: 赞,不过我觉得目的是高效率高质量解决业务问题,CAP 是理论边界

    2022-01-30
    3
  • 约书亚
    有一点需要纠正,单机时钟也可能漂移,所以不能说后面的一定比前面的单调递增

    作者回复: 👍 不过这里主要是强调分布式系统多时钟无法统一的问题,对于单机时钟漂移的问题,在课程“聊一聊计算机系统的时间”有详细的讨论。

    2022-04-11
    1
  • Hello,Tomrrow
    C(一致性)A(可用性)P(分区容错) 故障处理(部分失败),会影响系统的可用性、分区容错 异步网络,会影响系统的可用性,分区容错 时钟同步,会影响系统的一致性和可用性 共识协调,会影响系统的一致性

    作者回复: 👍

    2022-04-01
    1
  • 愚人码头
    分布式面临的4个问题是必须要解决的, 是在分布式系统实现 cap 的前提和基础

    作者回复: 👍

    2022-03-08
    1
  • peter
    请教老师两个问题: Q1:退避策略是指什么? “并且对重试机制增加退避策略”,这句话中的退避策略是指什么? Q2:故障处理在微服务中(SpringCloud)是哪个组件完成的? 采用SpringCloud搭建微服务系统,在此系统中,“故障处理”是哪个组件完成的? 还是说需要应用层软件来完成?

    作者回复: 你好,peter, Q1:退避策略是指在重试的时候,降低重试的时间间隔的,一般采用指数退避,比如第 1 次失败,等待 1 秒后重试,第 2 次失败,等待 3 秒,第 3 次失败,等待 9 秒。。。这个问题在后面的课程「重试幂等」等有更详细的讨论。 Q2:故障处理主要由 Netflix Hystrix 来完成,一般来说,通用故障的处理都在框架层。

    2022-01-25
    3
    1
  • ...
    单机拆开为多机协作,性能上来了,不可靠性也增多了,如网络通信、机器故障,这还是需要妥协的方案做理论支撑。

    作者回复: 👍

    2022-04-09
  • GAC·DU
    请问老师退避策略如何设计的?

    作者回复: 你好,GAC·DU, 退避策略是指在重试的时候,降低重试的时间间隔的,一般采用指数退避,比如第 1 次失败,等待 1 秒后重试,第 2 次失败,等待 3 秒,第 3 次失败,等待 9 秒。。。这个问题在后面的课程「重试幂等」等有更详细的讨论。

    2022-01-25
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部