Spring Cloud Eureka是Pivotal通过Spring Boot对Netflix的Eureka进行的封装模块,隶属于Spring Cloud Netflix。
Spring Cloud Netflix文档地址:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.0.0.M8/
Eureka开源地址:https://github.com/Netflix/eureka
先看下Eureka架构图
Eureka Server和Application Service组成。Eureka Client则嵌入到Application Service,承担应用与Eureka Server交互的职责。由Eureka Client发起的动作有Register、Renew、Cancel、Get、Make Remote Call,Eureka Server负责的动作只有Replicate。
前期有网友留言咨询我们内部的Spring Cloud是否开源,现在一并做下答复。其实初期完全可以把Spring Cloud这些套件当做和Tomcat、Nginx同等级的中间件,我们需要做的就是根据场景修改参数调优,不需要做额外开发(Zuul除外)。所以,只能针对Spring Cloud就目前我们实际使用做下分享,主要也是对客户端和服务端的职责及常见配置做下说明。
一.客户端
Eureka Client的职责有:
向Eureka Server注册(Register)服务实例;
向Eureka Server服务续约(Renew);
实例下线时, 向Eureka Server取消(Cancel)租约;
向Eureka Server获取(Get)服务实例清单;
调用其他应用实例的服务(Make Remote Call);
Eureka Client的配置类及配置前缀如下:
{
"name":"eureka.client",
},
{
"name":"eureka.instance",
}
eureka.client.serviceUrl,客户端指定服务端的地址,如果不区分Region和Zone,可以直接配置为eureka.client.serviceUrl.defaultZone=http://host1-ip-address:port/eureka/,http://host2-ip-address:port/eureka/
1. 服务注册
:客户端是否注册到eureka,默认为true。当客户端只做调用方,不想暴露给其他应用调用时可关闭。
:更新客户端信息的变化到Eureka服务端的间隔时间,默认30S。对于可用性较高的应用可把周期缩短。
:最初注册客户端信息到Eureka 服务端的时间,默认40S。
:配合spring-boot-actuator使用,把actuator的/health端点注册到eureka服务端,用作检查客户端状态。/health端点更能代表应用可用性,后续在spring-boot-actuator分享时做具体介绍。
2. 服务消费
:客户端是否拉取注册列表并缓存,默认为true。如果只做被调用方时可以关闭。
:从服务端获取注册列表的周期,默认30S。如果需要及时知会服务状态,比如网关,可缩短周期。
3.服务续约
:用于定义服务续约任务的调用间隔时间,默认为30秒。
:用于定义服务距离上次续约失效的时间,默认为90秒。
4.服务下线
当服务实例进行正常的关闭操作时,客户端发起Eureka Server的REST operations“/eureka/apps/appID/instanceID” Delete请求,服务端将该服务状态置为下线。
这里没有相关配置,唯一注意的是关闭服务时千万不要kill -9,否则只能依赖服务端定时扫描是否有续约失效在注册清单中剔除。
5.Region和Zone
Eureka中有Region和Zone的概念, 一个Region可对应多个Zone, 一个客户端对应一个Region下面的一个Zone。Region和Zone可以适配到多中心或容灾的场景。如果只部署一套的话,就使用defaultZone。
:指定服务实例所在zone。
:优先访问同处一个Zone 中的服务提供方,若访问不到,再访问其他的Zone。
:指定服务可用zone
二.服务端
Eureka Server的职责有:
启动时创建定时任务用来维护注册清单,剔除失效的实例;
集群中互相同步注册清单。
Eureka Server的配置类及配置前缀如下:
{
"name":"eureka.dashboard",
},
{
},
{
"name":"eureka.server",
}
1.服务剔除
2.自我保护
:是否启用保护机制,默认为true;保护机制主要应对的是可能因网络问题导致大部分客户端无法连接到服务端进行续约,导致服务端按续约超时把服务实例从注册清单中误剔除。开启保护机制后碰到这种情况时超过一定百分比数量的实例不续约时服务端不再剔除注册清单中实例。
这里特别说明下,如果是服务实例较少(比如搭建初期),则可以设置为false,防止误开启保护机制。
:自我保护阈值,超过阈值百分比的机器数不续约时才启动自我保护。enable-self-preservation为true时才有效。
三、常见问题
1.服务实例是部署war包还是jar包?
:建议部署jar包,省不了几个虚拟机。而且部署jar包方便后期切容器。Eureka Server和Zuul这些就务必jar包部署吧。
如果有集成到spring boot admin进行应用监控,且非要以war包部署,则需要在Client增加以下配置
app-packagename=xxxx
eureka.instance.statusPageUrlPath=/$/info
eureka.instance.healthCheckUrlPath=/$/health
2.Eureka还有其他Spring Cloud套件的配置项有哪些?
:如果想看spring cloud的自动配置项,查看依赖包下的 spring-configuration-metadata.json 文件,defaultValue属性为默认值。
3.非Java开发应用能否集成Eureka?
:可以,但需要自己实现Eureka Client。Eureka提供了Register、Renew、Cancel、Get这些操作的REST接口。说明地址:https://github.com/Netflix/eureka/wiki/Eureka-REST-operations
领取专属 10元无门槛券
私享最新 技术干货