Eureka注册原理解析
Eureka注册原理解析
Eureka注册原理解析:
Eureka Client
client注册的流程其实很简单,无非就是以下几个步骤:
先读eureka server的配置信息,从而知道eureka server在哪,以便后面进行注册
接着再读取自己的配置信息,然后将自己的信息封装在InstanceInfo实例中,等下将实例发送到eureka server中
通过上面步骤已经知道eureka server的地址了,此时先把注册拉取到本地缓存起来
将上面封装的InstanceInfo实例发送到eureka server进行注册,然后初始化心跳检测以及缓存刷新(这些都是通过开启后台线程完成的)
再次拉取注册表更新本地注册表信息
InstanceInfo实例部分代码:可以看到几个主要的信息比如:instanceId、ipAddr、port、appName、appGroupName、lastUpdatedTimestamp等
Eureka Server
Eureka Server是一个开箱即用的服务注册中心,开发人员只需要导入相关的依赖即可,它提供以下功能:
服务注册
接受eureka client发送过来的心跳检测
服务剔除(当一个client心跳超时)
服务下线(client请求关闭)
集群同步(不同eureka server中注册表信息同步)
获取注册表中服务实例信息(每个eureka server同时也是一个eureka client,eureka server可以把自己注册到eureka集群中)
服务注册时eureka client会将服务实例InstanceInfo发送到eureka server。
服务实例通过ConcurrentHashMap保存在内存中,在服务注册的过程中会先获取一个锁,防止其他线程对registry注册表进行数据操作,避免数据不一致。
eureka server接收到client发送过来的InstanceInfo实例时,会先根据唯一的instanceId检查注册表中是否已存在该实例。
如果没有该实例,说明这是一次新的注册服务,server会将InstanceInfo信息保存到注册表中
如果存在该实例,说明这是一次心跳检测或者实例信息更新操作,会比较lastUpdatedTimestamp字段保留最新的InstanceInfo实例信息。
集群同步
为了保持注册表的一致性,集群中的eureka server需要一个同步机制来维护注册表。
集群同步分为两个部分,我个人将其理解为pull和push:
pull:eureka server启动时从集群中其他节点pull注册表信息进行本地注册表的初始化
push:eureka server对本地的注册表进行更新操作后(包括增删改)会将操作push(也就是同步)到其他节点中
集群模式下的eureka server,多个eureka server之间互相注册并同步注册表信息,即使集群中个别节点出现故障或宕机,集群还是能够稳定提供服务。
缺陷:Eureka Server集群的节点之间是通过http的方式进行同步的,网络存在不可靠性,为了保持高可用性,eureka server 牺牲了数据一致性,eureka server不满足 CAP找那个C(数据一致性)。
Eureka和ZooKeeper的区别
在分布式领域有一个很著名的CAP定理:C:数据一致性。A:服务可用性。P:分区容错性(服务对网络分区故障的容错性)。
Eureka(保证AP),Zookeeper(保证CP)
Zookeeper保证CP:
当master节点因为网络故障与其它节点失去联系时,剩余节点会重新进行leader选举。选举时间太长,30~120s,且选举期间整个zk集群都是不可用的,导致注册服务瘫痪。
Eureka保证AP
Eureka各个节点都是平等的,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。
Eureka有自我保护机制,15分钟超过85%的节点都没有正常的心跳,Eureka就认为客户端与注册中心出现网络故障,此时出现以下几种情况:
Eureka不在从注册表中移除因为长时间没收到心跳过期的服务
Eureka依然能接受新服务的注册和查询请求,但是不会同步到其它节点
当网络稳定时,当前实例新的注册信息会被同步到其它节点上
因此,Eureka可以很好的应对网络故障导致的部分节点失去联系的情况,而不会像zookeeper那样整个服务瘫痪
原文地址: Eureka注册原理解析 - 同喜 - 博客园 (cnblogs.com)
Eureka注册原理解析相关推荐
- spring cloud eureka注册原理-注册失败填坑
写在前面 我们知道Eureka分为两部分,Eureka Server和Eureka Client.Eureka Server充当注册中心的角色,Eureka Client相对于Eureka Serve ...
- nacis服务注册原理_Nacos服务注册原理解析
参考:Nacos服务注册源码分析 Spring Boot版本:2.2.9.RELEASE Spring Cloud版本:Hoxton.SR6 Spring Cloud Alibaba版本:2.2.1. ...
- 微服务精通之Eureka原理解析
前言 随着互联网技术的发展,系统用户量的增长,很多系统都采用了分布式的方式进行部署.这个固然大大提高了系统的性能和可用性,但是分布式部署导致各种服务数量大增,这给我们进行服务治理和运维带来了困扰. 一 ...
- 4、Eureka 源码解析 之 Eureka Client 启动原理分析
在前面的一篇文章 3.Eureka 源码解析 之 Eureka Server 启动原理分析当中我们分析了一下 Eureka Server 的启动.在集群环境下 Eureka Server 相互之前需要 ...
- 注册中心 Eureka 源码解析 —— 应用实例注册发现(五)之过期
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 http://www.iocoder.cn/Eureka/instance-registry-evict/ ...
- nacis服务注册原理_服务注册和发现之Eureka原理篇
概念 在传统应用组件间调用,通过接口规范约束来实现的,从而实现不同模块间良好协作:但是被拆分成微服务后,每个微服务实例的数量和网络地址都可能动态变化,使得原来硬编码的地址极不方便,故需要一个中心化的组 ...
- Eureka原理解析
一.Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCl ...
- 创建集群版的Eureka注册中心
我们搭建了一个Eureka服务注册中心,就是Eureka Server,他提供了服务的注册和发现,那么其实对于Eureka服务注册中心来讲,我们整个微服务开发当中,它是一个非常重要的环节,我们所有的服 ...
- Spring Cloud概念+案例(eureka注册+拉取、ribbon负载均衡+重试)、netfix各组件介绍【上】
Spring Cloud概念+案例(断路器)[下] https://blog.csdn.net/LawssssCat/article/details/104632719 [⭐️⭐️⭐️] Spring ...
最新文章
- Listview点击事件
- Could not load java.net.BindException错误解决
- JSP基础--动作标签
- 漫谈iOS Crash收集框架
- plsql打开sql窗口快捷键_可以提升3倍开发效率的 Intellij IDEA快捷键大全汇总(2019)...
- The First Python man in Github
- 【渝粤教育】国家开放大学2018年秋季 0690-22T化工原理及实验 参考试题
- php添加开机启动脚本_php-fpm开机自动启动Shell脚本
- 单片机:DS1302时钟
- swf文件转mp4视频格式的失败与成功
- LabVIEW编程入门笔记
- html选择弹出列表实例,CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
- 虚拟机不正常关机,到时无法进入文本界面
- linux 拼图游戏,2020经典宝石拼图
- 计算机文档添加书签,小学计算机——制作可以跳转的书签教案
- 树莓派3b+家庭nas搭建安装openmediavault必要插件安装采坑
- 美国标准信息交换标准码(ASCII)
- DirectX 3D灯光和材质
- 数据结构趣味题-约瑟夫环
- 知秋源码解读分享系列(转)