go任务调度3(etcd协调服务、raft协议)

etcd是将数据存储在集群中的高可用k-v存储。
允许应用实时监听存储中的k-v变化。
能容忍单点故障,能够应对网络分区。




(raft是一个分布式协议,管理的是日志;etcd管理的是k-v,把k-v放到日志里,kv就编程分布式集群了)

(调用者写入请求发给leader请求写入k-v,leader会将日志实时向follower们复制,leader不会立即返回给调用者,会马上往集群follower做日志拷贝。当日志被复制给N+1个节点后(即大多数),本地提交(也就是告诉客户端提交成功),返回给调用者(客户端),为什么复制给N+1,而不是2N+1后就告诉客户端成功了呢?这就是大多数协议,也就是抽屉理论的重要表现)

(一旦完成提交,leader会周期性把自己的提交信息告诉所有follower,这样,其他follower也会完成它们的本地提交(这是异步行为,不需要同步,只需要确保日志复制给大多数了就可以)。官方给出的写入性能是:1000次每秒)

(raft协议本身就是在写日志。第1行是leader节点的日志,后面是4个是follower,也就是总共5个节点。日志是随着请求顺序追加,这里5个节点的大多数是3个节点。其中1-7已经被复制给了3个节点(大多数),这些是一定可以被提交不会丢失的,因为已经复制给大多数了。8总共只有两个节点有,8后面其他的更夸张。有的连3,4,5都没有,这一般是leader和follower之间产生了网络延迟,然而,没关系,只要复制给大多数就不会丢了。所以真个日志的提交已经到了第7个日志)


(
第一个leader幸运是f,f写入了3条数据(标识为1的绿色块),并成功复制给了所有节点,然后f宕机了又马上重启。
因为宕机,而f曾经是leader,于是重新选举,踩了狗屎很幸运,f又成了leader。f又提交了3条记录(标识为2的紫色块),但它没有复制给集群中的其他节点(可能f刚成为leader没来得及复制给其他节点又挂掉了)。
f宕机后重启,又踩了狗屎成为了第三任leader,写入5条数据(下标为3的橙色块),没来得及复制有宕了。
然后第四任leader幸运的是e,e写入了4条数据(下标为4的×××块),但它作为leader期间,只把前面两条(下标为4的×××块)数据复制给大多数节点,后两个没来得及复制就宕了......
)


(leader写入数据,但只复制给了一个follower,其他由于网络原因没复制,所以无法提交,无法给客户端应答,客户端继续等待...)

(raft协议是底层原理,etcd将k-v写入storage才是真的。当复制给大多数后,leader就告诉客户端:你的事已经办好了)

(当old leader重启后,它发现已经有了一个新leader,并且它的数据是落后于new leader的,所以new leader会把a=2复制给old leader,而old leader会发现,原来的a=1没有复制给大多数(未提交状态),而a=2已经完成了大多数复制,所以a=2会覆盖掉a=1。所以在集群中a=2而不是1)


(etcd支持通用的http+json协议,但性能较低。sdk内置GRPC协议,性能很高。GRPC是谷歌开源的RPC协议,是基于http2协议。我们用的etcd就是基于GRPC的。我们通过sdk操作etcd中的k-v)

(能实现像redis一样的时间过期)

(用有序的key模拟出目录的效果。也就是只要定位到/feature-flags,就能根据它找到类似该目录下的所有目录(其实是key))

(即便key1=value3覆盖了之前的key1=value1,在etcd中也会有key1=value1这个历史版本(也就是revision=1)。然而我们只关心最新的数据,可以用compact命令完成删减)


原文地址:https://blog.51cto.com/5660061/2381641

时间: 2024-10-03 19:58:56

go任务调度3(etcd协调服务、raft协议)的相关文章

知识链-分布式协调服务zookeeper

分布式协调服务 Zookeeper zookeeper是一个开源的分布式协调服务.是典型的分布式数据一致性的解决方案. 集群内所有server基于Zab(ZooKeeper Atomic Broadcast)协议进行通信 Zookeeper官网地址: http://zookeeper.apache.org/ Zookeeper官网文档地址:http://zookeeper.apache.org/doc/trunk/index.html 认识ZooKeeper ZooKeeper概述 ZooKee

搞懂分布式技术3:初探分布式协调服务zookeeper

