OpenBase关于一致性,可用性,分区容错性(CAP)分析
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)分析相关推荐
- 分布式系统设计权衡之CAP(一致性,可用性,分区容错性)
https://blog.csdn.net/Sun_P0/article/details/50221787 写在最前: 1.为什么学习并记录分布式设计理念一系列相关的东西 在日常工作中系统设计评审的时 ...
- 了解CAP(一致性、可用性、分区容错性)
CAP概念 CAP是一致性(Consistency).可用性(Availability).分区容错性(Partition Tolerance)的简称. (1)一致性(C):保证"读& ...
- 详解 CAP 定理 Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)
详解 CAP 定理 Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性) CAP原则又称CAP定理,指的是在一个分布式系统中,C ...
- 一致性(Consistency),可用性(Avilable),分区容错性(Tolerance of network Partition)
网络摘抄理解: 一致性:读操作总是能读取到之前完成的写操作结果,满足这个条件的系统称为强一致系统,这里的"之前"一般对同一个客户端而言: 可用性:读写操作在单台机器发生故障的情况下 ...
- 阿里技术专家甘盘:浅谈双十一背后的支付宝LDC架构和其CAP分析
简介:汤波(甘盘),男,1989/02/21,硕士学历.高中开始编程,热爱技术,深信技术让世界更美好.对前沿技术一直保持饥饿感,热衷于创新和革新,让系统体制更为高效和人性化,也深知一个人强走的快,一个 ...
- 分布式系统架构系列讲解一(分布式一致性 1):CAP理论
分布式系统架构系列讲解 - 总目录 集中式应用进行服务化拆分后,必然会出现一个问题:如何保证各个节点(Node)之间的数据一致性? 比如以下场景:用户首先发起一次更新操作,映射到节点A:然后,用户又做 ...
- 进入U盘PE系统无法识别硬盘分区的原因分析和解决方法
进入U盘PE系统无法识别硬盘分区的原因分析和解决方法 时间:2015-07-15 来源:http://www.xitongtiandi.com/ 复制网址 进入U盘PE系统 ...
- MySQL怎么运行的系列(十一)快照读、锁定读、半一致性读 和 加锁语句分析
本系列文章目录 展开/收起 MySQL怎么运行的系列(一)mysql体系结构和存储引擎 MySQL怎么运行的系列(二)Innodb缓冲池 buffer pool 和 改良版LRU算法 Mysql怎么运 ...
- 读取miscdata分区的简要分析
读取miscdata分区的简要分析 一. 简单使用,使用AIDL的方式调用读写的方法 1. 添加aidl接口,注意保持包名类名的一致 package com.sprd.engineermode;int ...
最新文章
- 为什么处理排序数组要比处理未排序数组快?
- H5页面遮罩弹框下层还能滚动的问题
- pandas.read_csv() 报错 OSError: Initializing from file failed,报错原因分析和解决方法
- python之函数名称空间,作用域,嵌套函数
- c语言中数组大小10000,C语言,怎么存一个很大的数,比方说10000的阶乘
- a标签去掉下划线_html中a标签的一些用法
- win7下卸载linux系统(不用windows光盘)
- 如何将拷贝过来的数据 *.ibd 文件生效
- 信息学奥赛一本通 1149:最长单词2 | OpenJudge NOI 1.13 16
- [模板]fhqTreap
- 主成分分析R语言实现
- c语言中字符串变量怎么定义,字符串变量是什么意思
- 计算机c盘要满了电脑会卡吗,电脑卡就一定是C盘装太满吗?
- SQL- With as 用法
- JVAV面试常考基础概念
- 什么是模式识别,对抗学习是什么?
- Service unavailable是什么意思?是网站有问题吗?怎么解决?
- 西游记的四种性格和生活的人
- 关于Android Toast
- Raid Card CC(consistency check )