Spring Cloud 学习笔记——Eureka 服务端集群、Eureka 工作细节、Eureka 集群原理

5.2 Eureka 服务端集群

  • 使用了注册中心,所有服务都有通过注册中心获取服务信息地址,这时稳定性就变得重要了,一旦坏了,一项整个系统的稳定性,所有实际开发中,一般都是集群

5.2.1 集群的搭建

  • 原理
    实际上就是启动多个 eureka 实例,实例之间相互注册、同步数据、共同组成一个 Eureka 集群
  • 配置 hosts 文件
    地址:
    C:\Windows\System32\drivers\etc\hosts
    最后一行添加
127.0.0.1 eurekaA eurekaB

在这里插入图片描述

  • 新增配置文件
    在笔记【Spring Cloud 学习笔记——Eureka 服务端介绍和基本搭建】的基础上,新增两个配置文件:application-a.properties 和 application-b.properties
    application-a.properties
# 此微服务名称
spring.application.name=eureka
# 此微服务端口
server.port=1111
# 相当于给服务起个别名,注册到注册中心,与 hosts 文件中配置相对应
eureka.instance.hostname=eurekaA
# 默认本身也是一个微服务,当它是注册中心时,有两个身份,一个是服务注册中心,一个是普通项目,它会自己把注册到自己上面,默认是true
# 集群,当前项目要注册到服务注册中心,设为true
eureka.client.register-with-eureka=true
# 集群,获取注册信息表
eureka.client.fetch-registry=true
# B 服务要注册到 A 服务上去
eureka.client.service-url.defaultZone=http://eurekaB:1112/eureka

application-b.properties

# 此微服务名称
spring.application.name=eureka
# 此微服务端口
server.port=1112
# 相当于给服务起个别名,注册到注册中心,与 hosts 文件中配置相对应
eureka.instance.hostname=eurekaB
# 默认本身也是一个微服务,当它是注册中心时,有两个身份,一个是服务注册中心,一个是普通项目,它会自己把注册到自己上面,默认是true
# 集群,当前项目要注册到服务注册中心,设为true
eureka.client.register-with-eureka=true
# 集群,获取注册信息表
eureka.client.fetch-registry=true
# A 服务要注册到 B 服务上去
eureka.client.service-url.defaultZone=http://eurekaA:1111/eureka
  • 配置完成后,对象名打包,双击 package
    在这里插入图片描述
    在这里插入图片描述
  • 打开到两个 target 目录,分别输入
java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=a
java -jar eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=b

启动两个 Eureka 服务端,启动后报错可能是代码问题,也可能是另一个 Eureka 没启动完成,过一段时间都不报错了,Eureka 集群就搭建好了

  • 访问 http://localhost:1111/
    在这里插入图片描述
  • 访问http://localhost:1112/
    在这里插入图片描述
  • 至此说明 Eureka 集群搭建成功

5.3 Eureka 工作细节

  • Eureka 本身分为两个部分, Eureka Server 和 Eureka Client

5.3.1 Eureka Server

  • Eureka Server 主要提供3个功能
    ① 服务注册,所有服务都注册到 Eureka Server 上来
    ② 提供注册表,注册表就是所有注册上来服务的一个列表,Eureka Client 在调用服务时,需要获取这个注册表,一般来说,这个注册表会缓存下来,如果缓存失效,则直接获取最新的注册表
    ③ 同步状态, Eureka Client 通过注册、心跳机制,和 Eureka Server 同步当前客户端的状态

5.3.1.1 自我保护机制

  • 网络波动,如果三次没有收到 Eureka Client 的请求后,就删除该 Eureka Client 信息,可能造成误杀,为此出现了自我保护机制,开发环境不用开启,生产建议开启
    eureka.server.enable-self-preservation=true
  • 统计 15 分钟内是否低于 85% ,如果低于 85%,进入保护机制
    ① 不在移除因长时间没有收到心跳而过期的微服务
    ② 依然会接收新的注册、查询请求,但是不会同步
    ③ 不会同步到其他节点(自己不知道注册信息有没有失效),当恢复后同步到其他节点,退出保护机制

5.3.2 Eureka Client

  • Eureka Client 主要是用来简化每个服务和 Eureka Server 之间的交互,Eureka Client 会自动拉取、更新、以及缓存 Eureka Server 中的信息,这样 Eureka Server 所有节点宕机,Eureka Client 依然能够获取到想要调用服务的地址(这是理想状态,有时候地址可能不准确,比如有个服务重启 IP 变了,还拿老地址调用服务,就不行了)

5.3.2.1 服务注册

  • 服务提供者(本质也是一个 Eureka Client)将自己注册到服务中心(Eureka Server)。当 Eureka Client 向 Eureka Server 注册时,它需要提供自身的一些元数据,例如: IP 地址、端口、名称、运行状态等等

5.3.2.2 服务续约

  • Eureka Client 注册到 Eureka Server 上之后,事情没有结束,只是刚刚开始,注册成功后,默认情况下,Eureka Client 每隔 30 秒就要向 Eureka Server 发送一条消息,来告诉 Eureka Server 我还在运行。如果 Eureka Server 连续 90 秒没有收到 Eureka Client 的续约消息(连续三次没发送),它会认为 Eureka Client 已经掉线,会将掉线的 Eureka Client 从当前的列表中删除。

  • 服务续约,有两个相关属性(一般不建议修改)

eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in seconds=90

eureka.instance.lease-renewal-interval-in-seconds=30表示服务续约时间,默认是30秒
eureka.instance.lease-expiration-duration-in seconds=90服务失效时间,默认是90秒

5.3.2.3 服务下线

  • 当 Eureka Client 下线时,它会主动发送一条消息,告诉 Eureka Server,我下线啦。

5.3.2.4 获取注册表信息

  • Eureka Client 从 Eureka Server 上获取服务的注册信息,并将其缓存在本地。本地客户端,在需要调用远程服务时,会从该信息中查找远程服务所对应的 IP 地址、端口等信息。 Eureka Client 上缓存的服务注册信息会定期更新,如果 Eureka Server 返回的注册表信息与本地缓存的注册表信息不同的话,Eureka Client 会自动处理
  • 这里也涉及两个属性,一个是是否允许获取注册表信息
    eureka.client.fetch-registry=true
    Eureka Client 上缓存的服务注册信息,定期更新的时间间隔,默认 30 秒
    eureka.client.register-fetch-interval-seconds=30

5.4 Eureka 集群原理

在这里插入图片描述

  • 在集群中,Eureka Server 通过 Replicate 同步数据,不同 Eureka Server 之间不分主从,是平等的;节点之间,通过指定 serviceUrl 来互相注册,形成一个集群,进而提高节点的可用性,如果有一个 Eureka Server 宕机,Eureka Client 会自动切换到新的 Eureka Server 上,每个 Eureka Server 节点上,都会相互同步数据
  • Eureka Server 的注册方式可以是单线的,也可以是多线的
    单线:A --> B --> C ,此方法 A 、C 也会同步,但如果 B 宕机了,A 、C 之间就不同步了
    多线:A --> B , C; B --> A , C;C --> A,B;如果一个节点宕机,另外两个节点依然可以同步数据

5.4.1 Eureka 分区

  • Region:地理位置上的不同区域,比如华北、东北
  • Zone:具体机房
    同一个 Zone 的分区里的 Eureka Server 、Eureka Client 优先进行心跳、同步,没有找到再去其他分区找
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值