Trouble with Distributed Systems (4-2) - System Model & Summary

Day 12

今天的特别理论和抽象,所以懒得看就跳过吧!

系统模型和现实 (System Model and Reality)

很多演算法是被设计来解决分散式系统问题的,演算法要被设计成可用,就不能太依赖硬体或特定软件来执行,反而要求我们以某种方式形式化我们期望在系统中发生的故障类型,我们通过定义系统模型来做到这一点,今天就是要用比较抽象的角度来看看这些算法能假设的事物为何。

首先是时序假设 (timing assumptions),我们有 3 个常用的模型:

  • 同步模型 (Synchronous model)
    • 同步模型假设网路延迟、程序暂停和时钟错误都是有界的,意味者你会知道这些最多不会超过一个上限,但这并不符合现实生活里的系统(网路延迟都不知道会延迟多久了)。
  • 部份同步模型 (Partially synchronous model)
    • 这个模型假设了大多数的系统行为是同步的,但它能接受有时候会有越界 (out of bound) 的事情发生。
  • 非同步模型 (Asynchronous model)
    • 这个模型的演算法不允许时序假设,它甚至没有时钟,所以也就没有 timeout。

再来是节点失败假设,一样有 3 类:

  • 崩溃就停故障 (Crash-stop faults)
    • 演算法假设节点只能以一种方法故障,也就是节点崩溃 (crashing), 意味者节点死亡後永远回不来了。
  • 崩溃恢复故障 (Crash-recovery faults)
    • 这个一样假设节点会随时故障,但它或许会在未知时间後恢复,所以它会假设节点是使用稳定的储存设备(非挥发式硬碟),以便从故障中恢复,也会假设记忆体中的资料会消失。
  • 拜占庭式故障 (Byzantine faults)
    • 节点发疯了的故障(细节可看 Day 12)。

现实生活中的系统模型大多数都是 部份同步模型+ 崩溃恢复故障,那麽... 究竟分散式演算法怎麽应对这些模型呢?我们会从明天开始探讨算法细节。

Summary

Day 8 ~ Day 13 讲了分散式系统会遇到的鬼故事,网路会延迟、时钟不准、程序会暂停等等,都是概念性的东西居多,多一点认识总是能帮助你未来 debug 时能有更多的想像力,从明天开始,终於就要进入比较实战的部份啦!当 Day 8 ~ Day 13 的鬼故事都发生时,我们该怎麽办。


<<:  DAY1: node.js 不专业全新手上车

>>:  Day13. 有了Blue Prism,谁说办公室恋情影响工作-BP的用途

【Day 25】- 什麽几百张几千张的猫猫图片,戳一戳就结束了(实战 requests 向 API 请求获得回应)

前情提要 昨天介绍了 Postman 这款 API 管理、测试工具,也在上面测试了猫猫图片的 API...

33岁转职者的前端笔记 DAY 28 CSS 选取器类别笔记

CSS 最重要的一环就是选取器,新手一定要了解熟悉 CSS 选取器 才能事办功倍,开发速度也会提升许...

[Day 26] 交叉验证 K-Fold Cross-Validation

今日学习目标 了解 K-Fold 各种不同变形 K-Fold Cross-Validation Ne...

终、球不落地,永不放弃

闻くは一瞬の耻、闻かぬは一生の耻。 俗话说:不耻下问是一时之耻,耻而不问是一生之耻。 — 井口佑未...

[Day20]C# 鸡础观念- 物件导向(oop)基本观念

在程序语言中, 我们不只要掌握基本的语法, 还要去融会贯通, 掌握它的精随所在, 而物件导向正是C...