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

目录

  • 介绍

    • 服务发现
    • 健康检查、键值存储和数据中心
  • 架构
    • Consul模式
  • 环境安装
  • HTTP API 和Command CLI
    • 示例API介绍
  • 最后

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

介绍

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

服务发现

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

  • 服务注册 - 将服务节点信息(地址+端口)添加(删除)到服务注册表,服务注册表会记录着服务的节点信息和状态
  • 服务查找 - 由其他的服务或者系统通过注册表查询到指定可用服务的节点信息。

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

自主式

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

代理式

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

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

健康检查

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

键值存储

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

数据中心

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

架构

  • Agent - Agent是Consul集群中每个成员长时间运行的守护进程。它是通过运行consul agent启动的。Agent可以运行在client或server模式。由于所有节点都必须运行一个agent,因此将节点称为客户端或服务器更简单,但agent还有其他实例。所有agent都可以运行DNS或HTTP接口,并负责运行检查和保持服务同步。
  • Client - Client是将所有RPC转发给服务器的agent。client是相对无状态的。client执行的唯一后台活动是参与局域网gossip池。 这具有最小的资源开销并且仅消耗少量的网络带宽。
  • Server - Server是具有扩展职责的 agent,包括参与Raft仲裁,维护集群状态,响应RPC查询,通过广域网的 gossip与其他数据中心通讯,以及将查询转发给leader或远程数据中心。
  • Datacenter - 虽然数据中心的定义似乎是显而易见的,但必须考虑一些细微的细节。例如,在EC2中,多个可用区域被认为是由一个数据中心组成的? 我们将数据中心定义为私有、低延迟和高带宽的网络环境。 这不包括通过公共互联网的通信,但为了我们的目的,单个EC2区域内的多个可用区域将被视为单个数据中心的一部分。
  • Consensus - 在我们的文档中使用Consensus来表示对当选领导人的同意以及对交易顺序的协议。由于这些事务被应用于有限状态机,我们对Consensus的定义意味着复制状态机的一致性。
  • Gossip - Consul建立在Serf之上,它提供了一个完整的gossip协议用于多种目的。 Serf提供会员资格、失败检测和事件广播。在Gossip文档中更多地描述了这些用法。 只要知道gossip涉及随机的节点到节点的通信就足够了,主要是通过UDP。
  • LAN Gossip - 指包含全部位于同一局域网或数据中心的节点的局域网gossip池。
  • WAN Gossip—- 指仅包含服务器的WAN gossip池。这些服务器主要位于不同的数据中心,通常通过互联网或广域网进行通信。
  • RPC - 远程过程调用。 这是一个请求/响应机制,允许客户端发出服务器请求。

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

原文地址:https://www.cnblogs.com/lcyhjx/p/12687648.html

时间: 2024-08-28 00:21:40

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

微服务监控和报警(二)-Prometheus简介及环境搭建

1.Prometheus简介 Prometheus是具有活跃生态系统的开源系统监视和警报工具包.下图是Prometheus的体系结构及其某些生态系统组件.最核心的位置就是Prometheus server,主要的作用就是根据我们的配置去用于收集和存储时间序列数据.Service discovery服务的发现,通过Service discovery,Prometheus server就会知道去哪里采集数据,有两种方式,一种是静态的,通过文件去配:另外一种是动态的,可以通过zookeeper或者其他

2019年微服务实践第一课,网易&谐云&蘑菇街&奥思技术大咖深度分享

微服务的概念最早由Martin Fowler与James Lewis于2014年共同提出,核心思想是围绕业务能力组织服务,各个微服务可被独立部署,服务间是松耦合的关系,以及数据和治理的去中心化管理.微服务能够帮助企业应对业务复杂.频繁更新以及团队规模庞大带来的挑战,实现IT对业务创新的驱动. 1月12日,网易云主办的"微服务实践沙龙"将走进深圳,邀请业界微服务的先行者,分享落地实践过程中总结的干货经验. 报名地址:点击报名 时间:2019年1月12日 13:30-17:00 地点:广东

Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端,本地在进行拉流播放的流程.所以这个过程中,我们需要首先来把服务端这个中间环节的工作搞定,后续再弄推流和拉流功能.现在推流大部分都是使用RTMP/HLS协议的,关于这两个协议的区别: 所以我们服务端搭建就需要用这两个协议,不过本文放心了,不会去手动的编写一套协议代码的,谁叫这个世界属于开源呢? 需要的

