eureka描述

官方的eureka原理图为

 Application Service 相当于服务消费者

Application client 相当于服务消费者

make Remote Call相当于远程调用

 us-east-1c, us-east-1d, us-east-1e都是zone,他们都属于 us-east-1这个region

Eureka包含两个组件,Eureka Server和Eureka Client,作用是:

  • Eureka Server提供服务发现的能力,各个微服务启动时,会向Eureka Server注册自己的信息(例如 ip,端口,服务器名称等),Eureka Server会存储这些信息
  • Eureka Server是一个Java客户端,用于简化与Eureka Server的交互
  • 微服务启动后,会周期性的向Eureka Server发送心跳以续约自己的”租期“
  • 如果Eureka Server在一定时间内没有收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)
  • 默认情况下,Eureka Server同时也是Eureka Client。多个Eureka Server实例,互相通过复制的方式,来实现服务注册表数据的同步
  • Eureka Client会缓存服务注册表的信息。这种方式有一定的优势——首先,微服务无需每次请求都查询 Eureka Server,从而降低了Eureka Server的压力;其次,即使所有的节点都宕掉,服务消费者依然可以使用缓存的信息找到服务提供者并完成调用

Eureka 通过心跳检查、客户端缓存等机制提高了系统的灵活性,可伸缩性和可用性。

Eureka服务治理体系可以以下图为例:

  •  ”服务注册中心-1“和”服务注册中心-2“,他们互相注册形成了高可用集群
  • 服务提供者启动了两个实例,一个注册到“服务注册中心-1”另一个注册到服务中心-2

还有两个消费者也分别只指向了一个注册中心

里面的组件主要包括:  服务提供者,服务消费者,服务注册中心

    服务提供者主要有:  服务注册、服务同步,服务续约 

    服务消费者主要有:  获取服务、服务调用、服务下线

    服务注册中心主要有:失效剔除,自我保护

如下图:

     

 服务注册

     服务提供者在启动的时候会通过发送REST请求的方式将自己注册到Eureka Server上,同时带上了自己的一些元数据信息。Eureka Server接收到这个REST请求后,将元数据信息存储在一个双层结构Map 中。其中第一层的key是服务名,第二层的key是具体服务的实例名。

服务同步

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

服务续约

  在注册完服务之后,服务提供者会维护一个心跳用来持续告诉Erueka Server;“我还活着”,以防止Eureka Server的“剔除服务”将该服务实例从服务列表中排除出去。这个操作称为服务续约

获取服务

   在服务注册中心已经注册了一个服务,并且该服务有两个实例。当我们启动服务消费者的时候,它会发送一个REST请求给服务注册中心,来获取上面注册的服务清单。为了性能考虑,Eureka Server 会维护一份只读的服务清单来返回给客户端,同时该缓存清单每30秒会更新一次

服务调用

   服务消费者在获取服务清单后,通过服务名可以获得具体提供服务的实例名和该实例的元数据信息。因为有了这些服务的详细信息,所以客户端会根据自己的需要调用哪个实例

服务下线

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

失效剔除

   有些时候我们的服务实例并不一定会正常下线,可能由于内存溢出,网络故障等原因,使得服务不能正常工作,而服务注册中心并未收到服务下线的请求,为了从从服务列表中将这些无法提供服务的实例删除,Eureka Server在启动的时候会创建一个定时任务,默认每隔一段时间(60秒)将当前清单中超时(默认时90秒)没有续约的服务剔除出去

自我保护

   服务注册到Eureka Server上之后,会维护一个心跳连接,告诉Eureka Server自己还活着,Eureka Server在运行期间,会统计心跳失败的比例在15分钟内是否低于85%,如果出现低于的情况,Eureka Server会将当前的实例注册信息保护起来,让这些实例不会过期,尽可能保护这些注册信息。但是在这段保护期间实例若出现问题,那么客户端很容易拿到不存在的服务实例。会出现调用失败的情况,所以客户端必须要有容错机制,比如可以请求重试,断路器等方式。

  

参考  《Spring Cloud 与Docker微服务架构实战》周立 著  

           《Spring Cloud 微服务实战》翟永超 著

生于忧患,死于安乐
原文地址:https://www.cnblogs.com/songlove/p/14780906.html