Eureka是干什么的

  • Eureka是干什么的?
    • 注册中心
      • 透明化路由
      • Eureka 基础架构
        • Eureka 交互流程及原理
        • 简单实用摘要说明
        • Eureka的元数据
        • Eureka客户端详解
        • ⾃我保护机制
      • 源码
        • 自动装配实现

Eureka是干什么的?

前言:之所以写这篇文章,第一个原因是刚入职的这家新公司,里边使用到了这个组件,但是却没有真正的推广开,还在摸索探讨阶段,自己之前学习springCloud的时候,有学习过相关内容,但是没有去总结一下,以至于现在你问Eureka是干嘛的,除了知道这个是个注册中心,其他的好像都是空白了,这样的感觉不太好。。。

注册中心

前言里边提到过Eureka是用于注册中心的,那么注册中心的作用又主要是干什么的?注册中心的本质是为了接耦服务提供者和服务消费者

透明化路由

分布式微服务架构中,服务注册中⼼⽤于存储服务提供者地址信息、服务发布相关的属性信息,消费者通过主动查询和被动通知的⽅式获取服务提供者的地址信息, ⽽不再需要通过硬编码⽅式得到提供者的地址信息。消费者只需要知道当前系统发布了那些服务,⽽不需要知道服务具体存在于什么位置,这就是透明化路由。

Eureka 基础架构

Eureka 交互流程及原理

下图是官⽹描述的⼀个架构图

Eureka 包含两个组件:Eureka Server 和 Eureka Client,Eureka Client是⼀个 Java客户端,⽤于简化与Eureka Server的交互;Eureka Server提供服务发现的 能⼒,各个微服务启动时,会通过Eureka Client向Eureka Server 进⾏注册⾃⼰ 的信息(例如⽹络信息),Eureka Server会存储该服务的信息;

流程说明

  • 图中us-east-1c、us-east-1d,us-east-1e代表不同的区也就是不同的机房
  • 图中每⼀个Eureka Server都是⼀个集群。
  • 图中Application Service作为服务提供者向Eureka Server中注册服务, Eureka Server接受到注册事件会在集群和分区中进⾏数据同步,Application Client作为消费端(服务消费者)可以从Eureka Server中获取到服务注册信 息,进⾏服务调⽤。
  • 微服务启动后,会周期性地向Eureka Server发送⼼跳(默认周期为30秒) 以续约⾃⼰的信息
  • Eureka Server在⼀定时间内没有接收到某个微服务节点的⼼跳,Eureka Server将会注销该微服务节点(默认90秒)
  • 每个Eureka Server同时也是Eureka Client,多个Eureka Server之间通过复制的⽅式完成服务注册列表的同步
  • Eureka Client会缓存Eureka Server中的信息。即使所有的Eureka Server节点都宕掉,服务消费者依然可以使⽤缓存中的信息找到服务提供者

Eureka通过⼼跳检测、健康检查和客户端缓存等机制,提⾼系统的灵活性、可伸缩性和可⽤性

简单实用摘要说明

服务端:@EnableEurekaServer // 声明本项⽬是⼀个Eureka服务

客户端:@EnableDiscoveryClient // 开启服务发现

    @Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("/check/{userId}")public Integer findOpenState(@PathVariable Long userId) {// TODO 从Eureka Server中获取我们关注的那个服务的实例信息以及接口信息// 1、从 Eureka Server中获取lagou-service-resume服务的实例信息(使用客户端对象做这件事)List<ServiceInstance> instances = discoveryClient.getInstances("yuan-service-resume");// 2、如果有多个实例,选择一个使用(负载均衡的过程)ServiceInstance serviceInstance = instances.get(0);// 3、从元数据信息获取host portString host = serviceInstance.getHost();int port = serviceInstance.getPort();String url = "http://" + host + ":" + port + "/resume/openstate/" + userId;System.out.println("===============>>>从EurekaServer集群获取服务实例拼接的url:" + url);// 调用远程服务—> 微服务接口  RestTemplate  -> JdbcTempate// httpclient封装好多内容进行远程调用Integer forObject = restTemplate.getForObject(url, Integer.class);return forObject;}

Eureka的元数据

标准元数据:主机名、IP地址、端⼝号等信息,这些信息都会被发布在服务注册表 中,⽤于服务之间的调⽤。 ⾃定义元数据:可以使⽤eureka.instance.metadata-map配置,符合KEY/VALUE的 存储格式。这 些元数据可以在远程客户端中访问。debug一下ServiceInstance数据就知道了;

# 自定义Eureka元数据metadata-map:cluster: cl1region: rn1

Eureka客户端详解

服务提供者(也是Eureka客户端)要向EurekaServer注册服务,并完成服务续约等⼯作

服务注册详解(服务提供者)

1)当我们导⼊了eureka-client依赖坐标,配置Eureka服务注册中⼼地址

2)服务在启动时会向注册中⼼发起注册请求,携带服务元数据信息

3)Eureka注册中⼼会把服务的信息保存在Map中。

服务续约详解(服务提供者)

服务每隔30秒会向注册中⼼续约(⼼跳)⼀次(也称为报活),如果没有续约,租约在90秒后到期,然后服务会被失效。每隔30秒的续约操作我们称之为⼼跳检测。

往往不需要我们调整这两个配置:

#向Eureka服务中⼼集群注册服务 eureka:
instance:# 租约续约间隔时间,默认30秒 lease-renewal-interval-in-seconds: 30 # 租约到期,服务时效时间,默认值90秒,服务超过90秒没有发⽣⼼跳, EurekaServer会将服务从列表移除 lease-expiration-duration-in-seconds: 90

获取服务列表详解(服务消费者)

每隔30秒服务会从注册中⼼中拉取⼀份服务列表,这个时间可以通过配置修改。往往不需要我们调整

#向Eureka服务中⼼集群注册服务
eureka:client:# 每隔多久拉取⼀次服务列表 registry-fetch-interval-seconds: 30

1)服务消费者启动时,从 EurekaServer服务列表获取只读备份,缓存到本地

2)每隔30秒,会重新获取并更新数据

3)每隔30秒的时间可以通过配置eureka.client.registry-fetch-interval-seconds修改

⾃我保护机制

服务提供者 —> 注册中⼼

定期的续约(服务提供者和注册中⼼通信),假如服务提供者和注册中⼼之间的⽹络有点问题,不代表服务提供者不可⽤,不代表服务消费者⽆法访问服务提供者

如果在15分钟内超过85%的客户端节点都没有正常的⼼跳,那么Eureka就认为客户端与注册中⼼出现了⽹络故障,Eureka Server⾃动进⼊⾃我保护机制

为什么会有⾃我保护机制?

默认情况下,如果Eureka Server在⼀定时间内(默认90秒)没有接收到某个微服务实例的⼼跳,Eureka Server将会移除该实例。但是当⽹络分区故障发⽣时,微服务 与Eureka Server之间⽆法正常通信,⽽微服务本身是正常运⾏的,此时不应该移除 这个微服务,所以引⼊了⾃我保护机制。

当处于⾃我保护模式时

1)不会剔除任何服务实例(可能是服务提供者和EurekaServer之间⽹络问题),保证了⼤多数服务依然可⽤

2)Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可⽤,当⽹络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。

3)在Eureka Server⼯程中通过eureka.server.enable-self-preservation配置可⽤关停⾃我保护,默认值是打开

eureka:server:enable-self-preservation: false # 关闭⾃我保护模式(缺省为打开)

源码

自动装配实现

Eureka Server启动过程–springboot的拔插式实现方式

  • 观察eureka-server的jar包,发现在META-INF下⾯有配置⽂件spring.factories

    springboot应⽤启动时会加载EurekaServerAutoConfiguration⾃动配置类

  • EurekaServerAutoConfiguration类

    ⾸先观察类头分析

    图中的 1)需要有⼀个marker bean,才能装配Eureka Server,那么这个marker其实是由@EnableEurekaServer注解决定的。

    也就是说只有添加了@EnableEurekaServer注解,才会有后续的动作,这是成为⼀个EurekaServer的前提。(springboot的拔插式实现方式)。

EurekaClient注册服务

启动过程:Eureka客户端在启动时也会装载很多配置类,我们通过spring-cloud-

netflix-eureka-client-2.1.0.RELEASE.jar下的spring.factories⽂件可以看到加载的配置类

引⼊jar就会被⾃动装配,分析EurekaClientAutoConfiguration类头

如果不想作为客户端,可以设置eureka.client.enabled=false

Eureka是干什么的?相关推荐

  1. SpringCloud(二) 服务注册与发现Eureka

    1.eureka是干什么的? 上篇说了,微服务之间需要互相之间通信,那么通信就需要各种网络信息,我们可以通过使用硬编码的方式来进行通信,但是这种方式显然不合适,不可能说一个微服务的地址发生变动,那么整 ...

  2. 微服务精通之Eureka原理解析

    前言 随着互联网技术的发展,系统用户量的增长,很多系统都采用了分布式的方式进行部署.这个固然大大提高了系统的性能和可用性,但是分布式部署导致各种服务数量大增,这给我们进行服务治理和运维带来了困扰. 一 ...

  3. springcloud 之服务注册与发现Eureka Server

    我们在做分布式服务的时候总免不了听到"注册中心"这些词,那时候的我们总感觉这些东西很神秘很高大上,其实等我们正在去了解的时候发现其实他就是一个用来登记服务实例的一个容器而已,例如学 ...

  4. Spring Cloud微服务系列-Eureka Client源码解析(一)

    导语   Eureka Client 是为了简化开发人员的开发工作,将很多的Eureka Server交互的工作进行了封装,在使用的时候自动完成,在应用的不同阶段来完成不同的功能实现.下面就来了解一下 ...

  5. eBPF 是用来干什么的?

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

  6. SpringCloud Eureka Client 源码

    这里主要学习一下EurekaClient,通过上一篇学习了解到,Client的功能主要有这么几个: 服务注册 服务续约 服务发现 服务下线 维护集群节点(未写完) 而这些功能主要由netflix eu ...

  7. 你还不知道Spring cloud是干什么的,那你就out了

    客套的话不多说了,直接上干货 首先介绍下Spring cloud是干什么的: Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开 ...

  8. 使用feign调用注解在eureka上的微服务,简单学会微服务

    使用feign调用注解在eureka上的微服务. 首先,确保所有服务(调用方与被调用方)都被注册在同一个eureka服务上. 1. 在调用方添加依赖(万事第一步,加依赖) <dependency ...

  9. 【微服务架构】SpringCloud之Eureka入门篇

    什么是Eureka 官方的介绍在这里Eureka wiki.Eureka是Netflix开源的一个RESTful服务,主要用于服务的注册发现.Eureka由两个组件组成:Eureka服务器和Eurek ...

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

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

最新文章

  1. Git,Github和Gitlab简介和使用方法
  2. guava_使用Google Guava Cache进行本地缓存
  3. 配置内网邮件和外网邮件互发
  4. 使用消息队列实现分布式事务-公认较为理想的分布式事务解决方案(转)
  5. Vim高手,从来不用鼠标
  6. 【Pandas】qcut和cut的区别
  7. matlab 工具 安装包下载地址,安装 | MATLAB2018a (64位) 安装教程及安装包下载链接...
  8. 《Android游戏开发详解》一导读
  9. flex vue 垂直居中居上_推荐几种在移动端实现垂直居中的方法
  10. JCG新年献礼,JHR-N825R给力上市
  11. 普通用户竟这样执行xp_cmdshell存储过程!
  12. 2012年6月份第4周51Aspx源码发布详情
  13. 【oneday_onepage】—— 日常用语
  14. 手机奥维地图在测量中的应用
  15. c php embed,使用PHP Embed SAPI实现Opcodes查看器
  16. 分类流控qdisc之htb
  17. 首页大广告展示——淘淘商城(十六)
  18. 未来计算机畅想英语作文,畅想未来的生活life in the future
  19. Attempted to lock an already-locked dir异常解决方法
  20. 【IEEE T-PAMI 2020直播预告】完备性多模态融合技术

热门文章

  1. 第三方SSD问题引起电脑频繁重启问题IONVMeController.cpp:5499
  2. 各种门锁的内部结构图_有没有这种执手门锁的内部结构图?
  3. 当铺掌柜自制Typecho主题Pvcard主题
  4. 高等代数 多项式环(第7章)5* 结式与域
  5. 七参数空间直角坐标系坐标转换
  6. SPSS中的数据分析—描述性统计分析【2】
  7. android设置高度比例,Android View设置宽高比
  8. 谷歌浏览器如何自动运行flash
  9. MySQL 日期时间加减
  10. 芯片查询选型网址汇总