Spring Cloud Eureka(全面解析) 大白话

目录
  • Eureka大白话解析
    • 1.Eureka介绍
    • 2.Eureka的工作细节
      • 2.1EurekaServer
      • 2.2EurekaClient
  • Eureka分区策略
    • 第一步:背景和概念介绍
    • 第二步:相关参数介绍

Eureka大白话解析

笔记补录:

1.Eureka 介绍

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

服务治理是微服务架构中必不可少的一部分,阿里开源的 Dubbo 框架就是针对服务治理的。服务治理必须要有一个注册中心,除了用 Eureka 作为注册中心外,我们还可以使用 Consul、Etcd、Zookeeper 等来作为服务的注册中心。

Eureka 由两部分组成:服务端和客户端,服务端就是注册中心,用来接收其它的服务注册,客户端是一个java客户端,用来注册,并可以实现负载均衡等功能。 Eureka 的搭建和集群请点击查看这篇文章。

Eureka图解如下:

从图中可以看出Eureka有三个角色:

  • Eureka Server:注册中心
  • Eureka Provider:服务提供者
  • Eureka Consumer:服务消费者

注册中心就是管理所有服务的信息和状态,12306 就好比一个注册中心,顾客就好比调用的客户端,当他们需要坐火车时,就会在 12306 网站上查询余票,有票就可以购买,然后获取火车的车次、时间等,最后出发。程序也是一样,当你需要调用某一个服务的时候,你会先去 Eureka 中去拉取服务列表,查看你调用的服务在不在其中,在的话就拿到服务地址、端口等信息,然后调用。

注册中心带来的好处就是,不需要知道有多少提供方,你只需要关注注册中心即可,就像顾客不必关心有多少火车在开行,只需要去 12306 网站上看有没有票就可以了。

为什么 Eureka 比 Zookeeper 更适合作为注册中心呢?主要是因为 Eureka 是基于 AP 原则构建的,而 ZooKeeper 是基于 CP 原则构建的。在分布式系统领域有个著名的 CAP 定理,即 C 为数据一致性;A 为服务可用性;P 为服务对网络分区故障的容错性。这三个特性在任何分布式系统中都不能同时满足,最多同时满足两个。Zookeeper 有一个 Leader,而且在这个 Leader 无法使用的时候通过 Paxos(ZAB)算法选举出一个新的 Leader。这个 Leader 的任务就是保证写数据的时候只向这个 Leader 写入,Leader 会同步信息到其他节点。通过这个操作就可以保证数据的一致性。

想要保证 AP 就要用 Eureka,想要保证 CP 就要用 Zookeeper。

Dubbo 中大部分都是基于 Zookeeper 作为注册中心的。Spring Cloud 中当然首选 Eureka。

2. Eureka 的工作细节

2.1 Eureka Server

Eureka Server主要对外提供了三个功能:

  • 服务注册,所有的服务都注册到Eureka Server上面来
  • 提供注册表,注册表就是所有注册上来服务的一个列表,Eureka Client在调用服务时,需要获取这个注册表,一般来说,这个注册表会缓存下来,如果缓存失效,则直接获取最新的注册表
  • 同步状态,Eureka Client 通过注册、心跳等机制,和Eureka Server同步当前客户端的状态

2.2 Eureka Client

Eureka Client 主要是来简化每一个服务和Eureka Server 之间的交互。Eureka Client 会自动拉取、更新以及缓存Eureka Server 中的信息,这样,即便Eureka Server 所有节点都宕机,Eureka Client 依然能够获取到想要调服务的地址(但是地址可能不准确)。

2.2.1 服务注册

服务提供者将自己注册到服务注册中心(Eureka Server),需要注意,所渭的服务提供者,只是一个业务上的划分,本质上他就是一个 Eureka Client 。当 Eureka Client 向 Eureka Server 注册时,他需要提供自身的一些元数据信息,例如IP地址、端囗、名称、运行状态等等。

2.2.2 服务续约

Eureka Client 注册到 Eureka Server 上之后,事情还没有结束,刚刚开始而已。注册成功后,默认情况下,Eureka Client 每隔30秒就要向 Eureka Server 发送一条心跳消息,来告诉Eureka Server 我还在运行。如果 Eureka Server 连续90秒有沿有收到Eureka Client 的续约消息(连续三次没发送),它会认为Eureka Client已经线了,会将掉线的Eureka Client从当前的服务注册列表中剔除。

