Spring Cloud之 Eureka 服务注册中心
1. 什么是服务?
服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来 存储服务信息,譬如提供者 url 串、路由信息等。服务注册中心是 SOA 架构中最基础的设 施之一。
2. 服务注册中心有什么作用?
1) 服务的注册
2) 服务的发现
3. 常见的注册中心有哪些?
1) Dubbo 的注册中心 Zookeeper
2) Sringcloud 的注册中心 Eureka
4. Eureka 注册中心
4.1 什么是 Eureka 注册中心
Eureka 是 Netflix 开发的服务发现组件,本身是一个基于 REST 的服务。Spring Cloud
将它集成在其子项目 spring-cloud-netflix 中,以实现 Spring Cloud 的服务注册于发现,同时
还提供了负载均衡、故障转移等能力。
4.2 Eureka的三个角色
1) Eureka Server:
服务提供方
把自身的服务实例注册到 Eureka Server 中
2)Application Service (Service Provider)
服务调用方
通过 Eureka Server 获取服务列表,消费服务。
3) Application Client (Service Consumer)
服务调用方
通过 Eureka Server 获取服务列表,消费服务。
4.2.1 示例:创键一个简单的注册中心
步骤:
1) 创建项目
1.1 ) 修改pom.xml文件
2) 创建配置文件:application.properties
3) 编写启动类
4) 测试,如下图示:
4.2.2 创建集群版的注册中心
步骤:
1) 创建项目
1.1 修改pom.xml文件
2) 创建环境配置文件:
在搭建 Eureka 集群时,需要添加多个配置文件,并且使用 SpringBoot 的多环境配置方
式。集群中需要多少节点就添加多少个配置文件。
application-eureka1.properties
application-eureka2.properties
3)创建启动类
4) 部署到linux系统中
部署环境:需要安装 jdk1.8,正确配置环境变量。
注意:需要关闭 linux 的防火墙,或者是开放 8761 端口
4.1 ) 打成jar包
使用maven命令:clean install
4.2) 上传实例
在/usr/local/创建一个 eureka 的目录
将项目的 jar 包拷贝到/usr/local/eureka
4.3) 编写一个启动脚本文件 vim server.sh
4.4 )设置脚本的运行权限
Chmod -R 755 server.sh
4.5 ) 关闭防火墙
service iptables stop
4.5.1 )修改 linux 的 的 host 文件
Vim /etc/hosts
192.168.70.134 eureka1
192.168.70.135 eureka2
4.6 ) 启动注册中心
./server.sh start 启动
./server.sh stop 停止
4.7 ) 测试
5. 在集群版 Eureka 注册中心中构建 provider 服务
步骤
1) 创建项目
2) 修改 pom 文件
3) 修改启动类
4) 修改 provider 的配置文件
5) 修改 windows 的 的 host 文件
6)创建接口(简单创建)
6. 在集群版的 Eureka 注册中心中构建 consumer 服务
步骤
1) 创建项目
2) 修改pom文件
3) 修改配置文件application.properties
4) 在 Service 中完成服务的调用
5) 编写controller
6) 测试
http://localhost:9999/getusers
7. Eureka 注册中心架构原理
Register(服务注册):把自己的 IP 和端口注册给 Eureka。
Renew(服务续约):发送心跳包,每 30 秒发送一次。告诉 Eureka 自己还活着。
Cancel(服务下线):当 provider 关闭时会向 Eureka 发送消息,把自己从服务列表中删除。防
止 consumer 调用到不存在的服务。
Get Registry(获取服务注册列表):获取其他服务列表。
Replicate(集群中数据同步):eureka 集群中的数据复制与同步。
Make Remote Call(远程调用):完成服务的远程调用。
8. 基于分布式 CAP 定理,分析注册中心两大主流框架:Eureka与 Zookeeper 的区别
8.1 什么是cap定理
CAP 原则又称 CAP 定理,指的是在一个分布式系统中,Consistency (一致性)、
Availability (可用性)、Partition tolerance (分区容错性),三者不可 兼得。
CAP 由 由 Eric Brewer 在 在 2000 年 年 PODC 会议上提出。 。 该猜想在提出两年后被证明成
的 立,成为我们熟知的 CAP 定理
8.2 Zookeeper 与 与 Eureka 的区别
8.2.1 Zookeeper保证cp
8.2.2 eureka保证ap
Zookeeper的设计理念就是分布式协调服务,保证数据(配置数据,状态数据)在多个服务系统之间保证一致性,这也不难看出Zookeeper是属于CP特性(Zookeeper的核心算法是Zab,保证分布式系统下,数据如何在多个服务之间保证数据同步)。Eureka是吸取Zookeeper问题的经验,先保证可用性。
9. Eureka 优雅停服
9.1 什么是自我保护模式
9.1.1 ,自我保护的条件
一般情况下,微服务在 Eureka 上注册后,会每 30 秒发送心跳包,Eureka 通过心跳来
判断服务时候健康,同时会定期删除超过 90 秒没有发送心跳服务。
9.1. 2,有两种情况会导致 Eureka Server 收不到微服务的心跳
a.是微服务自身的原因
b.是微服务与 Eureka 之间的网络故障
通常(微服务的自身的故障关闭)只会导致个别服务出现故障,一般不会出现大面积
故障,而(网络故障)通常会导致 Eureka Server 在短时间内无法收到大批心跳。
考虑到这个区别,Eureka 设置了一个阀值,当判断挂掉的服务的数量超过阀值时,
Eureka Server 认为很大程度上出现了网络故障,将不再删除心跳过期的服务。
9.1. 3,那么这个阀值是多少呢?
15 分钟之内是否低于 85%;
Eureka Server 在运行期间,会统计心跳失败的比例在 15 分钟内是否低于 85%
这种算法叫做 Eureka Server 的自我保护模式。
9.1.4 为什么要启动自我保护
1,因为同时保留"好数据"与"坏数据"总比丢掉任何数据要更好,当网络故障恢复后,
这个 Eureka 节点会退出"自我保护模式"。
2,Eureka 还有客户端缓存功能(也就是微服务的缓存功能)。即便 Eureka 集群中所有节点
都宕机失效,微服务的 Provider 和 Consumer
都能正常通信。
3,微服务的负载均衡策略会自动剔除死亡的微服务节点。
9.1.5 关闭自我保护
在全局配置文件中配置
9.2 优雅停服的设置
9.2.1 不需要Eureka Server 中配置关闭自我保护
9.2.2 添加 actuator.jar 包
9.2.3 修改配置文件
9.2.4 发送一个关闭服务的 URL 请求
导入HttpClientUtil工具类: