Eureka原理浅析

news2024/12/24 0:16:00

文章目录

  • 1.简介
  • 2.组件
    • 2.1 Eureka Server
      • 2.1.1 主要功能
      • 2.1.2 自我保护机制
      • 2.1.3 数据同步方式
      • 2.1.4 Server的多级缓存和Client实例过期策略
    • 2.2 Eureka Client
  • 3.补充
    • 3.1 CAP偏重点
    • 3.2 功能扩展性
    • 3.3 工作流程

1.简介

Eureka是Netflix开发的服务发现框架,本身是基于REST的服务,SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

2.组件

Eureka包含两个组件:

  1. Eureka Server:给服务提供者提供服务注册功能,给服务消费者提供订阅拉取功能;
  2. Eureka Client:用以简化Eureka Server的交互,支持提供者注册服务和获取更新提供者列表等功能。

各自关系架构图如下:
架构图

2.1 Eureka Server

2.1.1 主要功能

Eureka Server主要提供三个功能:

  1. 服务注册:服务提供者启动后,会通过Client向Server发送注册信息,Server会存储该服务的信息,其通过二层缓存机制来维护服务注册表信息;
  2. 提供注册表:服务消费者在调用服务时,如果Client端没有缓存注册表信息则会从Server端获取最新的注册表;
  3. 同步状态:Client通过心跳机制来和Server同步当前Client状态。

2.1.2 自我保护机制

默认情况下,Eureka Server在90s内没接收到某个Client的心跳则会注销该实例,但在微服务架构中网络通信面临各种问题,会导致Client状态正常,网络分区故障而导致实例被注销。

如果在某段时间内大量实例被注销,可能会严重威胁整个微服务架构的可用性,。为了解决这个问题,Eureka开发了Server的自我保护机制。Server在运行期间会统计心跳成功比例,当15min内心跳成功比例低于85%,则会进入自我保护机制。

Server进入自我保护机制后有以下功能:

  1. Server不再从注册列表中移除长时间没完成心跳检测的服务;
  2. 本Server机器仍然能接收新服务的注册和查询请求,但这些数据不会同步到其它节点上,保证当前节点可用;
  3. 当网络稳定时,自我保护机制期间新注册的信息会同步到其它节点中。

2.1.3 数据同步方式

Eureka的所有Server都保存了全部的注册表信息,每个Server的角色都是一致且平等的。在Eureka中节点称为Peer,其集群为Peer To Peer模式。

Server在启动时会从配置文件中获取其它的Server地址,将不存在的Server从集群中移除,新增的Server添加到注册表中。最终会启动一个定时线程每隔10min更新一次注册表的Server信息。

新启动的Server获取其它Server注册服务表的方式便是把自己作为Client注册到配置文件中的Server上,再拉取其注册服务表保存在本地。这样就能实现只要Server可以连成一条线,集群内所有的机器信息都能同步。同步操作会被Client的注册、续约和注销请求触发。

Eureka Server之间数据同步死循环是通过在http header中增加区分普通Client实例来避免同步死循环。当两个Server的数据不一致时,将会使用timestamp时间戳属性来判断使用最新的数据来覆盖老数据。

2.1.4 Server的多级缓存和Client实例过期策略

Server存储注册表信息是直接使用ConcurrentHashMap来存储信息的,其结构如下:

接口服务层,面向Eureka Client的REST接口

二级缓存层,内部有readOnlyCacheMapreadWriteCacheMap,是Client所需要的数据格式

数据存储层,用来存储实际的Client注册信息,是Server间的数据格式

由上到下可详细划分为:

Resources资源层,REST接口传输服务信息

一级缓存readOnlyCacheMap:无过期时间,保存对外输出的服务信息结构

二级缓存readWriteCacheMap:包含失效机制,失效后将会更新readOnlyCacheMap,保存对外输出的服务信息结构

registry注册表,key是spring.application.name,value为服务注册信息

服务注册表信息过期策略:

  • 主动过期:当Client发生注册、下线或故障时,将会把Client的所有缓存清掉;
  • 定时过期:默认180s,当数据没发生更新或心跳检测180s后将会清掉缓存;
  • 被动过期:没个30s会进行心跳检测,当发现两者数据不一致时,会将最新的集群数据覆盖原注册表。

但有一点需要注意,当注册表信息过期需要剔除时有个最大值限制,即一次性过期的注册信息不能过多,如果超过了阈值则会进入自我保护机制,如果没超过则会正常的删除过期信息。

2.2 Eureka Client

