阅读笔记_第三章 Spring Cloud Eureka下篇

3.1 Eureka的核心类

3.1.1 服务注册实例 InstanceInfo.java

3.1.2 应用实例的租约信息 LeaseInfo.java

3.1.3 实例信息的抽象接口,约定通用信息 ServiceInstance.java

  • 由于 Spring Cloud Discovery适配了Zookeeper、Consul、Netflix Eureka等注册中心,因此ServiceInstance定义更为抽象和通用

3.1.4 标识服务实例的状态 

  • OUT_OF_SERVICE标识停止服务,不会被路由到,经常用于升级部署的场景

3.3 Eureka的设计理念

3.3.1 概述

  • 服务实例如何注册到服务中心
    • 本质上是在服务启动的时候,调用REST API的register方法,可通过Eureka Client封装的API简化调用
  • 服务实例如何从服务中心剔除
    • 关闭应用时调用de-register方法
    • Eureka Server判断租约超过一定时间没有进行续约,会主动剔除
  • 服务实例信息的一致性问题
    • AP优于CP
    • Peer to Peer架构
    • Zone及Region设计
    • SELF PRESERVATION

3.3.2 AP优于CP

  • CAP理论
    • Consistency 数据一致性,要求多副本的数据保持一致
    • Avaliability 可用性,要求任何时候请求能够正常响应
    • Partition Tolerance 分区容忍性,要求集群内主机发生通信故障时,集群仍然可用(客观存在,必须实现)

3.3.3 Peer to Peer架构

  • 主从复制
  • 对等复制(peer to peer)
    • Eureka Server启动时,拉取其他节点的服务注册信息
    • Eureka Server接收到Register、renew或cancel事件后,向其他节点同步
      • Eureka Server 通过http header 的 HEADER_REPLICATION区分是正常请求还是复制请求

3.3.4 Zone及Region设计

每个Region下,还分了多个AvaliabilityZone,相互独立,类似于一个Region下的多个机房,如下图:

3.3.5 SELF PRESERVATION设计

说明:针对应用实例的存活进行健康检查,如网络偶尔抖动或短暂不可用时造成的误判、Server和Client之间出现网络分区,极端情况下可能会使得Server清空部分服务的实例,严重影响Availability

Server和Client之间有个租约,计算最近一分钟接收到的续约的次数小于指定阀值的话,则关闭租约失效剔除,禁止剔除,从而保护注册信息。

3.4 Eureka参数调优及监控

3.4.1 核心参数

  • Client端
    • 基本参数
    • 定时任务参数
    • http参数
  • Server端
    • 基本参数
    • response cache参数
    • peer相关参数
    • http参数

3.4.2 参数调优

  • 服务下线,Eureka Server接口返回的信息还存在
    • 实例异常挂掉,未告知Eureka Server下线,需要依赖Eureka Server的Eviction Task去剔除,调整调度频率,eureka.server.eviction-interval-timer-in-ms=xxx,默认60秒
    • Eureka Server的REST API有response cache,需要等待缓存过期,可以根据情况考虑关闭readOnlyCacheMap,eureka.server.use-read-only-response-cache=false
    • Eureka Server引入SELF PRESERVATION模式,导致过期不会被剔除,直到退出该模式,在测试环境可以关闭该模式,eureka.server.enable-self-preservation=false
  • 服务上线,Eureka Client不能及时获取到
    • 在测试环境,可以适当提高Client拉取Server注册信息的频率,eureka.client.registry-fetch-interval-seconds=xx,默认30秒
  • emergency!eureka may be incorrectly claiming are up when they're not.renewals are lesser than threshold and hence the instances are not being expired just to be safe.
    • 测试环境,关闭该机制,eureka.server.enableSelfPreservation=false
    • 生产环境,可以把 renewalPercentThreshold及leaseRenewalIntervalInSeconds参数调小一点,提高触发门槛
      • eureka.instance.leaseRenewalIntervalInSeconds=10 #默认30
      • eureka.server.renewalPercentThreshold=0.49 #默认0.85

3.4.3 指标监控

3.5 Eureka实战

3.5.1 Eureka Server在线扩容

  • 参考:https://www.v2ex.com/t/498977
  • 大概是通过spring cloud config配置中心管理配置,动态增加节点,修改配置,再refresh一下生效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值