一致性问题的相关笔记

9/18/2017
1. 事务操作的ACID特性

数据库设计事务处理的时候通常会借助于ACID特性来保证写入和更新资料的数据完整可靠,这ACID特性指的是:

  • 原子性atomicity: 事务处理必须被认为是一个不可分割的最小化单元,要么提交完毕 要么从未执行全部回滚,就像是从未发生。可以将多个操作转为一个原子操作,确保完全的执行完毕,或者从未发生。

  • 一致性consistency:保证数据的一致性,不会违反任何的数据的限制,甚至是业务限制,特别是关联数据中不会对于数据不一致的情况。

  • 隔离性isolation: 一般数据处理过程可以允许多个事务同时处理,并且对于其他的进程不可见,其他进程看到的还是未操作之前的状态,直到所有都做完。

  • 持久性durability: 事务操作结束后,数据的修改变为永久操作,任何系统崩溃也不会造成数据的丢失。100%的持久性几乎不可能实现的。

一个ACID的数据库,需要更多的操作来完成安全的检查,因此对于硬件的需求也就会更多,性能要求更高。

2. CAP定理

CAP定理指的是分布式系统中,系统设计本身无法满足以下三点:

  1. 一致性(Consistence):所有分布式的节点都可以访问最新的数据内容,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。如果能容忍后续的部分或者全部访问不到,则是弱一致性。如果经过一段时间后要求能访问到更新后的数据,则是最终一致性

  2. 可用性(Availability):每次请求都可以得到响应,但是不一定是最新的数据。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。可用性通常情况下可用性和分布式数据冗余负载均衡等有着很大的关联。

  3. 分区容错性(Network partitioning): 相对于分布式节点中通信的时限要求,如果无法达到数据的一致性,则会产生分区,如果在网络故障(某个节点故障或者网络分区故障)的时候,是否能够仍旧满足一致性和可用性。在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,或者是机器之间有网络异常,将分布式系统分隔未独立的几个部分,各个部分还能维持分布式系统的运作,这样就具有好的分区容错性 。

enter image description here

上面的图中,一般g关系数据库会倾向于CA而一些NoSQL更倾向于CP或者AP,比如MongoDB在产生分区的时候,一般更倾向于一致性而不是可用性,比如当主节点失效的时候,系统除非选择出了真正的主节点,否则会无法写入信息。

对于两个节点处于分区的两侧,允许至少一个节点更新数据会导致数据不一致,影响一致性。如果关闭一个节点可以达到一致性但是会丧失可用性,两个节点的互相通信,保证了一致性和可用性,但是会丧失分区容错性。

ACID的C指的是事务不能破坏任何数据库规则,如键的唯一性。与之相比,CAP的C仅指单一副本这个意义上的一致性,因此只是ACID一致性约束的一个严格的子集。

enter image description here

作为一个分布式系统,它和单机系统的最大区别,就在于网络,现在假设一种极端情况,N1和N2之间的网络断开了,我们要支持这种网络异常,相当于要满足分区容错性,能不能同时满足一致性和响应性呢?还是说要对他们进行取舍

假设在N1和N2之间网络断开的时候,有用户向N1发送数据更新请求,那N1中的数据V0将被更新为V1,由于网络是断开的,所以分布式系统同步操作M,所以N2中的数据依旧是V0;这个时候,有用户向N2发送数据读取请求,由于数据还没有进行同步,应用程序没办法立即给用户返回最新的数据V1,怎么办呢?有二种选择,第一,牺牲数据一致性,响应旧的数据V0给用户;第二,牺牲可用性,阻塞等待,直到网络连接恢复,数据更新操作M完成之后,再给用户响应最新的数据V1。

这个过程,证明了要满足分区容错性的分布式系统,只能在一致性和可用性两者中,选择其中一个。

分布式系统中,主机众多,部署分散,集群等因素,分区的容错性和可用性一般会优先考虑,而一致性问题会考虑一种最终一致性的方案,尽量不影响用户的访问体验。而涉及金钱交易的往往考虑的是一致性高于其他两个,即便是不可用也不能导致数据的不一致。

3. BASE原理

eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)

基本可用 指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用,比如电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。

软状态 是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。

最终一致性 是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。


数据库技术 页面已被访问139次

发表评论