对于Client而言,有三个重要的机制:

  1. 服务注册机制(registry):Client作为服务提供者或服务消费者向服务注册中心注册自身的消息,Server将会保存到数据存储层,并更新二级缓存;
  2. 服务续约机制(renew):服务注册后,定时向注册中心发送续约请求,默认30s,可看作为心跳检测机制,续约成功后将会更新Server的timestamp时间戳;
  3. 服务注销机制(cancel):Client服务 正常停止 前会向注册中心发送注销请求,Server接收到请求将会删除Client的注册信息,更新二级缓存并同步数据到其它的Server。

上面三个机制执行后Server端都会触发同步操作,将最新数据同步给其它的Server。

Client从Server获取服务注册表数据时会先从二级缓存层中获取,未获取到则将数据加载到二级缓存中,加载时会判断选择增量同步或全量同步。

  1. 全量同步:从registry中加载并同步,registry是所有注册表信息存储的地方;
  2. 增量同步:从recentlyChangedQueue中加载并同步,recentlyChangedQueue存储上线下线的请求,心跳检测不会更新时间戳,存储到期时间默认180s,定时器频率可单独配置。

3.补充

3.1 CAP偏重点

Eureka的CAP偏重点为AP,可实现注册中心的高可用,一般被用于跨多机房部署。用来做一般对比的Zookeeper侧重点为CP,可保证数据一致性,但重新选举时无法支持高可用。

3.2 功能扩展性

Eureka的数据结构在内部已经确定,只能用来做服务注册与发现,无法实现其它的扩展功能。而Zookeeper可保存数据较为灵活,除了服务发现可支持更多功能扩展。

3.3 工作流程

  1. 先后启动Server,保证Server至少可连成一条直线,启动后完成Server间的服务注册表同步;
  2. 启动服务提供者的Client,向Server集群中的任意机器注册本机器信息,随后Server同步提供者的机器信息;
  3. 提供者与Server保持心跳检测,维持信息有效性;
  4. 启动服务消费者的Client,向Server集群的任意机器拉取并订阅提供者服务信息;
  5. 后续提供者发生改动消费者将会收到通知并重新拉取数据覆盖本地数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/358277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SegNeXt: 重新思考基于卷积注意力的语义分割

论文信息 论文名称:SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation 项目GitHub: GitHub - Visual-Attention-Network/SegNeXt: Official Pytorch implementations for "SegNeXt: Rethinking Convolutional Atten…

ESP-C3入门11. 创建最基本的HTTP请求

ESP-C3入门11. 创建最基本的HTTP请求一、menuconfig配置二、配置 CMakeLists1. 设置项目的额外组件目录2. 设置头文件搜索目录三、在 ESP32 上执行 HTTP 请求的基本步骤1. 创建 TCP 连接2. 设置 HTTP 请求3. 发送 HTTP 请求4. 接收 HTTP 响应5. 处理 HTTP 响应6. 关闭 TCP 连接…

35岁以上的大龄测试员们,后来都干什么去了?

为什么软件测试行业看不见白发苍苍的软件测试员?大龄测试员都去哪里了?各个公司会辞退大龄测试员吗? 如果一位 50 多岁的测试员申请 20 多岁或 30 多岁的职位,有多少公司会雇用他们呢?关于这个问题,有很多流言传说,也有一些残酷的现实。…

努力优化和改造不好的环境,去设计新的、积极的、适合自己的环境

你知道环境对你的影响有多大吗?自己的的社交圈也是一个环境如果你待在一个只知道吃喝玩乐,不思进取,天天玩手机、打游戏的圈子里那你很大程度也会被影响,因为你不跟他们一起你就融入不进去,就会被孤立,很多…

优秀蓝牙耳机推荐,热销不错的四款蓝牙耳机推荐

蓝牙耳机作为目前最流行的数码产品,受到很多人追捧,蓝牙耳机摆脱了有线蓝牙耳机的束缚,能够更好听歌打游戏,随时取用,更为便利,当然,随着耳机的大幅度创新,也导致很多人在选购耳机的…

内网渗透(四十三)之横向移动篇-SMB远程执行命令横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

前端性能优化的一些技巧(90% chatGpt生成)

终于弄好了chatGpt的账号,赶紧来体验一波。先来一波结论,这篇文章的主要内容来源,90%是用chatGpt生成的。先上chatGpt的生成的结果:作为一名懒惰的程序员,chatGpt会帮助我变得更懒...,好了下面开始文章的正…

GEE学习笔记 六十八:【GEE之Python版教程二】配置Python开发环境

