该章节紧接第三章,主要是对一些理论上的指导,帮助更好的理解服务治理。

基础架构

  eureka服务治理的基础架构包含三个要素:

  1)服务注册中心:eureka提供服务端,提供服务的注册与发现功能。

    注:在配置注册中心时,记得避免注册中心向自己注册,需要在配置文件中添加:

      eureka.client.register-with-eureka=false(这个是避免eureka向自己进行注册)

      eureka.client.fetch-registry=false(这个是避免eureka查找服务列表)

  2)服务提供者:提供服务的应用,可以是springboot应用,也可以是其他技术平台且遵循Eureka通信机制的应用,可以将自己的服务注册到Eureka上。

  3)服务消费者:消费者应用从服务注册中心获取服务列表,从而使消费者知道去哪调用所需要的服务。


服务治理机制

服务提供者

  服务注册:

  “服务提供者”在启动的时候会发送REST请求将自己注册到Eureka Server上,并带上一些元信息。

  Eureka Server接收到REST请求,将元信息存储在一个双层Map中,第一层key是服务名,第二层key是具体服务的实例名。

  注:在服务注册时,需要确认一下eureka.client.register-with-eureka=true是否正确,如果为false是禁止向Eureka Server注册的。

  

  服务同步:

  不同的服务提供者分别注册到了一个注册中心集群上的不同的注册中心上。他们的信息被不同的注册中心维护。

  由于在集群中,一个注册中心互为其他注册中心的服务,当服务提供者请求到一个服务注册中心后,它会将请求转发到其他服务注册中心,实现注册中心之间的服务同步。

  通过服务同步,服务提供者的服务信息可以通过集群中的任何一个注册中心获取。

  

  服务续约:

  在注册完成后。服务提供者会维护一个心跳告诉注册中心服务政策,防止注册中心剔除服务,该过程称为服务续约。

  eureka.instance.lease-renewal-interval-in-seconds参数用于定义:服务续约任务的调用间隔时间,默认30s。

  eureka.instance.lease-expiration-duration-in-seconds参数用于定义:服务失效时间,默认30s。

服务消费者

  获取服务:

  启动服务消费者后,会发送一个REST请求给服务注册中心,来获取上面注册的服务清单。

  Eureka Server会维护一份只读清单返回给消费者客户端,该缓存清单30s更新一次。

  注:在服务获取时,确定eureka.client.fetch-registry=true,设置成false,服务客户端不会再向注册中心发送请求。

  缓存清单的时间配置:eureka.client.registry-fetch-internal-seconds=30s

  服务调用:

  消费者获取服务清单后,可以通过服务名获取到具体服务实例与实例的元数据信息。在Ribbon中默认采用轮询的方式进行调用,从而实现负载均衡。

  服务下线:

  当服务实例进行正常的关闭操作时,它会触发一个服务下线的REST请求给Eureka Server。注册中心接收到请求后,将该服务状态置为DOWN,并把下线时间传播出去。

服务注册中心

  失效剔除:

  Eureka Server启动时会创建定时任务,默认60s一次,将当前清单中超时(90s)没有续约的服务剔除。

  自我保护:

  本地调试Eureka的程序时,会出现: 

  该警告是触发了Eureka Server的自我保护机制。

  Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果低于,就会将当前实例注册信息保护起来,让实例不会过期,尽可能保护这些注册信息。

  但是如果在保护期间,实例出现问题,那么客户端很容易拿到实际已经不存在的服务实例,会出现调用失败。这个时候客户端的容错机制就很重要了。(重新请求,断路器)

  保护机制,可能会导致服务实例不能够被正确剔除。

  在本地开发时,可使用:eureka.server.enable-self-preservation=false关闭保护机制,使不可用实例能够正常下线。


  

 

