SpringCloud(五)——consul服务注册中心
consul简介
consul是一个可以提供服务发现,健康检查,多数据中心,Key/Value存储等功能的分布式服务框架,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,使用起来也较为简单。Consul用Golang实现,因此具有天然可移植性(支持Linux、Windows和Mac OS X);安装包仅包含一个可执行文件,方便部署。
consul安装和使用
1.下载consul https://www.consul.io/downloads
2、直接解压到安装目录(尽量解压到全英文名字的目录)
3、用cmd命令行进入到consul安装目录输入
consul agent -dev
打开consul
4、访问consul的web服务端口 http://localhost:8500 ,默认端口是8500
consul服务客户端开发
1、新建一个consuk客户端模块,添加对应依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--consul客户端依赖-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-consul-discovery -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!--健康检查依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2、新建application.yaml配置文件
server:
port: 8082
spring:
application:
name: CONSULCLIENT #指定服务名称
cloud:
consul:
host: localhost:8500 #consul server服务注册地址
discovery:
#指定注册当前服务的服务名称 默认值为${spring.application.name}
service-name: AAA
3、编写主启动类
package com.study.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient //作用:通用服务注册客户端注解 可以对consulClient zookeeperClient eurekaClient都生效
public class Consul_8082 {
public static void main(String[] args) {
SpringApplication.run(Consul_8082.class,args);
}
}
4、启动测试
启动consulServer
领取资料
启动consul客户端,访问localhost:8500 进入sonsul注册中心页面
出现这种情况是因为 consulServer 检测所有客户端心跳,但是发送心跳时client必须给予响应才能使该客户端正常使用,在现有的客户端中我们并没有引入健康检查依赖,所以导致健康检查始终不能通过,所以导致不能使用
注意:Consul没有自我保护机制
不同注册中心区别
# 1.CAP定理
- CAP定理:CAP定理又称CAP原则,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
`一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
`可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
`分区容忍性(P),就是高可用性,一个节点崩了,并不影响其它的节点(100个节点,挂了几个,不影响服务,越多机器越好)
[领取资料](https://jq.qq.com/?_wv=1027&k=ak26GrpX)
# 2.Eureka特点
- Eureka中没有使用任何的数据强一致性算法保证不同集群间的Server的数据一致,仅通过数据拷贝的方式争取注册中心数据的最终一致性,虽然放弃数据强一致性但是换来了Server的可用性,降低了注册的代价,提高了集群运行的健壮性。
# 3.Consul特点
- 基于Raft算法,Consul提供强一致性的注册中心服务,但是由于Leader节点承担了所有的处理工作,势必加大了注册和发现的代价,降低了服务的可用性。通过Gossip协议,Consul可以很好地监控Consul集群的运行,同时可以方便通知各类事件,如Leader选择发生、Server地址变更等。
# 4.zookeeper特点
- 基于Zab协议,Zookeeper可以用于构建具备数据强一致性的服务注册与发现中心,而与此相对地牺牲了服务的可用性和提高了注册需要的时间。
组件名 | 语言 | CAP | 一致性算法 | 服务健康检查 | 对外暴露接口 | Spring Cloud集成 |
---|---|---|---|---|---|---|
Eureka | Java | AP | 无 | 可配支持 | HTTP | 已集成 |
Consul | Go | CP | Raft | 支持 | HTTP/DNS | 已集成 |
Zookeeper | Java | CP | Paxos | 支持 | 客户端 | 已集成 |