notebook notebook
首页
  • 计算机网络
  • 计算机系统
  • 数据结构与算法
  • 计算机专业课
  • 设计模式
  • 前端 (opens new window)
  • Java 开发
  • Python 开发
  • Golang 开发
  • Git
  • 软件设计与架构
  • 大数据与分布式系统
  • 常见开发工具

    • Nginx
  • 爬虫
  • Python 数据分析
  • 数据仓库
  • 中间件

    • MySQL
    • Redis
    • Elasticsearch
    • Kafka
  • 深度学习
  • 机器学习
  • 知识图谱
  • 图神经网络
  • 应用安全
  • 渗透测试
  • Linux
  • 云原生
面试
  • 收藏
  • paper 好句
GitHub (opens new window)

学习笔记

啦啦啦,向太阳~
首页
  • 计算机网络
  • 计算机系统
  • 数据结构与算法
  • 计算机专业课
  • 设计模式
  • 前端 (opens new window)
  • Java 开发
  • Python 开发
  • Golang 开发
  • Git
  • 软件设计与架构
  • 大数据与分布式系统
  • 常见开发工具

    • Nginx
  • 爬虫
  • Python 数据分析
  • 数据仓库
  • 中间件

    • MySQL
    • Redis
    • Elasticsearch
    • Kafka
  • 深度学习
  • 机器学习
  • 知识图谱
  • 图神经网络
  • 应用安全
  • 渗透测试
  • Linux
  • 云原生
面试
  • 收藏
  • paper 好句
GitHub (opens new window)
  • Java开发

  • Python开发

  • Golang开发

  • Git

  • 软件设计与架构

  • 大数据与分布式系统

    • DDIA

    • MIT 6.824

      • Lecture 04 - VMware FT
      • Lecture 06 - Raft
        • 1. 脑裂(Split Brain)
      • Lecture 10 - Cloud Replicated DB, Aurora
    • 唐伟志-深入理解分布式系统

    • 专栏-大数据经典论文导读

    • 专栏-RPC实战与核心原理

  • 区块链

  • Nginx

  • 开发
  • 大数据与分布式系统
  • MIT 6.824
yubin
2023-09-25
目录

Lecture 06 - Raft

# 1. 脑裂(Split Brain)

前面介绍的几个具备 fault-tolerant 特性的系统都具有一个共同的特点:

  • MapReduce 复制了计算,但整个 MapReduce 都被一个单主节点控制
  • GFS 依赖一个单主节点 master 来控制每一份 chunk 的主拷贝位置
  • VMware FT 需要一个 test-and-set 服务来确认 primary VM 是谁

这三个例子中,它们都是一个多副本系统(replication system),但是在背后,它们存在一个共性:它们需要一个单节点来决定,在多个副本中,谁是 primary。

使用单节点的好处是它不会否认自己的决策,缺点是产生了单点故障(Single Point of Failure)。

所以,你可以认为我们前面介绍的这些系统,它们将系统容错的关键点,转移到了这个单点上。这个单点,会在系统出现局部故障时,选择数据的主拷贝来继续工作。使用单点的原因是,我们需要避免脑裂(Split-Brain)。当出现故障时,我们之所以要极其小心的决定数据的主拷贝,是因为,如果不这么做的话,我们可能需要面临脑裂的场景。

脑裂问题是上世纪80年代之前要面临的挑战,那时的人们在构建多副本系统时,需要排除脑裂的可能,当时主要有两种技术:

  1. 第一种是构建一个不可能出现故障的网络。其实我们的电脑中连接了 CPU 和内存的线路就是不可能出现故障的网络。所以,带着合理的假设和大量的资金,同时小心的控制物理环境,比如不要将一根网线拖在地上,让谁都可能踩上去。如果网络不会出现故障,这样就排除了脑裂的可能。这里做了一些假设,但是如果有足够的资金,人们可以足够接近这个假设。当网络不可能出现故障时,那就意味着,如果客户端不能与一个服务器交互,那么这个服务器肯定是关机了。
  2. 另一种就是人工解决问题,不要引入任何自动完成的操作。默认情况下,客户端总是要等待两个服务器响应,如果只有一个服务器响应,永远不要执行任何操作。相应的,给运维人员打电话,让运维人员去机房检查两个服务器。要么将一台服务器直接关机,要么确认一下其中一台服务器真的关机了,而另一个台还在工作。所以本质上,这里把人作为了一个决策器。而如果把人看成一台电脑的话,那么这个人他也是个单点。

所以,很长一段时间内,人们都使用以上两种方式中的一种来构建多副本系统。这虽然不太完美,因为人工响应不能很及时,而不出现故障的网络又很贵,但是这些方法至少是可行的。

编辑 (opens new window)
上次更新: 2023/09/29, 16:03:57
Lecture 04 - VMware FT
Lecture 10 - Cloud Replicated DB, Aurora

← Lecture 04 - VMware FT Lecture 10 - Cloud Replicated DB, Aurora→

最近更新
01
Deep Reinforcement Learning
10-03
02
误删数据后怎么办
04-06
03
MySQL 一主多从
03-22
更多文章>
Theme by Vdoing | Copyright © 2021-2024 yubincloud | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×