本人菜鸟级别,对Eureka初步的了解,写一篇博客整理一下。内容主要是关于Eureka实例注册相关的。通过他人文章针对源码和自己的一些理解对Eureka的相关进行了一个整理,借花献佛,如有不对多多包含。具体内容如下:

Eureka整个的一个结构关系大致这样:

Eureka Service服务端我们3个站点组成的集群注册中心

App是我的业务站点,他即是服务的提供者也是服务的调用者

Eureka Client用于和Eureka service操作。

下面先谈初始化:

App 启动Eureka Client初始化会进行这么几件事情:

1.注册本服务

2.获取注册中心各个服务信息列表,缓存本地

3.启动2个定时任务,2个线程:心跳执行器,刷新执行器

本文主角:刷新执行器,默认客户端执行时间30s一次(可以配置)。此处只谈Eureka。 spring cloud针对Eureka做了一层封装,参数有些变化,同时Cloud客户端访问,也用Ribbon进行了一个客户端路由的概念,先不谈。Eureka Client本地的刷新器干啥用的,其目的就是为了获取服务中心所有注册服务相关的信息(ip啦,端口啦,健康页啦等等)。那怎么获取呢,它分两种全量获取增量获取

插一句:Eureka的请求设计基于Jersey,说白了就是http。

全量获取接口:get请求http://localhost:9000/eureka/apps

增量获取接口:get请求 http://localhost:9000/eureka/apps/delta

localhost:9000Eureka 服务器地址

为了减轻客户端以及服务端获取的压力,只有在特殊情况下才会进行全量获取,啥叫特殊情况

就是这几种情况,要么是配置中表态了说:“我不听我不听,我就要全量获取”,要么是本地缓存一看,卧槽没有,那还增量个屁,全获取。初始化时候,因为刚刚启动的站点本地缓存为空,所以也会进行全量获取。

顺便提一下其中registryRefreshSingleVipAddress配置了就只获取指定站点信息,弱水三千我只取一瓢。

地址:get 请求 http://localhost:9000/eureka/vips/test  test 即是vipaddress

其他情况就是增量获取了,增量怎么来的后面会提到。全量的和增量的数据结构如下

这里有个apps__hashcode用来比较用的比较啥。client获取增量后合并到本地,然后算出这个值。如果发现获取的和计算的不一样就进行全量获取。但是这个计算规则有点太过简陋,感觉很危险。

哈希值这样up_1_down_1。就是不同状态+服务个数,拼接而成。但是结合他的服务端策略好像也不是很粗糙,后面讲。

Eureka client谈完,开始Eureka service注册相关的表演:

集群同步先不看,先看单个的:

先借个别人的图

Eureka service注册信息有个2级缓存

readOnlyCacheMap(只读缓存):顾名思义,客户端读取的都是这个

readWriteCacheMap(读写缓存)客户端注册下线状态改变,会主动更新这个缓存,这个缓存有失效时间180秒,有最大缓存数量1000。

服务端会定期的比较两个缓存内容(30秒默认),不一样以读写缓存为准。定时使得读写缓存失效(默认180秒)。只读缓存可以关闭,如果设置了shouldUseReadOnlyResponseCache 这个参数,spring cloud里面为UseReadOnlyResponseCache,当然了关闭了会影响service性能。

增量列表在那获取,服务端有个队列,每一个状态改变的实例(上线,下线,暂停啦)都会进入这个队列,默认时间3分钟,每一条记录3分钟,服务端定时清理。

接着之前client增量获取hash比较的问题,因为client和service有心跳检测,30秒一次,90秒失败就下线,所以一个正常的服务3分钟一般都会与服务端交互获取这个队列信息,服务端也有集群。所以队列hash比较规则简单,貌似也没太大的问题。

Service集群:每个service权重一样,相互同步,实例状态改变会同步到其他service,比较两者的实例的lastDirtyTimestamp,以大的为准。然后客户端心跳也会对这个进行一个校验,双重保证,这个比较复杂,后边单独说。

针对异常情况:客户端获取注册信息失败怎么处理,目前Eureka没做处理,写了个back类放在那,我们可以自行去实现。

问题:

在工作中遇到 个问题希望能探讨一下,Eureka 实例下线(已经优雅的下线),但是因为这个ap原则,客户端没有及时的得到更新,不知道各位大佬是否有解决办法。

针对Eureka 实例下线的一致性(因为Eureka 在设计时候放弃了cap的一致性,所以会存在这样的问题),有这个么几个改进方式

1,缩短客户端刷新列表的频率

2,减少服务端的缓存级数,以及缓存时长

3,客户端重试机制

spring cloud针对一致性问题,在调用时候有,Ribbon有个错误访问隔离机制。但是这个隔离,测下来是有时效的,什么意思。客户端访问a地址失败(有机制),a进隔离,但是隔离失效后又会访问a。

