什么是Eureka

Eureka是微服务框架中负责完成服务治理的组件,我感觉跟之前学的zookeeper差不多,就是一个服务注册中心(zk+dubbo),简单点说就是一个管理服务的中心,它包含服务注册中心,服务注册和发现机制。

  • 提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
  • 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
  • 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态

架构

Eureka采用了C-S的设计架构,一共有两个端,服务端Eureka Server和客户端Eureka Client

Eureka Server:提供服务注册服务,即作为服务注册功能的服务器,是服务注册的中心,而系统中的其他微服务使用Eureka的客户端来连接到服务端并维持心跳连接,这样开发维护人员都可以从服务端监控微服务是否正常运行,而SpringCloud的其他组件在配置Eureka之后,也就可以在Eureka发现其他服务。

Eureka Client:是一个java客户端,它使与服务的交互变得更加容易。客户端还有一个内置的负载均衡器,可以进行基本的循环负载均衡,在应用启动后,将会向Eureka Server发送心跳(默认周期30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

什么是服务治理

无数个服务提供者和服务调用者,我们就需要使用服务治理,管理服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册

Eureka高可用

微服务RPC远程服务调用最核心的是搭建集群,避免单点故障

集群图解
在这里插入图片描述
部署实例图解
在这里插入图片描述
上图的异地部署服务注册中心Eureka就实现了高可用和异地容灾。

重点就是修改配置文件,其他的基本一致
7001和7002互相注册
7001的配置文件如下
在这里插入图片描述
7002配置修改端口、实例名称和注册中心即可
在这里插入图片描述
将客户端注册中心切换为红色字体的集群版配置
在这里插入图片描述

Eureka自我保护机制

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式Eureka将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销服务
如果看到如下提示,就表示Eureka进入了保护模式
在这里插入图片描述
简单点说就是某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对微服务的信息进行保存

为什么会产生Eureka自我保护机制
为了防止Eureka Client可以正常运行,但是与EurekaServer网络不通的情况下,EurekaServer不会立刻注销服务

什么是保护模式
默认情况下,如果Eureka在一定时间内没有收到某个微服务的心跳,EurekaServer将会注销服务,保护模式是当网络分区发生(延时、卡顿、拥挤)时,微服务和EurekaServer无法通信,以上行为可以说服务本身其实是健康的,不应该注册该服务,短时间内丢失过多客户端(可能发生了网络分区故障),那么这个节点就会进入自我保护模式,Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期
在这里插入图片描述
保护模式就是为了解决健康的服务因网络延时等问题无法联系EurekaServer导致被剔除的问题。

具体搭建

服务端
新建Moudle
在这里插入图片描述
下一步在这里插入图片描述
选择初始依赖
在这里插入图片描述
.yml

server:
  port: 10086
spring:
  application:
    name: jczb-eureka #微服务名称
eureka:
  client:
    service-url:
      defaultZone: http://localhost:${server.port}/eureka

启动类

@SpringBootApplication
@EnableEurekaServer
public class JczbEurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(JczbEurekaApplication.class, args);
    }

}

启动成功
在这里插入图片描述

Eureka常用配置文件说明

服务端

server:
  port: 10086 #服务启动端口
spring:
  application:
    name: leyou-registry #服务名称
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka #服务访问地址
    register-with-eureka: false #关闭自己的服务,服务提供方启动时,会检测该参数是否为True,true注册给eureka,一般eureka不自己发现自己,所以改为false
    fetch-registry: false #fetch-registry: false  #要不要去注册中心获取其他服务的地址
  server:
    enable-self-preservation: false #关闭自我保护模式
    eviction-interval-timer-in-ms: 10000 #定期清理无效衔接

客户端

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
    registry-fetch-interval-seconds: 5 # 拉取服务时间
  instance:
    lease-renewal-interval-in-seconds: 5 # 每隔5秒发送一次心跳
    lease-expiration-duration-in-seconds: 10 # 10秒不发送就过期

小结

生产者与消费者注册过程

  1. 首先启动Eureka注册中心
  2. 启用生产者服务
  3. 生产者服务启动后会将自身信息比如服务地址以别名的方式注册进Eureka
  4. 消费者需要调用接口时,使用别名去注册中心获取实际的RPC远程调用地址
  5. 消费者获得调用地址后,底层实际使用HttpClient技术实现远程调用
  6. 消费者获取地址会缓存在本地JVM内存中,默认每30秒更新一次服务调用地址
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