Eureka相关知识点
本文讲述的是 Eureka server, 服务提供者、消费者的一些概念和配置说明。
Eureka Server 服务注册中心
Eureka的高可用设计
- Eureka侧重点是AP,高可用;Eureka Server在设计的时候就考虑了高可用,在Eureka的服务治理设计中,所有节点既是服务提供方,又是服务的消费方。
Eureka Server的高可用就是将自己的作为服务向其他服务注册中心注册自己,这样就形成一组互相注册的服务注册中心中心,以实现服务与服务之间的互相同步,达到高可用的效果(通俗一点就是:注册中心集群)
失效剔除
有时候,服务实例不一定会正常下线,而注册中心没有收到服务下线的请求,为了从列表中将这些无法提供服务的实例剔除,Eureka Server在启动的时候回创建一个定时任务,默认每隔一段时间(默认60s)将的当前服务中超时(默认90s)没续约得服务剔除出去。
自我保护
服务注册到Eureka Server后,会维护一个心跳连接,告诉Eureka Server 自己还活着。Eureka Server在运行期间会统计心跳失败的比例在15min以内是否低于85%;如果低于这种情况,Eureka Server会将当前注册的服务实例保护起来,让这些服务不会过期。这样做会使客户端容易拿到实际已经不存在的服务实例,会出现时而调用成功,时而失败的情况。
自我保护的相关属性配置
eureka.server.enableSelfPreservation=true # 可以设置改参数值为false,以确保注册中心将不可用的实例删除
安全验证
- 添加spring security依赖
<dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 在 serviceurl添加安全校验信息
eureka.client.serviceUrl.defaultZone=http://<username>:<password>@${eureka.instance.hostname}:${server.port}/eureka/
服务提供者
服务注册
服务提供者在服务启动的时候会以rest的方式将自己注册到Eureka Server上,同时带上自身服务的一些元数据信息。Eureka Server接收到这个rest请求后,将元数据存储到一个双层结构的Map中,其中,第一层的key是服务名,第二层的key是具体的服务实例名。
在服务注册时,需要确认一下eureka.client.register-with-eureka=true
是否正确,该配置默认是true,如果设置成false
,则不会向注册中心注册该服务;
服务同步
从eureka服务治理体系架构图中可以看到,不同的服务提供者可以注册到不同非注册中心上,他们的信息呗不同的服务注册中心中心维护。
服务同步也就是不同的服务注册中心的数据相互同步。
服务续约
在服务注册之后,服务提供者会维护一个心跳来持续通知
Eureka server。否则eureka server的剔除任务会将该服务实例从服务列表中排除出去。
下面是服务续约的两个重要属性
eureka.instance.lease-expiration-duration-in-seconds
# leaseExpirationDurationInSeconds 表示Eureka server至少上一次收到client的心跳后,等待下一次心跳的超时时间,在这个时间如果没有收到下一次心跳,则将移除该服务实例。
# 默认时间是90s,
# 如果该值设置的过大,很可能会将请求转发过去的时候,该服务实例已经挂了
# 如果该值设置的过小,则这个服务实例可能会因为临时的网络波动而被剔除。
# 该值至少应该大于leaseRenewalIntervalInSeconds
eureka.instance.lease-renewal-interval-in-seconds
leaseRenewalIntervalInSeconds
表示eureka client 发送心跳给server的频率(默认30s),如果在leaseExpirationDurationInSeconds
后,server端没有收到client端的心跳,则将剔除这个服务实例,除此之外,如果这个示例实现了HealthCheckCallback
,并决定由自让自己unavaliable,这个示例也将不会收到请求
服务消费者
获取服务
消费者启动的时候,会发送rest请求从Eureka server 中获取到上面注册的服务列表。为了性能考虑,Eureka server会维护一份只读的服务注册清单返回给客户端,同时该缓存清单默认会每隔30s更新一次。
下面是获取服务的两个重要属性:
#是否需要去检索寻找服务,默认是true
eureka.client.fetch-registry
# 表示Eureka client间隔多久去拉一次服务注册信息,默认是30s。
eureka.client.registry-fetch-interval-seconds
服务调用
消费者在获取到服务清单后,通过服务名可以获取到具体的实例名和该实例的元数据信息,有了这些服务实例的详细信息,客户端可以根据自己的实际需要巨鼎调用哪个实例。Ribbon,feign实现服务调用的负载均衡。
服务下线
在系统的运行过程中,会出现关闭或重启某个示例的情况,在服务关闭操作时,会触发一个服务下线的rest请求给Eureka server,告诉server‘我要下线’。Eureka server 在接到该请求后,将服务状态下线。并同步到注册中心的其他节点
配置详解
服务实例类配置
端点配置
元数据
元数据是Eureka客户端向注册中心发送注册请求时,用来描述自身服务信息的对象,其中包含了一些标准化的元数据,比如服务名称、实例名称、实例ip、示例端口等用来服务治理的重要信息,以及一些用于负载均衡策略或是其他特殊用途的自定义元数据信息。
我们可以通过eureka.instance.<properties>=<value>的格式来对标准化元数据进行配置
,其中 properties
就是EurekaInstanceConfigBean
对象中的成员变量。而对于自定义元数据,可以通过eureka.instance.metadataMap.<key>=<value>
的格式来配置比如:
eureka.instance.metadataMap.zone=tianjin
健康检测
默认情况下,Eureka中的各个服务实例的健康检测并不是通过spring-boot-acturator
模块的/health端点来实现的,二十依靠客户端心跳的方式来保持服务实例的存活。在Eureka的服务续约与剔除机制下,客户端的健康状态从注册到注册中心开始都会处于up状态,除非心跳中指一段时间之后,服务注册中心将其剔除。默认的心跳实现方式可以有效检查客户端进程是否正常运作,但却无法保证客户端应用能够正常提供服务。
在spring cloud Eureka 中,可以把eureka客户端的健康检测交给spring-boot-actuator
。可以实现更加全面的健康状态维护,设置方式如下
(1)在pom.xml中引入spring-boot-starter-actuator模块的依赖
(2)在application.properties中增加参数配置eureka.client.healthcheck.enabled=true
通讯协议
默认情况下,Eureka使用Jersey和XStream配合JSON作为Server与Client之间的通讯协议。也可以选择实现自己的协议来代替。
Eureka相关知识点的更多相关文章
- UITableView相关知识点
//*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...
- Android开发涉及有点概念&相关知识点(待写)
前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...
- IOS开发涉及有点概念&相关知识点
前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...
- IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结
添加商品和商品名小项目(使用xib文件终结版) 小贴士:博文末尾有项目源码在百度云备份的下载链接. xib相关知识点总结 01-基本使用 一开始使用xib的时候,如果要使用自定义view的代码,就需要 ...
- 学习记录013-NFS相关知识点
一.NFS相关知识点 1.NFS常用的路径/etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点/usr/sbin/exportfs NFS服务的管理命令,exportfs -a ...
- TCP/IP 相关知识点与面试题集
第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...
- Python开发一个csv比较功能相关知识点汇总及demo
Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...
- Caffe学习系列(二)Caffe代码结构梳理,及相关知识点归纳
前言: 通过检索论文.书籍.博客,继续学习Caffe,千里之行始于足下,继续努力.将自己学到的一些东西记录下来,方便日后的整理. 正文: 1.代码结构梳理 在终端下运行如下命令,可以查看caffe代码 ...
- php正则相关知识点
关于正则,其实简单就是搜索和匹配.php,java,python等都是支持正则的,php正则兼容perl.好多同学觉得正则比较难,比较抽象,其实正则是非常简单的,主要是一个熟悉和反复练习的结果,还有一 ...
随机推荐
- phpstorm 断点调试 傻瓜教程
前言: 简单介绍下为什么要用断点调试,很多人说我在代码调试的部位用var_dump 或者 exit 或者print_r来进行断点,但是当项目足够大的时候这样的做法就比较费时费力,因为你断点后需要删除原 ...
- ubuntu安装输入法
sudo apt-get install ibus-pinyin sudo ibus-setup
- lua语言自学知识点----简单了解
零碎知识点: lua:用lua写UI,更新UI,因为lua可直接跨平台解析,不需要编译,方便更新------>热更新. c#反射也可以达到更新,但非常麻烦,切不支持iOS. 在lua中一个人汉字 ...
- B4 and After: Managing Hierarchy, Partitioning, and Asymmetry for Availability and Scale in Google’s Sofware-Defined WAN
B4及之后:为谷歌软件定义WAN的可用性和扩展管理层次化.划分和不对称 本文为SIGCOMM 2018会议论文,由谷歌提供. 笔者翻译了该论文.由于时间仓促,且笔者英文能力有限,错误之处在所难免:欢迎 ...
- 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(5)
八.KVM 这一步,像virsh start命令一样,将虚拟机启动起来了.虚拟机启动之后,还有很多的步骤需要完成. 步骤38:从DHCP Server获取IP 有时候往往数据库里面,VM已经有了IP, ...
- [Swift]LeetCode594. 最长和谐子序列 | Longest Harmonious Subsequence
We define a harmonious array is an array where the difference between its maximum value and its mini ...
- [Swift]LeetCode646. 最长数对链 | Maximum Length of Pair Chain
You are given n pairs of numbers. In every pair, the first number is always smaller than the second ...
- [IOI2007] sails 船帆
显然答案与杆的顺序无关(按每个高度考虑). 从高到低考虑杆,设此时的状态为\(S\),\(S[i]\)是高度\(i\)的帆的数目,初始全为\(0\),当前杆的高度为\(h\),杆上需要放置的帆的数目为 ...
- C# 当中 LINQ 的常规用法(Lambda 方式)
仅以本篇博文记录 LINQ 相关操作的基本知识,原型参考自 MSDN 相关知识,中间加以自己的理解与 DEMO. 1. IEnuemrable<T>.Select() Select 方法比 ...
- 1K star+ 的项目是如何炼成的?
前言 首先标题党一下,其实这篇文章主要是记录我的第二个过 1K star 的项目 Java-Interview,顺便分享下其中的过程及经验. 需求选择 Java-Interview 之所以要做这个项目 ...