这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
上篇笔记着重阐述了Lamport对于分布式系统研究后的相关算法,本节内容主要为现代分布式架构的理论基础。CAP理论
- CAP理论的中心思想是,任何存储系统(分布式或单机)都无法同时百分百的满足C(Consistence强一致性)A(可用性)P(分区容错性)这三个要求。
- 一致性:强一致性指的是要求分布式存储的副本能在提供服务的时保证百分百的数据副本一致性,当然这是不可能完成的要求,因为本身副本的同步就是需要时间的。
- 可用性:通俗理解即保证该系统一定能提供服务,不会出现拒绝服务或者无法服务的情况。包含潜在含义,即及时提供服务,服务业可能是有问题的。
- 分区容错性:最难实现的条件,网络是百分百不可靠的,如果部分分区出现错误,能保证其他分区仍能提供一致性和可用性的服务即分区容错性。
- CA系统:完全放弃分布式,即单机数据库系统。
- CP系统:对数据安全和一致性有要求的业务,例如银行的业务。
- AP系统:放弃分区容错性,这部分可以理解为,即使这部分服务错了也没什么关系,注重用户体验的业务,例如和视频流相关的业务。 -在分布式系统下,一致性和可用性一定会起冲突,但是通过使用备用负载我们可以近似解决该问题:当master节点发生问题时,可以将backup变为master,从而保证高可用性和一定的一致性。
ACID理论
- 首先ACID是建立在单机数据库而非分布式数据库上的,所以ACID是不考虑分区容错性的。
- ACID中最重要的概念是数据库的事务,事务是数据库管理系统执行过程中的一个基本逻辑单元。
- 数据库系统必须保证事务的原子性和事务执行前后状态的一致性。
- 注意:这里的一致性不是CAP理论中的强一致性,而是指事务执行前后单机数据库需要保证数据库系统中的某些量的关系保持一致。
- 隔离性和持久性在部分数据库中是不能完全保证的,例如Oracle数据库没法保证完全的并发事务隔离。
- MySQL无法保证事务对数据库数据改变的持久性,即提交的事务也能被数据库系统丢失。
BASE理论
- 建立在AP系统之上,即只需要保证最终一致性,老师举得例子是打游戏的话,追求的游戏过程中的体验,某个打出来装备掉落了暂时看不到(违反一致性),对玩家的体验影响也不会特别大,只要在游戏结束结算的时候表现出来即可,根据我的个人体验,大部分游戏也确实是这样做的。
- 基本内容:
- 基本可用:保证大概率的可用性,过高的可用性对一致性有很大的负面影响,因为可用意味着可以出错。
- 最终一致性:上面举的例子已经介绍过了,即保证最终结果的正确性即可。
- 软状态:允许数据存在中间状态,损失一部分不重要的容错性,保证可用性。