我是服务的执政官-服务发现和注册工具consul简介

服务发现和注册


我们有了两个服务。服务A的IP地址是192.168.0.1,端口9001,服务B的IP地址192.168.0.2,端口9002。我们的客户端需要调用服务A和服务B,我们只需要在配置文件中写上服务A和服务B的IP地址即可。

此时,服务A的服务器负载有点高,我们需要临时增加服务A的实例,IP192.168.0.3,端口9001。但是我们的客户端要怎么才能调用新的实例?

常规来说,我们可以有以下几种方法:

  • 网络代理方式
    如果是http方式通信的服务,可以增加一个nginx做反向代理,转发到两个服务A的实例上。
    如果是RPC服务则可以增加一个LVS或HAProxy或者ESB之类的网络代理,客户端配置网络代理地址。
    服务B我们再来一套一样的配置,这时候又来了服务C、服务D、服务E...,好吧我们好还要再多维护同样多的网络代理。此外,所有的服务调用服务调用都必须经过网络代理,我们还必须保证代理的高可用。最后,陷入运维灾难。

  • DNS方式
    给服务A配置一个域名,然后通过配置两个A记录分别指向两个服务A的实例,客户端只要配置服务A的域名即可。
    这种方式也存在问题,首先DNS没有办法管理端口,我们的端口还是只能写在每个客户端的配置文件中。此外DNS轮询负载均衡能力太弱,可能会导致客户端负载的不均衡。

现在有了服务发现和注册机制,我们可以更合理的解决这个问题。

服务发现和注册,参考字面意思很容易理解,其核心部分可以理解为一个服务注册表。服务启动时,将自己的信息注册到注册表中。注册表需要每一定时间访问下已经注册的服务,将没有响应的服务从注册表中删除。最终让客户端拿到正常运行的服务地址。

此时,我们的服务注册表必须具备分布式、高可用、强一致性等特点。

目前,业界开源的服务发现和注册产品有很多,比较流行的主要有:ZooKeeper,Etcd,Consul,Eureka等。

下面介绍下今天的主角,Consul

Consul


Consul是一个服务发现和注册的工具,其具有分布式、高扩展性能特点。

Consul主要包含如下功能:

  • 服务发现: 支持 http 和 dns 两种协议的服务注册和发现方式。
  • 监控检查: 支持多种方式的健康检查。
  • Key/Value存储: 支持通过HTTP API实现分布式KV数据存储。
  • 多数据中心支持:支持任意数量数据中心。

官网图

上图是官网提供的一个事例系统图,图中的Server是consul服务端高可用集群,Client是consul客户端。consul客户端不保存数据,客户端将接收到的请求转发给响应的Server端。Server之间通过局域网或广域网通信实现数据一致性。每个Server或Client都是一个consul agent。Consul集群间使用了GOSSIP协议通信和raft一致性算法。

使用Consul也非常简单,基本可以做到开箱即用。

下载应用后可以通过简单的脚本启动服务端和客户端:

$ consul
usage: consul [--version] [--help] <command> [<args>]Available commands are:
agent          Runs a Consul agent
configtest     Validate config file
event          Fire a new event
exec           Executes a command on Consul nodes
force-leave    Forces a member of the cluster to enter the "left" state
info           Provides debugging information for operators
join           Tell Consul agent to join cluster
keygen         Generates a new encryption key
keyring        Manages gossip layer encryption keys
kv             Interact with the key-value store
leave          Gracefully leaves the Consul cluster and shuts down
lock           Execute a command holding a lock
maint          Controls node or service maintenance mode
members        Lists the members of a Consul cluster
monitor        Stream logs from a Consul agent
operator       Provides cluster-level tools for Consul operators
reload         Triggers the agent to reload configuration files
rtt            Estimates network round trip time between nodes
version        Prints the Consul version
watch          Watch for changes in Consul

