排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
很多人都搞混的概念1:数据一致性
很多人都搞混的概念1:数据一致性
天下观查
2024-02-22
99
正文
1400
字
,阅读时间
3
分钟,
记得
关注吆
~
在昨天在整理OceanBase和TiDB/CRDB中一致性协议区别时,说到了数据一致性,当时就想起了以前遇到的让人啼笑皆非之事。
经常有人在了解某分布式数据库采用了raft/paxos以后,又知道这些协议是多数派一致性时,就惊讶的合不拢嘴,发出惊呼“这个分布式数据库竟然不是强一致性,这怎能用在银行核心的交易系统呢,银行疯啦么~~!”
显然,发出这一惊呼的人,把分布式数据库中的两个数据一致性搞混了。现在的新技术存在多层次、复杂的概念,部分原理相近,甚至定义词汇都一样,但是功能却完全不同的技术点,这也难免让人搞混。
数据一致性在分布式数据库中有两个概念:
其一,分布式事务中的数据一致性,而且几乎所有的分布式数据库在这里都是强一致的;不用怀疑,否则那真的没办法支撑准确的交易业务。
其二,是存储层同一份数据多个副本之间的数据一致性。在分布式数据库中,为了实现高可用性,设计了数据的多副本分散存储,因此引入了分布式一致性协议paxos/raft等多数派算法进行同步复制。一般也只有在存储层才用到了这些协议。
经常有人把这两个概念混为一谈,所以才会发出那样啼笑皆非的惊呼。
我们可以用cockroachdb的insert流程简单看一下原生分布式数据库在面对分布式事务时,整体事务过程和存储层是如何配合保证数据一致性的。(为什么我总是用crdb和ob、tidb三者比较呢?因为crdb有一个非常有意思的特征让我很早以前就关注了,就是彻底去中心化的架构设计。Crdb中完全没有管理节点,所有节点对等部署,这个我们留着后面在展开介绍。)
如上图有a,b,c...g共7个节点的crdb集群,根据无中心的特性,应用可以连接任意节点,发送SQL请求。
假设,其连接节点d发送了一条SQL,向表Table中插入了3条数据。而恰好3,4,5这三个值被分到3个不同的range切片中存储,这3个切片也可能不在同一节点上(其实在不在同一个节点上,事务流程基本没差别),这就是典型的分布式事务场景。
被连接的节点d会充当事务协调节点的角色,对SQL进行解析,将数据拆分,发送给3个range切片的leader副本所在节点(即b,d,f节点),由每个leader执行各自数据的写入操作。
只有当bdf三个节点都反馈“写入完成”,协调节点d才会反馈客户端数据写成功!为了保障分布式事务的强一致性,数据库需要用到事务授时/ID、两阶段提交、时间戳排序、锁等多种技术融合在一起。
那么,bdf三个节点是如何实现“写入完成”的呢?这就是存储引擎的工作,也是前面说的常被人误解的地方。
用其中节点b执行put(3)做示例,执行模块向对应的切片leader(副本)发送写入请求,leader接到数据写入时,会判断这行数据操作是否存在冲突,不冲突那么他就将数据写入本地存储中。
Leader写完后,会通过raft协议同时并行向2个follower副本(a、c节点)同步日志。leader只要接收到任1个follower“复制完成”,其就可以向上层(执行模块)反馈 “写入完成”。
所以,如果某一个节点故障,丢了一个follower副本,那么对存储引擎的“写入完成”没有任何影响,如果丢失的副本正好是leader副本,那么也能保障至少有一个follower存储已提交的数据,并通过重新选主成为新的leader。如此数据的安全性和业务的连续性都有保障。这就是在存储引擎中用多数派一致性协议的基本价值。
当然,以上演示仅简要说明了数据一致性在两个层次中的简要概念,实际运行过程中有非常繁琐、复杂的工程逻辑在里面,并且不同的数据库处理细节也完全不同。在这里我们只需要知道分布式数据库中有“存储层同一份数据的多个副本数据一致性”和“分布式事务处理中的多份(行)数据一致性”,两者有互相关联,但又完全不同。
END
推荐阅读
信创|
信创名录公布 | 分布式名单要4-5月发布
信创|
国产突围之路:自研还是开源魔改?
信创|
国产技术走封闭路线,必是死路一条!
信创|
国产技术,为什么不得人心?
信创|
国产数据库为何“人尽可研”?
信创|
数据库趋势 | 不是集中式,不是分布式
数据库|
原生分布式应具备的3个基本特征!
数据库|
OB和TiDB的区别1:Paxos/Raft
新闻|
谷歌工程师凶残杀妻,是IT工程师的悲凉
新闻|
震碎三观:记者竟然奉行没做不了的新闻
职场|
入行数据库10多年,第一次后悔了
...
职场|
35+经验丰富,却不受待见的5个原因...
职场|
售前犯的错 | 错把“很大”“很多”当需求
职场|
售前犯的错 | 错把“想法”当“方案”
扫码关注
支持一下
点赞、在
看
、
转发
,也非常感谢~~
文章转载自
天下观查
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