1 使用 Eureka
闭源了闭源了怎么办?
Eureka
闭源了,可以使用其他的注册代替:Consul
、Zookeeper
2 使用 Zookeeper
来替换 Eureka
2.1 Zookeeper
简介
Zookeeper
是一个 分布式协调工具
,可以实现服务注册与发现、注册中心、消息中间件、分布式配置中心等。
2.2 环境搭建
启动 zk 服务器端
Maven
依赖信息
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot整合eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
</dependencies>
application.yml
会员配置文件
###订单服务的端口号
server:
port: 8002
###服务别名----服务注册到注册中心名称
spring:
application:
name: zk-member
cloud:
zookeeper:
connect-string: 127.0.0.1:2181
订单配置文件
###订单服务的端口号
server:
port: 8003
###服务别名----服务注册到注册中心名称
spring:
application:
name: zk-order
cloud:
zookeeper:
connect-string: 127.0.0.1:2181
启动 zk-member 服务和 zk-order 服务,可以发现在 Zk 服务器端上有对应的节点信息
2.3 Zookeeper
与 Eureka
区别
CPA
理论:一个分布式系统不可能同时满足 C(一致性)
、A(可用性)
和 P(分区容错性)
。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在 A
和 C
之间进行权衡。在此 Zookeeper
保证的是 CP
,而 Eureka
则是 AP
。
Consistency
(一致性):数据一致更新,所有数据变动都是同步的Availability
(可用性):好的响应性能Partition tolerance
(分区容忍性):可靠性
2.3.1 Zookeeper
是保证 CP
当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接 down
掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是 zk
会出现这样一种情况,当 master
节点因为网络故障与其他节点失去联系时,剩余节点会重新进行 leader
选举。问题在于,选举 leader
的时间太长,30 ~ 120s
,且选举期间整个 zk
集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得 zk
集群失去 master
节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。
2.3.2 Eureka
是保证 AP
Eureka
看明白了这一点,因此在设计时就优先保证可用性。Eureka
各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而 Eureka
的客户端在向某个 Eureka
注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台 Eureka
还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。除此之外,Eureka
还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么 Eureka
就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:
Eureka
不再从注册列表中移除因为长时间没收到心跳而应该过期的服务Eureka
仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)- 当网络稳定时,当前实例新的注册信息会被同步到其它节点中。因此,
Eureka
可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper
那样使整个注册服务瘫痪。
3 使用 Consul
来替换 Eureka
3.1 Consul
简介
Consul
是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。
它具有很多优点。包括: 基于 raft 协议,比较简洁; 支持健康检查, 同时支持 HTTP 和 DNS 协议 支持跨数据中心的 WAN 集群 提供图形界面 跨平台,支持 Linux、Mac、Windows
Consul
整合 SpringCloud
学习网站:https://springcloud.cc/spring-cloud-consul.html
Consul
下载地址:https://www.consul.io/downloads.html
3.2 Consul
环境搭建
官方下载地址下载 window 版,解压得到一个可执行文件。
设置环境变量,让我们直接在 cmd 里可直接使用 consul 使命。在 path 后面添加 consul 所在目录例如 D:\soft\consul_1.1.0_windows_amd64
启动 consul 命
consul agent -dev -ui -node=cy
-dev
开发服务器模式启动-node
结点名为 cy-ui
可以用界面访问,默认能访问
测试访问地址:http://localhost:8500
3.3 Consul
客户端
Maven
依赖信息
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringCloud consul-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
客户端配置文件
###eureka 服务端口号
server:
port: 8502
spring:
application:
name: consul-order
####consul注册中心地址
cloud:
consul:
host: localhost
port: 8500
discovery:
hostname: 192.168.18.220