本文基于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的更多相关文章

  1. Spring-cloud & Netflix 源码解析:Eureka 服务注册发现接口 ****

    http://www.idouba.net/spring-cloud-source-eureka-client-api/?utm_source=tuicool&utm_medium=refer ...

  2. springcloud费话之Eureka接口调用(feign)

    目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...

  3. SpringCloud学习(3)——Eureka服务注册中心及服务发现

    Eureka概述: Eureka是Netflix的一个子模块, 也是核心模块之一.Eureka是一个基于REST的服务, 用于定位服务, 以实现云端中间层服务发现和故障转移.服务注册与发现对于微服务框 ...

  4. SpringCloud解析之Zuul(二)

    本文基于Spring Cloud Edgware.SR6,Zuul版本1.3.1,解析Zuul的请求拦截机制,让大家对Zuul的原理有个大概的认识和了解.如有不对的地方,欢迎指正. 在上一期的Spri ...

  5. springcloud费话之Eureka服务访问(restTemplate)

    目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...

  6. springcloud费话之Eureka集群

    目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...

  7. springcloud费话之Eureka基础

    目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...

  8. 「 从0到1学习微服务SpringCloud 」03 Eureka的自我保护机制

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 Eureka的高可用需要 ...

  9. springcloud(十三):Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解

    在上个月我们知道 Eureka 2.X 遇到困难停止开发了,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,另一方面 Spring Cloud 支持很多服务发现的软件, ...

随机推荐

  1. mage J和Graphpad如何对Western Blot条带灰度分析

    原文 mage J和Graphpad如何对Western Blot条带灰度分析 WB是研究蛋白表达的一个经典方法.对于一些时间点或者是不同组织蛋白表达量的分析就涉及到量的变化.一些凝胶成像软件带有此分 ...

  2. tensorflow 1.0 学习:模型的保存与恢复

    将训练好的模型参数保存起来,以便以后进行验证或测试,这是我们经常要做的事情.tf里面提供模型保存的是tf.train.Saver()模块. 模型保存,先要创建一个Saver对象:如 saver=tf. ...

  3. Java中动态代理技术生成的类与原始类的区别 (good)

    用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...

  4. C#WeakReference弱引用

    原文:C#WeakReference弱引用 弱引用:在引用对象的同时,允许垃圾回收该对象. .NET中提供了WeakReference对象来实现这个功能. 对于那些创建便宜但耗费大量内存的对象,即希望 ...

  5. Windows 10 (IIS 10)安装Microsoft Web Farm Framework Version 2.2 for IIS7问题

    But I got an error message "iis version 7.0 or greater is required to install Web Farm Framewor ...

  6. QToolBar也是QWidget,可以放在QWidget的中间

    可以试着把左边做成一个widget.从上到下依次为:QTextEditQToolBarQTextEdit然后再对她们进行垂直布局(布局是具体需求而定).代码大致如下: TCenterWidget::T ...

  7. QT创建窗口程序、消息循环和WinMain函数(为主线程建立了一个QEventLoop,并执行exec函数)

    使用QT也有一段时间了,有的时候需要跟踪代码到QT的源码中去查找问题.在这里我将记录一下我跟踪QT源码学习到的一些知识. 我的开发环境是VC6.0+QT4.3.3.QT已经不为VC6.0提供addin ...

  8. Spring Boot2(四):使用Spring Boot多数据源实现读写分离

    前言 实际业务场景中,不可能只有一个库,所以就有了分库分表,多数据源的出现.实现了读写分离,主库负责增改删,从库负责查询.这篇文章将实现Spring Boot如何实现多数据源,动态数据源切换,读写分离 ...

  9. SQL Server 2012链接服务器

    第一步,在服务器对象,链接服务器那里新建链接服务器:输入要链接服务器的IP地址. 第二步,安全性输入连接数据的用户名和密码. 第三步,验证是不可以打开链接服务器库的表名,视图等数据. 第四步,如果要查 ...

  10. 【设计模式】行为型03观察者模式(Observer Pattern)

    记得16年初第一次学习了23种设计模式,但是除了少数几个简单的外,其他的很多都是学了个似懂非懂,以至于有人问起甚至说不上来,现在想想,其实就是没看懂而已.例如观察者模式,其实原理很简单,但是当时并没有 ...