读了一下CockroachDB的16年的设计翻译,找了一些CockroachDB的raft优化方法

1.选举优化,Cockroach使用随机时间,这样通信往返时间短的会更易第一个发起选举,更容易成为leader,减少了组内出现没有leader的时间

2.相对于tidb的multi raft来说,多了心跳合并的优化。减少了大量耗费在心跳上的流量,我不太清楚tidb的PD模块是不是也有这个功能。原理是引入了一种Node级别的lease,只要Node级别的lease有效,那么这个Node上的所有的raft group的leader的lease都是有效的。这样就不必频繁更新range级别的lease,只需要更新Node级别的lease即可

3.也有和tidb类似的分片过大拆分和过小合并政策,来控制multi raft组的数量

4.还有一个优化就是关闭某一些不活跃的raft group,基于的假设就是数据库这么大,其实,很多数据很长时间根本都碰不到,所以维护着lease没啥用。

5.范围租赁(Range Leases)优化,我看了一下介绍,感觉和tidb中的Lease Read读优化很像,也是确定一段时间的leader,将走raft确定leader的步骤优化了

粗略的看了一遍raft相关部分,优化部分提到的不多,而且感觉基本在tidb中都有相关的优化介绍

来源:

https://lihuanghe.github.io/2016/05/06/cockroachdb-design.html

https://github.com/cockroachdb/cockroach/blob/master/docs/design.md

以下是4个节点的store示意图。每个range都使用Raft协议复制3份。 相同颜色表示是相同的range副本。这里的架构和tidb的multiraft非常类似

Cockroach weights random timeouts such that the replicas with shorter round trip times to peers are more likely to hold elections first (not implemented yet).

Cockroach使用随机时间,这样通信往返时间短的会更易第一个发起选举。

Our Raft implementation was developed together with CoreOS, but adds an extra layer of optimization to account for the fact that a single Node may have millions of consensus groups (one for each Range). Areas of optimization are chiefly coalesced heartbeats (so that the number of nodes dictates the number of heartbeats as opposed to the much larger number of ranges) and batch processing of requests. Future optimizations may include two-phase elections and quiescent ranges (i.e. stopping traffic completely for inactive ranges).

Cockroach的Raft实现在CoreOS的基础上,增加额外的优化层,因为考虑到一个节点可能有几百万的一致性组(每个range一个)。少部分优化主要是合并心跳(与数量巨大的range相反,节点数量决定了心跳的数量)和 请求批处理。将来的优化还包括二阶段选举和静态range.

For these reasons, Cockroach introduces the concept of Range Leases: This is a lease held for a slice of (database, i.e. hybrid logical) time. A replica establishes itself as owning the lease on a range by committing a special lease acquisition log entry through raft. The log entry contains the replica node's epoch from the node liveness table--a system table containing an epoch and an expiration time for each node. A node is responsible for continuously updating the expiration time for its entry in the liveness table. Once the lease has been committed through raft the replica becomes the lease holder as soon as it applies the lease acquisition command, guaranteeing that when it uses the lease it has already applied all prior writes on the replica and can see them locally.

CockroachDB的raft优化相关推荐

  1. 一致性协议raft详解(四):raft在工程实践中的优化

    一致性协议raft详解(四):raft在工程实践中的优化 前言 性能优化 client对raft集群的读写 参考链接 前言 有关一致性协议的资料网上有很多,当然错误也有很多.笔者在学习的过程中走了不少 ...

  2. 开源数据库CockroachDB(二)

    上一篇:开源数据库CockroachDB(一) 转载自:CockroachDB中国社区 七.逻辑Map内容 逻辑上,Logical Map在用户实际数据前包含了一系列系统保留key-value对(由S ...

  3. 分布式 —— 基于Raft算法的KV服务

    第一章: CAP定理: 一致性:同步问题 可用性:高并发.性能高 分区容错性:选择备用 注意:实际情况中,这三个不能同时具备,往往会舍弃一个属性,一般分区容错性是优先考虑的,就只能从可用性和一致性中进 ...

  4. 分布式系统关注点(2)——烦人的数据不一致问题到底怎么解决?——通过“共识”达成数据一致性...

    阅读目录 "共识"是什么?为什么会产生? 拜占庭将军问题 BFT类算法 CFT类算法 结语 这次准备开启一个新的系列来写了,聊聊分布式系统中的关注点.节奏不会排的太紧凑,计划两周一 ...

  5. 漫话:如何给女朋友解释什么是语法糖?

    语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家Peter J. Landin发明的一个技术术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响, ...

  6. PCTP考试学习笔记之一:深入TIDB体系架构(下)

    作者: OnTheRoad 原文来源: https://tidb.net/blog/09cc69f4 本系列学习笔记根据官方课程<TiDB 高级系统管理 [TiDB v5]>整理,感谢官方 ...

  7. 漫话:如何给女朋友解释什么是Mock?

    某天晚上,接到测试的电话,他问为什么在日常环境我的接口使用不同的用户测试返回的内容都一样,我回答他:接口数据被我mock掉了,现在返回的都是mock数据.需要调一下mock的逻辑才行. 挂断电话之后, ...

  8. 聊聊Raft的性能优化

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权. 文章目录 引言 优化策略 Appe ...

  9. 让Raft变快100倍 - Dragonboat的写优化

    Dragonboat是近期开源的Go实现的多组Raft库,16字节荷载的写可以持续在900万次每秒,9:1高读写比下可以持续在超千万次每秒. 详细的benchmark信息可参考github项目首页,同 ...

最新文章

  1. 制作显示欢迎信息的脚本程序
  2. 2014 7-8月MoonCake新增功能更新
  3. 《Java程序设计》实验报告——Java的多线程机制
  4. Java中什么是字符串的拷贝_关于java中字符串对象的拷贝
  5. 使用MyEclipse构建MAVEN项目 - 我的漫漫程序之旅 - BlogJava
  6. 汇编学习笔记(4)-伪指令(MASM)
  7. excel导入 HSSFWorkbook和XSSFWorkbook
  8. 读中文_挑战来了!康辉喊你读中文十级绕口令!
  9. 为了释放AI在边缘计算的力量 英特尔又出手了
  10. java面试 数据库连接池_阿里面试官:数据库连接池有必要吗?你对它的底层实现了解过没?...
  11. canal kafka 环境搭建
  12. href 和 src 区别
  13. Hexo博客优化之Next主题美化
  14. simotion基本功能手册_深入浅出西门子运动控制器——SIMOTION实用手册(1CD)
  15. 计算机表格快捷键,EXCEL表格所有的快捷键《excel一键到底 快捷键》
  16. 原创玄幻小说--那时花开--第一章前序
  17. 用python画圣诞树的代码
  18. python安卓库拍照_Python Faker库的实战,用Faker库生成伪造的安卓通讯录
  19. sql语句(select,create,drop,alter,delete,insert,update,grant)
  20. 软件魔方制作系统启动盘并安装win7系统

热门文章

  1. day14_雷神_前端02
  2. 优思学院|ISO13485 的五十个问题|值得收藏
  3. Oracle 12c 升级 19c
  4. 【javase基础】第七篇:数组拷贝及Arrays常用方法
  5. 服务无法在此时接受控制信息
  6. layDate 日期与时间组件
  7. 元转分金额字符串转换:单位元转成单分
  8. 永磁同步电机(PMSM)
  9. msbuild 语法_MSBuild 命令行参考
  10. 使用JWT进行用户身份校验(基于token)