一、Eureka 理论说明
Eureka 是一个【服务治理】和【服务注册与发现】框架,它是 netflix 公司开发的,目前已经停止更新和维护。
Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
Eureka 包含两个组件:EurekaServer 和 EruekaClient。即服务端与客户端。
1、【服务治理】与【服务发现】
(1)服务治理:SOA governance,用于管理多个服务与服务之间的依赖关系,让其可以实现服务调用、负载均衡、容错等。
(2)服务注册与发现:举个例子,你要和张三、李四、王五中的某些人要频繁的互相打电话,你们的号码可能会停机、可能会换号,那么一旦停机或者换号了,别人就打不通了(可以假设你们是特务,换号很频繁的那种)。
那么怎么管理各自的号码等信息?最好的方式是你们有一本【共享的电话号码簿】,你可以通过它查找其他人的号码,同样的,你自己的号码停机(服务下线了)或者换号(更改url),都应该写到这个【共享的电话号码簿】上。
我们把张三、李四、王五换成【服务】,电话号码换成 url (ip+端口),那么个【共享的电话号码簿】就是【注册中心】,也就是我们下面要说的 EurekaServer 。
我们换号了,把号码主动写到【共享的电话号码簿】上,叫【服务注册】。
我们去【共享的电话号码簿】查其他人的号码,叫【服务发现】。
服务间要互相调用,就必须知道要调用服务的 url ,即 ip 端口等信息,需要知道该服务有没有启动, url 信息有没有更新等等,所以 Eureka 有一个注册中心,每个服务都将自己的信息主动注册到注册中心。同样的,每个服务想相互调用或者获得彼此的信息也去注册信息查找即可。
2、EurekaServer 和 EruekaClient
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。