Netflix之Eureka

发布时间 2023-10-07 15:29:22作者: -Lucas

一、Eureka简介

1、背景

传统应用中,组件之间的调用,通过有规范的约束的接口来实现,从而实现不同模块间良好的协作。但是被拆分成微服务后,每个微服务实例的网络地址都可能动态变化,数量也会变化,使得原来硬编码的地址失去了作用。需要一个中心化的组件来进行服务的登记和管理。

2、注册中心的好处

不用关心有多少提供方。

3、注册中心有哪些

  • Eureka
  • Nacos
  • Consul
  • Zookeeper

4、介绍

Eureka是一个RESTful风格的服务,是一个用于服务发现和注册的基础组件,是搭建Spring Cloud微服务的前提之一,它屏蔽了Server和client的交互细节,使得开发者将精力放到业务上。

二、服务注册与发现

服务注册与发现包括两部分,一个是服务器端,另一个是客户端。

1、服务器端

Server是一个公共服务,为Client提供服务注册和发现的功能,维护注册到自身的Client的相关信息,同时提供接口给Client获取注册表中其他服务的信息,使得动态变化的Client能够进行服务间的相互调用。

  • 服务注册表。记录每个注册上来微服务信息,比如服务名称、IP、端口等。注册表提供 查询API(查询可用的微服务实例)和管理API(用于服务的注册和注销)。
  • 服务注册。将微服务信息注册到注册中心。
  • 服务发现。查询可用微服务列表及其网络地址。
  • 服务检查。定时检查已注册的服务。发现某服务长时间未提供心跳包,就从注册表中移除。

2、客户端

Client将自己的服务信息通过一定的方式登记到Server上,并在正常范围内维护自己信息一致性,方便其他服务发现自己,同时可以通过Server获取到自己依赖的其他服务信息,完成服务调用,还内置了负载均衡器,用来进行基本的负载均衡。

  • 注册。微服务启动时,将自己信息注册到注册中心,注册中心存储这些信息(内存中)。
  • 拉取注册中心列表。定时去注册中心拉取注册表信息,缓存到client本地。避免每次请求都去注册中心查找
  • 心跳。微服务与注册中心通过某种机制(心跳)通讯。
  • 调用服务。解析服务名和具体地址对应关系,找到具体地址发起请求。

三、配置

1、注册中心配置

(1)依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

(2)配置文件

server:
  port: 7901
eureka:
  client:
    # 是否将自己注册到Eureka Server,默认是true,由于当前就是server,所以设置false,表明改服务不会注册到Eureka Server
    register-with-eureka: true
    # 是否从Eureka Server获取注册信息,由于当前是单节点,不需要同步其他节点数据,用false
    fetch-registry: true
    # 是否过滤掉非Up的实例
    # filter-only-up-instances: true
    # 设置服务注册中心的url 用于client和server交流
    service-url:
      defaultZone: http://root:123456@euk2.com:7902/eureka/
    # 客户端拉取服务端注册列表信息间隔 默认30s   对于网关如果需要迅速获取服务注册状态 可以调下 比如5s
    registry-fetch-interval-seconds: 30
  instance:
    hostname: euk1.com
    # 续约 心跳间隔  默认30s
    lease-renewal-interval-in-seconds: 30
    # 续约到期时间  默认90s
    lease-expiration-duration-in-seconds: 90
  # 关闭自我保护机制
  server:
    enable-self-preservation: false

3、注册成功

DiscoveryClient_EUREKASERVER/localhost:EurekaServer:7901 - registration status: 204

4、高可用

多个server之间互相注册

server:
  port: 7902
eureka:
  client:
    # 是否将自己注册到Eureka Server,默认是true,由于当前就是server,所以设置false,表明改服务不会注册到Eureka Server
    register-with-eureka: true
    # 是否从Eureka Server获取注册信息,由于当前是单节点,不需要同步其他节点数据,用false
    fetch-registry: true
    # 是否过滤掉非Up的实例
    # filter-only-up-instances: true
    # 设置服务注册中心的url 用于client和server交流
    service-url:
      defaultZone: http://root:123456@euk1.com:7901/eureka/
    # 客户端拉取服务端注册列表信息间隔 默认30s   对于网关如果需要迅速获取服务注册状态 可以调下 比如5s
    registry-fetch-interval-seconds: 30
  instance:
    hostname: euk2.com
    # 续约 心跳间隔  默认30s
    lease-renewal-interval-in-seconds: 30
    # 续约到期时间  默认90s
    lease-expiration-duration-in-seconds: 90