什么是 MultiRaft

这里引用 Cockroach ( MultiRaft 的先驱,出来的比 TiDB 早 )对 MultiRaft 的定义:

In CockroachDB, we use the Raft consensus algorithm to ensure that your data remains consistent even when machines fail. In most systems that use Raft, such as etcd and Consul, the entire system is one Raft consensus group. In CockroachDB, however, the data is divided into ranges, each with its own consensus group. This means that each node may be participating in hundreds of thousands of consensus groups. This presents some unique challenges, which we have addressed by introducing a layer on top of Raft that we call MultiRaft.

在 CockroachDB 中,我们使用 Raft 一致性算法来确保在机器发生故障时数据也能保持一致。在大多数使用 Raft 的系统中,如 etcd 和 Consul,整个系统只有一个 Raft 共识组。然而,在 CockroachDB 中,数据被分成不同的范围,每个范围都有自己的共识组。这意味着每个节点都可能参与成千上万个共识组。这就提出了一些独特的挑战,我们通过在 Raft 之上引入一层 MultiRaft 来解决这些问题。

简单来说,MultiRaft 是在整个系统中,把所管理的数据按照一定的方式切片,每一个切片的数据都有自己的副本,这些副本之间的数据使用 Raft 来保证数据的一致性,在全局来看整个系统中同时存在多个 Raft-Group,就像这个样子:

MultiRaft 需要解决的问题

单个 Raft-Group 在 KV 的场景下存在一些弊端:

(1) 系统的存储容量受制于单机的存储容量(使用分布式存储除外)。

(2) 系统的性能受制于单机的性能(读写请求都由Leader节点处理)。

MultiRaft 需要解决的一些核心问题:

(1) 数据何如分片。

(2) 分片中的数据越来越大,需要分裂产生更多的分片,组成更多 Raft-Group。

(3) 分片的调度,让负载在系统中更平均(分片副本的迁移,补全,Leader 切换等等)。

(4) 一个节点上,所有的 Raft-Group 复用链接(否则 Raft 副本之间两两建链,链接爆炸了)。

(5) 如何处理 stale 的请求(例如 Proposal 和 Apply 的时候,当前的副本不是 Leader、分裂了、被销毁了等等)。

(6) Snapshot 如何管理(限制Snapshot,避免带宽、CPU、IO资源被过度占用)。

要实现一个 Multi-Raft 还是很复杂和很有挑战的一件事情。

Raft论文翻译:https://blog.csdn.net/qq_38289815/article/details/104314348

转载自:https://my.oschina.net/u/2244142/blog/1609103

什么是 MultiRaft ?相关推荐

  1. Distributed Database System —— Multi-raft协议介绍

    文章目录 Multi-Raft协议 Multi-Raft需要解决的问题 Multi-Raft实现细节 Cockroach Multi-Raft Raft - Consistency of Range ...

  2. Apache Ratis中的multi-raft实现原理

    文章目录 前言 Single-Raft模式 Multi-raft改进 引用 前言 在之前笔者写过一篇关于Ozone利用Apache Ratis multi-raft功能来提升其系统的throughpu ...

  3. 百度信息流和搜索业务中的KV存储实践

    导读:近年来,云原生化.全用户态.软硬协同等技术对KV存储服务产生了巨大的影响,上述技术在极大提升了服务的性能和降低服务成本的同时,也对系统的架构和实现提出了新的要求.百度在信息流和搜索业务中大量使用 ...

  4. 亿级数据湖统一存储技术实践

    导读:OPPO是一家智能终端制造公司,有着数亿的终端用户,手机 .IoT设备产生的数据源源不断,设备的智能化服务需要我们对这些数据做更深层次的挖掘.海量的数据如何低成本存储.高效利用是大数据部门必须要 ...

  5. 分库分表 vs NewSQL数据库

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 蚊子squirrel 来源 | https:/ ...

  6. 一个数据库存储架构的独白

    本文由云+社区发表 本文作者:许中清,腾讯云自研数据库CynosDB的分布式存储CynosStore负责人.从事数据库内核开发.数据库产品架构和规划.曾就职于华为,2015年加入腾讯,参与过TBase ...

  7. 阿里云、Amazon、Google云数据库方案架构与技术分析

    http://www.infoq.com/cn/articles/cloud-database-schema-and-technical-analysis 一切都会运行在云端」. 云时代早已来临,本文 ...

  8. 强!分库分表与分布式数据库技术选项分析

    最近经常被问到分库分表与分布式数据库如何选择,网上也有很多关于中间件+传统关系数据库(分库分表)与NewSQL分布式数据库的文章,但有些观点与判断是我觉得是偏激的,脱离环境去评价方案好坏其实有失公允. ...

  9. 自研云原生数据仓库AnalyticDB再破权威评测TPC-DS世界纪录!

    北京时间 2020/5/4 青年节,TPC(全球最知名非盈利的数据管理系统评测基准标准化组织)官网正式上线AnalyticDB TPC-DS成绩,AnalyticDB通过严苛的TPC-DS全流程测试, ...

最新文章

  1. 新手如何学习云计算大数据,云计算的学习路线
  2. UVA1587-Box
  3. python装饰器实例-基于Python 装饰器装饰类中的方法实例
  4. Xshell 命令后台执行
  5. GPU Gems1 - 17 环境遮挡
  6. js中变量作用域的小理解
  7. 大话设计模式之设计模式遵循的七大原则
  8. 计算机绘图实训任务书,2012-2cad实训任务书与指导书.pdf
  9. java的栈堆的理解_理解堆与栈 - 一步一个脚印 - BlogJava
  10. 《Python编程从入门到实践》记录之Python函数定义、使用
  11. Redis签到功能设计与实现
  12. 封装一个操作文件的函数
  13. 如何添加行号 c语言,如何为程序代码加上行号
  14. Oracle数据把持和控制言语详解-1
  15. 推荐的MyBatis传参方式List、数组等
  16. 不懂PS怎么修改图片尺寸?
  17. oracle中同义词的用法,Oracle中定义以及使用同义词的方法
  18. 以太坊源码阅读【Transaction(交易模块)】
  19. Python实现淘宝准点抢单!双十一秒杀神器啊!还不来学?
  20. 电脑如何共享代理到wifi

热门文章

  1. 5种IO模式形象的比喻
  2. javaScript 内存管理机制
  3. 你不知道的 IDEA Debug 调试小技巧!
  4. 原来这才是日志打印的正确姿势!
  5. 计算密集型服务 性能优化实战始末
  6. 【城市沙龙】LiveVideoStack Meet|上海:流媒体无处不在
  7. TEG《选择》乘风破浪 · 披荆斩棘
  8. Linux shell脚本基础学习详细介绍(完整版)2
  9. valgrind 常见错误提示信息
  10. ST新一代烧写工具 STM32CubeProgrammer