运行consul agent 加上相关的参数,就可以启动一个consul server 或者 client。

接着,我们可以通过http api注册服务,向/v1/catalog/register发送PUT动作的JSON报文:

{"Datacenter": "dc1",   "Node": "foobar",      "Address": "192.168.10.10",  "Service": {             //注册的服务信息"ID": "redis1","Service": "redis","Tags": ["primary","v1"],"Address": "127.0.0.1","Port": 8000},"Check": {              //注册健康检查"Node": "foobar","CheckID": "service:redis1","Name": "Redis health check","Notes": "Script based health check","Status": "passing","ServiceID": "redis1"}
}

注册后,我们可以在consul自带的WEB UI中看到刚刚注册的服务:

73868-20161202165958881-843055478.png

与Spring Cloud集成


如果你的服务正好使用spring boot构建,不妨试试Spring Cloud Consul。

Spring Cloud Consul通过几个简单的注解,就可以集成诸多consul功能,让你更方便的治理你的服务。

@SpringBootApplication
@EnableDiscoveryClient   //只要添加这个注解即可向配置号的consul注册服务
@RestController
public class Application { @RequestMapping("/")public String home() {return "Hello world";}public static void main(String[] args) {new SpringApplicationBuilder(Application.class).web(true).run(args);} 
}

同时我们可以配合spring boot actuator来注册监控检查:

spring:cloud:consul:discovery:healthCheckPath: ${management.contextPath}/healthhealthCheckInterval: 15s

Spring Cloud支持 Feign 或者 Spring RestTemplate 通过服务发现来调用服务,也可以使用org.springframework.cloud.client.discovery.DiscoveryClient:

@Autowired //注入一个DiscoveryClient
private DiscoveryClient discoveryClient;public String serviceUrl() {List<ServiceInstance> list = discoveryClient.getInstances("STORES");if (list != null && list.size() > 0 ) {return list.get(0).getUri();}return null;
}

consul除了可以用作服务治理的工具,还可以利用其KV存储能力,实现分布式服务配置或分布式锁等功能。各位感兴趣的童鞋可以去consul官网,学习更多的内容。

最后,都看到这了,就顺手点个赞吧~~~

参考资料:
https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/
https://highops.com/insights/service-discovery-6-questions-to-4-experts/
https://www.consul.io/
http://cloud.spring.io/spring-cloud-consul/

转载于:https://www.cnblogs.com/lazio10000/p/6126754.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么linux系统是中文的,什么是Linux系统

Linux系统是一种类似Unix的开源和社区开发的操作系统&#xff0c;适用于计算机&#xff0c;服务器&#xff0c;大型机&#xff0c;移动设备和嵌入式设备&#xff0c;已成为最广泛支持的操作系统之一&#xff0c;接下来在文章中将为大家详细介绍什么是Linux【推荐课程&#xff1…

numpy将所有数据变为0和1_Numpy库学习

之前照着《利用python进行数据分析》学过一边&#xff0c;代码也跟着敲了&#xff0c;但是如果不用的话&#xff0c;印象不深&#xff0c;忘的特别快。所以&#xff0c;现在再过一遍&#xff0c;并且记录一下&#xff0c;加深印象。一、创建numpy中的多维数组对象ndarry的创建。…

win8.1 linux系统,电脑显示win8.1linux系统失效的原因及解决办法!

电脑蓝屏每次代码都不一样&#xff0c;有的是epoll或者workflow代码有的是错误码&#xff0c;会将错误进行查找&#xff0c;电脑蓝屏错误有些可以修复&#xff0c;也有错误修复不了的&#xff0c;出现蓝屏&#xff0c;最可能的原因是segmentationfault&#xff0c;出现的原因是…

数据丢失情况下应急之顶级数据恢复服务提供商列表

在当今的数字世界中&#xff0c;数据存储设备在我们的职业和个人生活中发挥着非常重要的作用。 无论是硬盘驱动器上的重要专业文档、USB 闪存驱动器上的医疗数据还是外部硬盘驱动器上的照片和视频&#xff0c;我们都将重要信息存储在一个或另一个数据存储设备上。我们认为数据…

jsencrypt加密同一值返回不同密文_密码学原语如何应用?解析密文同态性的妙用...

免责声明&#xff1a;本文旨在传递更多市场信息&#xff0c;不构成任何投资建议。文章仅代表作者观点&#xff0c;不代表火星财经官方立场。小编&#xff1a;记得关注哦来源&#xff1a;微众银行区块链隐私数据在密文形式下是否依旧可以加减乘除&#xff1f;其背后的同态性原理…

小红帽怎样装图形化界面_纯技术篇:U盘装系统,不再多花冤枉钱

U盘装系统&#xff0c;顾名思义就是用U盘安装电脑的操作系统。这里小编用现在最常见的大白菜装机软件来开始教程。1、使用大白菜装机版制作大白菜U盘启动盘之前&#xff0c;需要准备一个存储空间大于2G的U盘。2、下载并且安装好大白菜装机版&#xff0c;打开安装好的大白菜装机…

北斗三号b1c频点带宽_重磅北斗星通新一代22nm北斗高精度定位芯片正式发布

11月23日&#xff0c;第十一届中国卫星导航年会在四川省成都市盛大召开。年会首日&#xff0c;北斗星通旗下企业和芯星通正式发布了最新一代全系统全频厘米级高精度GNSS芯片——和芯星云NebulasⅣ。这颗芯片代表了国内卫星导航芯片的最高水平&#xff0c;在厘米级高精度定位领域…

为什么人会摆高姿态_为什么感情相处中不要随意掏心掏肺?

如今已经到了十二月份&#xff0c;过年的时间一点一点推进&#xff0c;在这个冬天你这一年的感悟有多少&#xff1f;这一年过得还快乐吗&#xff1f;可能有人在这一年遇到了自己的另一半&#xff0c;彼此陪伴走过四季&#xff0c;沉浸在爱情的蜜罐里&#xff0c;感受荷尔蒙碰撞…

hadoop 2.7.2 + zookeeper 高可用集群部署

一&#xff0e;环境说明 虚拟机&#xff1a;vmware 11 操作系统&#xff1a;Ubuntu 16.04 Hadoop版本&#xff1a;2.7.2 Zookeeper版本&#xff1a;3.4.9 二&#xff0e;节点部署说明 三&#xff0e;Hosts增加配置 sudo gedit /etc/hosts wxzz-pc、wxzz-pc0、wxzz-pc1、wxzz-pc…

最全面的Android Studio使用教程【申明:来源于网络】

最全面的Android Studio使用教程【申明&#xff1a;来源于网络】 http://www.admin10000.com/document/5496.html 转载于:https://www.cnblogs.com/yearHeaven/p/6741388.html

linkedhashmap 顺序_LinkedHashMap 源码详细分析(JDK1.8)

1. 概述LinkedHashMap 继承自 HashMap&#xff0c;在 HashMap 基础上&#xff0c;通过维护一条双向链表&#xff0c;解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。除此之外&#xff0c;LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下&#xff0c;该特性…

testNG入门详解

TestNG 的注释: DataProvider ExpectedExceptions Factory Test Parameters <suite name"ParametersTest"><test name"Regression1"><classes><class name"com.example.ParameterSample" /><class name"com.exa…

尼康相机报错err_数码相机遇到这12种错误,自己动手就能解决,再不用找人维修...

如果您资深摄影师或者专业摄影爱好者&#xff0c;那么您必须熟悉下面提到的数码相机所出现的问题和错误。如果您没有遇到任何问题&#xff0c;要么您是初学者&#xff0c;要么您已经很少拍摄了。下面列出的常见相机问题及其解决方案&#xff0c;会为您在使用数码相机的过程中提…