SpringCloud(七)服务注册之Consul的简介和原理

Consul

何为Consul?

Consul 是由 HashiCorp 公司推出的开源软件,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等),使用起来也较为简单。

Consul 用 Golang 实现,因此具有天然可移植性(支持 Linux、windows 和 Mac OS X ),它的安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。

consul与Eureka的区别‘

1 Consul强一致性(CP)

Eureka保证高可用和最终一致性

开发语言和使用:

eureka就是一个servlet程序,跑在servlet容器中

Consul是Go语言的编写而成,安装启动即可

Consul不同于Eureka其需要单独安装

Consul安装

1 去官网下载对应的Consul

https://www.consul.io/downloads.html

2 使用cmd进入Consul安装目录

输入

 #以开发者模式快速启动
 consul agent -dev -client=0.0.0.0
SpringCloud(七)服务注册之Consul的简介和原理_第1张图片

 

 

 

3 进入到管理后台界面

http://ip地址:8500

名词解释:

Client : Consul 的 Client模式,就是客户端模式。是 Consul 节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到 Server,本身是不持久化这些信息。 Server :Consul 的 Server 模式,表明这个 Consul 是个 Server ,这种模式下,功能和 Client 都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。 Server-Leader: Server 是它们的老大,它和其它 Server 不一样的一点是,它需要负责同步注册的信息给其它的 Server ,同时也要负责各个节点的健康监测。 raft: Server 节点之间的数据一致性保证协议使用的是 raft,而 zookeeper 用的 paxos,etcd采用的也是raft 服务发现协议:Consul 采用 http 和 DNS 协议,etcd 只支持 http 。 服务注册:Consul 支持两种方式实现服务注册,一种是通过 Consul 的服务注册 Http API,由服务自己调用 API 实现注册,另一种方式是通过 json 格式的配置文件实现注册,将需要注册的服务以 json 格式的配置文件给出。Consul 官方建议使用第二种方式。

Consul服务发现原理:

SpringCloud(七)服务注册之Consul的简介和原理_第2张图片

1、部署集群。首先需要有一个正常的Consul集群,有Server,有Leader。这里在服务器Server1、Server2、Server3上分别部署了Consul Server。

2、选举Leader节点。假设他们选举了Server2上的 Consul Server 节点为Leader。这些服务器上最好只部署Consul程序,以尽量维护Consul Server的稳定。

3、注册服务。然后在服务器Server4和Server5上通过Consul Client分别注册Service A、B、C,这里每个Service 分别部署在了两个服务器上,这样可以避免Service的单点问题。服务注册到Consul可以通过 HTTP API(8500 端口)的方式,也可以通过 Consul 配置文件的方式。

4、Consul client转发注册消息。Consul Client 可以认为是无状态的,它将注册信息通过RPC转发到Consul Server,服务信息保存在Server的各个节点中,并且通过Raft实现了强一致性。

5、服务发起通信请求。最后在服务器Server6中Program D需要访问Service B,这时候Program D首先访问本机Consul Client提供的HTTP API,本机Client会将请求转发到 Consul Server。

6、Consul Server查询到Service B当前的信息返回,最终Program D拿到了Service B的所有部署的IP和端口,然后就可以选择Service B的其中一个部署并向其发起请求了。

你可能感兴趣的:(SpringCloud(七)服务注册之Consul的简介和原理)