4.1.服务注册中心 Eureka
1).什么是eureka(保证CAP理论中的AP)
Eureka是一个RESTful服务,有两个组件组成:Eureka服务端和Eureka客户端
Eureka服务端:相当于一个注册中心,里面有注册表,注册表中保存了各个服务所在机器的端口号,可以通过Euraka服务器找到各自的服务系统
Eureka客户端:负责将这个服务的信息注册到Eureka服务端中
2).Euraka的工作原理
服务消费者与服务提供者向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次在调用时,则直接从本地缓存中去,完成一次调用。
当服务注册中心Euraka Server检测到服务提供者因为宕机,网络原因不可用时,则在服务注册中心将服务置为DOWN状态,并把当前服务提供者状态向订阅者发布,订阅过的服务消费者更新本地存储。
服务提供者在启动后,会周期性(默认30秒)向Eureka Server发送心跳,以证明当前服务是可用状态,Eureka Server在一定的时间(默认90秒)未收到客户端心跳,则认为服务宕机,销毁该服务
3). Eureka的自我保护机制
在默认的配置中,如果90s没有得到客户端的心跳,则会注销该实例,但微服务是跨进行调度,有可能会发生网络不稳定,导致客户端正常运行但因网络延迟,90s内心跳没有发送到服务端从而被注销。
因此,为了解决该问题,Eureka出现了自我保护机制,即,当Eureka Server节点在短时间内丢失过多的客户端时(可能发生了网络故障),那么节点将进入自我保护模式,不再注销任何微服务,当网络恢复正常后,该节点自动退出自我保护机制
启动保护机制:eureka.server.enable-self-preservation=true
4).Euraka心跳机制
1.服务器启动成功,等待客户(服务)端注册,在启动过程中如果我们配置了集群,集群之间会同步注册表,每一个Eureka serve都会存在这个集群完整的服务注册表信息
2.Eureka client 启动时根据配置信息,去注册到指定的注册中心
3.Eureka client会每30秒向Eureka server 发送一次心跳请求,证明该客户端服务正常
4.当Eureka server90s内没有接受客户端服务正常,注册中心会认为该节点失效,会注销该实列 (从注册表中删除注册信息)
5.单位时间内如果服务端统计到大量客户端没有发送心跳,则认为网络异常,进去自我保护机制,不在剔除没有发送心跳的客户端
6.当客户端恢复正常之后,服务端就会退出自我保护模式
7.客户端定时全量或增量从注册中心获取服务注册表,并且会缓存到本地
8.服务调用时,客户端会先从本地缓存找到调用服务,如果调取不到 先从注册中心刷新注册表,在同步到本地
9.客户端获取不到目标服务器信息发起服务调用
10.客户端程序关闭时向服务端发送取消请求,服务器将实例从注册表中删除
5).Eureka搭建
a.创建一个springboot项目作为eureka注册中心服务器
b.引入eureka服务器的依赖
c.在启动类添加@EnableEurekaServer注解
d.在配置文件中配置相关注解
e.在eureka客户端的pom.xml文件中添加eureka客户端依赖
f. 在客户端启动类添加注解@EnableEurekaClient注解
g.在客户端配置文件中添加注册中心访问地址
h.启动服务端与客户端,访问注册中心