服务注册中心-Consul

131 阅读4分钟

Consul

demo地址

gitee.com/w--kk/sprin…

consul 简介

  • www.consul.io
  • consul是一个可以提供服务发现,健康检查,多数据中心,Key/Value存储等功能的分布式服务框架,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,使用起来也较为简单。Consul用Golang实现,因此具有天然可移植性(支持Linux、Windows和Mac OS X);安装包仅包含一个可执行文件,方便部署。
  1. springcloud netflix eureka
    作用: 微服务架构充当 服务注册中心
    两个角色: eureka server 服务注册中心、eureka client 微服务
    不好消息: eureka 组件 1.0(稳定) 2.0版本停止更新
    不再推荐使用eureka 服务注册中心:1. 最新版本停止更新 2. 每次必须手动通过代码形式开发服务注册中心

  2. 服务注册中心组件 eureka、zookeeper(java shell查看服务注册)、consul(ui)、nacos(ui)

  3. consul 服务注册中心

简介: consul 基于go语言进行开发服务注册中心 轻量级服务注册中心 google 作用: 管理微服务中所有服务注册 发现 管理服务元数据信息存储(服务名 地址列表) 心跳健康检查

安装consul

  1. 下载consul

在指定目录进行解压  注意: 不建议目录中含有中文

  1. 安装consul
  1. 根据解压缩目录配置环境变量
  • 根据安装目录进行环境变量配置 [这里是macos和linux系统配置]

image.png

image.png

  1. 查看consul环境变量是否配置成功,执行命令出现如下信息代表成功
  • consul -v image.png
  1. 启动consul服务
  • consul agent -dev

先单节点启动

image.png

  1. 访问consul的web服务端口

image.png

dc1: 数据中心名称 datacenter 默认为: dc1

指定数据中心启动 consul agent -dev -datacenter = aa

services:当前consul服务中注册服务列表  默认:client server同时启动自己注册自己 会出现一个consul服务

image.png

consul配置环境变量

在Path中配置 image.png

开发consul 客户端即微服务

  1. 创建项目并引入consul客户端依赖
<!--引入consul依赖-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-consul-discovery(服务发现与注册)</artifactId>
</dependency>
  1. 编写properties配置
server.port=8889
spring.application.name=consulclient8889
spring.cloud.consul.host=localhost														#注册consul服务的主机
spring.cloud.consul.port=8500																	#注册consul服务的端口号
spring.cloud.consul.discovery.register-health-check=false	    #关闭consu了服务的健康检查[不推荐]
spring.cloud.consul.discovery.service-name=${spring.application.name} #指定注册的服务名称 默认就是应用名

除了eurekaClient,zookeeper(java shell查看服务注册)、consul(ui)、nacos(ui)的微服务注解都是@EnableDiscoveryClient

@SpringBootApplication //代表这一个springboot入口应用
@EnableDiscoveryClient  //作用:通用服务注册客户端注解 代表 consul client  zk client  nacos client
public class ConsulClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsulClientApplication.class,args);
    }
}

  1. 启动服务查看consul界面服务信息

consul 开启健康监控检查

  1. 开启consul健康监控
  • 默认情况consul监控健康是开启的, 但是必须依赖健康监控依赖才能正确监控健康状态所以直接启动会显示错误, 引入健康监控依赖之后服务正常

image.png

原因:consul server 检测所有客户端心跳,但是发送心跳时client必须给与响应该服务才能正常使用,在现有客户端中我们并没有引入健康检查依赖,所有导致监控检查始终不通过,导致服务不能使用

<!-- 这个包是用做健康度监控的-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

consul 关闭健康监控检查

server.port=8889
spring.application.name=consulclient8889
spring.cloud.consul.host=localhost    #注册consul服务的主机
spring.cloud.consul.port=8500	#注册consul服务的端口号
spring.cloud.consul.discovery.register-health-check=false  #关闭consu了服务的健康检查[不推荐]
spring.cloud.consul.discovery.service-name=${spring.application.name} 					#指定注册的服务名称 默认就是应用名

不同注册中心区别

  1. CAP定理
  • CAP定理:CAP定理又称CAP原则,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
    • 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
    • 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
    • 分区容忍性(P),就是高可用性,一个节点崩了,并不影响其它的节点(100个节点,挂了几个,不影响服务,越多机器越好)
  1. Eureka特点
  • Eureka中没有使用任何的数据强一致性算法保证不同集群间的Server的数据一致,仅通过数据拷贝的方式争取注册中心数据的最终一致性,虽然放弃数据强一致性但是换来了Server的可用性,降低了注册的代价,提高了集群运行的健壮性。
  1. Consul特点
  • 基于Raft算法,Consul提供强一致性的注册中心服务,但是由于Leader节点承担了所有的处理工作,势必加大了注册和发现的代价,降低了服务的可用性。通过Gossip协议,Consul可以很好地监控Consul集群的运行,同时可以方便通知各类事件,如Leader选择发生、Server地址变更等。
  1. zookeeper特点
  • 基于Zab协议,Zookeeper可以用于构建具备数据强一致性的服务注册与发现中心,而与此相对地牺牲了服务的可用性和提高了注册需要的时间。

image.png