zoukankan      html  css  js  c++  java
  • Eureka 集群的搭建、工作细节及集群原理

    1、Eureka 集群的搭建

    使用了注册中心后,所有的服务都要通过服务注册中心来进行信息交换。服务注册中心的稳定性就非常重要了,一旦服务注册中心调线,会影响整个系统的稳定性。所以在实际开发中,Eureka 一般是以集群的形式出现的。

    Eureka 集群,实际上就是启动多个 Eureka 实例,多个 Eureka 实例之间,互相注册,互相同步数据,共同组成一个 Eureka 集群。

    搭建 Eureka 集群,首先需要修改电脑的 hosts 文件(C:WindowsSystem32driversetc)

    在 hosts 文件末尾添加一句:

    127.0.0.1 eurekaA eurekaB
    

    如下图:

    保存即可。

    在上节文章 Eureka 的搭建的基础上,再在 resources 目录下添加两个配置文件,分别是 application-a.properties 和 application-b.properties

    其中,application-a.properties 的内容如下:

    # 为当前服务指定一个名字
    spring.application.name = eureka
    # 设置端口号
    server.port = 1111
    # 给服务起个别名
    eureka.instance.hostname=eurekaA
    # 默认情况下,Eureka Server 也是一个微服务,所以当它还是一个注册中心的时候,它会有两层身份:1.注册中心,2.普通微服务,
    # 即它会自己把自己注册到注册中心
    # register-with-eureka 设置为 false ,表示当前项目不要注册到注册中心。
    eureka.client.register-with-eureka = true
    # 表示是否从 Eureka Server 上获取注册信息
    eureka.client.fetch-registry=true
    # 将服务 A 注册到 B 上
    eureka.client.service-url.defaultZone = http://eurekaB:1112/eureka
    

    application-b.properties 的内容如下:

    # 为当前服务指定一个名字
    spring.application.name = eureka
    # 设置端口号
    server.port = 1112
    eureka.instance.hostname=eurekaB
    # 默认情况下,Eureka Server 也是一个微服务,所以当它还是一个注册中心的时候,它会有两层身份:1.注册中心,2.普通微服务,
    # 即它会自己把自己注册到注册中心
    # register-with-eureka 设置为 false ,表示当前项目不要注册到注册中心。
    eureka.client.register-with-eureka = true
    # 表示是否从 Eureka Server 上获取注册表信息
    eureka.client.fetch-registry=true
    # 将 B 注册到 A 上
    eureka.client.service-url.defaultZone = http://eurekaA:1111/eureka
    

    配置完成后,对当前项目进行打包,打包成 jar 文件,具体操作参考文章:使用 IDEA 将 Spring Boot 项目打包成 jar 包,并运行该 jar 包

    打包完成后,在命令行启动两个 Eureka 实例。两个启动命令如下:

    java -jar eureka-0.0.1-SNAPSHOP.jar --spring.profiles.active = a
    java -jar eureka-0.0.1-SNAPSHOP.jar --spring.profiles.active = b
    

    启动成功后,打开浏览器,分别输入 http://localhost:1111http://localhost:1112

    如下图:

    这是 EurekaA

    这是 EurekaA

    这是 EurekaB

    这是 EurekaB

    2、Eureka 的工作细节

    Eureka 本身可以分为两大部分,Eureka Server 和 Eureka Client。

    2.1 Eureka Server

    Eureka Server 主要对外提供了三个功能:

    • 服务注册:所有的服务都注册到 Eureka Server 上面来。

    • 提供注册表:注册表是所有注册上来的服务的列表,Eureka Client 在调用服务时,需要获取这个注册表,一般来说,这个注册表会被缓存下来,如果缓存失效,则直接获取最新的注册表。

    • 同步状态:Eureka Client 通过注册、心跳等机制,和 Eureka Server 同步当前客户端的状态。

    2.2 Eureka Client

    Eureka Client 主要用来简化每个服务和 Eureka Server 的交互。 Eureka Client 会自动拉取、更新以及缓存 Eureka Server 中的信息,这样,即使 Eureka Server 所有节点都宕机,Eureka Client 依然能够获取到想要调用服务的地址(地址可能不准确)

    2.2.1 服务注册

    服务提供者将自己注册到注册中心(Eureka Server),需要注意,所谓的服务提供者,只是一个业务上的分类,本质上它就是一个 Eureka Client 。当 Eureka Client 向 Eureka Server 注册时,它需要提供一些自身的元数据信息,如 IP 地址、端口、名称、运行状态等。

    2.2.2 服务续约

    Eureka Client 注册到 Eureka Server 上之后,事情没有结束,刚刚开始而已。注册成功后,默认情况下,Eureka Client 每隔 30 秒就要向 Eureka Server 发行一条心跳信息,告诉 Eureka Server 我还在运行。

    如果 Eureka Server 连续 90 秒都没有收到 Eureka Client 的续约消息(连续 3 次都没发送),它会认为 Eureka Client 已经掉线了,会将掉线的 Eureka Client 从当前的服务注册表中剔除。

    服务续约,有两个相关属性(一般不做修改):

    # eureka.instance.lease-renewal-interval-in-seconds 表示服务续约时间
    eureka.instance.lease-renewal-interval-in-seconds = 30  
    # eureka.instance.lease-expiration-duration-in-seconds 表示服务时效时间
    eureka.instance.lease-expiration-duration-in-seconds = 90
    

    2.2.3 服务下线

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

    2.2.4 获取注册表信息

    Eureka Client 从 Eureka Server 上获取服务的注册信息,并将其缓存到本地。本地客户端,在需要调用远程服务时,会从该信息中查找远程服务所对应的的 IP 地址、端口等信息。Eureka Client 上缓存的服务注册信息会定期更新(30 秒),如果 Eureka Server 返回的注册表信息与本地缓存的注册表信息不同的话,Eureka Client 会自动处理。

    这里,也涉及两个属性,一个是是否允许获取注册表信息:

    eureka.client.fetch-registry = true
    

    Eureka Client 上缓存的服务注册信息,定期更新的时间间隔,默认为 30 秒

    eureka.client.registry-fetch-interval-seconds = 30
    

    3、Eureka 集群原理

    下图是官方的 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 也断开联系了)。在我们配置 serviceUrl 时,可以指定多个注册地址,即 A 可以注册到 B 上,也可以同时注册到 C 上。

    Eureka 分区:

    • region:地理上的不同区域

    • zone:具体的机房

    同一个分区内的 Eureka Server 和 Eureka Client 会优先进行心跳同步。

    参考资源:

    1、Eureka 官方文档

    2、江南一点雨 SpringCloud 视频教程

    每天学习一点点,每天进步一点点。

  • 相关阅读:
    Android视图动画集合AndoridViewAnimations
    调整窗口大小时进行页面刷新(设定定时器)
    通过拖动来变换元素顺序
    jquery的input:type=file实现文件上传
    ajax请求的data数据格式
    Cookie的新增,设置与清除
    比较两个对象是否一样的代码
    5.3日,7:20开始 阮一峰js的早课学习
    在线代码编辑器使用案例代码
    layui当点击增加的时候,将form中的值获取的添加到table行中代码
  • 原文地址:https://www.cnblogs.com/youcoding/p/13254828.html
Copyright © 2011-2022 走看看