Enix的读书笔记
April 18, 2019

Consul原理浅谈

Posted on April 18, 2019  •  1 minutes  • 146 words
Table of contents

要想了解Consul的实现原理,就得先理解Consul是用来做什么的。

从Consul用途出发,才能更好地理解它的原理

autoauto- [1. 背景](#1-背景)auto - [1.1. consul提供什么功能](#11-consul提供什么功能)auto - [1.2. 分布式带来的问题](#12-分布式带来的问题)auto - [1.3. CAP理论](#13-cap理论)auto- [2. Cousul原理](#2-cousul原理)auto - [2.1. 术语解释](#21-术语解释)auto - [2.2. 架构分析](#22-架构分析)auto - [2.2.1. 多数据中心](#221-多数据中心)auto - [2.2.2. Server && Client](#222-server--client)auto - [2.2.3. 总结](#223-总结)autoauto

1. 背景

1.1. consul提供什么功能

按照Consul的官方文档 ,它主要提供以下功能:

根据这个介绍,看上去consul的作用很简单:不就是一个KV形式的分布式数据库嘛。

1.2. 分布式带来的问题

可问题就出在"分布式"这三个字上。我们都知道,分布式环境会有各种问题存在:

正是由于这些问题,带来了数据的不一致性,也随之带来了解决数据一致性问题的需求。这就发展出了CAP和BASE理论。

而每个分布式系统都需要解决自己的一致性问题,不能每做一个系统都做一套一致性方案吧。这时候,作为中间件形式的一致性服务便出现了,这就迎来了Consul,以及Zookeeper,Etcd等的诞生

1.3. CAP理论

说到这儿,就不得不提到大名鼎鼎CAP理论了。CAP告诉我们:

到这里,我们可以总结一下了:
Consul是一个分布式的数据中心,能做到数据一致性的保证。
现在你明白为什么Consul可以用来做服务注册和服务发现了吧:如果没有一个一致性的保证机制,可能会出现一个服务注册后其他服务无法感知,或者发现了一个已经注销的服务的情况

2. Cousul原理

现在我们可以来理解一下consul的实现原理了

2.1. 术语解释

首先我们来了解一下关键术语:

2.2. 架构分析

然后,我们可以看看Consul官方提供的架构图了

2.2.1. 多数据中心

可以看到Consul可以有多个数据中心,多个数据中心构成Consul集群。数据中心间通过WAN GOSSIP在Internet上交互报文。由此我们得出了第一个重要的点:

Consul多个数据中心之间基于WAN来做同步

2.2.2. Server && Client

下面我们通过观察使用Consul作服务注册的流程,来了解在一个数据中心中,server和client具体的角色:

(图片转自http://developer.51cto.com/art/201812/589424.htm)

在单个数据中心中,Consul 分为 Client 和 Server 两种节点(所有的节点也被称为 Agent)。可以看到,各个业务服务进行服务注册时,直接接触的只有Consul Client。Client再将数据转发给Server-Follwer,最后统一交由Server-Leader处理。

简单来说就是:Server 节点保存数据,Client 负责健康检查及转发数据请求到 Server。

server和client之间,还有一条LAN GOSSIP通信,这是用于当LAN内部发生了拓扑变化时,存活的节点们能够及时感知,比如server节点down掉后,client就会触发将对应server节点从可用列表中剥离出去。这也就是第二个重要的点:

集群内的 Consul 节点通过 gossip 协议(流言协议)维护成员关系

server与server之间,client与client之间,client与server之间,在同一个datacenter中的所有consul agent会组成一个LAN网络(当然它们之间也可以按照区域划分segment),当LAN网中有任何角色变动,或者有用户自定义的event产生的时候,其他节点就会感知到,并触发对应的预置操作。

2.2.3. 总结

到这里可以总结一下了:

Follow me