码迷,mamicode.com
首页 > 编程语言 > 详细

微服务:整合 Spring cloud Eureka - 服务治理机制

时间:2020-03-25 17:28:38      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:不可   接口   try   数据   实例   必须   reg   定义   默认值   

一、简介

  在体验了Spring Cloud Eureka 通过简单的注解配置就能实现强大的服务治理功能之后,我们可以进一步了解一些Eureka基础架构中各个元素之间的通信行为,以此来更加深入的理解Eureka服务治理体系是如何运转起来的。

二、微服务基础架构拓扑图

       技术图片

  1、“Eureka Server 服务注册中心-1” 和 “Eureka Server 服务注册中心-2” ,他们相互注册成为高可用集群。

  2、服务提供者启动两个实例,一个注册到“Eureka Server 服务注册中心-1” 上,另一个注册到“Eureka Server 服务注册中心-2”上。

  3、服务消费者启动两个实例,他们分别指向了一个注册中心。

  4、其实服务消费者和服务提供者对于Eureka Server而言,都是服务,都会将地址注册在Eureka Server中,并且他们的注册信息也没有区别。

三、服务提供者:

  1、服务注册

  “服务提供者”在启动的时候回放松REST请求的方式将自己注册到Eureka Server上,同时在HTTP请求中,带上了自身服务的一些元数据。Eureka Server 接收到这个REST请求之后,将元数据信息存储在一个双层Map中。第一层的key是服务名,第二层的key是具体服务的实例名。

  在服务注册是,需要确认一下eureka.client.register-with-eureka=true参数是否正确,默认值为true。若设置为false,那么服务信息将不会注册到Eureka Server上。一般而言都设置成true,设置成false的业务场景不多。例如服务消费者不提供对外接口,但是消费者希望能从Eureka Server中获取服务提供者的注册信息。那么此时就可以设置eureka.client.register-with-eureka=false。不过一般而言,在微服务架构中,服务消费者也是服务提供者。

  2、服务同步

  两个服务提供者分别注册到两个不同的服务注册中心上,也就是说,他们的信息分别被两个服务注册中心所维护。但是“Eureka Server 服务注册中心-1” 和 “Eureka Server 服务注册中心-2”构成一个集群,他们互为服务,因此他们相互之间会共享服务注册信息。通过服务同步,服务消费者可以在任何一个Eureka Server中拿到这两个服务提供者的注册信息。

  3、服务续约

  在注册完服务之后,服务提供者会维护一个心跳来告诉Eureka Server:“老子还活着”,以防止Eureka Server的提出任务将改服务实例从服务列表中排除出去,我们称该操作为服务续约(Renew)。

  关于服务续约有两个重要属性,我们可以根据具体场景来进行调整。

eureka:
  instance:
    lease-renewal-interval-in-seconds: 5
    lease-expiration-duration-in-seconds: 15
eureka.instance.lease-renewal-interval-in-seconds:用于定义服务续约任务的调用时间,默认是30秒。
eureka.instance.lease-expiration-duration-in-seconds:用于定义服务失效的时间,默认是90秒。也就是说,Eureka Server在距离上次收到的服务心跳之后的90秒之内,没有再次收到心跳,那么Eureka Server就认为服务提供者挂了。
eureka.instance.lease-expiration-duration-in-seconds 一般是 eureka.instance.lease-renewal-interval-in-seconds 的三倍。

  4、服务下线

  在系统运行过程中,必然会面临关闭或重启服务的摸个实例,在服务关闭(不可用)期间,我们自然不希望客户端会继续调用关闭的实例。所以在服务实例进行正常关闭的操作时,他会出发一个服务下线的REST请求给Eureka Server,告诉Eureka Server:“我下线了,不玩了”。Eureka Server 收到请求之后,将改服务节点状态设置为“DOWN”,并把该下线事件传播出去。 

四、服务消费者

  1、获取服务

  当我们启动一个服务消费者时,服务消费者会立马通过REST请求获取Eureka Server上注册的服务列表信息。为了提供性能,Eureka Server会维护一个只读的服务列表清单返回给客户端。

  获取服务清单是服务消费的前提,所以必须要确保 fetch-registry=ture。客户端默认每30秒从Eureka Server上获取一份最新的服务列表清单来更新本地缓存。可以通过设置 registry-fetch-interval-seconds来更改客户端刷新缓存时间。

  2、服务调用

  服务消费者在获取服务清单后,通过服务名可以获取具体的服务实例名和该实例的元数据信息。因为有了这些信息,客户端就可以按照自己的需求调用哪一个服务实例,在Spring Cloud Ribbon中默认采用轮训的方式调用,从而实现客户端的负载均衡。

  对于访问实例的选择,Eureka中有Region和Zone的概念,后面小编会详细介绍。

五、服务注册中心

  1、服务失效剔除

  在某些时候,我们的服务实例并不会正常下线。于是Eureka Server并不知道服务实例已经下线了。所以Eureka Server中有个定时任务,每个一段时间就会将当前清单中心跳超时的服务剔除。

 

微服务:整合 Spring cloud Eureka - 服务治理机制

标签:不可   接口   try   数据   实例   必须   reg   定义   默认值   

原文地址:https://www.cnblogs.com/yansg/p/12535678.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!