Eureka实现原理和配置

参考博客: 1、Eureka工作原理   2、五大核心组件

1、Eureka简介

  Eureka 是 Netflix 出品的用于实现服务注册和发现的工具,Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现.

  Eureka采用C-S的设计架构,包含Eureka Server 和Eureka Client两个组件。

  Eureka是SpringCloud的五大核心组件之一。是一个RESTful服务,用来定位运行在AWS地区(Region)中的中间层服务。负责微服务架构中的服务注册和发现

  • 服务发现——Netflix Eureka

  • 客服端负载均衡——Netflix Ribbon

  • 断路器——Netflix Hystrix

  • 服务网关——Netflix Zuul

  • 分布式配置——Spring Cloud Config

2、基本原理

  • Applecation-server :服务提供者
  1. 服务启动后向Eureka Server注册,这样Server中的服务注册表中将会存储所有可用的服务节点的信息;Eureka Server 内部有二层缓存机制来维护整个注册表

  2. Eureka Server会将注册信息向其他EurekaServer进行同步, Eureka Server之间通过复制的方式完成数据的同步;

  • Application-client:服务消费者
  1. 当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。

  2. 注意:Eureka Client具有缓冲机制,如果Eureka Server全部宕机的情况,客户端依然可以利用缓存的信息消费其他服务API;

  • Renew: 服务续约
  1. 在默认配置中,Eureka Client 会每隔 30 秒发送一次心跳来续约。 通过续约来告知 Eureka Server 该 Eureka Client 运行正常,没有出现问题。

  2. 默认情况下,如果 Eureka Server 在 90 秒内没有收到 Eureka Client 的续约,Eureka Server 端会将实例从其注册表中删除,注销该服务。

  3. 注意:此时间可配置,一般情况不建议更改。

  • 服务续约两个参数

服务续约任务的调用间隔时间,默认为30秒

eureka.instance.lease-renewal-interval-in-seconds=30

服务失效的时间,默认为90秒。

eureka.instance.lease-expiration-duration-in-seconds=90

  • Eviction :服务剔除

  当 Eureka Client 和 Eureka Server 不再有心跳时,Eureka Server 会将该服务实例从服务注册列表中删除,即服务剔除。

  • Cancel: 服务下线

  Eureka Client 在程序关闭时向 Eureka Server 发送取消请求。 发送请求后,该客户端实例信息将从 Eureka Server 的实例注册表中删除。

  该下线请求不会自动完成,它需要调用以下内容:


DiscoveryManager.getInstance().shutdownComponent();

  • GetRegisty: 获取注册列表信息

  Eureka Client 从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每30秒钟)更新一次。每次返回注册列表信息可能与 Eureka Client 的缓存信息不同,Eureka Client 自动处理。

  如果由于某种原因导致注册列表信息不能及时匹配,Eureka Client 则会重新获取整个注册表信息。 Eureka Server 缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。Eureka Client 和 Eureka Server 可以使用 JSON/XML 格式进行通讯。在默认情况下 Eureka Client 使用压缩 JSON 格式来获取注册列表的信息。

  • 获取服务是服务消费者的基础,所以必有两个重要参数需要注意:

# 启用服务消费者从注册中心拉取服务列表的功能

eureka.client.fetch-registry=true

# 设置服务消费者从注册中心拉取服务列表的间隔

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

  • Remote Call: 远程调用

  当 Eureka Client 从注册中心获取到服务提供者信息后,就可以通过 Http 请求调用对应的服务;服务提供者有多个时,Eureka Client 客户端会通过 Ribbon 自动进行负载均衡。

3、Eureka自我保护机制

  1. 当网络分区发生故障,导致该时间内没有心跳连接,但该服务本身还是健康运行的情况。Eureka通过“自我保护模式”来解决这个问题。

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

  3. Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 即会进入自我保护机制。

  4. Eureka 自我保护机制是为了防止误杀服务而提供的一个机制。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Mldh48a-1594022206621)(F2166F910D50456CA1622816C2D0967E)]
  1. 通过在 Eureka Server 配置如下参数,开启或者关闭保护机制,生产环境建议打开:

eureka.server.enable-self-preservation=true

4、Eureka与Zookeeper的区别

  CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性P在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。

  • Zookeeper保证CP

  Zookeeper 为主从结构,有leader节点和follow节点。当leader节点down掉之后,剩余节点会重新进行选举。选举过程中会导致服务不可用,丢掉了可用行。

  • Eureka保证AP

  Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。

  1. 当服务注册中心Server检测服务提供者宕机时,在服务中心将服务置为DOWN状态,并将该服务向其他订阅者发布,订阅者更新本地缓存信息;

  2. 当Eureka Server节点在短时间内丢失过多的客户端时,这个节点会进入自我保护模式,不再注销任何服务;

5、上手

  • Eureka服务端依赖

  <!--eureka-server服务端 -->

  <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-eureka-server</artifactId>

  </dependency>

  • 服务端配置

server:

  port: 7001

eureka:

  instance:

    hostname: eureka7001.com #eureka服务端的实例名称

  client:

    register-with-eureka: false #false表示不向注册中心注册自己。

    fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务

    service-url:

      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。



  • 将微服务注册到Eureka中

  <!-- 将微服务provider侧注册进eureka -->

  <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-eureka</artifactId>

  </dependency>

  <dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>

    spring-cloud-starter-config</artifactId>

  </dependency>

  • 服务实例配置

eureka:

  client: #客户端注册进eureka服务列表内

    service-url:

      defaultZone: http://localhost:7001/eureka

6、注意:

  1. 2018年11月底,Hystrix 宣布不再在开源版本上提供新功能。 2018年12月,Spring官方宣布Netflix的相关项目进入维护模式(Maintenance Mode)。

  2. Spring官方对什么是Maintenance Mode给出了定义:

   一旦进入维护模式,Spring Cloud将不会对该组件添加新功能,但我们会继续修复相关的bug和一些安全性问题,同时考虑和review一些小的PR。

  1. 国内技术:Spring Cloud Alibaba

   2018年7月27日 在 Spring Cloud 孵化器仓库提交第一次代码,到 2019年8月1日 在 Alibaba 仓库发布第一个毕业版本。未来可期

  1. 建议在学习Spring Cloud Alibaba 前,先学习Spring Boot + Dubbo + Zookeeper

5.Dubbo很多功能都没有,为什么还有很多公司在使用Dubbo?

   因为Dubbo的性能比SpringCloud要高很多,dubbo使用rpc通信,SpringCloud使用http、restful通信,http连接3次握手、4次挥手,很花时间;并且Dubbo板块少,简单一些,开发速度快。

   SpringCloud组件多,功能更齐全,但开发起来慢一些,性能低一些。

   如果项目对性能要求较高,优先考虑dubbo。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350