CockroachDB:分布式交易与高可用设计解析
"这篇文章主要介绍了分布式数据库CockroachDB的设计与架构,强调其高可用性、全球一致性以及ACID事务支持。" CockroachDB是一个分布式键值存储系统,其核心设计目标是实现全局一致性和高生存能力。系统能够容忍硬盘、机器、机架甚至数据中心的故障,并能在最小的延迟中断下自动恢复,无需人工干预。系统中的节点是对称的,旨在实现单一二进制部署和最少的配置需求。 在数据结构方面,CockroachDB实现了单个、整体排序的键值映射,其中键和值都是字节字符串。系统可线性扩展,理论上支持高达4EB(4艾字节)的逻辑数据。映射由一个或多个范围组成,每个范围的数据存储在RocksDB(LevelDB的一个变种)中,并在三个或更多的Cockroach服务器之间进行复制。范围由起始和结束键定义,并根据全局可配置的最小/最大大小区间进行合并和拆分,以保持理想的范围大小。默认情况下,范围大小目标为64MB,便于快速的合并和拆分,以及在键范围内分散热点负载。 对于单个范围的修改,CockroachDB采用分布式共识算法(选择了Raft算法)来确保一致性。所有共识状态都存储在RocksDB中。 逻辑上的修改可能涉及多对键值对,具有ACID事务语义。如果逻辑修改影响的所有键都在同一个范围内,原子性和一致性由Raft保证,这是快速提交路径。否则,会在受影响的范围之间使用非锁定的分布式提交协议。 CockroachDB提供快照隔离(SI)和可串行化的快照隔离(SSI)语义,允许外部一致且无锁的读写操作,既可以基于历史快照时间戳,也可以基于当前时钟时间。SI提供无锁读写但仍然存在写偏斜问题,而SSI消除了写偏斜,但可能会在高度竞争的系统中导致性能下降。SSI是默认的隔离级别,客户端需要明确选择性能与正确性的权衡。 数据库还支持类似Spanner的目录配置,允许根据需求优化性能和可用性来设置数据的复制因子、存储设备类型和/或数据中心位置。与Spanner不同,Cockroach的区域是整体的,不支持细粒度的实体组级别的数据移动。 CockroachDB还提供了一种类似于Megastore的消息队列机制,用于高效地处理可以异步执行的更新,并为分布式系统组件之间的异步通信提供集成的消息队列系统。 节点存储方面,每个节点都有自身的存储,范围元数据被管理并存储在RocksDB中。范围跨越了一个二叉树结构,通过Raft一致性算法保证范围副本的一致性。范围可以根据需要进行分裂和合并,以适应数据的增长和分布。节点分配是通过八卦协议完成的,确保了动态的网络拓扑调整。 此外,还有键前缀会计、区域和权限设置,以及两种API:键值API和结构化数据API,为用户提供了灵活的访问和操作数据的方式。 CockroachDB是一个可扩展的、支持事务的、地理复制的数据库,旨在提供强一致性和高可用性,同时具备灵活的数据管理和优化策略。
剩余26页未读,继续阅读
- 粉丝: 0
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言快速排序算法的实现与应用
- KityFormula 编辑器压缩包功能解析
- 离线搭建Kubernetes 1.17.0集群教程与资源包分享
- Java毕业设计教学平台完整教程与源码
- 综合数据集汇总:浏览记录与市场研究分析
- STM32智能家居控制系统:创新设计与无线通讯
- 深入浅出C++20标准:四大新特性解析
- Real-ESRGAN: 开源项目提升图像超分辨率技术
- 植物大战僵尸杂交版v2.0.88:新元素新挑战
- 掌握数据分析核心模型,预测未来不是梦
- Android平台蓝牙HC-06/08模块数据交互技巧
- Python源码分享:计算100至200之间的所有素数
- 免费视频修复利器:Digital Video Repair
- Chrome浏览器新版本Adblock Plus插件发布
- GifSplitter:Linux下GIF转BMP的核心工具
- Vue.js开发教程:全面学习资源指南