这一篇内容主要讲解两部分内容,第一部分是本地python开发环境的配置,第二部分是GEE的python开发环境配置。我这里做的所有的操作都是在我的Mac电脑上做的,Windows上操作类似,如果有不清楚的可以自行搜索相关操作步骤。 第一部分&…

pytorch零基础实现语义分割项目(四)——模型训练与预测

模型训练与预测项目列表前言损失函数one_hotDice LossFocal Loss模型参数与训练预测项目列表 语义分割项目(一)——数据概况及预处理 语义分割项目(二)——标签转换与数据加载 语义分割项目(三)——语义…

winserver服务器硬盘满了怎么清理? 服务器硬盘空间不足清理方法

本文主要介绍我在维护windows server服务器期间总结的一些磁盘清理方式。如对您有所帮助,不甚荣幸。 文章目录一、C盘清理1. System32的日志文件2. IIS的日志文件3. .Net Framework的缓存文件4. 清理其他不必要文件5. 虚拟内存从c盘移到其他硬盘二、其他软件清理1. …

【离散数学】4. 图论

1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 图&#xff1a;点边边与点的映射函数 连通性与判别 欧拉图与哈密尔顿图 二分图和平面图与欧拉公式 树及生成树 单源点最短路径&#xff1a;Dijkstra算法 对偶图 4. 图论 4.1 图的基本概念 4.1.1 图 一个图G是一个三重组 <V(G),E…

【LeetCode】No.232. 用栈实现队列 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/implement-queue-using-stacks/ 1. 题目介绍&#xff08;232. 用栈实现队列&#xff09; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff…

两年外包生涯做完,感觉自己废了一半....

先说一下自己的情况。大专生&#xff0c;17年通过校招进入湖南某软件公司&#xff0c;干了接近2年的点点点&#xff0c;今年年上旬&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经在一个企业干了五年的功能测试…

慕了没?3年经验,3轮技术面+1轮HR面,拿下字节30k*16薪offer

前段时间有个朋友出去面试&#xff0c;这次他面试目标比较清晰&#xff0c;面的都是业务量大、业务比较核心的部门。前前后后去了不少公司&#xff0c;几家大厂里&#xff0c;他说给他印象最深的是字节3轮技术面1轮HR面&#xff0c;他最终拿到了30k*16薪的offer。第一轮主要考察…

MyBatis-Plus详细讲解(整合spring Boot)

哈喽&#xff0c;大家好&#xff0c;今天带大家了解的是MyBatis-Plus&#xff08;简称 MP&#xff09;&#xff0c;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。首先说一下MyBatis-Plus的愿景是什么&…

十五.程序环境和预处理

文章目录一.程序翻译环境和执行环境1.ANSI C 标准2.程序的翻译环境和执行环境二.程序编译和链接1.翻译环境2.编译本身的几个阶段3.运行环境三.预处理1.预定义符号2.#define&#xff08;1&#xff09;#define定义标识符&#xff08;2&#xff09;#define定义宏&#xff08;3&…

【Linux】——基础开发工具和vim编辑器的基本使用方法

目录 Linux 软件包管理器 yum Linux编辑器-vim使用 1.vim的基本概念 2. vim的基本操作 3. vim正常模式命令集 4. vim末行模式命令集 如何配置vim Linux 软件包管理器 yum yum是Linux下的一个下载软件的软件 对于yum&#xff0c;现阶段只需要会使用yum的三板斧就…

【linux】——gcc/g++,make/makefile的简单使用

目录 1.gcc的基本使用 2.Linux下的静态库和动态库的理解 3.Linux项目自动化构建工具——make/makefile 1.gcc的基本使用 gcc是专门用来编译c语言的 g是专门用来编译c的&#xff0c;但是g也能够用来编译c语言 预处理&#xff08;进行宏替换&#xff09; 预处理功能主要包括宏…

Idea无法识别SpringBoot配置文件

SpringBoot的配置文件 application.properties > application.yml > application.yaml 配置文件间的加载优先级 properties&#xff08;最高&#xff09;> yml > yaml&#xff08;最低&#xff09;不同配置文件中相同配置按照加载优先级相互覆盖&#xff0c;不同配…

免费使用通配符域名证书

文章目录前言一、手动安装acme.sh操作1、安装acme.sh2、使用dns api自动续签二、宝塔自动操作【推荐】总结前言 之前个人站点一般都是使用阿里云免费单域名证书&#xff0c;虽然好用但是只有一年有效&#xff0c;到期只能手动重新申请&#xff0c;并且每次弄个子域名出来就要重…