天天看点

SpringCloud 基本知识-Eureka

微服务架构将一个应用拆分成多个独立的,具有业务属性的服务,每个服务运行在不同的进程中,服务与服务之间通过轻量级的通信机制互相协作,互相配合,从而为终端用户提供业务价值。因此,微服务架构强调的是一种独立开发,独立测试,独立部署,独立运行的高度自治的架构模式。

服务发现:(Eureka)所有的服务提供方启动时向注册中心报告自身的信息,包括自己的地址,端口,以及提供那些服务等相关信息。当服务调用方需要调用服务时,只需要问注册中心是谁提供了相关的服务,注册中心返回那些提供方提供了这些服务,调用方就可以自己根据注册中心返回的信息去请求了。Eureka就提供了这样一种能力,同时自身作为注册中心的同时也提供了高可用的支持,支持集群部署时各个节点之间的注册数据同步复制。

使用Eureka就自动具有了注册中心,负载均衡,故障转移的功能。主要包含两个组件:

Eureka Client:一个Java客户端,用于简化与Eureka Server的交互(通常就是微服务中的客户端和服务端)。

Eureka Server:提供服务注册和发现的能力(通常就是微服务中的注册中心)。

同步:多个Eureka Server之间通过复制的方式完成服务注册表的同步,从而实现Eureka的高可用。

识别:Eureka Client会在本地缓存Eureka Server中的信息。即使所有Eureka Server 节点都宕调,服务消费方仍可使用本地缓存中的信息找到服务提供方。

续约:微服务会周期性(默认30秒)地向Eureka Server发送心跳续约自己的信息。

续期:Eureka Server会定期(默认60秒)执行一次失效服务检测功能,它会超过一定时间(默认90s)没有续约的微服务,发现则会注销该服务节点。

 Eureka服务调用:应用中如果使用了@EnableDiscoveryClient 或者@EnableEurekaClient,就可以从Eureka Server中使用服务发现功能。

Eureka的健康检查:可以开启Eureka的健康检查,这样应用状态就可以同步给Eureka了,在application.yml中添加配置即可:

eureka: client: healthcheck: enabled:true

Eureka 中的实例一共有如下几种状态,UP,DOWN,STARTING,OUT_OF_SERVICE,UNKNOWN。

自我保护模式:是一种应对网络异常的安全保护措施,他的理念是宁可同时保留所有实例(健康与不健康实例都会保留),也不盲目注销任何健康的实例。使用自我保护模式,可以让Eureka集群更加健壮,稳定。

通过修改注册中心的配置文件,即可打开或者关闭注册中的自我保护模式。

eureka:server:enable-self-presaervation:false #关闭自我保护模式

踢出宕机节点:关闭自我保护模式后,由于其默认的心跳周期比较长等原因,要过一会儿才会发现已关节点被自动踢出。若想尽快踢出,就只能修改默认的心跳周期参数了。

SpringCloud 基本知识-Eureka

注册服务慢的问题:客户端去注册中心默认持续30秒,直到实例自身,服务端,客户端各自元数据本地缓存同步完成后服务才可用(至少需要3次心跳周期)。可以通过eureka.instance.leaseRenewalIntervalIntervalInSeconds修改这个周期,改善客户端链接到服务的速度。

服务状态显示UNKNOWN: 如果在Eureka监控页面发现状态为UNKNOWN,则很大可能是把微服务的eureka.client.healthcheck.enabled属性配置在bootstrap.yml里面的问题。

自定义InstanceId:Eureka服务名默认如下:

${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id :${server.port}}

可以在配置文件中通过eureka.instance_id来自定义:

eureka: instance:instance-id:${spring.cloud.client.ipAddress}:${server.port}

自定义Eureka控制台服务的链接:修改配置文件如下

SpringCloud 基本知识-Eureka

健康度指示器:一个Eureka实例的状态页和健康指示器默认为/ info和/health,这两个是由SpringBoot Actuator应用 提供的 访问端点。可以通过以下方式进行修改:

SpringCloud 基本知识-Eureka

就近原则:Eureka Client在启动时需要指定Zone,他会优先请求自己Zone的Eureka Server获取注册列表。同样,Eureka Server 在启动时也需要指定Zone,如果没有指定,其会默认使用defaultZone。

高可用配置:Eureka Server也支持运行多实例,并以互相注册的方式来实现高可用的部署,即每一台Eureka都在配置中指定另一个Eureka地址作为伙伴,他在启动时会向伙伴节点获取注册列表。

继续阅读