最近阅读了《SRE Google运维解密》的第23章,有一些感触,记录一下。

日常工作中,我们经常需要一些服务分布式的运行。跨区域如跨城、跨洲部署运行分布式系统往往是容易的,但是如何保证各系统间状态的一致是困难的。如何保证服务的高可靠、高可用,就是服务提供的数据是准确的,关键在于一些状态的传递,这个时候就需要利用分布式共识系统来维护相关状态,确保大家拿到的状态信息最终是一致的。

要想实现一个分布式共识系统,需要采用一些经过理论验证的方案,最基础的就是CAP理论。

CAP 理论

CAP原则是指对于一个分布式系统,Consistency 一致性、Availability 可用性、Partition tolerance 分区容错性 三者是不可能同时满足的,换成通俗的说法就是:
1、每个节点上的所见数据是一致的
2、每个节点都可以访问数据
3、可以承受网络分区问题

CAP理论指出,对于分布式系统,最多能实现上面两点。同时由于现实环境中,网络分区问题迟早会发生(如光纤断、延时、丢包等问题),构建分布式系统就需要在高可用和一致性之间选择。

BASE 理论

我们对于传统的ACID数据存储语义(原子性、一致性、隔离性、持久性)很熟悉,这种方案为我们提供了数据的强一致性。但是分布式系统提供了的是另外一套语义,BASE语义(基本可用 basic available、软状态 soft state、最终一致性 eventual consistency)。ACID的问题在于遇到超大的数据集和事物时,需要很高的硬件成本,BASE就是用来解决此类问题,它是对CAP理论中可用性和一致性权衡的结果,其核心思想是即使无法做到强一致性,但应用可以根据自身的特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

基本可用:指分布式系统在出现不可预知故障的时候,允许损失部分可用性——但请注意,这绝不等价于系统不可用。
软状态:和硬状态相对,是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
最终一致性:强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。

分布式系统出现问题的场景

分布式系统出现问题主要是因为网络问题。

脑裂

对于使用心跳机制来提供高可用的服务,遇到网络问题时,可能存在服务同时提供主写或者同时挂掉的情况。这个问题说明,领头人选举不能通过简单的心跳来实现。

需要人工干预的灾备切换

对于 Mysql 的主从复制模式,利用外部程序监控主实例,根据主实例状态决定是否提升从节点成为主实例。这种解决方法提供了CP,没办法保证可用性A。

有问题的小组成员算法

使用 Gossip 算法进行领头人选举,在网络问题时,不能满足C,可以满足AP。

分布式共识问题解决方案 Paxos 协议

Paxos 协议本书没有详细的介绍,说的也不是很形象。可以参考生活中的Paxos,原来你我都在使用——对Paxos生活化的解读以及Paxos算法细节详解(一)--通过现实世界描述算法

下面这个图概括了协议中的几个角色及关系。

分布式共识算法是很底层、很原始的,真正有用的是基于此之上的系统组件,包括:数据存储、配置存储、队列、锁机制和领头人选举服务。

后面介绍了分布式共识的系统架构模式,包括了几个组件:可靠的复制状态机、领头人选举机制、分布式协调和锁服务、分布式队列和消息传递。

可靠的复制状态机

RSM (replicated state machine) 是一个能在多个进程中用同样顺序执行同样的一组操作的系统。

可靠的数据存储

领头人选举机制

分布式协调和锁

可靠的分布式队列和消息传递

性能问题

文中介绍了几种分布式共识问题提高性能的方法,没有最优的方案,需要根据不同的因子和场景来进行选择。

参考资料
1、SRE Google运维解密
2、生活中的Paxos,原来你我都在使用——对Paxos生活化的解读
3、Paxos算法细节详解(一)--通过现实世界描述算法
4、CAP原则
5、CAP原则(CAP定理)、BASE理论
6、

