eureka自我保护时间_微服务架构中服务的注册与发现Eureka组件

技术/杨33


b232da1f4133a202422614b4810c7940.png

一、Eureka的介绍

在前后端分离架构中,服务层被拆分成了很多的微服务,那么服务注册中心就管理着服务与服务之间的一个依赖关系。

EureKa在Spring Cloud全家桶中担任着服务的注册与发现的落地实现。

Eureka包含两个组件:Eureka Server和Eureka Client。

Eureka Server:注册中心服务端。提供服务注册,各个服务节点启动后,在EureKa server中进行注册

Eureka Client:注册中心客户端。Eureka Client 是一个 Java 客户端,用于简化与 Eureka Server 的交互。Eureka Client 会拉取、更新和缓存 Eureka Server 中的信息。

二、Eureka的通信原理

Eureka Server采用的是Peer to Peer对等通信,每一个Peer都是对等的。

节点通过彼此互相注册来提高可用性,每个节点需要添加一个或多个有效的serviceUrl指向其他节点,每个节点都可被视为其他节点的副本。

如果某台Eureka Server宕机,Eureka Client的请求会自动切换到新的Eureka Server节点。当宕机的服务器重新恢复后,Eureka会再次将其纳入到服务器集群管理之中。

一个新的Eureka Server节点启动后,会首先尝试从邻近节点获取所有实例注册表信息,完成初始化。

Eureka Server通过getEurekaServerUrls()方法获取所有节点,并且通过心跳续约的方式是定期更新。默认配置下,如果Eureka Server在一定时间内没有接收到某个服务实例的心跳,Eureka Server将会注销该实例。这个时间默认是90秒,通过eureka.instance.lease-expiration-duration-in-seconds配置。

当Eureka Server节点在短时间内丢失过多的心跳时,这个节点就会进入自我保护模式

三、Eureka的自我保护模式

默认配置下,如果Eureka Server每分钟收到的心跳续约的数量低于一个阈值,并且持续15分钟,就会触发自我保护模式。

在自我保护模式下,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例,当它收到的心跳数重新恢复到阈值以上时,该Eureka Server节点会自动退出自我保护模式。

自我保护模式的设计理念就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。

禁用自我保护模式:eureka.server.enable-self-preservation = false

改变心跳时间间隔:eureka.instance.lease-renewal-interval-in-seconds = ???

修改自我保护系数:eureka.server.renewal-percent-threshold = ???,默认是0.85。

四、搭建注册中心服务端Eureka Server

1、创建项目module

028aed9b2bf1745d05bbe4188360f7e4.png

Eureka Server的项目module

2、pom.xml文件添加依赖

<?xml version="1.0" encoding="UTF-8"?>        cloudproject        com.project.cloud1.0-SNAPSHOT4.0.0    cloud-eureka-server7001    org.springframework.cloud            spring-cloud-starter-netflix-eureka-server                    cloud-common-util            com.project.cloud1.0-SNAPSHOTorg.springframework.boot            spring-boot-starter-web        org.springframework.boot            spring-boot-starter-actuator        org.springframework.boot            spring-boot-devtools            runtimetrueorg.projectlombok            lombok        

3、添加application.yml配置文件

server:  port: 7001eureka:  instance:    hostname: localhost #eureka服务端的实例名称  client:    register-with-eureka: false #false表示不向注册中心注册自己    fetch-registry: false #false表示自己就是服务注册中心,本职就是维护服务实例,并不需要去检索服务    service-url:      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #提供对外注册服务、服务查询的地址

4、编写主启动类

package com.cloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;/** * @author 杨33 * @date 2020/4/26 20:59 */@EnableEurekaServer@SpringBootApplicationpublic class EurekaMain7001 {    public static void main(String[] args) {        SpringApplication.run(EurekaMain7001.class, args);    }}

5、启动主启动类,浏览器访问:http://localhost:7001/

打开Eureka Server的web管理页面。

84e7b04e86936e4790ea978c00d64d21.png

Eureka Server的web管理页面

五、都是服务注册中心的ZooKeeper和Eureka对比

在分布式系统,有三个特性:C-数据一致性A-服务可用性P-服务对网络分区故障的容错性

它们统称为CAP定理。这三个特性在任何分布式系统中,是不能同时满足的,最多同时满足两个。

  • ZooKeeper是基于CP设计的。可以保证数据一致性。

在任何时刻对Zookeeper的访问请求都可以得到一致的数据,同时系统对网络分割具备容错性,但它不能保证每次服务请求的可用性。

什么情况下会发生服务不可用呢?

如果Zookeeper正在选主,或者Zookeeper集群中半数以上的机器不可用,就会发生从服务器上获取不到数据。

为什么Zookeeper设计为保证数据一致性呢?

基于很多分布式涉及到数据存储的场景,保证数据的一致性是最为重要的。

  • Eureka是基于AP设计的。可以保证服务可用性。

即使所有的机器都挂了,也能拿到本地缓存的数据,保证服务能返回数据结果。

理论上,Eureka更适合做服务注册中心。而Zookeeper的使用,在实际环境下,也基本不会出现服务器宕机一半以上的情况,所以Zookeeper实际上也没什么大问题。


作者:杨33,北京互联网公司在职Java开发,专注分享写作干货。欢迎关注我,期待你的点赞评论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值