记一次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. APIO2018 被屠记

    占坑 day0 10:40才起床 感觉一点也不好 下午去了趟80中拿牌子然而没有到,白浪费我颓废时间. day0.5 早上第一课讲二分凸优化,有点瞌睡 第二课讲匹配相关,感觉这篇文章涵盖了大部分内容 ...

  2. python3.5.2库getpass

    getpass的功能是:允许隐式的输入字符串 import getpass _username='vigossr' _password='haha' username=input('username: ...

  3. 51nod1007-正整数分组(dp)

    题目 :http://www.51nod.com/Challenge/Problem.html#!#problemId=1007 大意就是给一堆正整数,分成和最接近的两组. 最开始没什么想法,2^n尝 ...

  4. [微信跳转链接]之WAP浏览器跳转微信指定页面,微信跳转链接

    今天在一个小说的链接上看到最后,点击一个[继续阅读按钮]居然唤起微信APP,在微信内打开一个二维码,长按识别后可关注微信公众号, 后来分析出:weixin://dl/business/?ticket= ...

  5. Vue 随机分配的打扫卫生H5 :打扫让我快乐

    情况是这样子的,每周四是我们小组打扫卫生,一共有四件活,7个人分配. 活分别是 : 扫地 拖地 倒垃圾 擦桌子 人分别是: '军', '春', '龙', '东', '贤', '磊','卿' 但是,每次 ...

  6. Hive管理表,外部表及外部分区表的深入探讨

    Hive管理表,也叫内部表.Hive控制着管理表的整个生命周期,默认情况下Hive管理表的数据存放在hive的主目录:/user/hive/warehouse/下,并且当我们删除一张表时,这张表的数据 ...

  7. 浏览器url地址殊字符转义编码

    网址URL中特殊字符转义编码字符    -    URL编码值 空格    -    %20"          -    %22#         -    %23%        -   ...

  8. Golang实现requests库

    Golang实现requests库 简单的封装下,方便使用,像python的requests库一样. Github地址 Github 支持 GET.POST.PUT.DELETE applicatio ...

  9. DOM-节点概念-属性

    1.节点的概念 页面中的所有内容,包括标签,属性,文本(文字,空格,回车,换行等),也就是说页面的所有内容都可以叫做节点. 2.节点相关的属性 2.1.节点分类 **标签节点:**比如 div 标签, ...

  10. 关于css中为什么要设置html和body的高度?

    1.在怪异模式下,也就是网页的头部不写DOCTYPE的时候,body作为根元素,设置高度为百分百的时候.可以是页面的高度和浏览高度相同,在标准模式下也就是有DOCTYPE的时候,html才是根元素这时 ...