服务续约,有两个相关的属性(一般不建议修改):

# 表示服务的续约时间,默认是30秒
eureka.instance.lease-renewal-intetval-in-seconds=30
# 服务失效时间,默认是90秒
eureka.instance.lease-expiration-duration-in-seconds=90

2.2.3 服务下线

当 Eureka Client 下线时,它会主动发送一条消息,告诉Eureka Server,我下线了。

2.2.4 获取注册表信息

Eureka Client 从Eureka Server 上获取服务的注册信息,将其缓存在本地。本地客户端在需要调用远程服务时,会从该信息中查找远程服务所对应的IP地址、端囗等信息。Eureka Client 上缓存的服务注册信息会定期更新(30秒),如果 Eureka Server 返回的注册表信息与本地缓存的注册表信息不同的话,Eureka Client 会自动处理。

这里,也涉及至两个属性,一个是是否允许获取注册表信息:

eureka.client.fetch-registry=true

Eureka Client 上缓存的服务注册信息,定期更新的时间间隔,默认30秒:

eureka.client.registry-fetch-interval-seconds=30

Eureka分区策略

第一步:背景和概念介绍

背景:用户量比较大或者用户地理位置分布范围很广的项目,一般都会有多个机房。这个时候如果上线springCloud服务的话,我们希望一个机房内的服务优先调用同一个机房内的服务,当同一个机房的服务不可用的时候,再去调用其它机房的服务,以达到减少延时的作用。

概念:region:能够简单理解为地理上的分区。好比亚洲地区,或者华北地区,再或者北京地区等等,没有具体大小的限制,根据项目具体的状况,能够自行划分region。 zone:能够简单理解为 region 内的具体机房,好比说 region 划分为华北地区,而后华北地区有两个机房,就能够在此 region 之下划分出 zone1、zone2 两个 zone eureka 也借用了 region 和 zone 的概念架构

如图所示,有一个 region:华北地区,下面有两个机房,机房A 和机房Burl

  • 每一个机房内有一个 Eureka Server 集群 和两个服务提供者 ServiceA 和 ServerB
  • 如今假设 serverA 须要调用 ServerB 服务,按照就近原则,serverA 会优先调用同一个 zone 内的 ServiceB,当 ServiceB 不可用时,才会去调用另外一个 zone 内的 ServiceBcode

第二步:相关参数介绍

服务注册相关:

eureka: client: # 尽可能向同一区域的 eureka 注册,默认为true prefer-same-zone-eureka: true #地区 region: huabei availability-zones: huabei: zone-1,zone-2 service-url: zone-1: http://Eureka的Ip地址:8761/eureka/ zone-2: http://Eureka的Ip地址:8761/eureka/

当存在多个注册中心时,选择逻辑为cdn

  • 若是 prefer-same-zone-eureka 为 false,按照 service-url 下的 list 取第一个注册中心来注册,并和其维持心跳检测,再也不向list内的其它的注册中心注册和维持心跳。server只有在第一个注册失败的状况下,才会依次向其它的注册中心注册,总共重试3次,若是3个service-url都没有注册成功,则注册失败。blog

注册失败后每隔一个心跳时间,会再次尝试。it

  • 若是 prefer-same-zone-eureka 为true,先经过 region 取 availability-zones 内的第一个zone,而后经过这个zone取 service-url 下的list,并向list内的第一个注册中心进行注册和维持心跳,再也不向list内的其它的注册中心注册和维持心跳。只有在第一个注册失败的状况下,才会依次向其它的注册中心注册,总共重试3次,若是3个service-url都没有注册成功,则注册失败。注册失败后每隔一个心跳时间,会再次尝试。

为了保证服务注册到同一个 zone 的注册中心,必定要注意 availability-zones 的顺序,必须把同一 zone 写在最前面

