SpringCloud源码分析(一)--Eureka服务基础知识

一、前言

上两节已经搭建了一个简单的Eureka的服务注册中心和服务提供者或者服务消费者,因为有时候服务消费者也是服务提供者,这两者划分没有那么清楚的界限。本节主要介绍一些跟Eureka相关的知识。了解它们到底有什么特点和功能。

二、Eureka基础知识

本节主要将Eureka分为基础架构和服务治理两个方向描述

2.1、基础架构

在基础架构中,Eureka主要分为服务注册中心,服务提供者和服务消费者。

2.2、服务治理机制

先来看一下很基础的服务治理机制的简单示意图:

根据每一个的通信行为做具体介绍:

2.2.1、服务提供者

根据上图,服务提供的基础功能分为:(1)服务注册;(2)服务续约;(3)服务下线

(1)服务注册

服务提供者在启动的时候会通过REST请求向服务注册中心,同时会携带上自己的一些元数据信息。服务注册中心接收到注册信息后,会将信息保存在一个双层的MAP中,第一层的key就是服务的名称,第二层的key是具体服务的实例。所以在服务提供者启动时,确保对应的参数eureka.client.register-with-eureka=true,或者这个参数不配置也行,因为其默认就是true。

(2)服务续约

注册完成以后,服务提供者会保持一个心跳给服务注册中心,告诉服务注册中心:”老子还活着,你不要抽风把我从服务实例给剔除了“,这个就叫做服务续约。
在服务续约中会有两个重要的参数:
  <1>eureka.instance.lease-renewal-interval-in-seconds
这个是表示服务提供者向服务注册中心续约的时间间隔,默认是30秒
  <2>eureka.instance.lease-expiration-duration-in-seconds
这个是服务过期的时间,默认是90秒
(3)服务下线

服务在运行过程中不可避免的存在重启或者升级等问题,在服务关闭期间,不希望服务注册中心将消费者的请求I分配到这个服务上,所以在服务正常关闭的时候,会发送一个REST的请求给注册中心,注册中心接受到请求以后,会把对应的服务的状态设置为DOWN,并把下线事件传播出去

其中最主要的就是服务注册和续约功能。

2.2.2、服务消费者

根据上图,服务消费者的功能主要是:(1)获取服务;(2)服务的调用

(1)获取服务

服务消费者启动的时候,会向服务注册中心发送一个REST的请求,来获取服务注册中心上的服务实例清单。Eureka Service 为了性能的考虑,自己维护了一个只读属性的缓存服务清单返回给客户端,并且缓存服务清单默认是30秒刷新一次。
为了服务消费者能够获取到服务注册中心的服务实例清单,eureka.client.fetch-registry必须设置为true,或者在配置文件中不写,因为Eureka默认其为true。
如果希望修改 缓存服务清单的刷新时间,可以通过修改参数eureka.client.registry-fetch-interval-seconds

(2)服务的调用

服务消费者人获取服务实例清单以后,自然是需要调用对应 服务。他是通过服务名称来获取服务的实例和服务相关的元数据信息,服务消费者就可以自行决定要调用哪一个服务实例。例如Ribbon就是一个典型的客户端的负载均衡的应用。

2.2.3 、服务注册中心

根据上图,服务注册中心主要特色是:(1)失效剔除;(2)自我保护机制

(1)失效剔除

有时候服务不一定是正常的下线,有很多因素导致服务不能正常工作,这个时候服务注册中心不能接收到服务的下线通知,但是一直保持维护一个无效的服务实例,会给服务消费者造成错觉,这个服务还在,能够影响请求。所以为了剔除无法提供服务的实例,Eureka Service启动的时候会启动一个定时任务,来将一段时间没有进行续约的服务剔除,默认是60秒会检查一边服务清单中超过90秒没有续约的服务,然后将其剔除。

(2)自我保护机制

在我本本地开发测试的时候,注册中心很容易出现一个EMERGENCY!的红色警告,这个是因为Eureka Service有一个自我保护的机制,Eureka Service在运行期间会统计心跳失败的比例,即是在15分钟内,是否低于85%,如果低于这个比例,Eureka Service会将当前的实例注册信息保护起来,让这些实例不过期,尽量保护这些注册信息。但是很容易造成一个问题,就是在这段保护期内,客户端很容易再次拿到已经不能提供服务的实例,出现调用失败的情况,所以一般要求客户端最好有容错机制。
可以通过参数将其自我保护机制关闭:
eureka.server.enable-self-preservation为false

