在上篇.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

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

  1. kubernetes实战之consul简单测试环境搭建及填坑

    这一节内容有点长,我们将介绍如何基于docker搭建一client一server的consul测试环境,以及如何搭建多server consul测试集群.在基于docker搭建多server的cons ...

  2. HTML5学习笔记<五>: HTML表单和PHP环境搭建

    HTML表单 1. 表单用于不同类型的用户输入 2. 常用的表单标签: 标签 说明 <form> 表单 <input> 输入域 <textarea> 文本域 < ...

  3. spring cloud微服务实践五

    本篇我们来看看怎么实现spring cloud的配置中心. 在分布式系统中,特别是微服务架构下,可能会存在许多的服务,每个服务都会存在一个或多个的配置文件.那怎么多的配置文件的管理就会成为一个大问题. ...

  4. 动态负载均衡(Nginx+Consul+UpSync)环境搭建

    首先 安装好 Consul upsync 然后: 1.配置安装Nginx 需要做配置,包括分组之类的,创建目录,有些插件是需要存放在这些目录的 groupadd nginx useradd -g ng ...

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

    目录 限流 熔断 缓存 Header转化 HTTP方法转换 负载均衡 注入/重写中间件 后台管理 最后 在上篇.Net微服务实践(三)[网关]:Ocelot配置路由和请求聚合中我们介绍了Ocelot的 ...

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

    微服务的概念最早由Martin Fowler与James Lewis于2014年共同提出,核心思想是围绕业务能力组织服务,各个微服务可被独立部署,服务间是松耦合的关系,以及数据和治理的去中心化管理.微 ...

  7. [Abp vNext微服务实践] - 文章目录

    简介 ABP vNext是volosoft的新一代框架,ABP(vNext)完全使用.NET CORE和DDD(领域驱动)打造,目前GitHub已有6K+次提交,发布版本超过40次,Nuget包下载量 ...

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

    一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...

  9. 微服务实践(五):微服务的事件驱动数据管理 - DockOne.io

    原文:微服务实践(五):微服务的事件驱动数据管理 - DockOne.io [编者的话]本文是使用微服务创建应用系列的第五篇文章.第一篇文章介绍了微服务架构模式,并且讨论了使用微服务的优缺点:第二和第 ...

随机推荐

  1. 微信公众号 H5页面 支付注意细节

    1.   当秘钥(AppSecretApplets) 有问题时注意是不是已经被重置过了,此时要注意获取最新的秘钥: 2.   调试时后端的东西要放在线上https 请求 不然在手机上测试时 会被拦截: ...

  2. BNP Paribas Cardif Claims Management

    2月20日: 查看任务介绍,二分类问题,评价标准logloss 下载数据 2月21~27日: 查看数据组成,标识分类变量.离散变量.连续变量. 发现连续数据有大量非随机空缺(占总量一半),主要集中在v ...

  3. 【Weiss】【第03章】练习3.20:中缀表达式转后缀表达式

    [练习3.20] a.编写一个程序将中缀表达式转换为后缀表达式,该中缀表达式含括号及四则运算. b.把幂操作符添加到你的指令系统中去. c.编写一个程序将后缀表达式转化为中缀表达式. Answer: ...

  4. C++ 人脸识别系统的浅理解

    机器学习 机器学习的目的是把数据转换成信息. 机器学习通过从数据里提取规则或模式来把数据转成信息. 人脸识别 人脸识别通过级联分类器对特征的分级筛选来确定是否是人脸. 每个节点的正确识别率很高,但正确 ...

  5. Bugku流量分析题目总结

    flag被盗 题目链接:https://ctf.bugku.com/files/e0b57d15b3f8e6190e72987177da1ffd/key.pcapng 解题思路: 这个题目是比较基本的 ...

  6. SpringCloud学习系列<一>版本介绍

    SpringCloud学习踩坑记<一> SpringCloud版本迭代实在太快,学习起来也是各种坑,博主用的是"当前"的最新版本,借鉴周立老大的Spring Cloud ...

  7. 面试刷题12:zero copy是怎么回事?

    文件copy是java的io部分不可忽视的内容. 我是李福春,我在准备面试,今天的问题是: zero-copy是怎么回事? 操作系统的空间划分为内核态空间, 用户态空间: 内核态空间相对操作系统具备更 ...

  8. 项目中用到了Redis分布式锁,了解一下背后的原理

    前言 以前在学校做小项目的时候,用到Redis,基本也只是用来当作缓存.现在博主在某金融平台实习,发现Redis在生产中并不只是当作缓存这么简单.在我接触到的项目中,Redis起到了一个分布式锁的作用 ...

  9. hdu3368 dfs 下棋

    两颗黑子之间的白子可以翻装成黑子,两颗白子之间的黑子可以翻转成白子,对于一个给定位置,有八个方向有翻转其他颜色的子的可能.规则之一是下棋的位置一定要能翻转对方的子. 求最优情况:黑子能翻转的白子个数的 ...

  10. HDU-1251 统计难题(我就是不用字典树)

    统计难题 ?戳这里可以前往原题 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为 ...