基础架构

  • 服务注册中心
  • 服务提供者
  • 服务消费者

服务治理

  服务提供者

    服务注册。在服务注册时,需要确认一下eureka.client.registerwith-eurek=ture参数是否正确,默认是true,若设置为false将不会启动注册操作。

    服务同步。两个服务提供者的服务信息是一样的

    服务续约。主要看两个主要属性

#定义服务续约任务的调用间隔时间,默认为30秒
eureka.instance.lease-renewal-interval-in-seconds=30
#定义服务失效的时间,默认为90秒
eureka.instance.lease-expiration-duration-in-secodes=90

  服务消费者

  获取服务

    当服务消费者启动的时候,会发送一个REST请求给服务注册中心,来获取服务注册清单。为了性能考虑,Eureka Server会维护一份只读的服务清单来返回给客户端,同时该缓存清单会

  每隔30秒更新一次。

    获取服务是服务消费者的基础,所以必须确保eureka.client.fetch-registry=ture(该值默认是true)。可以通过 eureka.client.registry-fetch-interval-seconds=30参数修改缓存清单的更新时间。

  服务调用

    服务消费者在获取的服务清单后,通过服务名可以获得具体提供服务的实例名和该实例的元数据信息。因为有这些服务实例的详细信息,所以客户端可以根据自己的需要决定具体调用哪个

  实例,在Ribbon中会默认采用轮询的方式进行调用,从而实现客户端的负载均衡。

    对于访问实例选择,Eureka中有Region和Zone的概念,一个Region中可以包含多个Zone,每个服务客户端需要被注册到一个Zone中,所以每个客户端对应一个Region和一个Zone。

  服务下线

    在客户端程序中,当服务实例进行正常的关闭操作时,它会出发一个服务下线的REST请求给Eureka Server,告诉服务注册中心“我要下线了”。服务端在接受到请求后,讲该服务状态置为下线并

  把该下线事件传播出去。

  服务注册中心

  失效剔除

    有时服务实例不是正常下线的,而服务注册中心并未收到“服务下线”的请求。为了从服务列表讲这些无法提供服务的实例剔除,Eureka Server在启动的时候会创建一个定时任务,默认每隔60秒

  将当前清单中超时(默认90秒)没有续约的服务剔除出去。

  自我保护

    在服务注册中心的信息面板中出现类似下面的红色警告信息:

    实际上,该警告就出发了Eureka Server的自我保护机制。Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况Eureka Server会将当前实例注册

  信息保护起来,让这些实例不会过期,尽可能保护这些注册信息。

    在本地调试的时候很容易触发注册中心的保护机制,这会使得注册中心维护的服务实例不那么准确。所以我们再本地进行开发的时候,可以用eureka.server.enable-self-preservation=false参数

  来关闭保护机制,保证注册中心将不可用的实例正确剔除。

配置详解:

  Eureka客户端的配置主要非为两个方面

  • 服务注册相关的配置信息,包括服务注册中心的地址、服务获取的间隔时间、可用区域等。
  • 服务实例相关的配置信息,包括服务实例的名称、IP地址、端口号、健康检查路径等。

  服务注册类配置:

  指定注册中心:

    eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

  注册高可用的富足注册中心时:

    eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2/1112/eureka/

  为服务注册中心加入校验:

    eureka.client.serviceUrl.defaultZone=http://<username>:<password>@localhost:1111/eureka

服务实例类配置:

  元数据:

    我们可以通过eureka.instance.<properties>=<value>的格式对标准化元数据直接进行配置。其中<properties>就是EurekaInstanceConfigBean对象中的成员变量名。对于自定义元数据,可以通

  过eureka.instance.metadataMap.<key>=<value>格式进行配置。比如:

    eureka.instance.metadataMap.zone=shanghai

  实例名配置:

    它是区分统一服务中不同实例的唯一标识。在Netflix Eureka 的原生实现中,实例名采用主机名作为默认值。这样的设置使得在同一个主机上无法穷的那个多个相同的服务实例。在Spring Cloud

  Eureka的配置中,针对同一主机中启动多实例的情况,采用如下默认规则

    ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${SERVER.PORT}}

    对于实例名的命名规则,我们可以通过eureka.instance.instanceId参数来进行配置。虽然可以在命令行中指定不同的server.port来启动,但是还是略显麻烦。我们可以直接通过设置

  server.port=0或者使用随机数server.port=${random.int[10000,19999]}来让Tomcat启动的时候才用随机端口。但是这个时候Eureka Server的实例名都是相同的,这会使得只有一个服务实例能够正常

  体统服务。对于我这个问题,我们就可以通过设置实例名规则来解决:

    erueka.instance.instanceId=${spring.application.name}:${random.int}

参考:

[1] 《SpringCloud微服务实战》,电子工业出版社,翟永超

