最近阅读了《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】1032 Sharing (25)(25 分)

    1032 Sharing (25)(25 分) To store English words, one method is to use linked lists and store a word l ...

  2. MVC 区域路

    VS2013和VS2015中MVC 区域路由匹配顺序相反   创建测试工程 分别在vs2013和vs2015中创建mvc项目,并创建First.Second.Three三个Area,每个Area下面创 ...

  3. koa+orm2

    koa+orm2 koa是由 Express 原班人马打造的新的web框架.套用其官方的说法:Koa 应用是一个包含一系列中间件 generator 函数的对象. 这些中间件函数基于 request ...

  4. 002.SMB安装与端口

    一 安装所需包 samba:主服务包 samba-client:客户端 samba-common:通用工具和宏文件,存在于客户端和服务端 samba-libs:库 samba-winbind:wind ...

  5. python3之Django模型(一)

    1.模型概述 模型是关于您的数据的唯一,明确的信息来源,它包含您正在存储的数据的重要字段和行为.通常,每个模型映射到单个数据库表. 每个模型都是一个子类的python类django.db.models ...

  6. python 修改文件中的内容

    在python的文件操作中,是没有办法对文件中具体某行或者某个位置的内容进行局部的修改的,如果需要对文件的某一行内容进行修改,可以先将文件中的所有的内容全部读取出来,再进行内容判断,是否是需要修改的内 ...

  7. [ 转载 ] Java中成员变量 和局部变量

    java语言支持的变量类型 类变量:独立于方法之外的变量,用 static 修饰. 局部变量:类的方法中的变量. 实例变量(全局变量):独立于方法之外的变量,不过没有 static 修饰. publi ...

  8. 火狐浏览器接口测试工具Poster

  9. BZOJ.1879.[SDOI2009]Bill的挑战(状压DP)

    题目链接 f定义和下面的思路一样,转移时枚举填什么字符,去更新f并算出有哪些字符串可以匹配某个状态(见code吧...). 预处理出有哪些字符串在第i位可以转移到某个字符c,dp时&一下状态即 ...

  10. [CC-XXOR]Chef and Easy Problem

    [CC-XXOR]Chef and Easy Problem 题目大意: 给你一个长度为\(n(n\le10^5)\)的序列\(A(A_i<2^{31})\).\(m(m\le10^5)\)次询 ...