CockroachDB学习笔记——[译]Scaling Raft
- 原文链接:https://www.cockroachlabs.com/blog/scaling-raft/
- 原作者:Ben Darnell
- 原文日期:Jun 11, 2015
- 译:zifeiy
在CockroachDB中,我们使用木筏一致算法(Raft consensus algorithm)来确保即使是在及其发生故障的时候,你的数据也保持一致性。
在大多数使用木筏一致算法的数据库系统中——诸如etcd和Consul——这个系统是一个木筏一致群(Raft consesus group)。然而,在CockroachDB中,数据被分到了 范围(ranges) 中,每一个范围都有他自己的一个一致群。
这意味着每一个节点都有可能被分成成百上千的一致群。
这种形式提出了一种挑战,我们通过在顶层引入一层Raft(竹筏)来解决这个问题,我们将顶层的Raft曾作MultiRaft。
在单个范围(range)内,一个节点(node)(是一个,而不是三个或五个)被选举为领导者(leader),它周期性地向他的最随者们发送心跳消息。
当系统增长到包括更多的范围(range)时,处理心跳所需的流量也随之增加。
范围(range)的数量远比节点(node)的数量要多(保持范围的数量较小能够在节点失败的时候帮助提高恢复速度),这些许多的范围又会包含重叠的成员。
这就是引入MultiRaft的原因:
不是让每一个范围单独地运行Raft,而是管理整个节点的值域作为一个整体的组。
每一对节点在每一个时间点上只需要交换一次心跳,而不用考虑节点里面包含了多少个范围。
(译者的理解:每一个节点都将他其中的范围的所有心跳打包后一起发出去)
除了减少心跳网络流量,多阀(MultiRaft)也可以其他领域的效率。
举个例子,多阀仅仅需要少量的,固定数量的goroutines(通常3个),而不用在每一个范围(range)内都部署一个goroutine。
实现和测试一致性算法是一项艰巨的任务,所以我们很高兴能与来自CoreOS的etcd团队紧密合作,而不是重投开始便携这部分的代码。
etcd中的竹筏模拟 是建立在纯净抽象的基础上的,所以我们发现它很容易适应我们的不同寻常的需求,
并且我们已经有能力为etcd和社区做出相应改进。
CockroachDB学习笔记——[译]Scaling Raft的更多相关文章
- CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储
CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...
- CockroachDB学习笔记——[译]如何优化Go语言中的垃圾回收
原文链接:https://www.cockroachlabs.com/blog/how-to-optimize-garbage-collection-in-go/ 原作者:Jessica Edward ...
- CockroachDB学习笔记——[译]CockroachDB是如何进行分布式原子事务的
原文:How CockroachDB Does Distributed, Atomic Transactions 原文链接:https://www.cockroachlabs.com/blog/how ...
- CockroachDB学习笔记——[译]在CockroachDB中如何让在线模式更改成为可能
原文链接:https://www.cockroachlabs.com/blog/how-online-schema-changes-are-possible-in-cockroachdb/ 原作者: ...
- CockroachDB学习笔记——[译]Cgo的成本与复杂性
原文链接:https://www.cockroachlabs.com/blog/the-cost-and-complexity-of-cgo/ 原作者:Tobias Schottdorf 原文日期:D ...
- CockroachDB学习笔记——[译]为什么Go语言是CockroachDB的正确选择
原文链接:https://www.cockroachlabs.com/blog/why-go-was-the-right-choice-for-cockroachdb/ 原作者:Jessica Edw ...
- CockroachDB学习笔记——[译]The New Stack:遇见CockroachDB,一个弹性SQL数据库
原文链接:https://www.cockroachlabs.com/blog/the-new-stack-meet-cockroachdb-the-resilient-sql-database/ 原 ...
- CockroachDB学习笔记——[译]Hello World
原文链接:https://www.cockroachlabs.com/blog/hello-world/ 原作者:Spencer Kimball 原文日期:Jun 4, 2015 译:zifeiy 数 ...
- CockroachDB学习笔记——对此的选择
无意间了解到TiDB,然后知道了他是一款国产团队开源的NewSQL数据库, 看了一下官网,有很多中文的文档和技术分享挺不错的. 但是安装起来好像挺麻烦的说. 测试的硬件环境 也吓死我了,我只有一台笔记 ...
随机推荐
- go deep copy map
func deepCopyJSON(src map[string]interface{}, dest map[string]interface{}) error { if src == nil { r ...
- Java集合--Set架构
前面,我们已经系统的对List和Map进行了学习.接下来,我们开始可以学习Set.相信经过Map的了解之后,学习Set会容易很多.毕竟,Set的实现类都是基于Map来实现的(HashSet是通过Has ...
- partial 部分类
partial 关键字允许把类.结构.方法或接口放在多个文件中.一般情况下,一个类全部驻留在单个文件中.但有时,多个开发人员需要访问同一个类,或者某种类型的代码生成器生成了一个类的某部分,所以把类放在 ...
- paramiko多线程远程执行命令
import paramiko import sys import getpass import threading import os def rcmd(host=None, port=22, us ...
- HR# 5题解
T1 我傻了 前20个数暴力开桶记录,后面的每次暴力统计. #include<bits/stdc++.h> #define R register int using namespace s ...
- Material icons 全图标一览
Material icons 全图标一览 2018年12月17日 16:52:55 boywcx 阅读数 3090 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...
- js批量下载文件
关于兼容性问题: <a href="xxx.docx" target='_blank'></a> 下载文件时,这种写法是没有兼容性问题:但是下载图 ...
- 在Android中使用OpenGL ES开发第(四)节:相机预览
笔者之前写了三篇Android中使用OpenGL ES入门级的文章,从OpenGL ES的相关概念出发,分析了利用OpenGL ES实现3D绘图的重要的两个步骤:定义形状和绘制形状,简单的绘制了一个三 ...
- 十、mount挂载 fstab swap
一.挂载和卸载文件系统 将额外文件系统与根文件系统某现存的目录建立起关联关系.进而使得此目录做为其它文件访问入口的行为称之为挂载 根文件系统之外的其它文件系统要想能够被访问,都必须通过“关联”至根文件 ...
- IISPUT 批量脚本的编写
import requests import re import sys header = { "Accept":"text/javascript, applicatio ...