OceanBase 的 CAP 分析

单元化架构中的成千山万的应用就像是计算器,本身无 CAP 限制,其 CAP 限制下沉到了其数据库层,也就是蚂蚁自研的分布式数据库 OceanBase(本节简称 OB)。

在 OB 体系中,每个数据库实例都具备读写能力,具体是读是写可以动态配置。
实际情况下大部分时候,对于某一类数据(固定用户号段的数据)任意时刻只有一个单元会负责写入某个节点,其他节点要么是实时库间同步,要么是异步数据同步。
OB 也采用了 PAXOS 共识协议。实时库间同步的节点(包含自己)个数至少需要 (N/2)+1 个,这样就可以解决分区容忍性问题。
下面我们举个马老师改英文名的例子来说明 OB 设计的精妙之处:假设数据库按照用户 ID 分库分表,马老师的用户 ID 对应的数据段在 [0-9],开始由单元 A 负责数据写入。

假如马老师(用户 ID 假设为 000)正在用支付宝 App 修改自己的英文名,马老师一开始打错了,打成了 Jason Ma,A 单元收到了这个请求。
这时候发生了分区(比如 A 网络断开了),我们将单元 A 对数据段 [0,9] 的写入权限转交给单元 B(更改映射),马老师这次写对了,为 Jack Ma。
而在网络断开前请求已经进入了 A,写权限转交给单元 B 生效后,A 和 B 同时对 [0,9] 数据段进行写入马老师的英文名。
假如这时候都允许写入的话就会出现不一致,A 单元说我看到马老师设置了 Jason Ma,B 单元说我看到马老师设置了 Jack Ma。
然而这种情况不会发生的,A 提议说我建议把马老师的英文名设置为 Jason Ma 时,发现没人回应它。

因为出现了分区,其他节点对它来说都是不可达的,所以这个提议被自动丢弃,A 心里也明白是自己分区了,会有主分区替自己完成写入任务的。
同样的,B 提出了将马老师的英文名改成 Jack Ma 后,大部分节点都响应了,所以 B 成功将 Jack Ma 写入了马老师的账号记录。
假如在写权限转交给单元 B 后 A 突然恢复了,也没关系,两笔写请求同时要求获得 (N/2)+1 个节点的事务锁,通过 no-wait 设计,在 B 获得了锁之后,其他争抢该锁的事务都会因为失败而回滚。

下面我们分析下 OB 的 CAP:

分区容忍性:OB 节点之间是有互相通信的(需要相互同步数据),所以存在分区问题,OB 通过仅同步到部分节点来保证可用性。这一点就说明 OB 做了分区容错。

可用性分区容忍性:OB 事务只需要同步到 (N/2)+1 个节点,允许其余的一小半节点分区(宕机、断网等),只要 (N/2)+1 个节点活着就是可用的。

极端情况下,比如 5 个节点分成 3 份(2:2:1),那就确实不可用了,只是这种情况概率比较低。

一致性分区容忍性:分区情况下意味着部分节点失联了,一致性显然是不满足的。但通过共识算法可以保证当下只有一个值是合法的,并且最终会通过节点间的同步达到最终一致性。

所以 OB 仍然没有逃脱 CAP 魔咒,产生分区的时候它变成 AP+最终一致性(C)。整体来说,它是 AP 的,即高可用和分区容忍。

