美文网首页
spring cloud eureka服务治理机制

spring cloud eureka服务治理机制

作者: 帅气的名称被占用 | 来源:发表于2019-05-24 00:37 被阅读0次
Eureka Server注册中心

服务提供者

1.服务注册

服务提供者在启动的时候会发送REST请求的方式将自己注册到Eureka Server服务上,同时带上自身的一些元数据信息。Eureka Server 接受到REST请求之后,将元数据信息存储到一个双层Map中,其中第一层的key是服务名,第二层的key是具体的实例名,Eureka信息面板中一个服务有多个实例的情况,这些内容就是以双层Map形式存储的。

在服务注册时,需确认一下 eureka.client.register.with.eureka=true参数是否正确,该默认值为false,若设置为false 将不会启动注册操作。

2.服务同步

如图所示两个服务提供者分别注册到两个不同的注册中心上,他们的信息分别被两个注册中心所维护,由于服务注册中心之间因相互注册为服务,所以当服务提供者发送一个请求到服务注册中心时,他也会将请求给集群中相连的其他注册中心,从而实现了注册中心的服务同步。通过服务同步,两个服务提供者的服务信息就可以通过这两台服务注册中心的任意一台获取。

3.服务续约

在注册完服务之后,服务提供者会维护一个心跳用来持续告诉Eureka Server 我还活着,以防止Eureka Server 剔除任务 将该服务实例从服务列表中排除出去,我们称该操作为“服务续约”
服务续约有两个重要的属性:
eureka.instance.lease-renewal-interval-in-seconds=30
表示服务续约的调用间隔时间默认为30秒
eureka.instance.lease-expiration-duration-in-seconds=90
表示服务时效的时间为90秒

服务消费者

1.获取服务

当我们启动服务消费者的时候,它会发送一个REST请求到注册中心,来获取上面注册的服务清单,为了性能考虑,Eureka Server 会维护一份只读的服务清单返回给客户端,同时该缓存清单会每隔30秒更新一次
所以获取服务是服务消费者的基础 必须确保
Eureka.client.fetch-register=true 默认为ture
若想修改获取服务清单的更新时间修改
eureka.client.register-fetch-interval-seconds=30 的参数进行修改,默认30秒

2.服务调用

服务消费者获取服务清单后,通过服务名获取具体的实例名和该实例的元数据信息,因为有这些服务的信息,所以客户端可以根据自己的需求决定具体调用哪个实例,在ribbon中默认采用轮询的方式进行掉用,从而实现客户端的负载均衡。
对于访问实例的选择 Eureka 中有Region和Zone的概念,一个Region中包含多个Zone,每个服务客户端会注册到一个Zone中,所以每个客户端对应一个Region和一个Zone,在服务调用时优秀访问同一个Zone中的服务提供方,若访问不到就调用其他的Zone。

3.服务下线

在服务运行过程中必然会面临关闭或重启某个实例的情况,在关闭时我们不希望客户端继续调用关闭的实例,所以当服务正常关闭时,会触发一个REST请求给Eureka Server 告诉服务注册中心 我要下线了 服务端接收到请求之后,将该服务状态设置为(DOWN)并把该下线事件传播出去。

服务注册中心

1.失效剔除

有时候服务并能正常下线,可能由于内存溢出,网络故障等原因导致服务不能正常工作,而服务注册中心并没有收到服务下线请求,为了从服务列表中清除那些不可用的服务实例,Eureka Server 在启动的时候会创建一个定时任务,默认每隔60秒将清单中超时90秒的没有续约的服务剔除出去。

2.自我保护

在本地调用基于Eureka的程序时会在注册中心信息面板出现红色的警告信息

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

实际上就是触发了Eureka Server的自我保护机制,因为服务注册到Eureka Server之后会维护一个心跳连接,告诉Eureka Server我还活着,Eureka Server在运行期间会统计失败的比列在15分钟内低于85%的,如果出现低于的情况,Eureka Server会将这些服务实例保护起来,让这些服务不过期,尽可能保护这些注册信息,但是在保护期间客户端很容易拿到实际已经不存在的服务实例,会出现失败的情况,所以客户端必须要有容错机制,比如使用请求重试,断路器等机制
既然本地吊事容易触发注册中心自我保护机制 可以通过配置属性
eureka.server.enable-self-preservation=false 参数来关闭保护机制,以确保服务注册中心可以将不可用的服务实例正确剔除。

未完待续。。。。。。。。

相关文章

网友评论

      本文标题:spring cloud eureka服务治理机制

      本文链接:https://www.haomeiwen.com/subject/jpvizqtx.html