.Net微服务实践(五)[服务发现]:Consul介绍和环境搭建

时间:2020-04-13 10:24:16   收藏:0   阅读:92

在上篇.Net微服务实践(四)[网关]:Ocelot限流熔断、缓存以及负载均衡中介绍Ocelot的限流、熔断、缓存、负载均衡以及其他一些特性,Ocelot的基本配置和功能都已经介绍完了。本篇我们会介绍服务发现Consul.

介绍

Consul是一款简单、易用、可伸缩性强的服务治理系统。主要核心功能有:服务发现、健康检查、键值存储和多数据中心。

服务发现

服务发现是consul的核心功能,分为服务注册和服务查找。

服务发现的方式又分自主式和代理式

自主式
技术图片

由各个服务主动的将自己节点信息添加(删除)到注册中心。实现是通过统一封装或者程序库,由服务各个节点承担服务发现的功能,与代理式相比由各自节点分担的访问压力。

代理式

技术图片

由一个系统(负载均衡系统)或者服务(API网关)来完成服务发现。因为由一个系统或者服务完成,随着注册服务的增加会带来性能瓶颈,因此需要对此做集群

健康检查、键值存储和数据中心

健康检查

consul代理会每隔一段时间对注册中心的服务节点进行访问,如果响应码为“20X"认为是健康。

键值存储

键值存储可以认为是一个简易的k/v数据库,因此可以用此来存放配置信息。

数据中心

consul支持多数据中心,多数据中心进一步保证了Consul的可用性。

架构

技术图片

Consul模式

Consul有两种模式,Client和Server,无论各种模式都有一个consul agent。

Client模式

Client模式是一个轻量级的consul agent,只拥有注册服务、健康检查、转发查询等功能。

Server模式

Server模式与Client模式相比,除了拥有Client模式的功能还多出了数据存储,leader选举等。

官方建议Server模式应保证3-5个,而且应该是奇数,为什么呢,因为少于3个无法保证高可用,多于5个又会给数据库同步的一致性带来压力,而Client数量控制则没有讲究

环境安装

下面介绍一下Windows系统下如何快速简单的部署一个Consul的开发环境(实际生产环境要部署集群)

HTTP API 和Command CLI

consul提供了丰富和command CLI和API来管理和操作Consul, 例如服务的注册、服务的查找、服务取消注册、健康检查等都有相应的Command CLI和 API

详细的大家可以参考官方的API文档和Command CLI文档

示例API介绍

在这里我们介绍几个比较常用的API

服务注册

PUT http://localhost:8500/v1/agent/service/register

body

{
	"ID": "nginx1",
	"Name": "nginx",
	"Tags": ["primary", "v1"],
	"Address": "127.0.0.1",
	"Port": 80,
	"EnableTagOverride": false,
	"Check": {
		"DeregisterCriticalServiceAfter": "100s",
		"HTTP": "http://localhost:5000/health",
		"Interval": "1s"
	}
}

注册一个ID为nginx1的服务

服务查找

GET http://localhost:8500/v1/agent/services

调用后我们可以在response中看到刚刚注册的nginx1的服务

{
    "nginx1": {
        "ID": "nginx1",
        "Service": "nginx",
        "Tags": [
            "primary",
            "v1"
        ],
        "Meta": {},
        "Port": 80,
        "Address": "127.0.0.1",
        "TaggedAddresses": {
            "lan_ipv4": {
                "Address": "127.0.0.1",
                "Port": 80
            },
            "wan_ipv4": {
                "Address": "127.0.0.1",
                "Port": 80
            }
        },
        "Weights": {
            "Passing": 1,
            "Warning": 1
        },
        "EnableTagOverride": false
    }
}

服务取消注册

PUT http://localhost:8500/v1/agent/service/deregister/nginx1

取消注服务nginx1, 这时我们再调用服务查找的API,会返现response中已经没有nginx1这个服务了

代理健康检查

GET http://localhost:8500/v1/agent/checks

http 状态码返回200, 表示正常

最后

本篇我们对consul做了基本的介绍、如何在windows系统下快速的搭建consul的开发环境,以及Consul的常用API介绍。 接下来我们会结合Ocelot,在Ocelot中集成Consul做服务发现。

示例代码下载地址https://github.com/lcyhjx/ocelot-demo/tree/master

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!