这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
一、 概述
1.1 What?
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。
1.2 优势与挑战
- 优势:去中心化、低成本、弹性(根据流量分配在线和离线资源)、资源共享、可靠性高(多副本冗余)。
- 挑战:普遍的节点故障、不可靠的网络(三态:对、错、未决)、异构的机器与硬件环境、安全。
二、 系统模型
2.1 故障模型
六种故障模型,从处理的难易程度分类(由难到易):
- Byzantine failure:节点可以任意篡改发送给其他节点的数据,是最难处理的故障(处理:对消息进行冗余和加密,期望能检测出篡改)
- Authentication detectable byzantine failure (ADB):节点可以篡改数据,但不能伪造其他节点的数据
- Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚(一下好,一下不好,不确定是否故障)
- Omission failure:节点收到数据的时间无限晚,即收不到数据(长时间未决,确定故障)
- Crash failure:节点停止响应,持续性的故障(只知道状态,不知道原因)
- Fail-stop failure:错误可检测,是最容易处理的故障(状态、原因)
2.2 拜占庭将军问题
拜占庭帝国军队的几个师驻扎在敌城外, 每个师都由各自的将军指挥. 将军们只能通过信使相互沟通. 在观察敌情之后, 他们必须制定一个共同的行动计划, 如进攻(Attack)或者撤退(Retreat), 且只有当半数以上的将军共同发起进攻时才能取得胜利. 然而, 其中一些将军可能是叛徒, 试图阻止忠诚的将军达成一致的行动计划. 更糟糕的是, 负责消息传递的信使也可能是叛徒, 他们可能篡改或伪造消息, 也可能使得消息丢失.
叛徒的目标就是让进攻失败
两种解决方案
- 口信消息型解决方案(A solution with oral message);
- 签名消息型解决方案(A solution with signed message).
推荐学习链接:拜占庭将军问题 (The Byzantine Generals Problem) - 知乎 (zhihu.com)
三、 理论基础
3.1 CAP理论
CAP的定义,分别代表一致性、可用性、分区容错性。三者无法同时达到
一致性(Consistence):指数据在多个副本之间能够保持一致的特性(严格一致性)。
可用性(Availability):指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应----但是不保证数据是最新的。
分区容错性(Network partitioning):分布式系统在遇到任何网络分区故障的时候,仍能对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。
CAP诞生了三类系统:
- CA系统:放弃分区容错,传统单机数据库。
- AP系统:放弃强一致性,保证高可用,不少nosql存储系统采用,注重用户体验的系统。
- CP系统:放弃可用性,保证数据一致性,注重安全的系统。
3.2 ACID理论
事务是数据库管理系统执行过程的一个逻辑单元,一个事务中的所有操作要么全部执行,要么全部不执行。
数据库事务拥有四个特性ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
3.3 BASE理论
BASE理论是针对AP系统而言的,其来源于对大型互联网分布式实践的总结
- Basically Available(基本可用):假设系统,出现了不可预知的故障,但还是能用
- Soft state(软状态):允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性
- Eventually consistent(最终一致性):数据最终一定能够达到一致的状态