Eureka
文章内容为本人在B站尚硅谷频道学习《SpringCloud(H版&alibaba)》整理复习而得
一、Eureka 基础
**服务治理:**在传统的rpc远程调用框架中,管理每个服务与服务之间的依关系比较复杂,所以需要使用服务治理,管理服务与服务之间的依赖关系,可以实现服务调用、负载均衡、容错等,实现服务的发现与注册。
**服务注册:**Eureka采用了CS的设计架构。Eureka Server作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server 并维持心跳链接。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行。
在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息,比如:服务器的地址、通讯地址等以别名的方式注册到注册中心上。另一方面(消费者|服务提供者),以该别名去注册中心上获取到实际的服务通讯地址,然后再实现本地rpc调用。
**RPC远程调用框架核心设计思想:**在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))
左图是Eureka系统架构,右图是Dubbo的架构
Eureka包含两个组件:Eureka Server和Eureka Client
**Eureka Server提供服务注册服务:**各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。
**EurekaClient通过注册中心进行访问:**是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)
二、单机Eureka构建
2.1 创建EurekaServer端服务中心
-
创建Module :cloud-eureka-server7001
-
修改pom.xml文件,添加eureka server依赖
-
编写application.yml配置文件
-
编写主启动类——添加@EnableEurekaServer注解
-
测试
2.2 创建EurekaClient端
-
创建Module:cloud-provider-payment8001
-
修改pom.xml文件,添加erurka client依赖
-
编写application.yml配置文件
-
编写主启动类——添加@EnableEurekaClient注解
-
测试,先启动 eureka server 端再启动 eureka client 端
三、 Eureka集群
**什么是集群:**集群是一组协同工作的服务实体, 用以提供比单一服务实体更具扩展性和可用性的服务平台。
**Eureka集群的原理:**多个Eureka Server服务相互注册,相互守望。
3.1 创建多个Eureka Client,Eureka Server
####3.2 Eureka Server之间相互注册
cloud-eurake-server7001注册cloud-eureka-server7002
cloud-eureka-server7002注册cloud-eurake-server7001
####3.3 Eureka Client注册进入Eureka Server
####3.4 检测
####3.5 负载均衡
修改服务使用者cotroller :
使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
四、服务发现Discovery
4.1修改服务提供者的controller
4.2修改服务提供者的启动类
添加@EnableDiscovery
五、Eureka自我保护
5.1 为什么会产生Eureka自我保护机制?
为防止Eureka Client 可以正常运行,但是与Eureka Server 网络不通情况下 Eureka Server立刻将Eureka Client服务剔除
5.2 什么是自我保护模式?
默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳,EurekaServer将会注销该实例(默认90秒)。但是当网络分区故障发生(延时、卡顿、拥挤)时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过“自我保护模式”来解决这个问题——当EurekaServer节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。
5.3关闭自我保护
出厂默认自我保护机制开启
- 注册中心Eureka Server端
- 客户端Eureka Client端