服务发现与consul

引言

  为什么要学习consul服务发现? 因为一套微服务架构中有很多个服务需要管理,也就是说会有很多对grpc。 如果一一对应的进行管理会很繁琐所以我们需要有一个管理发现的机制

Consul的介绍

  ConsulHashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与服务注册配置功能。 Consul是分布式的、高可用 的、可横向扩展的。

  它具备以下特性 :

    1. service discoveryconsul可以通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas 提供的也可以一样注册。

    2. health checking:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到 故障的服务上面。

    3. key/value storage:支持key-value存储。提供简单的HTTP接口,可以在任何地方操作。

    4. multi-datacente:无需复杂的配置,即可支持多数据中心。

下面的例子有助于我们理解服务发现的形式:
例如邮递员去某公司一栋大楼投递快件,向门卫询问员工甲在哪一个房间,门卫拿起桌上的通讯录查询,告知邮递员员工甲在具体什么位置。假如公司来了一个员工乙,他想让邮递员送过来,就要先让门卫知道自己在哪一个房
间,需要去门卫那边登记,员工乙登记后,当邮递员向门卫询问时,门卫就可以告诉邮递员员工乙的具体位置。门卫知道员工乙的具体位置的过程就是服务发现,员工乙的位置信息可以被看作服务信息,门卫的通讯录就是上文中
提到的数据交换格式,此例中员工乙就是上文的已方,门卫就是服务发现的提供者。


什么是服务发现
  微服务的框架体系中,服务发现是不能不提的一个模块。我相信了解或者熟悉微服务的童鞋应该都知道它的重要性。我们看下面的一幅图片:
图中,客户端的一个接口,需要调用服务A-N。客户端必须要知道所有服务的网络位置的,以往的做法是配置是配 置文件中,或者有些配置在数据库中。这里就带出几个问题:

  需要配置N个服务的网络位置,加大配置的复杂性 服务的网络位置变化,都需要改变每个调用者的配置 集群的情况下,难以做负载(反向代理的方式除外)

  总结起来一句话:服务多了,配置很麻烦,问题多多 既然有这些问题,那么服务发现就是解决这些问题的。话说,怎么解决呢?我们再看一张图:
与之前一张不同的是,加了个服务发现模块。图比较简单,这边文字描述下。服务A-N把当前自己的网络位置注册 到服务发现模块(这里注册的意思就是告诉),服务发现就以K-V的方式记录下,K一般是服务名,V就是 IP:PORT。服务发现模块定时的轮询查看这些服务能不能访问的了(这就是健康检查)。客户端在调用服务A-N的 时候,就跑去服务发现模块问下它们的网络位置,然后再调用它们的服务。这样的方式是不是就可以解决上面的问 题了呢?客户端完全不需要记录这些服务网络位置,客户端和服务端完全解耦。

其他的注册中心解决方案及对比

  现在注册中心的解决方案很多,比如zookeeper,etcd等等,相关技术的特性见如下:

项目 特点 CAP支持 通信协议 一致性算法 开发语言
etcd 分布式key/value存储系统,服务发现功能需要第三方支持 AP/CP http/grpc raft golang
zookeeper 功能强大,技术成熟,但是比较重 CP sdk zab java
consul 支持多数据中心,内嵌实现了服务发现功能 CP  http raft golang
Consul的安装
  ConsulGolang实现,因此具有天然可移植性 (支持 LinuxwindowsmacOS)。安装包仅包含一个可执行文
件。 Consul安装非常简单,只需要下载对应系统的软件包并解压后就可使用。
  可以去Consul官网下载 https://www.consul.io/downloads.html
  
   

   我说Mac系统直接安装,使用命令:brew install consul

  

   安装好之后查看版本,如下说明安装好了

  

 Consul的使用

   1. 启动Consul,使用命令:consul agent -dev

    

     然后在浏览器中输入http://localhost:8500,就可以看到Consul Web界面。

     





















原文地址:https://www.cnblogs.com/songgj/p/11564108.html