Eureka是什么

eureka是springcloud Netflix微服务套件中的一部分,是一个服务注册和发现模块。
eureka包含了服务器端和客户端组件。服务器端,也被称作是服务注册中心,用于提供服务的注册于发现。Eureka支持高可用配置,当集群中有分片出现故障时,Eureka会转入自动保护模式,它允许分片故障期间继续提供服务的发现和注册,当故障分片恢复正常时,集群中其他分片会把他们的状态再次同步回来。

客户端组件包含服务消费者与服务生产者。在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性发送心跳来更新它的服务租约。同时也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性刷新服务状态。

Eureka好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。
同时,服务提供方与Eureka之间通过“心跳”机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。
这就实现了服务的自动注册、发现、状态监控。

Eureka原理图


• Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
• 提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
• 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
• 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态

Eureka详解

3.1 Eureka架构中的三个核心角色:

• 服务注册中心
Eureka的服务端应用,提供服务注册和发现功能
• 服务提供者
提供服务的应用,可以是SpringBoot应用,也可以是其他任意技术实现,只要对外提供的Rest风格服务即可。
• 服务消费者
消费应用从注册中心获取服务列表,从而得知每个服务方的信息,知道去哪里调用服务方。

3.2 高可用的Eureka Server

服务同步
多个Eureka Server之间也会相互注册为服务,当服务提供者注册到Eureka Server集群中的某个节点时,该节点会把服务的信息同步给集群中的每个节点,从而实现数据同步。因此,无论客户端访问到Eureka Server集群中的任意一个节点,都可以获取到完整的服务列表信息。

3.3 服务提供者

服务续约
在注册服务完成以后,服务提供者会位置一个心跳(定时向EurekaServer发起Rest请求),告诉EurekaServer:“我还活着”。这个我们成为服务的续约(renew)

有两个重要参数可以修改服务续约的行为:

eureka:instance:lease-renewal-interval-in-seconds: 30lease-expiration-duration-in-seconds: 90
• lease-renewal-interval-in-seconds:服务续约(renew)的间隔,默认为30秒
• lease-expiration-duration-in-seconds:服务失效时间,默认值90秒

也就是说,默认情况下每隔30秒服务会向注册中心发送一次心跳,证明自己还活着。如果超过90秒没有发送心跳,EurekaServer就会认为该服务宕机,会从服务列表中移除,这两个值在生产环境不要修改,默认即可。

3.4 服务消费者

获取服务列表
当服务消费者启动时,会检测 eureka.client.fetch-registry=true 参数的值,如果为true,则会拉取Eureka Server服务的列表只读备份,然后缓存在本地。并且每隔30秒会重新获取并更新数据。
我们可以通过下面的参数来修改:

eureka:client:registry-fetch-interval-seconds: 5

生产环境中,我们不需要修改这个值。

4 Eureka 集群原理说明

5 Eureka自我保护机制

5.1 概述

保护模式主要用于一组客户端盒Eureka Server 之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

如图这段话说明进入了自我保护模式。

5.2 为什么会有自我保护机制

为了使EurekaClient可以正常运行,但是与EurekaServer网络不通情况下,EurekaServer不会立刻将EurekaClient服务剔除。

5.3 什么是自我保护机制

如图:

默认情况下,EurekaClient定时向EurekaServer端发送心跳包。如果Eureka在Server端在一定时间内(默认90秒)没有收到EurekaClient发送心跳包,便会直接从服务注册列表剔除该服务,但是在段时间啊(90秒中)内丢失了大量的服务实例心跳,这时候EurekaServer会开启自我保护机制,不会剔除该服务(该现象可能出现在如果网络不通,但是EurekaClient未出现宕机的时候。此时如果换做别的注册中心,如果一定时间内没有收到心跳会将剔除该服务,这样就出现了严重失误,因为客户端还能正常发送心跳,只是网络延迟问题,而保护机制是为了解决此问题而产生的)。

在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。

它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。
综上,自我保护模式是一种应对网络以长的安全保护措施。它的架构哲学就是宁可同时保留所有微服务(健康的和不健康的)也不盲目注销任何可能健康的微服务。使用自我保护模式,可以让Eureka集群更加健壮、稳定。