eureka: instance: # 服务和注册中心的心跳间隔时间,默认为30s lease-renewal-interval-in-seconds: 30 # 服务和注册中心的心跳超时时间,默认为90s lease-expiration-duration-in-seconds: 90 metadata-map: # 当前服务所属的 zone zone: zone1

  • 服务消费者和服务提供者分别属于哪一个zone,均是经过 eureka.instance.metadata-map.zone 来断定的。
  • 服务消费者会先经过 ribbon 去注册中心拉取一份服务提供者的列表,而后经过 eureka.instance.metadata-map.zone 指定的 zone 进行过滤,过滤以后若是同一个 zone 内的服务提供者有多个实例,则会轮流调用。
  • 只有在同一个 zone 内的全部服务提供者都不可用时,才会调用其它zone内的服务提供者。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决springcloud-eureka注册时的ip问题

    目录 springcloud-eureka注册,ip问题 手动指定instance-id 服务调用时外网ip使用 Eureka注册服务后,ip展示不正确,调用失败 问题描述 在eureka上展示出来的效果如下 不废话,核心配置 另外,如果这一行还不够,再加几行 springcloud-eureka注册,ip问题 在微服务注册到eureka时,在开启ip显示时,有时候会出现localhost的情况 手动指定instance-id 在配置文件中 eureka.instance.prefer-ip-a

  • SpringCloud实现Eureka服务注册与发现

    GitHub地址:https://github.com/yudiandemingzi/spring-cloud-study 一.Eureka概述 1.Eureka特点 (1) Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. (2) Eureka 主管服务注册与发现,在微服务中,以后了这两者,只需要使用服务的标识符(==就是那个在每个服务的yml文件中取得服务名称==), 就可以访问到服务,不需要修改服务调用的配置文件. (3) Eureka遵循AP原则(

  • Spring Cloud Eureka: 指定Zone方式

    目录 Eureka如何指定Zone Eureka中的region和Zone 概念 分区服务架构图 Eureka中Regin和Zone的相关配置 服务注册相关 服务调用 Eureka如何指定Zone 有坑. 先说结论:如果想给当前服务指定属于哪个zone, 使用 eureka.instance.metadata-map.zone=myzone 属性是无效的,而应该使用: eureka.client.availabilityZones.beijing=myzone # beijing是region

  • Spring Cloud Eureka 搭建 & 集群方式

    目录 1.Eureka搭建 2.Eureka集群 2.1Eureka集群原理 关于Eureka的详细介绍已经在上篇文章通俗的讲了. Eureka 本身是使用java 来开发的,Spring Cloud 使用 Spring Boot 技术对 Eureka进行了封装,所以在Spring Cloud中使用Eureka非常方便,只需要引入spring-cloud-starter-netflix-eureka-server依赖即可,然后启动即可. 1.Eureka 搭建 创建一个普通的Spring Boo

  • spring cloud之eureka高可用集群和服务分区解析

    目录 准备 搭建 验证 解释 准备 1.首先,在C:\WINDOWS\System32\drivers\etc\hosts文件里面添加一下映射,如果不添加也没关系,只是如果是单机环境,在eureka首页中的replicas那一项看到的其它注册中心都是localhost,我这里为了方便理解就添加了映射. 2.为了方便理解,我这里是单个application用一个module,没有采用通过多个profile开启多个application的做法,而且这样做一会儿验证起来也比较清晰. 3.必要的一些概念

  • SpringCloud服务注册和发现组件Eureka

    本篇文章,我们来讲解springcloud的服务注册和发现组件,上一章节我们讲解了如何搭建springcloud的多模块项目,已经新建了springcloud-eureka-server,springcloud-eureka-client两个模块,本章节就在这基础上直接使用. 想要了解的请参考:一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目 一.Eureka简介: 1.1 什么是eureka Eureka是一个基于REST的服务,主要用于AWS云中

  • Spring Cloud Eureka(全面解析) 大白话

    目录 Eureka大白话解析 1.Eureka介绍 2.Eureka的工作细节 2.1EurekaServer 2.2EurekaClient Eureka分区策略 第一步:背景和概念介绍 第二步:相关参数介绍 Eureka大白话解析 笔记补录: 1.Eureka 介绍 Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责实现微服务架构中的服务治理功能. 服务治理是微服务架构中必不可少

  • SpringCloud之服务注册与发现Spring Cloud Eureka实例代码

    一.Spring Cloud简介 Spring Cloud是一个基千SpringBoot实现的微服务架构开发 工具.它为微服务架构中涉及的 配置管理.服务治理. 断路器. 智能路由.微代理. 控制总线. 全局锁. 决策竞选.分布式会话和集群状态管理等操作提供了一种简单的开发方式. Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品,还可能会新增),如下所述. Spring Cloud Config: 配置管理工具.Spring Cloud Netflix: 核心组件

  • Spring cloud Eureka注册中心搭建的方法

    前提  系统安装jdk1.8及以上,配置好maven的ide(这里用idea进行演示,maven版本3.5,配置阿里云源) 项目搭建 新建一个maven项目,创建最简单的那种就好,项目名这里为EurekaServerDemo,包名什么的随意,项目打包方式为jar, 也可以使用spring官方的生成器,官方的生成器会创建基础的springboot项目结构.这里为了演示,都可以 修改pom文件,参考如下,版本推荐和本文相同,springboot和cloud版本的坑很多 <?xml version=&qu

  • spring cloud eureka微服务之间的调用详解

    微服务之间的调用如何实现 首先 你需要两个或以上的微服务模块 至于怎么创建可以参考我上一篇博客 spring cloud eureka注册中心 如果想在页面显示 那么需要先加上 compile 'org.springframework.boot:spring-boot-starter-thymeleaf' 这个thymeleaf依赖 springboot推荐使用thymeleaf模板 它的最大好处就是原型即是模板 后缀是html html文件 需要放在resources/templates文件夹

  • Spring Cloud Eureka服务治理的实现

    什么是Spring Cloud Eureka Spring Cloud Eureka 是 Spring Cloud 中的一个组件,它是基于 Netflix Eureka 做了二次封装,主要是负责完成微服务框架中服务治理的功能.Spring Cloud通过为 Eureka 增加了 Spring Boot 风格的自动化配置,我们只需要通过简单的引用依赖和注解就能让 Spring Boot 够将的微服务应用轻松的与 Eureka 服务治理体系进行整合. 服务治理 服务治理是微服务框架中最为核心和基础的

  • Spring Cloud Eureka 注册与发现操作步骤详解

    在搭建Spring Cloud Eureka环境前先要了解整个架构的组成,常用的基础模式如下图: 服务提供者:将springboot服务编写好以后,通过配置注册中心地址方式注册,提供给消费者使用. 注册中心:服务的中间桥梁,服务提供者将服务注册.服务消费者可以通过注册信息调用需要使用的服务. 服务消费者:通过规定的调用方式,读取注册中心的注册信息,调用相应的服务. 根据后续的服务复杂度进化以后,可以看到服务提供者也可以是服务消费者,服务消费者也可以是服务提供者.根据不同的业务情况是可以互相调用的

  • spring cloud eureka 服务启动失败的原因分析及解决方法

    目录 环境: 错误log 环境: <spring-boot-version>2.3.5.RELEASE</spring-boot-version> <spring-cloud-version>Hoxton.SR8</spring-cloud-version> 错误log Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerEx

  • Spring Cloud Eureka基础应用及原理

    目录 Eureka简介 搭建Eureka服务注册中心 搭建Eureka服务提供者 搭建Eureka服务调用者 Eureka服务注册和发现 Eureka简介 Eureka这个词来源于古希腊语,意为“我找到了!我发现了!”.据传,阿基米德在洗澡时发现浮力原理,高兴得来不及穿上衣服,跑到街上大喊:“Eureka! ”.在Netflix中,Eureka是一个RESTful风格的服务注册与发现的基础服务组件.Eureka由两部分组成,一个是Eureka Server,提供服务注册和发现功能,即我们上面所说

  • Spring Cloud Eureka服务注册中心入门流程分析

    目录 项目搭建 客户端注册 聚合层处理 Eureka架构 集群搭建 多区域配置 自我保护开关 心跳机制 Eureka实例信息存储 项目地址 在学习Ribbon使用的时候,我们是直接在配置文件中写死服务地址的,是不是特别的不方便?我们是不是需要一个统一的地方来维护这些服务,以及这些配置发生变化后,我们不需要重启服务. 所以这个时候需要引出一个新组件——eureka. 它主要可以帮助我们实现如下功能: 地址的统一维护服务提供者的动态上下线通知 服务提供者可以将服务注册到eureka上,eureka通

  • 详解Spring Cloud Eureka多网卡配置总结

    在linux主机部署Eureka高可用方案的时候,发现注册到服务中心的服务IP是随机的,由于主机的网卡是多个,随机的IP并不是自己想要的,上网查了一些资料,总结如下: 1 忽略网卡:spring.cloud.inetutils.ignored-interfaces #忽略eth0, 支持正则表达式 spring.cloud.inetutils.ignored-interfaces[0]=eth0 2 指定IP:spring.cloud.inetutils.preferred-networks #

随机推荐