SRE学习笔记:分布式共识系统、Paxos协议的更多相关文章

  1. Linux学习笔记(七) 查询系统

    1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...

  2. 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus

    物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus 物联网 (IoT) 不只是新技术,还是与旧技术的集成,其关键在于通信.可用的通信方法各不相同,但是,各种不同的协议在将海量“事物”连接 ...

  3. [原创]java WEB学习笔记07:关于HTTP协议

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. [学习笔记] Numpy基础 系统学习

    [学习笔记] Numpy基础 上专业选修<数据分析程序设计>课程,老师串讲了Numpy基础,边听边用jupyter敲了下--理解+笔记. 老师讲的很全很系统,有些点没有记录,在PPT里就不 ...

  5. 学习笔记TF048:TensorFlow 系统架构、设计理念、编程模型、API、作用域、批标准化、神经元函数优化

    系统架构.自底向上,设备层.网络层.数据操作层.图计算层.API层.应用层.核心层,设备层.网络层.数据操作层.图计算层.最下层是网络通信层和设备管理层.网络通信层包括gRPC(google Remo ...

  6. Javaweb学习笔记2—Tomcat和http协议

      今天来讲javaweb的第二个阶段学习. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下 ...

  7. TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议

    把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数 ...

  8. FastSocket学习笔记~制定自已的传输协议

    对于TCP或者UDP来说,它们作于传输层的协议,有着自己的标准,或者叫格式,在我们看TCP格式之前先了解一下计算机的基础知识,字节,它是计算机世界的一个小单位,也是我们可以理会到的,如一个utf-8英 ...

  9. Linux学习笔记(三):系统执行级与执行级的切换

    1.Linux系统与其它的操作系统不同,它设有执行级别.该执行级指定操作系统所处的状态.Linux系统在不论什么时候都执行于某个执行级上,且在不同的执行级上执行的程序和服务都不同,所要完毕的工作和所要 ...

随机推荐

  1. 【PAT】1103 Integer Factorization(30 分)

    The K−P factorization of a positive integer N is to write N as the sum of the P-th power of K positi ...

  2. 兼容到ie10的js文件导出、下载到本地

    话不多说,上代码: try { let reader = new FileReader(); let blob = new Blob([res.data], { type: 'application/ ...

  3. ThinkPHP V5.0 正式版发布

    ThinkPHP5.0版本是一个颠覆和重构版本,官方团队历时十月,倾注了大量的时间和精力,采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持compose ...

  4. java学习之租车系统

    ​背景:有三种类型的车供给用户来租用​ ​要求:控制台用户交互界面,根据用户需求输出租车价格,结果如下: 创建租车类主要设计过程: 创建租车类 创建Car父类,包含四种属性成员,重写构造方法 创建三种 ...

  5. django邮件

    1.邮件变量 (django settings.py) ADMINS = [('JOHN','JOHN@example.com'),('zhang','zhang@example.com')] #设置 ...

  6. 初探Runloop(一)

    iOS 的最大特点就是运行时. 保证运行时的就是RunLoop 1.什么是RunLoop呢? 从字面理解就是:运行循环 引用下官方文档的介绍: A run loop is an event proce ...

  7. 链表用途&&数组效率&&链表效率&&链表优缺点

    三大数据结构的实现方式 数据结构 实现方式 栈  数组/单链表 队列  数组/双端链表 优先级队列 数组/堆/有序链表 双端队列 双向链表 数组与链表实现方式的比较 数组与链表都很快 如果能精确预测栈 ...

  8. Xamarin-Android_BaseAdapter 简单的复用

    Xamarin-Android_BaseAdapter 简单的复用 缘由: 本人是一枚 小菜 初学Xamarin-Android  正在学习ListView 控件 发现这个控件的自定义布局 用的那叫一 ...

  9. 数据库事务的属性-ACID和隔离级别

    1.数据库事务的属性-ACID(四个英文单词的首写字母): 1)原子性(Atomicity) 所谓原子性就是将一组操作作为一个操作单元,是原子操作,即要么全部执行,要么全部不执行. 2)一致性(Con ...

  10. Linux学习笔记02—磁盘分区

    下面介绍四种最常见的分区方式: (1)    最简单的分区方案. SWAP分区:即交换分区,建议大小是物理内存的1-2倍. /分区:建议大小在6GB以上. 使用以上的分区方案,所有的数据都在/分区上, ...