SpringCloud解析之Eureka
本文基于Spring Cloud Edgware.SR6版本,从功能和架构上解析Eureka,让大家对Eureka有一个较为清晰的认识(本文默认大家对分布式微服务有一个初步的概念和理解,本文不涉及或少量涉及源码)。
官方概念这里就不贴了,个人理解,Eureka是Spring Cloud分布式微服务架构的服务治理方案之一,提供服务注册,服务发现,服务维护和治理,注册中心集群等功能。
Eureka中维护一份服务列表,当客户端(服务提供者或服务消费者)注册服务实例到Eureka,Eureka会将其实例信息维护到列表中,这叫创建租约;租约的有效时间默认是30秒,客户端需要每隔一段时间发送一次心跳告知Eureka自己的服务正常有效,这叫续约。
Eureka是服务注册中心,但当注册中心集群时,Eureka也做为客户端,向其它注册中心注册自己,同时获取其它注册中心的维护的服务列表,当有新的客户端注册进来时,Eureka会通知其它的注册中心,异步更新服务列表,达到高可用的目的。Eureka默认会开启如下配置,如果作为单个注册中心或本地测试,可以关闭。
eureka:
client:
# 不向Eureka注册自己
registerWithEureka: false
# 不获取服务列表
fetchRegistry: false
客户端正常下线时,会通知Eureka,Eureka就从服务列表中将其剔除。如果客户端非正常下线(比如宕机,系统崩溃)无法通知到Eureka,Eureka会定时检查自己的服务列表,发现有服务的租约超过有效时间,也会认为服务失效而剔除。
Eureka默认配置会开启一个保护机制,当一段时间内有超过15%的服务失效时,Eureka不会剔除这些服务,而是继续维护在服务列表,直到客户端重新发送心跳。Eureka有一个心跳次数阀值系数=0.85(可以通过配置修改),客户端默认心跳间隔=30秒,1分钟内总心跳数=客户端实例数*2,1分钟内心跳阀值=1分钟内总心跳数*0.85,当1分钟内有效客户端实例的心跳总数<心跳阀值,Eureka就会因为保护机制而继续维护在服务列表,因此客户端需要有重试和熔断机制。
Eureka和ZooKeeper
Eureka和ZooKeeper,虽然都是服务集群治理的实现方案,但是区别也是比较明显的。CAP理论中,C(consistency)数据一致性,A(availability)可用性,P(partition-tolerance)分区容错性,Eureka强调AP,通过缓存和异步同步达到最终一致性,ZooKeeper更兼顾CP,当节点失效就会剔除。
个人更倾向Eureka,不管是服务注册和发现,还是注册中心集群,只需要引入依赖包,添加配置和注解,就可以达到效果,同时不得不佩服Spring Boot和Spring Cloud的强大。但是,如果是ZooKeeper转使用Eureka,可能会因为其内部的缓存和保护机制感到别扭,此处贴上本人的配置,可以减少缓存时效,提高缓存刷新频率,强制关闭客户端的话,大概30秒Eureka就会剔除服务(Eureka默认情况下大概要4分钟才会剔除服务),供大家参考
Eureka注册中心配置(YML)
eureka:
server:
# 检查失效服务剔除时间间隔
evictionIntervalTimerInMs: 2000
# 关闭保护机制
enableSelfPreservation: false
Eureka客户端(properties)
#服务实例租约有效时间
eureka.instance.lease-expiration-duration-in-seconds=15
#服务实例续约间隔时间(心跳间隔)
eureka.instance.lease-renewal-interval-in-seconds=5
#客户端更新服务列表间隔时间
eureka.client.registryFetchIntervalSeconds=5
SpringCloud解析之Eureka的更多相关文章
- Spring-cloud & Netflix 源码解析:Eureka 服务注册发现接口 ****
http://www.idouba.net/spring-cloud-source-eureka-client-api/?utm_source=tuicool&utm_medium=refer ...
- springcloud费话之Eureka接口调用(feign)
目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...
- SpringCloud学习(3)——Eureka服务注册中心及服务发现
Eureka概述: Eureka是Netflix的一个子模块, 也是核心模块之一.Eureka是一个基于REST的服务, 用于定位服务, 以实现云端中间层服务发现和故障转移.服务注册与发现对于微服务框 ...
- SpringCloud解析之Zuul(二)
本文基于Spring Cloud Edgware.SR6,Zuul版本1.3.1,解析Zuul的请求拦截机制,让大家对Zuul的原理有个大概的认识和了解.如有不对的地方,欢迎指正. 在上一期的Spri ...
- springcloud费话之Eureka服务访问(restTemplate)
目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...
- springcloud费话之Eureka集群
目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...
- springcloud费话之Eureka基础
目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...
- 「 从0到1学习微服务SpringCloud 」03 Eureka的自我保护机制
系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 Eureka的高可用需要 ...
- springcloud(十三):Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解
在上个月我们知道 Eureka 2.X 遇到困难停止开发了,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,另一方面 Spring Cloud 支持很多服务发现的软件, ...
随机推荐
- 文字滚屏控件(SliderPanel)
http://www.delphifans.com/infoview/Article_629.html 日期:2005年9月6日 作者:arhaha {==================== 满天星 ...
- CentOS安装mysq
一安装依赖 yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6 yum -y update libstdc++-4.4.7-4.el6.x8 ...
- .net EF Join 关联表分页查询
Join中第二个参数和第三个参数即为两张表关联对应的字段 第四个参数new 后面如果不写Model名,系统会自动生成带字段的list类型 IQueryable<Operator> oper ...
- 程序的开机关机重启,开机启动,休眠功能delphi实现(使用AdjustTokenPrivileges提升权限)
TShutDownStatus = (sdShutDown,sdReboot,sdLogOff,sdPowerOff); procedure ShutDown(sdStatus : TShutDown ...
- FMX App的Application的事件(各种手机的全局按键)
直接上代码,还有条经验就是SetApplicationEventHandler可注册多个事件方法. unit Unit6; interface uses System.SysUtils, Syste ...
- Indy9的TIdFTPServer封装类
在Delphi 7开发下有强大的Indy控件,版本为9,要实现一个FTP服务器,参考自带的例子,发现还要写很多函数,而且不支持中文显示文件列表等等.于是,自己改进封装了下,形成一个TFTPServer ...
- spring3升级到spring4通用异常处理返回jsonp多了/**/的解决办法
问题描述 在spring3中定义了通用的异常处理,具体代码如下: public class CommonExceptionHandler implements HandlerExceptionReso ...
- vue+TS(CLI3)
1.用CLI3创建项目 查看当前CLI的版本,如果没有安装CLI3的 使用npm install --global vue-cli来安装CLI 安装好CLI 可以创建项目了 使用vue create ...
- spring boot之actuator简介
当我们的开发工作进入尾声,部署上线之后,对于一个程序而言,可能才刚刚开始,对程序的运行情况的监控要伴随着整个生命周期. 如果这个工作由程序员自己来开发,也未尝不可,但本着不重复制造轮子的思想,我们尽量 ...
- Java开发桌面程序学习(三)——基于Jfoenix库的JFXDialog封装仿Android对话框的工具DialogBuilder
对话框的封装使用 最近写了个JFXUtils,DialogBuilder也是包含在里面了 JFXUtils的Github 前言 登录需要弹出登录对话框,但是,Jfoenix库使用对话框比较难受,还得动 ...