本文讲述的是 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,以确保注册中心将不可用的实例删除

安全验证
  1. 添加spring security依赖
<dependency>              <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 在 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相关知识点的更多相关文章

  1. UITableView相关知识点

    //*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...

  2. Android开发涉及有点概念&相关知识点(待写)

    前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...

  3. IOS开发涉及有点概念&相关知识点

    前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...

  4. IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结

    添加商品和商品名小项目(使用xib文件终结版) 小贴士:博文末尾有项目源码在百度云备份的下载链接. xib相关知识点总结 01-基本使用 一开始使用xib的时候,如果要使用自定义view的代码,就需要 ...

  5. 学习记录013-NFS相关知识点

    一.NFS相关知识点 1.NFS常用的路径/etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点/usr/sbin/exportfs NFS服务的管理命令,exportfs -a ...

  6. TCP/IP 相关知识点与面试题集

    第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...

  7. Python开发一个csv比较功能相关知识点汇总及demo

    Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...

  8. Caffe学习系列(二)Caffe代码结构梳理,及相关知识点归纳

    前言: 通过检索论文.书籍.博客,继续学习Caffe,千里之行始于足下,继续努力.将自己学到的一些东西记录下来,方便日后的整理. 正文: 1.代码结构梳理 在终端下运行如下命令,可以查看caffe代码 ...

  9. php正则相关知识点

    关于正则,其实简单就是搜索和匹配.php,java,python等都是支持正则的,php正则兼容perl.好多同学觉得正则比较难,比较抽象,其实正则是非常简单的,主要是一个熟悉和反复练习的结果,还有一 ...

随机推荐

  1. js 中 的 BOM对象

    BOM对象(浏览器对象模型 Browser Object Model) 01.页面的前进和后退 02.移动,调整和关闭浏览器窗口 03.创建新的浏览器窗口 01.window对象 ***** 核心对象 ...

  2. Oracle SQL性能优化的40条军规

    1. SQL语句执行步骤 语法分析> 语义分析> 视图转换 >表达式转换> 选择优化器 >选择连接方式 >选择连接顺序 >选择数据的搜索路径 >运行“执 ...

  3. [Swift]LeetCode686. 重复叠加字符串匹配 | Repeated String Match

    Given two strings A and B, find the minimum number of times A has to be repeated such that B is a su ...

  4. [Swift]LeetCode961. 重复 N 次的元素 | N-Repeated Element in Size 2N Array

    In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeate ...

  5. mysql之delete语法

    一:DELETE语法 以往用delect删除表数据是都是单表(一个表)删除.对于关联表,往往都是先删除第一个表的数据,然后再写另一个delect语句删除另一个表的数据(浪费时间,又影响性能,与数据库交 ...

  6. 6.Django session

    session 1.概述 cookie和session的区别 Cookie是保存在用户浏览器端的键值对,Session是保存在服务器端的键值对:Cookie做用户验证的时,敏感信息不适合放在Cooki ...

  7. "人机"对战:电脑太简单了,我是射手 skr~skr~skr

    9月17日,2018 世界人工智能大会在上海拉开帷幕.在 SAIL 榜单入围项目中,我看到了小爱同学.小马智行.微软小冰.腾讯觅影等等,这不仅让我大开了眼界,也不禁让我感慨 AI 的发展神速.犹记得去 ...

  8. qt 共享内存 单例

        QT 进程间通信之古老的方法(内存共享)     让QT只运行一个实例     以上两篇文章中分别讲述了QSharedMemory的不同作用,第一篇讲了进程间通信,第二篇讲述了怎么让应用程序只 ...

  9. JDK1.8源码(三)——java.util.HashMap

      什么是哈希表? 在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能 数组:采用一段连续的存储单元来存储数据.对于指定下标的查找,时间复杂度为O(1):通过给定值进行查找, ...

  10. C++版- Leetcode 3. Longest Substring Without Repeating Characters解题报告

    Leetcode 3. Longest Substring Without Repeating Characters 提交网址: https://leetcode.com/problems/longe ...