记一次Eureka的进一步学习。

一、Eureka简介

  百科描述:Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud 将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

  Eureka 包括 Eureka Server 和 Eureka Client,Eureka Server 即注册中心,Eureka Client 启动后会向 Eureka Server 注册自己,这样其他的 Eureka Client 访问 Eureka Server 即可拿到注册了的 Eureka Client 的信息。

二、基本结构

  上图是官网给的基于集群部署的 Eureka 架构图,先看一下图上各个部件的表示含义以及它们之间的交互:

  • Eureka Server:Eureka 服务端,多个 Eureka Server 可构成集群,集群中各节点完全对等。
  • Eureka Client:Eureka 客户端,业务服务依赖它实现服务注册和服务发现功能。
  • Application Service:服务提供者,依赖 Eureka Client 实现服务注册功能。
  • Application Client:服务消费者,依赖 Eureka Client 实现服务发现功能。
  • Register:Eureka Client 启动时会发起 Register 请求向 Eureka Server 注册自己。
  • Renew:Eureka Client 会周期性的向 Eureka Server 发送心跳来续约,默认30s。
  • Cancel:Eureka Client 关闭时会发送 Cancel 下线请求。
  • Get:Eureka Client 会周期性的发送 Get 请求,从 Eureka Server 获取注册表信息,默认30s。
  • Make Remote Call:服务消费者通过 Make Remote Call 访问服务提供者。
  • Replicate:Eureka Server 之间通过 Replicate 实现数据同步。当 Eureka Client 有请求(Heartbeat, Register, Cancel, StatusUpdate, DeleteStatusOverride)到某一个 Eureka Server 节点,该节点完成自身对应的操作后,会通过 Replicate 将本次请求同步到其他节点。
三、自我保护机制

  上面说了,Eureka Client 默认每30s会向 Eureka Server 发送一次心跳来实现续约,默认情况下,Eureka Server 超过90s没有收到该 Eureka Client 的心跳,则会注销该 Eureka Client。自我保护机制正是一种针对网络异常波动的安全保护措施,Eureka Server 在运行期间会去统计续约数量,如果在 15 分钟之内续约数量低于 85%,Eureka Server 则会进入自我保护模式,停止实例过期将当前的实例注册信息保护起来,同时提示一个警告,Eureka 的 web 页面这个红色告警语句应该很眼熟:

  进入自我保护模式时,此时会出现以下几种情况:

  • Eureka Server 不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。
  • Eureka Server 仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用。
  • 当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。

  自我保护机制通过配置 eureka.server.enable-self-preservation 来开启/关闭,默认开启。

四、Eureka Server注册表和多级缓存机制
  1. 注册表的存储结构

      先来看一下注册表的存储结构,上图 ConcurrentHashMap<String, Map<String, Lease>> register 就是注册表。ConcurrentHashMap 的 key 存储的是服务名称,value 的这个 Map 存储的是该服务对应的多个实例信息,Map 的 key 存储的是服务实例的id,value 的 Lease 就是实例信息,InstanceInfo 就代表了服务实例的具体信息,比如机器的ip地址、hostname 以及端口号,Lease 可以理解为 InstanceInfo 的包装类,维护了服务实例的一些动态数据,比如最近的心跳时间。另外,从源码中可以看到,register 是完全基于内存的,服务的注册、下线、故障,全部会在内存里维护和更新这个注册表。

  2. 多级缓存机制

  上图其实已经很清晰了,简单理一下注册和获取注册表的流程:

  • 注册:

    • Eureka Client 发起 Register 请求。
    • Eureka Server 将 Eureka Client 信息添加到注册表,同时使 ReadWriteCacheMap 缓存失效。
    • 一段时间后(默认30s),Eureka Server 的后台线程发现 ReadWriteCacheMap 被清空了,就会清空 ReadOnlyCacheMap 缓存。
  • 获取注册表:
    • Eureka Client 发起Get请求。
    • 首先,从 ReadOnlyCacheMap 缓存查询,有就返回。
    • 如果没有,从 ReadWriteCacheMap 缓存查询,有就返回。
    • 如果还没有,就查询内存中的注册表,同时将结果填充到 ReadWriteCacheMap 缓存和 ReadOnlyCacheMap 缓存。

  这就是 Eureka Server 端的缓存机制,通过 ReadWriteCacheMap 缓存和 ReadOnlyCacheMap 缓存减少了注册表的读写冲突,起到了类似于读写分离的效果,进一步保证了 Eureka 的性能。

  同时 Eureka Client 端也缓存了一份注册表信息,周期性的从 Eureka Server 拉取最新的数据。