搞懂分布式技术3:初探分布式协调服务zookeeper 1.Zookeepr是什么 Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅,负载均衡,命名服务,分布式协调/通知.集群管理,Master选举,分布式锁和分布式队列等功能. 2.zookeeper可以保证的分布式一致性 a.顺序一致性 从一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到zookeeper中去 b.原子性 所有事务请求的处理结果在整个集群中所有机器上的应用情

浅入深出ETCD之【raft原理】

前言 这次我们来说说,有关于etcd原理的一些事情.之前我们已经了解到了etcd是一个分布式的k-v存储,那么它究竟是如何保证数据是如何复制到每个节点上面去的呢?又是如何保证在网络分区的情况下能正常工作下去?raft协议到底是什么?带着这些问题我们继续往下看. raft选举策略 我们知道etcd使用raft协议来保证整个分布式的节点网络能正常的运转并且能正确的将数据复制到每个节点上面去.那么什么是raft协议嘞? 首先我们有这样一个背景:raft是想维护整一个网络,其中有一个领导人,这个领导人负

Raft协议备注

Raft协议 Raft协议基于日志实现了一致性 实现备份的是机制:复制状态机Replicated State Machine,如果两个相同的.确定性的状态机从同一状态开始,以相同顺序输入相同的日志,则两个状态机最终也会保持一致 Raft了实现Consensus Module Consensus Module作为一致性模块对外服务,负责接收客户端的消息,响应请求,并追加到本地日志,一致性模块保证每个机器上的log的一致性 请求到来时,带上(term,commitindex)和append log

RocketMQ 多副本前置篇:初探raft协议

目录 1.Leader选举 1.1 一轮投票中,只有一个节点发起投票的情况 1.2 一轮投票中,超过一个节点发起投票的情况 1.3 思考如何实现Raft选主 2.日志复制 Raft协议是分布式领域解决一致性的又一著名协议,主要包含Leader选举.日志复制两个部分. 温馨提示: 本文根据raft官方给出的raft动画进行学习,其动画展示地址:http://thesecretlivesofdata.com/raft/ @(本节目录) 1.Leader选举 1.1 一轮投票中,只有一个节点发起投票的

基于 raft 协议的 RocketMQ DLedger 多副本日志复制设计原理

目录 1.RocketMQ DLedger 多副本日志复制流程图 1.1 RocketMQ DLedger 日志转发(append) 请求流程图 1.2 RocketMQ DLedger 日志仲裁流程图 1.3 RocketMQ DLedger 从节点日志复制流程图 2.RocketMQ DLedger 多副本日志复制实现要点 2.1 日志编号 2.2 追加与提交机制 2.3 日志一致性如何保证 上一篇 源码分析 RocketMQ DLedger(多副本) 之日志复制(传播) ,可能有不少读者朋

分布式协调服务Zookeeper原理

CAP理论 C: (Consistency) 一致性 ???????在分布式系统中,数据能够在多个副本之间保持一致的特性.对于有多个副本的分布式系统来说,如果数据在一个节点上进行修改,其他节点尚未同步数据,当在其他节点上读取操作的时候,读取的还是老的数据.这就是分布式数据不一致. ???????在分布式系统中,如果更新一个节点,其他节点的数据也能保证有相应的更新.那么系统被认为具有强一致性. A: (Availability) 可用性 ???????在分布式系统中,可用性指的是系统提供的服务,一

Service-Level Agreement (服务水平协议)

Service-Level Agreement (服务水平协议) SLA是为负载测试场景定义的具体目标.例如,评测脚本中任意数量事务的平均响应时间,可以定义具体的目标或阈值.测试运行结束之后,LoadRunner将你定义的目标与实际录制的平均事务响应时间进行比较,如果实际的平均事务响应时间未超过你定义的阈值,SLA状态将为通过,否则不通过. 作为目标定义的一部分,你可以指示SLA将负载条件考虑在内.这意味着可接受的阈值将根据负载级别而有所更改(例如,运行的Vuser数.吞吐量等).随着负载的增加

服务端协议测试系列教程

测试技术分享之服务端协议测试系列教程 童鞋看完后有啥想法,可以发给我改进 在线播放地址:http://www.iqiyi.com/u/2013029540/a 下载地址:链接: http://pan.baidu.com/s/1boDHpbp 密码: p76e