原文地址:https://www.cnblogs.com/ahzxy2018/p/9978492.html

时间: 2024-11-09 03:12:11

SpringCloud源码分析(一)--Eureka服务基础知识的相关文章

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

http://www.idouba.net/spring-cloud-source-eureka-client-api/?utm_source=tuicool&utm_medium=referral *************************** 先关注下netflix eureka server 原生提供的接口.https://github.com/Netflix/eureka/wiki/Eureka-REST-operations 这是对非java的服务使用eureka时可以使用的r

Eureka 源码分析之 Eureka Client

文章首发于微信公众号<程序员果果>地址:https://mp.weixin.qq.com/s/47TUd96NMz67_PCDyvyInQ 简介 Eureka是一种基于REST(Representational State Transfer)的服务,主要用于AWS云,用于定位服务,以实现中间层服务器的负载平衡和故障转移.我们将此服务称为Eureka Server.Eureka还附带了一个基于Java的客户端组件Eureka Client,它使与服务的交互变得更加容易.客户端还有一个内置的负载均

Eureka源码分析:Eureka不会进行二次Replication的原因

Eureka不会进行二次同步注册信息 Eureka会将本实例中的注册信息同步到它的peer节点上,这是我们都知道的特性.然而,当peer节点收到同步数据后,并不会将这些信息再同步到它自己的peer节点上.如果有A, B, C三个实例,A配B, B配C, C配A, 那么当向A注册一个新服务时,只有A, B两个Eureka实例会有新服务的注册信息,C是没有的.这一点在官方wiki上并没有明确说明.下面通过源码来查找一下原因. 构建 Eureka当前版本 (https://github.com/Net

Flask源码分析一:服务启动

前言 Flask是目前为止我最喜欢的一个Python Web框架了,为了更好的掌握其内部实现机制,这两天准备学习下Flask的源码,将由浅入深跟大家分享下,其中Flask版本为1.1.1. Flask系列文章: Flask开发初探 正文 本文将结合源码跟踪看下Flask是如何启动并运行一个服务的. 首先,继续贴上最简单的应用: from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): retu

dubbo源码学习(一)基础知识及使用的相关技术

初学dubbo的源码,只做尝试性的去学习,做为自己学习的一个记录,各位看官如果觉得写的有错误或理解的不对,请在留言区告诉我,互相学习.本人能力有限,有大神进入 时请指点. Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合),我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配置就能够实现分布式服务调用,也就

SpringCloud源码分析(一)--客户端搭建

一.前言 上一节的注册中心搭建完成了,本节开始搭建客户端,其实对于springcloud的Eureka注册中心而言,他本身就是服务端也是客户端,我们上节待见服务端注册中心的时候,已经通过配置来设置其不向自己注册,和不去检索服务的功能,保持了其作为服务注册中心的相对的功能单一性. 二.pom文件 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte

Dubbo源码分析(十):服务发布

服务发布是服务提供方向注册中注册服务过程,以便服务消费者从注册中心查阅并调用服务. 服务发布方在spring的配置文件中配置如下: <bean id="demoService"class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" /> 上面是在spring中配置的服务的具体实现,是spring中的一个普通的bean <dubbo:serviceinterface="com.alib

(转)OpenFire源码学习之一:XMPP基础知识

转:http://blog.csdn.net/huwenfeng_2011/article/details/43412919 前面两张主要讲基础部分.XMPP与Mina有部分抄写于互联网的其他大事 XMPP概述 XMPP: The Extensible Messaging and Presence Protocol 中文全称:可扩展通讯和表示协议 Xmpp是一种类似于http的通讯传输协议,它是一个“包装”/“解包”的过程. XMPP适合新项目的优势: l  无需投入成本制定协议 l  易于扩展

Spring Cloud Eureka服务注册源码分析

Eureka是怎么work的 那eureka client如何将本地服务的注册信息发送到远端的注册服务器eureka server上.通过下面的源码分析,看出Eureka Client的定时任务调用Eureka Server的Reset接口,而Eureka接收到调用请求后会处理服务的注册以及Eureka Server中的数据同步的问题. 服务注册 源码分析,看出服务注册可以认为是Eureka client自己完成,不需要服务本身来关心. Eureka Client的定时任务调用Eureka Se