OpenBase关于一致性,可用性,分区容错性(CAP)分析相关推荐

  1. 分布式系统设计权衡之CAP(一致性,可用性,分区容错性)

    https://blog.csdn.net/Sun_P0/article/details/50221787 写在最前: 1.为什么学习并记录分布式设计理念一系列相关的东西 在日常工作中系统设计评审的时 ...

  2. 了解CAP(一致性、可用性、分区容错性)

    CAP概念 CAP是一致性(Consistency).可用性(Availability).分区容错性(Partition Tolerance)的简称.     (1)一致性(C):保证"读& ...

  3. 详解 CAP 定理 Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)

    详解 CAP 定理 Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性) CAP原则又称CAP定理,指的是在一个分布式系统中,C ...

  4. 一致性(Consistency),可用性(Avilable),分区容错性(Tolerance of network Partition)

    网络摘抄理解: 一致性:读操作总是能读取到之前完成的写操作结果,满足这个条件的系统称为强一致系统,这里的"之前"一般对同一个客户端而言: 可用性:读写操作在单台机器发生故障的情况下 ...

  5. 阿里技术专家甘盘:浅谈双十一背后的支付宝LDC架构和其CAP分析

    简介:汤波(甘盘),男,1989/02/21,硕士学历.高中开始编程,热爱技术,深信技术让世界更美好.对前沿技术一直保持饥饿感,热衷于创新和革新,让系统体制更为高效和人性化,也深知一个人强走的快,一个 ...

  6. 分布式系统架构系列讲解一(分布式一致性 1):CAP理论

    分布式系统架构系列讲解 - 总目录 集中式应用进行服务化拆分后,必然会出现一个问题:如何保证各个节点(Node)之间的数据一致性? 比如以下场景:用户首先发起一次更新操作,映射到节点A:然后,用户又做 ...

  7. 进入U盘PE系统无法识别硬盘分区的原因分析和解决方法

    进入U盘PE系统无法识别硬盘分区的原因分析和解决方法 时间:2015-07-15     来源:http://www.xitongtiandi.com/    复制网址        进入U盘PE系统 ...

  8. MySQL怎么运行的系列(十一)快照读、锁定读、半一致性读 和 加锁语句分析

    本系列文章目录 展开/收起 MySQL怎么运行的系列(一)mysql体系结构和存储引擎 MySQL怎么运行的系列(二)Innodb缓冲池 buffer pool 和 改良版LRU算法 Mysql怎么运 ...

  9. 读取miscdata分区的简要分析

    读取miscdata分区的简要分析 一. 简单使用,使用AIDL的方式调用读写的方法 1. 添加aidl接口,注意保持包名类名的一致 package com.sprd.engineermode;int ...

最新文章

  1. 为什么处理排序数组要比处理未排序数组快?
  2. H5页面遮罩弹框下层还能滚动的问题
  3. pandas.read_csv() 报错 OSError: Initializing from file failed,报错原因分析和解决方法
  4. python之函数名称空间,作用域,嵌套函数
  5. c语言中数组大小10000,C语言,怎么存一个很大的数,比方说10000的阶乘
  6. a标签去掉下划线_html中a标签的一些用法
  7. win7下卸载linux系统(不用windows光盘)
  8. 如何将拷贝过来的数据 *.ibd 文件生效
  9. 信息学奥赛一本通 1149:最长单词2 | OpenJudge NOI 1.13 16
  10. [模板]fhqTreap
  11. 主成分分析R语言实现
  12. c语言中字符串变量怎么定义,字符串变量是什么意思
  13. 计算机c盘要满了电脑会卡吗,电脑卡就一定是C盘装太满吗?
  14. SQL- With as 用法
  15. JVAV面试常考基础概念
  16. 什么是模式识别,对抗学习是什么?
  17. Service unavailable是什么意思?是网站有问题吗?怎么解决?
  18. 西游记的四种性格和生活的人
  19. 关于Android Toast
  20. Raid Card CC(consistency check )

热门文章

  1. QT乱码总结0.Qt乱码产生因素
  2. 判断程序是否运行在虚拟机中的代码
  3. 你不知道的 IDEA Debug 调试小技巧!
  4. (RabbitMQ) Java Client API Guide
  5. 高性能视频推理引擎优化技术
  6. 无处不在:iOS平台WebView终于支持WebRTC
  7. 泛广电领域的卫星传输和公网传输
  8. 音视频技术开发周刊 92期
  9. Java多线程之CAS缺点
  10. 前端性能分析工具利器