服务注册中心

Consul中的概念(施工中)

2019-02-01  本文已影响0人  PlayerI

本文主要对Consul中的几个概念进行了归纳和梳理,为方便后续使用。

1. RPC(远程过程调用)

RPC是「服务器A」调用在「服务器B」上的服务这么一个操作。


2. Datacenter(数据中心)

Datacenter是一个私有、低延迟和高带宽的网络环境。

下文简称DC。


3. Agent(代理)

Agent是一直运行在节点上的守护进程

3.1 Type(类型):

Agent按照类型区分,可划分为Server和Client。

3.1.1 Server(服务端):
3.1.2 Client(客户端):

Client是相对无状态的,Client唯一执行的后台活动是加入LAN gossip池。这里有一个最低的资源开销,并且消耗少量的网络带宽。


4. Node (节点)

Node是DC中的一个成员(服务器)。

每个Node都必须运行Agent,可以粗略地将Node和Agent划等号。

4.1 Identity(身份):

正常情况下节点按身份分,可划分为Leader和Follower;
但当Leader挂掉以后,consul会启动选举机制,产生一个新的Leader,此时走完一个监听流程的节点成为Candidate,并为自己拉票。

工作流程:首先选举出第一任Leader,全权负责管理日志复制。Leader从客户端接收log entries,将它们复制给同一DC中的其他Follower,然后告诉Follower什么时候将日志应用于它们的状态机。

4.1.1 Leader(领袖):
4.1.2 Follower(跟随者):

默认情况下Follower不会主动发起RPC消息。

4.1.3 Candidate(候选者):

等待推举为Leader的状态。

4.2 Status(状态):

Node的状态有两种,分别是Healthy和Unhealthy。

4.2.1 Healthy(健康):

可用

4.2.2 Unhealthy(非健康):

不可用


5. Consensus(一致性)

Consensus就是逻辑上对于被选举出的leader以及事物的顺序的认同


6. Gossip

Gossip协议是让所有的通信节点最终达成一致的协议。

6.1 概念:

Gossip算法又被称为反熵(Anti-Entropy),熵是物理学上的一个概念,代表杂乱无章,而反熵就是在杂乱无章中寻求一致。

在一个有界网络中,每个节点都随机地与其他节点通信,经过一番杂乱无章的通信,最终所有节点的状态都会达成一致。要注意到的一点是,即使有的节点因宕机而重启,有新节点加入,但经过一段时间后,这些节点的状态也会与其他节点达成一致,也就是说,Gossip天然具有分布式容错的优点。

Gossip是一个带冗余的容错算法,更进一步,Gossip是一个最终一致性算法。

6.2 特性:

6.3 实现

Consul使用两个不同的gossip池。我们分别称为WAN池LAN池

6.3.1 WAN gossip
6.3.2 LAN gossip

7. Raft

一句话:Raft是一种算法,能实现分布式的意见一致性,参考《一则动画了解Raft》

Consul使用Raft算法来保证一致性。
Consul中只有以Server模式运行的节点,才会被认为是Raft节点集的一部分。
下文仅做简略介绍,届时另开一文详细解释Raft算法。

  1. 所有的成员内部有一个计时器,如果在计时器归零前没有收到来自Leader的通讯,则会认为Leader已经挂了,他会自荐为Leader,并向同网络内其他成员拉票,获得高票者成为新的Leader,其他所有低票或无票的成为Follower。
  2. Leader会周期性的向Follower通讯,将最新的情报发送给它们,Follower也会响应本次请求(类似心跳监测)。
  3. 如果Leader有数据修改,Leader会先将修改日志(log entry)写在本地,然后将这次操作写入通讯,发送给Follower;Follower将修改日志同步到本机,并回应Leader。收到响应的Leader完成最终提交,否则回滚。

7.1 两种身份:

  1. Leader(领袖)
  2. Follower(跟随者)

7.2 三个阶段:

  1. Leader Election(领袖选举)
  2. Log Replication(日志拷贝)
  3. Commit(提交修改)

7.3 三种一致性模式:

7.3.1 Default(基于Leader约期)

思考:动画例子中提供的是「1台Leader+1台Follower」和「1台Leader+2台Follower」的例子,集群会默认接收2台Follower的为有效Leader。如果是同等数量的两个部分,会是怎样?

7.3.2 Consistent(一致性)
7.3.3 Stale(脏读)

参考资料

  1. Consul官方网址
  2. Gossip协议
  3. 《Consul实现原理系列文章1:用Raft来实现分布式一致性》
  4. 《分布式一致性之Raft算法》
上一篇 下一篇

猜你喜欢

热点阅读