raft协议-分布式环境下的数据一致性问题
阅读了一个有意思的ppt,是Standford大学发表的raft协议
网址:http://thesecretlivesofdata.com/raft/
下面自己总结下咯:
1.raft是一个实现了解决分布式一致性问题的协议
2.分布式环境下的每个节点有三种状态:
follower
candidate
leader
3.所有的节点开始都是follower状态
一旦他们不能检测到leader就能成为candidate
candidate会请求其他节点投票,得到大多是节点的投票就会成为leader,这个过程叫做Leader Election
4.节点的每个改变都会增加节点的日志条目,提交之后leader会复制日志条目到从节点上,在大多数从节点成功增加日志条目之后,提交成功,leader值更新,leader通知从节点已经更新成功,从节点更新数据,这个过程叫做Log Replication。
5.Leader Election
Raft有两个timeout设置来控制选举
第一个是election timeout
election timeout指的是follower等待成为candidate的时间,在150ms到300ms之间
election timeout一个follower成为一个开始一个election term
投票给自己,请求其他节点投票,在得到大多数节点投票之后,重置election timeout,成为leader
第二个是HearBeat timeout
Append Entries 在HeartBeat timeout时发送
6.Log Replication
Log Replicaiton是通过HeartBeat timeout发送Append Entries来完成的
客户端发送更新请求
leader增加日志条目
在下个HeartBeat时,日志变化发给follower
在大多数从节点成功之后,leader提交数据并响应客户端
下次HeartBeat Timeout之后,从节点数据更新
后面还有分片的集群可保持一致性,自己看吧
raft协议-分布式环境下的数据一致性问题的更多相关文章
- Shiro权限管理框架(二):Shiro结合Redis实现分布式环境下的Session共享
		
首发地址:https://www.guitu18.com/post/2019/07/28/44.html 本篇是Shiro系列第二篇,使用Shiro基于Redis实现分布式环境下的Session共享. ...
 - 分布式环境下Unique ID生成方法
		
ID即标示符,在某个搜索域内能唯一标示其中某个对象.在关系型数据库中每个表都需要定义一个主键来唯一标示一条记录.为了方便一般都会使用一个auto_increment属性的整形数做为ID.因为数据库本身 ...
 - 分布式环境下的id生成方法
		
分布式环境下的id生成方法 前几天研究数据库分表分库的问题,其中有一个关键的地方就是生成唯一键的问题,假如数据表有1亿条数据,而且还在不断的增加,这里我们就需要考虑到分表分库,假设我们采用Hash ...
 - 集群/分布式环境下5种session处理策略
		
转载自:http://blog.csdn.net/u010028869/article/details/50773174?ref=myread 前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访 ...
 - 【架构师之路】集群/分布式环境下5种session处理策略
		
[架构师之路]集群/分布式环境下5种session处理策略 转自:http://www.cnblogs.com/jhli/p/6557929.html 在搭建完集群环境后,不得不考虑的一个问题就是 ...
 - 【转】分布式环境下5种session处理策略(大型网站技术架构:核心原理与案例分析 里面的方案)
		
前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,Ngin ...
 - [Done]SnowFlake 分布式环境下基于ZK构WorkId
		
Twitter 的 Snowflake 大家应该都熟悉的,先上个图: 时间戳 序列号一般不会去改造,主要是工作机器id,大家会进行相关改造,我厂对工作机器进行了如下改造(估计大家都差不多吧,囧~~~ ...
 - 【转】集群/分布式环境下5种session处理策略
		
转载至:http://blog.csdn.net/u010028869/article/details/50773174 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处 ...
 - 集群/分布式环境下,Session处理策略
		
前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象.比如集中中存在A.B两台服务器,用户在第一次访问网站是,Ngin ...
 
随机推荐
- sun.misc.BASE64Decoder 替代
			
加密解密经常用到sun.misc.BASE64Decoder处理,编译时会提示: sun.misc.BASE64Decoder是内部专用 API, 可能会在未来发行版中删除 解决办法: Java8以后 ...
 - gdb调试知识
			
之前一直不怎么用gdb,现在要用做一下记录 用gdb启动程序 gdb ./demo intel风格反汇编main函数,一共两行第一行设置汇编风格,第二行才是反汇编main函数 set disassem ...
 - leetcode-easy-array-217. Contains Duplicate
			
mycode 76.39% class Solution(object): def containsDuplicate(self, nums): """ :type n ...
 - VGA接口一根针折了
			
注意!!要由 针 对照着 接口 看!!别看反了! VGA接头图如下: VGA接口,15根针,其对应接口定义如下: 1红基色 red 2 绿基色 green 3 蓝基色 blue 4 地址码 ID Bi ...
 - FTP协议的两种工作模式简单解析!
			
转载自百度百科:http://baike.baidu.com/link?url=KaBZmDM4IZ2v56MyoOnpjqKr0gADv_BRbgjlscYdyvh3-zDwINOHNPSi9Jlp ...
 - 阶段3 1.Mybatis_09.Mybatis的多表操作_5 完成user的一对多查询操作
			
定义List<Account> accounts,生成getter和setter 复制AccountTest类改名UserTest类 修改测试类 还没封装所以Account的list都是n ...
 - mybatis参数传参、取值处理等
			
单个参数:mybatis不会做特殊处理 取值方式:#{参数名} 这里参数名不必与方法的形参名称一致,可以用任意参数名来接受实参 例子:方法:update(Integer id) sql映射文件取值#{ ...
 - java.lang.NoSuchMethodError: org.apache.spark.internal.Logging.$init$(Lorg/apache/spark/internal/Logging;)V
			
1.sparkML的版本不对应 请参考官网找到对于版本, 比如我的 spark2.3.3 spark MLlib 也是2.3.3
 - python+selenium操作cookie
			
WebDriver提供了操作Cookie的相关方法,可以读取.添加和删除cookie信息. WebDriver操作cookie的方法: get_cookies(): 获得所有cookie信息. get ...
 - 图解 SQL 里的各种 JOIN
			
约定 下文将使用两个数据库表 Table_A 和 Table_B 来进行示例讲解,其结构与数据分别如下: mysql> SELECT * FROM Table_A ORDER BY PK ASC ...