[TOC]
前言
服务治理是微服务架构中最为核心和基础都模块,主要用来实现微服务实例服务注册与发现。目前比较流行充当服务注册与发现方案有ZooKeeper、Consul和Eureka。
Eureka介绍
Eureka是一个基于REST(Representational State Transfer)的服务,主要用于AWS cloud,提供服务定位(locating services)、负载均衡(load balancing)、故障转移(failover of middle-tier servers)的服务套件(Eureka Server)。Eureka也提供基于Java的客户端——Eureka-Client。Eurka-Client内置负载均衡。Spring Cloud Eureka使用Netflix Eureka来实现服务注册与发现,它包含服务端及客户端组件(均Java编写)。
Eureka服务端
Eureka服务端也称为服务注册中心。它与其它(Zookeeper、Consul)一样支持高可用配置。如果Eureka以集群模式部署,当集群中有分片发生故障时,Eureka会转入自我保护模式。它允许分片故障期间继续提供服务注册与发现,当故障分片恢复后,集群中的其它分片会把它们的状态同步回来。
Eureka客户端
Eureka客户端主要处理服务注册与发现。客户端通过注解和参数配置都方式,嵌入微服务应用中。在应用运行时,Eureka客户端向注册中心注册自身提供都服务并周期性发送心跳来更新服务租约。同时也从服务端(注册中心)查询当前的服务注册信息缓存到本地并周期性刷新服务状态。
Spring Cloud Eureka
搭建服务注册中心
- 创建一个maven项目,pom配置如下:
1 | <?xml version="1.0" encoding="UTF-8"?> |
- 在该maven项目下新建一个maven模块eureka-server,pom配置如下:
1 | <?xml version="1.0" encoding="UTF-8"?> |
- 新建启动类EurekaServerApplication
1 |
|
- 添加配置文件application.yaml或application.properties
1 | server: |
- 运行应用访问http://localhost:1111。如无意外可以正常访问,由于没有注册任何服务,Instances current registered with Eureka栏是空的。
高可用注册中心
Eureka Server在设计之初就考虑到了高可用,在Eureka的服务治理设计中,所有都节点即是服务提供方,也是服务消费方,服务注册中心也不例外。回顾上一节的两个配置参数
1 | eureka: |
Eureka Server的高可用实际上就是向其它注册中心注册自己,从而形成一组相互注册都服务注册中心,以实现服务清单都相互同步,达到高可用的效果。
将上一节中的配置文件去掉上述两个参数后复制两份分别命名为application-server1.yaml和application-server2.yaml
将application-2.yaml都端口改为1112
将两个配置文件中defaultZone配置项中的${server.port}分别改成对方的端口,即1111中都配1112,1112中的配1111
指定配置文件启动
1
2java -jar eureka-server-1.0-SNAPSHOT.jar --spring.profiles.active=server1
java -jar eureka-server-1.0-SNAPSHOT.jar --spring.profiles.active=server2分别访问两个端口,可以看到Instances current registered with Eureka栏分别有对方都信息
Spring Cloud Eureka常用配置
服务端常用配置
参数 | 默认值 | 说明 |
---|---|---|
eureka.server.enable-self-preservation | false | 关闭注册中心的保护机制,Eureka 会统计15分钟之内心跳失败的比例低于85%将会触发保护机制,不剔除服务提供者,如果关闭服务注册中心将不可用的实例正确剔除 |
服务实例配置
参数 | 默认值 | 说明 |
---|---|---|
eureka.instance.prefer-ip-address | false | 不使用主机名来定义注册中心的地址,而使用IP地址的形式,如果设置了 |
eureka.instance.ip-address | IP地址 | |
eureka.instance.hostname | 设置当前实例主机名称 | |
eureka.instance.appname | ${spring.application.name} | 服务名,默认取 spring.application.name 配置值, 如果没有则为 unknown |
eureka.instance.lease-renewal-interval-in-seconds | 30 | 定义服务续约任务(心跳)的调用间隔,单位:秒 |
eureka.instance.lease-expiration-duration-in-seconds | 90 | 服务失效的时间,单位:秒 |
eureka.instance.status-page-url-path | /info | 状态页面的URL,相对路径。默认使用 HTTP 访问,如果需要使用 HTTPS则需要使用绝对路径配置 |
eureka.instance.status-page-url | 状态页面的URL,绝对路径 | |
eureka.instance.health-check-url-path | /health | 健康检查页面都URL,相对路径。 默认使用 HTTP 访问,如果需要使用 HTTPS则需要使用绝对路径配置 |
eureka.instance.health-check-url | 健康检查页面都URL,绝对路径 |
客户端常用配置
参数 | 默认值 | 说明 |
---|---|---|
eureka.client.service-url. | 指定服务注册中心地址,类型为 HashMap,并设置有一组默认值,默认的Key为 defaultZone;默认的Value为 http://localhost:8761/eureka ,如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。如果服务注册中心加入了安全验证,这里配置的地址格式为:http://:@localhost:8761/eureka 其中 |
|
eureka.client.fetch-registery | true | 检索服务 |
eureka.client.registery-fetch-interval-seconds | 30 | 从Eureka服务器端获取注册信息的间隔时间,单位:秒 |
eureka.client.register-with-eureka | true | 启用eureka服务注册 |
eureka.client.eureka-server-connect-timeout-seconds | 5 | 连接 Eureka Server 的超时时间,单位:秒 |
eureka.client.eureka-server-read-timeout-seconds | 8 | 读取 Eureka Server 信息的超时时间,单位:秒 |
eureka.client.filter-only-up-instances | true | 获取实例时是否过滤,只保留UP状态的实例 |
eureka.client.eureka-connection-idle-timeout-seconds | 30 | Eureka 服务端连接空闲关闭时间,单位:秒 |
eureka.client.eureka-server-total-connections | 200 | 从Eureka 客户端到所有Eureka服务端的连接总数 |
eureka.client.eureka-server-total-connections-per-host | 50 | 从Eureka客户端到每个Eureka服务主机的连接总数 |