《从Paxos到Zookeeper:分布式一致性原理与实践》第一章读书笔记

第一章主要介绍了计算机系统从集中式向分布式系统演变过程中面临的挑战,并简要介绍了ACID、CAP和BASE等经典分布式理论,主要包含以下内容:

  1. 集中式的特点
  2. 分布式的特点
  3. 分布式环境的各种问题
  4. ACID
  5. 分布式事务
  6. CAP和BASE理论

集中式的特点:部署结构简单(因为基于底层性能卓越的大型主机,不需考虑对服务多个节点的部署,也就不用考虑多个节点之间分布式协调问题)

分布式的特点:

  • 分布性
  • 对等性
  • 并发性
  • 缺乏全局时钟
  • 故障总是会发生

分布式环境的各种问题:

  • 通信异常:主要是因为网络本身的不可靠性
  • 网络分区:当网络发生异常时,导致部分节点之间的网络延时不断增大,最终导致部分节点可以通信,而另一部分节点不能。
  • 三态(成功、失败与超时)
  • 节点故障:组成分布式系统的服务器节点出现宕机或“僵死”现象

事务是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元,狭义上的事务特指数据库事务。

事务有四个特性,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称为事务的ACID特性。

  • 原子性(Atomicity):必须是一个原子的操作序列单元,只允许出现两种状态之一(全部成功执行,全部不执行)。
  • 一致性(Consistency):不能破坏数据库数据的完整性和一致性,一个事务在执行前后,数据库必须处于一致性状态。
  • 隔离性(Isolation):相互隔离的,一个事务的执行不能被其他事务干扰。
  • 持久性(Durability):也称为永久性,一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。可以通过数据库备份和恢复来保证持久性。

事务四种隔离级别有未授权读取、授权读取、可重复读取和串行化。

  • 未授权读取(READ UNCOMMITTED):也称为读未提交,允许脏读取。
  • 授权读取(READ COMMITTED):也称为读已提交,允许不可重复读取。
  • 可重复读取(REPEATABLE READ):禁止了不可重复读取和脏读取,但是有可能出现幻影数据(指同样的事务操作,在前后两个两个时间段内执行对同一个数据项的读取,可能出现不一致的结果)。
  • 串行化(SERIALIXABLE):要求所有事务串行执行。

四种隔离级别的对比

隔离级别

脏读

可重复读

幻读

未授权读取

存在

不可以

存在

授权读取

不存在

不可以

存在

可重复读取

不存在

可以

存在

串行化

不存在

可以

不存在

事务隔离级别越高,就越能保证数据的完整性和一致性,但对并发性能的影响也越大。优先考虑将数据库的隔离级别设置为授权读取,能够避免脏读同时保证较好并发性能,会导致不可重复读、虚读和第二类丢失更新等并发问题,在可能出现这类问题的场合中,应主动采用悲观锁和乐观锁进行事务控制。

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。也可以被定义为一种嵌套型的事务,同时也具有了ACID事务特性。

CAP理论:一个分布式系统不可能同时满足一致性、可用性和分区容错性。

  • 一致性:数据在多个副本之间是否能够保持一致的特性。
  • 可用性:系统提供的服务必须一致处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。
  • 分区容错性:分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

从CAP定理看出,一个分布式系统不可能同时满足一致性、可用性和分区容错性这三个需求。对于一个分布式系统,分区容错性是一个最基本的需求。

BASE理论:是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

  • 基本可用:分布式系统在出现不可预知故障的时候,允许损失部分可用性。
  • 弱状态:也称软状态,允许系统在不同节点的数据副本之间进行数据同步存在延时。
  • 最终一致性:系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。

最终一致性存在以下五类变种:

  1. 因果一致性
  2. 读己之所写
  3. 会话一致性
  4. 单调读一致性
  5. 单调写一致性

总得来说BASE理论面向的是大型高可用可扩展的分布式系统,完全不同于ACID的强一致性模型,而是通过牺牲强一致性来获取可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。实际分布式场景中,ACID特性和BASE理论会结合在一起。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

maven命令大全

Maven常用命令: 创建Maven的普通Java项目: mvn archetype:create -DgroupId=packageName -Dartifa...

38150
来自专栏PingCAP的专栏

使用 Ansible 安装部署 TiDB

多机部署 TiDB 太繁琐?快来尝试我们的 TiDB 一键安装吧。本文介绍基于 Ansible Playbook 实现 TiDB 和监控组件的自动化安装和配置,...

1.5K00
来自专栏企鹅号快讯

修复 Linux/Unix/OS X/BSD 系统控制台上的显示乱码

有时我的探索会在屏幕上输出一些奇怪的东西。比如,有一次我不小心用 cat 命令查看了一下二进制文件的内容 —— cat /sbin/*。这种情况下你将无法再访问...

21390
来自专栏林德熙的博客

win10 uwp MVVM 语义耦合

最近在我写的框架,小伙伴告诉我,可能有语义耦合,那么本文就来告诉大家,为什么会出现语言耦合

9120
来自专栏大前端_Web

git submodule 完整用法整理

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

1.1K20
来自专栏LhWorld哥陪你聊算法

【Spark篇】---Spark中Shuffle文件的寻址

Spark中Shuffle文件的寻址是一个文件底层的管理机制,所以还是有必要了解一下的。

15350
来自专栏xingoo, 一个梦想做发明家的程序员

oracle多用户并发及事务处理

多用户并发访问 事务:作用于某些数据的一个不可分割的操作 锁:写锁、互斥锁(仅能被一个进程使用)      读锁、共享锁(可被多个进程使用) 更新丢失 脏读 不...

28270
来自专栏小白安全

Janus高危漏洞深度分析

一、背景介绍 近日,Android平台被爆出“核弹级”漏洞Janus(CVE-2017-13156),该漏洞允许攻击者任意修改Android应用中的代码...

36990
来自专栏向治洪

android混淆和反编译

混淆 Android Studio: 只需在build.gradle(Module:app)中的buildTypes中增加release的编译选项即可,...

28880
来自专栏向治洪

Android资源混淆打包方案

概述 我们知道在Android的打包过程中,有一个步骤是压缩,也是为了减少apk包的大小,其中在压缩的过程中,很大一部分就是对资源的压缩,除了系统的压缩方案之外...

469100

扫码关注云+社区

领取腾讯云代金券