.Net微服务实践(五)[服务发现]:Consul介绍和环境搭建
在上篇.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的开发环境(实际生产环境要部署集群)
下载 https://www.consul.io/downloads.html windows 版本,解压
添加consul.exe 的路径到环境变量
cmd运行 consul ,验证

启动cosul服务, cmd中输入 consul agent -dev (dev是开发模式,生产环境下不要使用)
HTTP API 和Command CLI
consul提供了丰富和command CLI和API来管理和操作Consul, 例如服务的注册、服务的查找、服务取消注册、健康检查等都有相应的Command CLI和 API
详细的大家可以参考官方的API文档和Command CLI文档
- HTTP API - https://www.consul.io/api/health.html
- Command CLI - https://www.consul.io/docs/commands/index.html
示例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
.Net微服务实践(五)[服务发现]:Consul介绍和环境搭建的更多相关文章
- kubernetes实战之consul简单测试环境搭建及填坑
这一节内容有点长,我们将介绍如何基于docker搭建一client一server的consul测试环境,以及如何搭建多server consul测试集群.在基于docker搭建多server的cons ...
- HTML5学习笔记<五>: HTML表单和PHP环境搭建
HTML表单 1. 表单用于不同类型的用户输入 2. 常用的表单标签: 标签 说明 <form> 表单 <input> 输入域 <textarea> 文本域 < ...
- spring cloud微服务实践五
本篇我们来看看怎么实现spring cloud的配置中心. 在分布式系统中,特别是微服务架构下,可能会存在许多的服务,每个服务都会存在一个或多个的配置文件.那怎么多的配置文件的管理就会成为一个大问题. ...
- 动态负载均衡(Nginx+Consul+UpSync)环境搭建
首先 安装好 Consul upsync 然后: 1.配置安装Nginx 需要做配置,包括分组之类的,创建目录,有些插件是需要存放在这些目录的 groupadd nginx useradd -g ng ...
- .Net微服务实践(四)[网关]:Ocelot限流熔断、缓存以及负载均衡
目录 限流 熔断 缓存 Header转化 HTTP方法转换 负载均衡 注入/重写中间件 后台管理 最后 在上篇.Net微服务实践(三)[网关]:Ocelot配置路由和请求聚合中我们介绍了Ocelot的 ...
- 2019年微服务实践第一课,网易&谐云&蘑菇街&奥思技术大咖深度分享
微服务的概念最早由Martin Fowler与James Lewis于2014年共同提出,核心思想是围绕业务能力组织服务,各个微服务可被独立部署,服务间是松耦合的关系,以及数据和治理的去中心化管理.微 ...
- [Abp vNext微服务实践] - 文章目录
简介 ABP vNext是volosoft的新一代框架,ABP(vNext)完全使用.NET CORE和DDD(领域驱动)打造,目前GitHub已有6K+次提交,发布版本超过40次,Nuget包下载量 ...
- Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)
一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...
- 微服务实践(五):微服务的事件驱动数据管理 - DockOne.io
原文:微服务实践(五):微服务的事件驱动数据管理 - DockOne.io [编者的话]本文是使用微服务创建应用系列的第五篇文章.第一篇文章介绍了微服务架构模式,并且讨论了使用微服务的优缺点:第二和第 ...
随机推荐
- spark打包详解
spark打包还是比较复杂的,特别的其中有关R语言的模块.在本章,我就将其中遇到的所有问题为大家一一讲解,为大家提供一点经验. 这里的打包命令是直接从官网中找的,这里我们最后得到的是tgz格式的包.打 ...
- 五分钟学Java:如何才能学好Java Web里这么多的技术
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...
- Spring Boot入门系列(六)如何整合Mybatis实现增删改查
前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/z ...
- vlc 播放器的点播和广播服务
vlc 是一个开源的,同时跨平台的播放器.在研究 rtsp 协议时发现,它同时还是一个强大的流媒体服务器 VLM VLM(VideoLAN Manager) 在 vlc 中是一个小型的媒体管理器,它能 ...
- 在ES批量插入数据超时时自动重试
当我们使用ES批量插入数据的时候,一般会这样写代码: from elasticsearch import Elasticsearch,helpers es =Elasticsearch(hosts=[ ...
- php7连接mysql8
最近因为剁手买了mac所以在mac上搭建lnmp环境. 刚好看到mysql从5.7跳到8,性能据说快上一倍,果断尝鲜! lnmp基本都弄好了,但是到用php连接Mysql这一步出了岔子. 出错原因: ...
- IdentityServer4实现.Net Core API接口权限认证(快速入门)
什么是IdentityServer4 官方解释:IdentityServer4是基于ASP.NET Core实现的认证和授权框架,是对OpenID Connect和OAuth 2.0协议的实现. 通俗 ...
- nmap加载nse脚本在内网渗透中的使用-下
smb-ls.nse 列举共享目录内的文件,配合smb-enum-share使用nmap -p 445 <ip> --script smb-ls --script-args 'share= ...
- 为什么信息熵要定义成-Σp*log(p)?
作者:西贝链接:https://www.zhihu.com/question/30828247/answer/64816509来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- effective-java学习笔记---使用实例属性替代序数35
永远不要从枚举的序号中得出与它相关的值; 请将其保存在实例属性中: public enum Ensemble { SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUIN ...