五、总结

  本文只记录了Eureka的一些基本概念,后面再针对每个具体功能的源码实现做个详细记录。

参考:https://mp.weixin.qq.com/s/qjMphuPiihBmU2QtFMIfzw

Spring Cloud Eureka基本概述的更多相关文章

  1. Spring Cloud 学习 之 Spring Cloud Eureka(概述)

    Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 前述: ​ 服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务 ...

  2. SpringCloud---服务治理---Spring Cloud Eureka

    1.概述 1.1 Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理 ...

  3. Spring Cloud Eureka集群配置及注意事项(Greenwich版本)

    Spring Cloud Eureka集群配置及注意事项(Greenwich版本) 一·概述 Spring Cloud Netflix Eureka 是一个提供服务注册与发现的套件.服务提供者只需要将 ...

  4. 1 Spring Cloud Eureka服务治理

    注:此随笔为读书笔记.<Spring Cloud微服务实战> 什么是微服务? 微服务是将一个原本独立的系统拆分成若干个小型服务(一般按照功能模块拆分),这些小型服务都在各自独立的进程中运行 ...

  5. Spring Cloud Eureka Server集群Demo级搭建

    将上篇随笔Spring Cloud Eureka服务Demo级搭建进行改造,改造成一个在本机的伪集群 1.修改hosts文件(windows10 hosts文件位置:C:\Windows\System ...

  6. spring cloud eureka高可用

    记录下自己踩的坑 spring cloud eureka的高可用网上的教程大致分为两种,一种是两两互相注册,一种是三个互相注册. 1.两两互相注册 普通服务的注册写法都是http://peer1/eu ...

  7. 笔记:Spring Cloud Eureka 服务治理

    Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...

  8. Spring Cloud Eureka 自我保护机制

    Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果 ...

  9. Spring Cloud Eureka 常用配置详解,建议收藏!

    前几天,栈长分享了 <Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!>,今天来分享下 Spring Cloud Eureka 常用的一些参数配置及说 ...

随机推荐

  1. MyBatis返回map数据

    (1)接口中编写方法 //单行 public Map<String, Object> getEmpReturnMap(Integer id); //多行 @MapKey("id& ...

  2. 201771010126 王燕《面向对象设计 java》第十五周实验总结

    第一部分  理论部分 ◼ JAR文件◼ 应用程序首选项存储◼ Java Web Start JAR文件: 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar文件后,GU ...

  3. vue+element-ui之tree树形控件有关子节点和父节点之间的各种选中关系详解

    做后端管理系统,永远是最蛋疼.最复杂也最欠揍的事情,也永远是前端开发人员最苦逼.最无奈也最尿性的时刻.蛋疼的是需求变幻无穷,如同二师兄的三十六般变化:复杂的是开发难度寸步难行,如同蜀道难,难于上青天: ...

  4. jQuery-day01-介绍 和 选择器获取元素

    1 ,jQuery介绍 1.1,jquery的介绍,javascript库的关系.体验jquery.把js兼容性代码封装在jquery.js中,本身就是一个javascript库. 1.2,jQuer ...

  5. atx-agent minicap、minitouch源码分析

    项目描述: 因为公司需要,特别研究了一下openatx系列手机群控源码 源码地址: https://github.com/openatx 该项目主要以go语言来编写服务端.集成 OpenSTF中核心组 ...

  6. Python练手例子(10)

    55.学习使用按位取反~. 程序分析:~0=1; ~1=0; (1)先使a右移4位. (2)设置一个低4位全为1,其余全为0的数.可用~(~0<<4) (3)将上面二者进行&运算. ...

  7. SQL语句基本

    基础 创建数据库 CREATE DATABASE database-name 1 删除数据库 drop database dbname 1 备份sql server 创建 备份数据的 device U ...

  8. vue本地项目设置通过手机访问

    最近再用vue写一个移动端的应用,想通过手机访问看看页面效果,于是有了下文. 1.shif+右键打开命令行工具,输入ipconfig,回车,得到电脑的ip 2.找到工作目录下的config文件夹中的i ...

  9. 接口调试之Postman 使用方法详解

    一.Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具.今天给大家介 ...

  10. zepto与jquery冲突的解决

    一般是不会把zepto和jquery一起来用的.但有时候要引入一些插件,可能就会遇到这样的问题. jquery noConflict() jquery有一个方法叫noConflict() ,可以把jq ...