Eureka 注册中心
Eureka 是 微服务的套件,基于 REST服务 。用于定位服务,以实现云端中间层服务发现 和 故障转移等功能
Eureka 组件
- Eureka Server 服务注册中心(服务方)
提供 服务注册 和 发现 功能 - Service Provider 服务器 (提供方)
将自身服务注册到 Eureka ,使 客户端 可业务服务功能 - Service Consumer 客户端(应用方)
从 Eureka 获取注册服务列表,实现 业务服务 功能
Eureka Serve 也可是一个集群。如果Eureka Serve是个集群,当 提供者在集群的某个节点注册时,该节点会把服务的信息同步到每一个集群节点中,从而实现任意节点都可获取完整的服务列表!
Eureka Serve集群示例
以下示范用三个 Eureka Server ,每个都需要注册其他 Eureka 服务中
例如:分别有 8000、8001、8002,则他们分别注册的有:
- 8000 注册到 8001、8002上
- 8001 注册到 8000、8002上
- 8002 注册到 8000、8001上
---
spring:
application:
name: eureka-server
server:
port: 8000
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8001/eureka/,http://localhost:8002/eureka/
---
---
spring:
application:
name: eureka-server
server:
port: 8001
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/,http://localhost:8002/eureka/
---
---
spring:
application:
name: eureka-server
server:
port: 8002
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/,http://localhost:8001/eureka/
---
随意访问一个 Eureka Server 的节点。效果图如下:
Eureka 配置
主要说明 Eureka有关组件的配置:
- Eureka客户端
- Eureka-server 工程
善用 Ctrl+F
配置属性 | 值 (默认) | 说明 |
---|
eureka.client.register-with-erueka | boolean (true) | 注册自己 | eureka.client.fetch-registry | boolean (true) | 读取服务列表 | eureka.client.registry-fetch-interval-seconds | int (30s) | 获取注册列表的频率 | eureka.instance.ip-address | String | 指定ip地址 | eureka.instance.prefer-ip-address | boolean (false) | 获取ip优先于host | eureka.instance.lease-expiration-duration-in-seconds | int (90s) | 续约等待时长 | eureka.instance.lease-renewal-interval-in-seconds | int (30s) | 服务续约间隔 | eureka.client.service-url.defaultZone | String | 服务注册地址 | eureka.server.enable-self-preservation | boolean (true) | 自我保护模式 | eureka.server.eviction-interval-timer-in-ms | int (60000ms) | 扫描失效服务间隔 |
服务注册
eureka.lient.register-with-erueka 注册信息允许他人发现(包括自己,该配置如果为true,会向 Eureka Server 发起Rest请求,携带本身元数据信息,Eureka Server 会把这些信息 以双层Map结构进行保存
Map层级 | key | value |
---|
第一层 | 服务名称 | 第二层Map | 第二层 | IP + 服务名 + 端口号 | 服务的实例对象 |
例如: map<String1 , map<String2 , ServiceInstance>>
String1 : user-service
String2 : 127.0.0.1:user-service:8082
涉及 服务注册 的配置属性
# 指定ip地址
eureka.instance.ip-address : 127.0.0.1
# 优先应用ip,并非 host
eureka.instance.prefer-ip-address : false
# 向 Eureka Server 注册其信息以供其他人发现
eureka.client.register-with-eureka: true
# 从 Eureka Server 获取注册服务的频率 ,默认30s
eureka.client.registry-fetch-interval-seconds : 30
# 消费者向注册服务的地址。Eureka Server 地址,多个地址以','隔开(提高成功率
eureka.client.service-url.defaultZone : url
服务续约
在服务注册完成后,提供者会维持一个心跳,定时向Eureka Server发起Rest请求。以心跳的形式表明它仍然活着就(可称为服务的续约
涉及 服务续约 的配置属性
# 指示 Eureka Server 等待时长接收心跳,一旦超出等待时间且没有心跳信号,则移出服务列表
eureka.instance.lease-expiration-duration-in-seconds : 90
# 提供者发送心跳的频率,默认30s
eureka.instance.lease-renewal-interval-in-seconds : 30
失效剔除&自我保护
涉及 Eureka Server 的配置
# 自我保护模式 关闭 (默认打开
eureka.server.enable-self-preservation : true
# 扫描失效服务的间隔时间 (默认: 60000ms
eureka.server.eviction-interval-timer-in-ms : 60000
失效剔除
当 Eureka Server 在启动完成后 ,eureka.server.eviction-interval-timer-in-ms : 60000 会每隔60000ms检查服务失效情况,如果某个服务节点超过90秒未收到心跳信号,那么 Eureka Server 会视为故障,将该服务剔除 (默认情况下 最长的剔除周期:90s+60s
自我保护
Eureka Server 统计最近15min心跳失败的提供者比例,比例一旦到达85%,则触发自我保护机制,Eureka Server 视为网络故障等问题,Eureka Server 会锁定服务列表(以防失效剔除),这一过程保证了服务仍然可用,但不能保证访问的成功率
开发者配置
为了开发环境下,能够快速得到服务的最新状态,我们可以将其设置小一点
提供者
eureka:
instance:
lease-expiration-duration-in-seconds: 10
lease-renewal-interval-in-seconds: 5
消费者
eureka:
client:
registry-fetch-interval-seconds: 5
Eureka Server
eureka:
server:
enable-self-preservation: false
eviction-interval-timer-in-ms: 1000
|