了解 Eureka 服务注册与发现
上百度百科
Eureka是Netflix开发的
服务发现框架
,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。
SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
Eureka是 Netflix 的一个子模块,也是核心模块之一,它的功能类似于Dubbo的注册中心,比如 Zookeeper。
SpringCloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理
在传统的RPC远程调用框架中,每个服务与服务之间的依赖关系比较复杂,管理起来也比较复杂,所以服务治理出现了,服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
Eureka 采用了 CS 的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。
而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server 并维持心跳连接,这样 系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。
在服务注册与发现中,有一个注册中心,当服务器启动的时候,会把当前自己服务器的信息 比如 服务地址通讯地址等以别名的方式注册到注册中心上,而 消费者或者服务提供者,就会以 该别名的方式去注册中心上获取到实际的服务通讯地址,然后再实现本地RPC调用
RPC远程调用框架核心设计思想:
在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。
在任何RPC远程框架中,都会有一个注册中心存放服务地址相关信息(类似接口地址)
服务提供者:
- 就是提供一些自己能够执行的一些服务给外界。
服务消费者:
- 就是需要使用一些服务的“用户”。
服务中介:
- 其实就是服务提供者和服务消费者之间的“桥梁”,服务提供者可以把自己注册到服务中介那里,而服务消费者如需要消费一些服务(使用一些功能)就可以在服务中介中寻找注册在服务中介的服务提供者。
当 Eureka 客户端向 Eureka Server 注册时,它提供自身的元数据,比如 IP 地址、端口,运行状况指示符 URL,主页等。
Eureka 客户会每隔 30 秒(默认情况下)发送一次心跳来续约。
通过续约来告知 Eureka Server 该 Eureka 客户仍然存在,没有出现问题。
正常情况下,如果 Eureka Server 在 90 秒没有收到 Eureka 客户的续约,它会将实例从其注册表中删除。
Eureka 客户端从服务器获取注册表信息,并将其缓存在本地。
客户端会使用该信息查找其他服务,从而进行远程调用。
该注册列表信息定期(每 30 秒钟)更新一次。
每次返回注册列表信息可能与 Eureka 客户端的缓存信息不同, Eureka 客户端自动处理。
如果由于某种原因导致注册列表信息不能及时匹配,Eureka 客户端则会重新获取整个注册表信息。 Eureka 服务器缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。
Eureka 客户端和 Eureka 服务器可以使用 JSON / XML 格式进行通讯。
在默认的情况下 Eureka 客户端使用压缩 JSON 格式来获取注册列表的信息。
Eureka 客户端在程序关闭时向 Eureka 服务器发送取消请求。
发送请求后,该客户端实例信息将从服务器的实例注册表中删除。
该下线请求不会自动完成,它需要调用以下内容:DiscoveryManager.getInstance().shutdownComponent()
;
在默认的情况下,当 Eureka 客户端连续 90 秒 (3 个续约周期) 没有向 Eureka 服务器发送服务续约,即心跳,Eureka 服务器会将该服务实例从服务注册列表删除,即服务剔除。
Eureka Server 提供服务注册服务
各个节点启动后,会在Eureka Server中进行注册
这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client 是一个java客户端,它通过注册中心进行访问
它用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
在应用启动后,将会向Eureka Server发送心跳 , 默认周期为30秒。
如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制。
即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。
综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
当 Eureka 客户端向 Eureka Server 注册时,它提供自身的元数据,比如 IP 地址、端口,运行状况指示符 URL,主页等