.NETCore微服务之:基于Consul实现服务治理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NETCore微服务之:基于Consul实现服务治理相关的知识,希望对你有一定的参考价值。

参考技术A 本篇文章为.NETCore实现企业级微服务架构技术点介绍

Consul是一个分布式,高可用、支持多数据中心的服务注册、发现、健康检查和配置共享的服务软件。

由 HashiCorp 公司用 Go 语言开发 推出的开源产品

用于实现分布式系统的服务发现、服务隔离、服务配置。

这些功能中的每一个都可以根据需要单独使用,也可以同时使用所有功能。Consul 官网目前主要推 Consul 在服务网格中的使用。

与其它分布式服务注册与发现的方案相比:

Consul 的方案更“一站式”——内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具。

Consul 本身使用 go 语言开发,具有跨平台、运行高效等特点,也非常方便和 Docker 配合使用。

与市面上其他系统比较如下:

使用Consul 的优势

使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接。相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft。

支持多数据中心,内外网的服务采用不同的端口进行监听。多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等。zookeeper 和 etcd 均不提供多数据中心功能的支持。

支持健康检查。etcd 不提供此功能。

支持 http 和 dns 协议接口。zookeeper 的集成较为复杂, etcd 只支持 http 协议。

官方提供 Web 管理界面, etcd 无此功能。

Consul 保持了 CAP 中的 CP,保持了强一致性和分区容错性。

Consul 支持 Http\gRPC\DNS 多种访问方式。

Consul的主要特点:

Service Discovery :服务注册与发现

服务注册: 简单理解,就是有一个注册中心,我们的每个服务实例启动时,都去注册中心注册一下,告诉注册中心我的地址,端口等信息。同样的服务实例要删除时,去注册中心删除一下,注册中心负责维护这些服务实例的信息。

服务发现: 既然注册中心维护了各个服务实例的信息,那么客户端通过注册中心就很容易发现服务的变化了。

有了服务注册与发现,客户端就不用再去配置各个服务实例的地址,改为从注册中心统一获取。

那注册中心又是怎么保证每个地址的可用状态呢,假如某个实例挂了怎么办呢?原则上挂掉的实例不应该被客户端获取到,所以就要提到: 健康检查  。

健康检查: 每个服务都需要提供一个用于健康检查的接口,该接口不具备业务功能。服务注册时把这个接口的地址也告诉注册中心,注册中心会定时调用这个接口来检测服务是否正常,如果不正常,则将它移除,这样就保证了服务的可用性。

常见注册中心: 有 Consul、ZooKeeper、etcd、Eureka。

 Consul用Golang实现。

因此具有天然可移植性(支持Linux、windows和Mac OS X)。

安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。

此外,关于Consul的架构以及相关的角色,如下图所示:

以Server模式运行的Consul Agent节点用于维护Consul集群的状态。

官方建议每个Consul Cluster至少有 3个或以上的运行在Server Mode的Agent,Client节点不限 。

Consul支持多数据中心,每个数据中心的Consul Cluster都会在运行于Server模式下的Agent节点中选出一个Leader节点。

这个选举过程通过Consul实现的raft协议保证,多个 Server节点上的Consul数据信息是强一致的。

处于Client Mode的Consul Agent节点比较简单,无状态,仅仅负责将请求转发给Server Agent节点。

上一篇参考 .NETCore微服务系列:

.NETCore微服务系列:基于Polly 实现API服务保护

下一篇为大家介绍 .NETCore微服务系列:

SkyWalking构建调用链监控

以上是关于.NETCore微服务之:基于Consul实现服务治理的主要内容,如果未能解决你的问题,请参考以下文章

Consul实现服务治理

.NET Core HttpClient+Consul实现服务发现

基于Docker的Consul服务发现集群搭建

微服务SpringCloud之注册中心Consul

基于consul实现微服务的服务发现和负载均衡

Java之 Spring Cloud 微服务搭建 Consul(第一个阶段)SpringBoot项目实现商品服务器端是调用