Eureka详解
该章节紧接第三章,主要是对一些理论上的指导,帮助更好的理解服务治理。
基础架构
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详解的更多相关文章
- 微服务之SpringCloud实战(五):SpringCloud Eureka详解
Eureka详解 在第三节高可用中,实际已经讲解了服务的注册,只不过注册的是Eureka本身,原理相同,通过这几篇文章我相信大家对Eureka有了一定的了解,三个核心角色:服务注册中心.服务提供者和服 ...
- Eureka详解系列(二)--如何使用Eureka(原生API,无Spring)
简介 通过上一篇博客 Eureka详解系列(一)--先谈谈负载均衡器 ,我们知道了 Eureka 是什么以及为什么要使用它,今天,我们开始研究如何使用 Eureka. 在此之前,先说明一点.网上几乎所 ...
- Eureka详解系列(四)--Eureka Client部分的源码和配置
简介 按照原定的计划,我将分三个部分来分析 Eureka 的源码: Eureka 的配置体系(已经写完,见Eureka详解系列(三)--探索Eureka强大的配置体系): Eureka Client ...
- Eureka详解系列(五)--Eureka Server部分的源码和配置
简介 按照原定的计划,我将分三个部分来分析 Eureka 的源码: Eureka 的配置体系(已经写完,见Eureka详解系列(三)--探索Eureka强大的配置体系): Eureka Client ...
- (2-3)Eureka详解
基础架构 服务注册中心 服务提供者 服务消费者 服务治理 服务提供者 服务注册.在服务注册时,需要确认一下eureka.client.registerwith-eurek=ture参数是否正确,默认是 ...
- Eureka详解系列(一)--先谈谈负载均衡器
这个系列开始研究 Eureka,在此之前,先来谈谈负载均衡器. 本质上,Eureka 就是一个负载均衡器,可能有的人会说,它是一个服务注册中心,用来注册服务的,这种说法不能说错,只是有点片面. 在这篇 ...
- Eureka详解系列(三)--探索Eureka强大的配置体系
简介 通过前面的两篇博客,我们知道了:什么是 Eureka?为什么使用 Eureka?如何适用 Eureka?今天,我们开始来研究 Eureka 的源码,先从配置部分的源码开始看,其他部分后面再补充. ...
- Spring Cloud系列(二):Eureka应用详解
一.注册中心 1.注册中心演变过程 2.注册中心必备功能 ① 服务的上线 ② 服务的下线 ③ 服务的剔除 ④ 服务的查询 ⑤ 注册中心HA ⑥ 注册中心节点数据同步 ⑦ 服务信息的存储,比如mysql ...
- Java源码详解系列(十二)--Eureka的使用和源码
eureka 是由 Netflix 团队开发的针对中间层服务的负载均衡器,在微服务项目中被广泛使用.相比 SLB.ALB 等负载均衡器,eureka 的服务注册是无状态的,扩展起来非常方便. 在这个系 ...
随机推荐
- Git常见命令整理
Git常见命令整理 + 注释 git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 gi ...
- Loop through an array in JavaScript
https://stackoverflow.com/questions/3010840/loop-through-an-array-in-javascript?page=1&tab=votes ...
- Luogu-4248 [AHOI2013]差异
\(\sum_{i<j}len(i)+len(j)\)比较简单,稍微想想就出来了,问题在于怎么求任意两个后缀的\(lcp\)长度之和 因为求\(lcp\)实际上就是一个对\(h\)数组求区间最小 ...
- 1028: [JSOI2007]麻将
1028: [JSOI2007]麻将 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2638 Solved: 1168[Submit][Status] ...
- 泛型学习第三天——C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
定义一个类: public class UserInfo { public System.Guid ID { get; set; } public string LoginName ...
- 【转】meta标签中的http-equiv属性使用介绍
meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言, ...
- HTML中table边框的显示总结
一.1.显示表格的4个边框:<table border frame=box>2.只显示上边框: <table border frame=above>3.只显示下边框: < ...
- 虚拟机CentOS7网络配置
*关于查看IP信息 window中是 ipconfig Linux一般都是 ifconfig 不过CentOS7中 这个命令发生了更改 :ip addr 设置网络 再新建虚拟机向导过程中,有一步[网 ...
- Http协议与生命周期
一.Http知识: 1.基于socket 浏览器(格式一) web服务器(格式一) MYSQL客户端(格式二) MYSQL服务端(格式三) ...
- Javascript-我对作用链、闭包、原型及原型链的理解
Javascript-基础概念总结(2) 最近学习一些javascript基础知识,也解决了很多之前的疑惑,记得第一次被问及怎样理解闭包时,我的回答是:就是类似于封装吧!现在想想是有多白痴,学习技术是 ...