.netcore微服务之:基于consul实现服务治理

author author     2023-03-09     502

关键词:

参考技术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构建调用链监控

java之springcloud微服务搭建consul(第一个阶段)springboot项目实现商品服务器端是调用(代码片段)

SpringCloud学习目录点击跳转对应的文章Java之SpringCloud微服务搭建(第一个阶段)【一】【SpringBoot项目实现商品服务器端是调用】Java之SpringCloud微服务Eureka(第一个阶段)【二】【SpringBoot项目实现商品服务器端是调... 查看详情

基于docker的consul服务发现集群搭建(代码片段)

原文:基于Docker的Consul服务发现集群搭建在去年的.NETCore微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章。本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架构示范,也... 查看详情

个推基于consul的配置管理(代码片段)

作者:个推应用平台基础架构高级研发工程师阿飞在微服务架构体系中,由于微服务众多,服务之间又有互相调用关系,因此,一个通用的分布式配置管理是必不可少的。一般来说,配置管理需要解决配置集中管理、在系统运行... 查看详情

java之springcloud微服务搭建consul(第一个阶段)springboot项目实现商品服务器端是调用(代码片段)

...3)consul的下载与安装3、consul的基本使用(1)服务注册与发现1)注册服务2)服务查询4、consul的入门案例(1)创建一个新的工程1)创建父工程2)创建子模块(一)创建product_service子模... 查看详情

winserver的consul部署实践与.netcore客户端使用(附demo源码)(代码片段)

 前言随着微服务兴起,服务的管理显得极其重要。都知道微服务就是”拆“,把臃肿的单块应用,拆分成多个轻量级的服务,每个服务可以在短周期内重构、迭代、交付。随着微服务的数量增多,因量变引起了质量,... 查看详情

winserver的consul部署实践与.netcore客户端使用(附demo源码)(代码片段)

前言随着微服务兴起,服务的管理显得极其重要。都知道微服务就是”拆“,把臃肿的单块应用,拆分成多个轻量级的服务,每个服务可以在短周期内重构、迭代、交付。随着微服务的数量增多,因量变引起了质量,带来... 查看详情

微服务之:从零搭建ocelot网关和consul集群(代码片段)

原文:微服务之:从零搭建ocelot网关和consul集群介绍 微服务中有关键的几项技术,其中网关和服务服务发现,服务注册相辅相成。首先解释几个本次教程中需要的术语网关 Gateway(APIGW/API网关),顾名思义,是企业IT在系统... 查看详情

surging微服务框架使用系列之surging的准备工作consul安装

suging的注册中心支持consul跟zookeeper。因为consul跟zookeeper的配置都差不多,所以只是consul的配置consul下载地址:https://www.consul.io/downloads.htmlconsulagent 命令的常用选项,如下:-data-dir 作用:指定agent储存状态的数据目录这是... 查看详情

微服务框架之springcloud简介

参考技术A在了解SpringCloud之前先了解一下微服务架构需要考量的核心关键点,如下图:对于以上等核心关键点的处理,不需要我们重复造车轮,SpringCloud已经帮我们集成了,它使用SpringBoot风格将一些比较成熟的微服务框架组合起... 查看详情

winserver的consul部署实践与.netcore客户端使用(附demo源码)(代码片段)

原文:winserver的consul部署实践与.netcore客户端使用(附demo源码)前言随着微服务兴起,服务的管理显得极其重要。都知道微服务就是”拆“,把臃肿的单块应用,拆分成多个轻量级的服务,每个服务可以在短周期内重构、迭... 查看详情

springcloudconsul

SpringCloudConsul项目是针对Consul的服务治理实现。Consul是一个分布式高可用的系统,它包含多个组件,但是作为一个整体,在微服务架构中为我们的基础设施提供服务发现和服务配置的工具。它包含了下面几个特性:服务发现健康... 查看详情

基于kcp,consul的servicemesh实现

...kmesh技术:proxy,kcp,consulproxyproxy分为前端和后端前端代理服务层,包括外部的service后端实现负债均衡kcpkcp基于udp,能够实现快速的传输consul实现了服务注册,服务的健康检查,多中心外部服务的注册外部服务要注册到前端代理中... 查看详情

微服务杂记

...备,如果宕机了consul获取所有rpc请求地址,并实时检测(服务发现机制)每个服务启动的时候,就会把所有服务注册到consul为什么不用负载均衡,服务就几百个。consul可以做自动选举。consul可以做集群。consul基于go语言,consul支持... 查看详情

微服务~consul服务注册与发现

服务发现是基于微服务架构的关键原则之一。尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱。Consul通过HTTPAPI和DNS提供服务发现服务。SpringCloudConsul利用HTTPAPI进行服务注册和发现。这不会阻止非Spring云应用... 查看详情

微服务~consul服务注册与发现

服务发现是基于微服务架构的关键原则之一。尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱。Consul通过HTTPAPI和DNS提供服务发现服务。SpringCloudConsul利用HTTPAPI进行服务注册和发现。这不会阻止非Spring云应用... 查看详情

springboot(微服务)注册分布式consul(代码片段)

Consul是什么Consul是一个基于HTTP的服务发现工具,用于配置和管理系统和服务之间的依赖关系。它提供了一个简单的方式来注册、发现和配置服务,并包括健康检查、负载均衡和故障转移等功能。Consul是一种分布式系统... 查看详情

一个故事,一段代码告诉你如何使用不同语言(golang&c#)提供相同的能力基于consul做服务注册与发现(代码片段)

...言提供相同的服务能力服务协调器服务注册GolangC#(.NetCore3.1)服务发现通过HttpClient发现服务,并访问注销一个`coffee-service`实例再访问引言趁着最近休息写一篇关于微服务架构中特别重要一环服务注册与发现示... 查看详情

落地微服务架构v2.0

...组件,腾讯和微软都在使用。可以使用dotnetrun命令启动.NETCore项目,启动时可以在命令时传递监听的IP、端口、域名等参数。Consul类似于NginxConsul:用于服务注册与发现。Ocelot不会对服务进行健康检查,仅仅根据配置文件完成转发... 查看详情