(2-3)Eureka详解的更多相关文章

  1. 微服务之SpringCloud实战(五):SpringCloud Eureka详解

    Eureka详解 在第三节高可用中,实际已经讲解了服务的注册,只不过注册的是Eureka本身,原理相同,通过这几篇文章我相信大家对Eureka有了一定的了解,三个核心角色:服务注册中心.服务提供者和服 ...

  2. Eureka详解系列(二)--如何使用Eureka(原生API,无Spring)

    简介 通过上一篇博客 Eureka详解系列(一)--先谈谈负载均衡器 ,我们知道了 Eureka 是什么以及为什么要使用它,今天,我们开始研究如何使用 Eureka. 在此之前,先说明一点.网上几乎所 ...

  3. Eureka详解系列(四)--Eureka Client部分的源码和配置

    简介 按照原定的计划,我将分三个部分来分析 Eureka 的源码: Eureka 的配置体系(已经写完,见Eureka详解系列(三)--探索Eureka强大的配置体系): Eureka Client ...

  4. Eureka详解系列(五)--Eureka Server部分的源码和配置

    简介 按照原定的计划,我将分三个部分来分析 Eureka 的源码: Eureka 的配置体系(已经写完,见Eureka详解系列(三)--探索Eureka强大的配置体系): Eureka Client ...

  5. Eureka详解

    该章节紧接第三章,主要是对一些理论上的指导,帮助更好的理解服务治理. 基础架构 eureka服务治理的基础架构包含三个要素: 1)服务注册中心:eureka提供服务端,提供服务的注册与发现功能. 注: ...

  6. Eureka详解系列(一)--先谈谈负载均衡器

    这个系列开始研究 Eureka,在此之前,先来谈谈负载均衡器. 本质上,Eureka 就是一个负载均衡器,可能有的人会说,它是一个服务注册中心,用来注册服务的,这种说法不能说错,只是有点片面. 在这篇 ...

  7. Eureka详解系列(三)--探索Eureka强大的配置体系

    简介 通过前面的两篇博客,我们知道了:什么是 Eureka?为什么使用 Eureka?如何适用 Eureka?今天,我们开始来研究 Eureka 的源码,先从配置部分的源码开始看,其他部分后面再补充. ...

  8. Spring Cloud系列(二):Eureka应用详解

    一.注册中心 1.注册中心演变过程 2.注册中心必备功能 ① 服务的上线 ② 服务的下线 ③ 服务的剔除 ④ 服务的查询 ⑤ 注册中心HA ⑥ 注册中心节点数据同步 ⑦ 服务信息的存储,比如mysql ...

  9. Java源码详解系列(十二)--Eureka的使用和源码

    eureka 是由 Netflix 团队开发的针对中间层服务的负载均衡器,在微服务项目中被广泛使用.相比 SLB.ALB 等负载均衡器,eureka 的服务注册是无状态的,扩展起来非常方便. 在这个系 ...

随机推荐

  1. angular4.0中form表单双向数据绑定正确姿势

    issue:用[(ngModel)]="property"指令双向数据绑定,报错. reason1:使用ngModel绑定数据需要注入FormsModule模块,在app.modu ...

  2. Protobuf使用(一)

    Protobuf使用(一)   前言:   最近由于接手一个支付的项目,他们那边的网络请求和数据解析都与我平常接触的项目不同,数据请求由于保密暂时不能说,但是数据解析用的是Protobuf,于是我就顺 ...

  3. Go Language 开发环境搭建

    [前言] Go语言是Google公司2009年发布的新一代的开发语言,其最大的亮点是原生自带并发,在合适的场合使用合适的代码,我们的系统将会更加完美.下面我们进行go语言的安装和配置. 一.下载安装 ...

  4. MySQL 基础命令

    的说法啊打发 第1章 SQL语句 mysql版本:针对mysql-5.6.36 版本 (5.7会有一些变动) 1.1 常用命令 # 查看数据库 mysql> show databases; sh ...

  5. 【转载】Linux下的IO监控与分析

    近期要在公司内部做个Linux IO方面的培训, 整理下手头的资料给大家分享下 各种IO监视工具在Linux IO 体系结构中的位置 源自 Linux Performance and Tuning G ...

  6. golang 类型断言的学习

    在php中有一个 serialize() 函数 可以把数组序列化成字符串进行存储和传输 如果想反序列化这种字符串,在php中只需要一个简单的unserialize() 函数就可以完成了.但是在gola ...

  7. MIPI协议-DSI

    对于现代的智能手机来说,其内部要塞入太多各种不同接口的设备,给手机的设计 和元器件选择带来很大的难度.下图是一个智能手机的例子,我们可以看到其内部存储.显示.摄像.声音等内部接口都是各不相同的.即使以 ...

  8. Arch Linux安装记录

    1.分区(MBR)# cfdisk 半图形界面,划分三个区:sda1 20G,sda2 80G,sda3 4G. 2.创建文件系统# mkfs.ext4 /dev/sda1# mkfs.ext4 /d ...

  9. 推荐几个不错的 java 教程和 HTML 教程

    Java入门第一季 Java入门第二季 2小时学会Spring Boot Java模板引擎之Freemarker HTML+CSS基础课程 H5+JS+CSS3实现七夕言情 jQuery基础系列

  10. SQL数据开发(经典) 基本操作

    数据开发(经典) 1.按姓氏笔画排序: Select * From TableName Order By CustomerName Collate Chinese_PRC_Str oke_ci_as ...