-
产品及方案 产品及方案
-
数据驱动型组织通过体系化的方法构建全域数据能力,实现数据驱动运营,重塑组织生产力
- 行业方案
- 典型方案
- 产品
-
数据驱动型组织
- 服务与支持
- 社区
- 合作伙伴
- 关于爱数
请选择咨询类型
扫码关注
爱数技术支持中心公众号
关键词 | 解释 |
---|---|
Raft Etcd | 所采用的保证分布式系统强一致性的算法 |
Node | 一个Raft状态机实例 |
Member | 一个Etcd实例。它管理着一个Node,并且可以为客户端请求提供服务 |
Cluster | 由多个Member构成可以协同工作的Etcd集群 |
Peer | 对同一个Etcd集群中另外一个Member的称呼 |
Client | 向Etcd集群发送HTTP请求的客户端 |
WAL | 预写式日志,Etcd用于持久化存储的日志格式 |
snapshot | Etcd防止WAL文件过多而设置的快照,存储Etcd数据状态 |
Proxy | Etcd的一种模式,为Etcd集群提供反向代理服务 |
Leader | Raft算法中通过竞选而产生的处理所有数据提交的节点 |
Follower | 竞选失败的节点作为Raft中的从属节点,为算法提供强一致性保证 |
Candidate | 当Follower超过一定时间接收不到Leader的心跳时转变为Candidate开始Leader竞选 |
Term | 某个节点成为Leader到下一次竞选开始的时间周期,称为一个Term |
Index | 数据项编号。Raft中通过Term和Index来定位数据。 |
Etcd主要分为四个部分【http server、store、raft、WAL】 HTTP Server: 用于处理用户发送的API请求以及其他etcd节点的同步与心跳信息请求
Store: 用于处理 etcd 支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是 etcd 对用户提供的大多数 API 功能的具体实现。
Raft: Raft 强一致性算法的具体实现,是 etcd 的核心。
WAL:Write Ahead Log(预写式日志/日志先行),是 etcd 的数据存储方式,也是一种实现事务日志的标准方法。etcd通过 WAL 进行持久化存储,所有的数据提交前都会事先记录日志。Snapshot 是为了防止数据过多而进行的状态快照;Entry 表示存储的具体日志内容。
Etcd应用场景很多,主要的有以下六种:
服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。本质上来说,服务发现就是想要了解集群中是否有进程在监听 udp 或 tcp 端口,并且通过名字就可以查找和连接。
要解决服务发现的问题,需要具备以下三点: 1.一个强一致性、高可用的服务存储目录。基于 Raft 算法的 Etcd 天生就是这样一个强一致性高可用的服务存储目录; 2.一种注册服务和监控服务健康状态的机制。用户可以在 Etcd 中注册服务,并且对注册的服务设置key TTL,定时保持服务的心跳以达到监控健康状态的效果; 3.一种查找和连接服务的机制。通过在 Etcd 指定的主题下注册的服务也能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个 Proxy 模式的 Etcd,这样就可以确保能访问 Etcd 集群的服务都能互相连接。 例如随着 Docker 容器的流行,多种微服务共同协作,构成一个相对功能强大的架构的案例越来越多。透明化的动态添加这些服务的需求也日益强烈。通过服务发现机制,在 Etcd 中注册某个服务名字的目录,在该目录下存储可用的服务节点的 IP。在使用服务的过程中,只要从服务目录下查找可用的服务节点去使用即可。
在分布式系统中,最为适用的组件间通信方式是消息发布与订阅机制。
具体而言,即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦相关主题有消息发布,就会实时通知订阅者。
通过这种方式可以实现分布式系统配置的集中式管理与实时动态更新。
利用Etcd维护一个负载均衡节点表。Etcd可以监控一个集群中多个节点的状态,当有一个请求发过来后,可以轮询式地把请求转发给存活着的多个节点。
类似KafkaMQ,通过Zookeeper来维护生产者和消费者的负载均衡。同样也可以用Etcd来做Zookeeper的工作
因为Etcd使用Raft算法保持了数据的强一致性,某次操作存储到集群中的值必然是全局一致的,所以很容易实现分布式锁。
锁服务有以下两种使用方式:
在保证队列达到某个条件时再统一按顺序执行。这种方法的实现可以在/queue这个目录中另外建立一个/queue/condition节点。
condition可以表示队列大小。比如一个大的任务需要很多小任务就绪的情况下才能执行,每次有一个小任务就绪,就给这个condition数字加1,直到达到大任务规定的数字,再开始执行队列里的一系列小任务,最终执行大任务。
condition可以表示某个任务在不在队列。这个任务可以是所有排序任务的首个执行程序,也可以是拓扑结构中没有依赖的点。通常,必须执行这些任务后才能执行队列中的其他任务。
condition还可以表示其它的一类开始执行任务的通知。可以由控制程序指定,当condition出现变化时,开始执行队列任务。
通过Etcd来进行监控实现起来非常简单并且实时性强,用到了以下两点特性:
请就本文对您的益处进行评级:
拨打400
购买咨询
售后服务
申请试用