【Spring Cloud】注册中心-Euraka相关推荐

  1. Spring Cloud - 注册中心

    什么是微服务注册中心? 在上一篇文章<Spring Cloud介绍>中,提到有一句话:微服务框架可以为这些微小的服务提供统一的管理和必要的工具,使它们更易于开发和维护. "统一的 ...

  2. Spring Cloud: 注册中心Consul使用

    什么是Consul Consul是HashiCorp公司推出的开源工具,提供了分布式系统的服务注册和发现.配置等功能.与其他分布式服务注册与发现的方案相比,Consul的方案更"一站式&qu ...

  3. JAVA Spring Cloud 注册中心 Eureka 相关配置

    转载至  https://www.cnblogs.com/fangfuhai/p/7070325.html Eureka客户端配置       1.RegistryFetchIntervalSecon ...

  4. Spring Cloud 注册中心在tomcat中部署

    前言 最近刚刚接触spring boot 和spring cloud,只知道可以直接通过main方法启动服务,一直不会将项目部署到tomcat中,今天学了一下,做个记录备忘. 步骤 pom文件 在po ...

  5. spring cloud 配置中心

    1. spring cloud配置中心server 1.1 创建git仓库 首先在github上搭建一个存储配置中心的仓库,需要创建两个分支,一个是master,一个是dev分支.自己学习可以用公开库 ...

  6. eureka多台注册中心_spring cloud注册中心之Eureka

    什么是注册中心? 随着微服务的盛行,越来越多的应用,开始拆成一个一个的服务,服务之间相互依赖,那么内部的服务是怎么相互调用的.例如:服务A部署在3个服务器上,3个实例有不同的ip地址.然后服务B依赖服 ...

  7. Spring Cloud配置中心获取不到最新配置信息的问题

    本篇源于Spring Cloud Config的一个问题,但这个问题并非所有人都会遇到.如果您遇到了,那必须得看看这篇,如果没有遇到您也应该看看,防患于未然! 问题描述 之前有朋友提出Spring C ...

  8. Spring Cloud 配置中心客户端读取配置

    微服务连接配置中心来实现外部配置的读取. 引入依赖 <dependencies><dependency><groupId>org.springframework.c ...

  9. Spring Cloud 配置中心乱码解决

    1. springboot 2.X 版本 cloud的配置中心中文乱码解决 乱码原因: spring 默认使用org.springframework.boot.env.PropertiesProper ...

最新文章

  1. [改善Java代码]线程优先级只使用三个等级
  2. 你的微服务敢独立交付么?
  3. hdu4825 字典树 + 贪心
  4. json文件读取并转换成为字典python
  5. 当前只读状态:是_Raft 只读(read-only)优化
  6. 抗炎饮食与混合坚果粉
  7. 应用系统日志采集解决方案
  8. python中类变量的访问方式_在Python中,如何访问类方法中的“静态”类变量
  9. 我们分析了全美Top Business Analyst 和 Data Science专业,最后给你总结了这几点
  10. docker搞个wordpress
  11. SpringCloud工作笔记0104---SpringCloud和SpringCloudAlibaba的区别
  12. 栈的出入js实现_js 实现栈的结构
  13. 山西特岗考试计算机专业真题,山西特岗教师招聘考试模拟题_信息技术选择题...
  14. python 中文乱码
  15. 设置页数自增页眉/页脚——Word中page域代码的使用
  16. Tomcat创建Servlet容器
  17. 基于Bilibili开源flv.js拉流
  18. 结构化设计(实验二)
  19. 电子设计教程3:按键滤波电路
  20. 多台路由器,不同网段的设备之间如何互访?

热门文章

  1. php : 工厂类演示
  2. bootstrap 专注前端开发
  3. 【SoftwareTestingHomework2】--3013218086--
  4. 初学JAVA随记——构造方法
  5. ubantu下面U盘无法识别
  6. PJblog跨站漏洞利用及修补
  7. python安装pip之后 pip命令报错解决方法
  8. 3张报表搞定财务分析
  9. php主动推送弹幕_源起网-织梦发布文档主动百度推送熊掌推送批量推送
  10. matlab 写入 MYSQL_阿里开源MySQL中间件Canal快速入门