Eureka详解的更多相关文章

  1. 微服务之SpringCloud实战(五):SpringCloud Eureka详解

    Eureka详解 在第三节高可用中,实际已经讲解了服务的注册,只不过注册的是Eureka本身,原理相同,通过这几篇文章我相信大家对Eureka有了一定的了解,三个核心角色:服务注册中心.服务提供者和服 ...

  2. Eureka详解系列(二)--如何使用Eureka(原生API,无Spring)

    简介 通过上一篇博客 Eureka详解系列(一)--先谈谈负载均衡器 ,我们知道了 Eureka 是什么以及为什么要使用它,今天,我们开始研究如何使用 Eureka. 在此之前,先说明一点.网上几乎所 ...

  3. Eureka详解系列(四)--Eureka Client部分的源码和配置

    简介 按照原定的计划,我将分三个部分来分析 Eureka 的源码: Eureka 的配置体系(已经写完,见Eureka详解系列(三)--探索Eureka强大的配置体系): Eureka Client ...

  4. Eureka详解系列(五)--Eureka Server部分的源码和配置

    简介 按照原定的计划,我将分三个部分来分析 Eureka 的源码: Eureka 的配置体系(已经写完,见Eureka详解系列(三)--探索Eureka强大的配置体系): Eureka Client ...

  5. (2-3)Eureka详解

    基础架构 服务注册中心 服务提供者 服务消费者 服务治理 服务提供者 服务注册.在服务注册时,需要确认一下eureka.client.registerwith-eurek=ture参数是否正确,默认是 ...

  6. Eureka详解系列(一)--先谈谈负载均衡器

    这个系列开始研究 Eureka,在此之前,先来谈谈负载均衡器. 本质上,Eureka 就是一个负载均衡器,可能有的人会说,它是一个服务注册中心,用来注册服务的,这种说法不能说错,只是有点片面. 在这篇 ...

  7. Eureka详解系列(三)--探索Eureka强大的配置体系

    简介 通过前面的两篇博客,我们知道了:什么是 Eureka?为什么使用 Eureka?如何适用 Eureka?今天,我们开始来研究 Eureka 的源码,先从配置部分的源码开始看,其他部分后面再补充. ...

  8. Spring Cloud系列(二):Eureka应用详解

    一.注册中心 1.注册中心演变过程 2.注册中心必备功能 ① 服务的上线 ② 服务的下线 ③ 服务的剔除 ④ 服务的查询 ⑤ 注册中心HA ⑥ 注册中心节点数据同步 ⑦ 服务信息的存储,比如mysql ...

  9. Java源码详解系列(十二)--Eureka的使用和源码

    eureka 是由 Netflix 团队开发的针对中间层服务的负载均衡器,在微服务项目中被广泛使用.相比 SLB.ALB 等负载均衡器,eureka 的服务注册是无状态的,扩展起来非常方便. 在这个系 ...

随机推荐

  1. ucsc genome brower的用法和说明(一)

    官网说明书:http://genome.ucsc.edu/goldenpath/help/hgTracksHelp.html 1.genome brower的作用 a,展示任何尺度的基因组片段.比如, ...

  2. ubuntu 忘记root密码

    Ubuntu14.04系统中,因为误操作导致管理员密码丢失或无效,并且忘记root密码,此时无法进行任何root/sudo权限操作.可以通过GRUB重新设置root密码,并恢复管理员账户到正常状态. ...

  3. python实现免密码登录lunx服务器

    import paramikoimport oshostname='192.168.76.10'username='root'# password='123456'ssh=paramiko.SSHCl ...

  4. 【P2325】王室联邦(树的遍历+贪心)

    在肖明 #神#的推荐下,我尝试了这个题,一开始想的是暴力枚举所有的点,然后bfs层数,试着和肖明 #神#说了这种方法之后, #神#轻蔑的一笑,说这不就是一个贪心么,你只需要先建树,然后从底下向上遍历, ...

  5. linux中动态链接库的创建与使用

    LINUX系统中动态链接库的创建与使用 http://www.cnblogs.com/ardar/articles/357321.html 正常C源文件编写,编译时-shared即可得到SO, gcc ...

  6. codeforces766E Mahmoud and a xor trip(按位统计+树形DP)

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  7. openstack-ansible -- 3 Target hosts

    Installing the operating system Install the Ubuntu Server 14.04 (Trusty Tahr) LTS 64-bit operating s ...

  8. oracle 不走索引的原因

    create table tb2 as select * from emp;alter table tb2 modify empno number(4) not null;翻到20W行 create ...

  9. java 如何保证接口的安全性

    在开发过程中,肯定会有和第三方或者app端的接口调用.在调用的时候,如何来保证非法链接或者恶意攻击呢? 1.签名 根据用户名或者用户id,结合用户的ip或者设备号,生成一个token.在请求后台,后台 ...

  10. 最实用的 Linux 命令行使用技巧

    我们可能每天都会要使用到很多的 Linux 命令行. 我们也会网络上知晓一些使用它们的小技巧,但是如果我们没有时常来进行练习,就有可能会忘掉怎么去使用它们. 所以我就决定把那些你可能会忘记的小提示和小 ...