Eureka解密(1)------ 注册实例服务发现理解相关推荐

  1. Eureka 注册中心/服务发现框架

    Eureka 注册中心/服务发现框架 Eureka注册中心/服务发现框架 如何使用构建 Eureka Server ? 加入依赖(此处以Maven为例) 创建Eureka Server 主运行类 单机 ...

  2. 遗留非springboot传统项目接入eureka注册与服务发现

    2019独角兽企业重金招聘Python工程师标准>>> 推荐: jeesuite开发框架,免费开源.一站式解决方案. 最近规划自动化运维以及统一监控需求,鉴于目前公司内部大部分项目采 ...

  3. 深入了解服务注册与服务发现

    1. 什么是服务注册与发现 我们先来看下什么是服务注册与服务发现? 服务注册,就是将提供某个服务的模块信息(通常是这个服务的ip和端口)注册到1个公共的组件上去(比如: zookeeper\consu ...

  4. 跟我学Spring Cloud(Finchley版)-04-服务注册与服务发现-原理剖析

    为什么80%的码农都做不了架构师?>>>    第2节( 跟我学Spring Cloud(Finchley版)-02-构建分布式应用 )说过: 地址硬编码问题--电影微服务中将用户微 ...

  5. 什么是微服务架构?什么是服务注册与服务发现?

    文章目录 基础名词 分布式 高可用 集群 什么是微服务 服务注册与服务发现 SpringCloud Alibaba 服务关系以及调用关系 服务注册中心 Nacos服务发现的领域模型 Nacos元数据 ...

  6. Oracle 12c新特性--LREG进程专门负责注册实例服务

    Oracle 12c引入了一些大量的新特性,数据库隐藏参数12.2比11.2就多了2000多个, 同时对之前版本的结构也发生了一些变化,虽然不如有些特性像temporary undo\immemory ...

  7. NodeJs服务注册与服务发现实现

    前言 由于作者才刚开始学习NodeJs,水平实在有限,本文更像是一篇学习笔记,适合同刚开始学习NodeJs的朋友阅读. 服务治理 如果你的团队正在探索微服务的搭建,那么你们可能就在寻找一种机制,这个机 ...

  8. 小白入门微服务(4) - 服务注册与服务发现

    概述 前言 什么是服务注册.服务发现 两种服务注册方式 两种服务发现方式 常见的第三方注册工具 后记 前言 好一阵子没有更新了,有些小伙伴在后台问我有没有更新,看来大家还是挺喜欢看我的文章的嘛.主要是 ...

  9. 服务注册与服务发现中心

    1.基本原理 服务注册和服务发现中心各自有多台机器,保证高可用 服务器注册:就是将周期性将自己的ip和端口号提供给注册中心,注册中心维护了(服务名称,ip和端口号的列表)一个映射关系. 服务发现:调用 ...

最新文章

  1. java中graphics抽象类_Java中的抽象类
  2. the final mapping would have more than 1 type
  3. 概率论-第一章 概率论的基本概念
  4. Java IO: PipedInputStream
  5. saltstack 安装nginx
  6. Xshell安装sql报错:······ RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#3a79bd29)
  7. 微波工程(7)——谐振器理论
  8. java毕业设计论文题目javaweb图书借阅管理系统[包运行成功]
  9. vue-pdf查看pdf文件及打印乱码问题处理
  10. 51单片机间接寻址C语言,51单片机的寻址方式
  11. arduino的L298N电机驱动模块
  12. Unity烘焙官方建议
  13. 谷歌:科技让世界更美好
  14. 三种最流行的商业模式解析:让顾客感觉占便宜,你才能赚更多钱
  15. 端游开发中用什么技术可以让用户更短时间内体验游戏?端游分发
  16. 大数据分析必学的六个核心技术点
  17. echarts 多图表的自适应窗口大小,自动缩放
  18. 最短路径之迪克斯特拉(Dijkstra)算法
  19. VBA 使用Excel数据库:行转列
  20. 美国青年以车会友 愿做两国交流的使者

热门文章

  1. 海南大学信号与系统838报考高频问题整理
  2. Java“中文”编程-java为什么可以使用中文标识符
  3. 博弈论与信息经济学-重复博弈
  4. bzoj3047: Freda的传呼机bzoj2125: 最短路
  5. UDP - Nginx配置端口保持时间proxy_timeout
  6. 服务器系统能装打印机吗,现在云服务器怎么安装打印机
  7. 前端-查询参考资料网站/软件/移动端、jQuery开发插件官网
  8. (matlab代码分享,可运行) 多技能员工排班调度多目标优化(技能熟练度包含学习型、遗忘型)(Part 1)
  9. CSDN发博客上传照片失败问题解决方案
  10. Python爬取童程童美TTS网站知识点图片