微服务实践(总)-原文

本系列文章为 dockone.io 首发,转载请标明出处,以示尊重!! http://dockone.io/people/hokingyang   希望读者通过本系列文章对微服务优缺点有一个比较好的理解,以及何时使用这种架构.也许微服务架构比较适合你的应用.也许你正在开发一个大型.复杂单体式应用,日常开发和部署经验非常缓慢和痛苦,而微服务看起来是远方一个极乐世界.幸运的是,有可以参考的脱离苦海的策略,本篇文章中,我将描述如何逐步将单体式应用迁移到微服务架构. 本系列七篇文章列表如下: 微服务实战

京东、宅急送的微服务实践分享(下)| 架构师小组交流会

架构师小组交流会是由国内知名公司技术专家参与的技术交流会,每期选择一个时下最热门的技术话题进行实践经验分享. 第一期:来自沪江.滴滴.蘑菇街.扇贝架构师的 Docker 实践分享 第二期:来自滴滴.微博.唯品会.魅族.点评关于高可用架构的实践分享 第三期:京东.宅急送的微服务实践分享(上)第三期小组交流会邀请到了国内电商领头羊京东.宅急送技术负责人,在上篇京东.宅急送的微服务实践分享(上)中他们介绍了各自产品的微服务实践,本次他们就 API 网关的设计.服务的 Docker 化.服务测试.持续集

微服务:实现服务发现与服务注册

一.服务发现的方式: 1.客户端发现:Eureka.ZooKeeper(存在缺陷)原因:http://blog.csdn.net/whereismatrix/article/details/53305045 2.服务端发现:consul+nginx 描述:Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其子项目spring-cloud-netflix中

ASP.NET Core OceLot 微服务实践

1.OceLot中间件介绍 在传统的BS应用中,随着业务需求的快速发展变化,需求不断增长,迫切需要一种更加快速高效的软件交付方式.微服务可以弥补单体应用不足,是一种更加快速高效软件架构风格.单体应用被分解成多个更小的服务,每个服务有自己的独立模块,单独部署,然后共同组成一个应用程序.把范围限定到单个独立业务模块功能.分布式部署在各台服务器上. 而Ocelot开发的目标就是使用.NET运行面向微服务/服务的架构,要达到这个目标需要一个统的系统入口点(我们统称为API网关),同时需要与Identit

Docker+Consul+Registrator实现服务自动注册与发现

近年微服务架构在互联网应用领域中愈来愈火,引入微服务主要解决了单体应用多个模块的紧耦合.无法扩展和运维困难等问题.微服务架构就是按照功能粒度将业务模块进行垂直拆分,对单体应用本身进行服务化和组件化,每个组件单独部署为小应用(从DB到UI).微服务与微服务之间通过Service API进行交互,同时为了支持水平扩展.性能提升和服务可用性,单个服务允许同时部署一个或者多个服务实例.在运行时,每个实例通常是一个云虚拟机或者Docker容器.本篇文章就可以完美的解决这一问题! 关于docker这里就不多

.Net微服务实践(四)[网关]:Ocelot限流熔断、缓存以及负载均衡

目录 限流 熔断 缓存 Header转化 HTTP方法转换 负载均衡 注入/重写中间件 后台管理 最后 在上篇.Net微服务实践(三)[网关]:Ocelot配置路由和请求聚合中我们介绍了Ocelot的配置,主要特性路由以及服务聚合.接下来,我们会介绍Ocelot的限流.熔断.缓存以及负载均衡. 限流 我们先来看限流的配置 Reroute节点中的配置如下: { "DownstreamPathTemplate": "/api/orders", "Downstr