SpringCloud中的eureka服务治理组件

eureka服务治理

netflix公司(视频网站)的服务注册发现机制的技术,被springcloud拿来实现服务治理,springcloud中唯一可以使用的一个服务治理组件.springcloud核心组件,没有这个组件,无法实现其他的微服务功能.

eureka的功能

eureka组件两个角色
搭建的功能可以使用eureka不同角色实现服务治理的不同功能
客户端:eureka-client,就是配合拆分的项目(springboot-user,springboot-order),实现注册与发现.
服务端:eureka-server,管理所有的注册信息.
eureka治理组件的结构
在这里插入图片描述

搭建springboot的eureka-server的过程

一旦依赖了eureka-server springboot自动实现整个配置过程,启动时与运行eureka-server进程

搭建的eureka-server名字叫做注册中心。默认情况下把当前工程运行的进程既看成服务端,也堪称是客户端(默认自己在自己的注册中心注册自己的服务信息)

服务名称:高可用时,多个eureka-server公用的一个服务名称

ip优先:如果不设置ip优先,所有治理通信使用域名,本机localhost无法在服务器集群中使用,true使用网卡ip地址

关闭抓取:由于注册中心自己把自己看成eurekaclient,如果不关闭注册抓取,会在启动时报错,找不到服务端.

注册中心地址:高可用结构中,多个注册中心相互注册时配置的值.

配置启动类
@EnableEurekaServer
访问http://localhost:8761观察控制台
多个客户端注册的结构上可以通过控制台观察注册信息(目前注册信息是空的)
在这里插入图片描述搭建eureka-client客户端工程
客户端功能需要携带信息到注册中心注册数据,等待被别人(外界客户端,外界浏览器,内部其他服务)调用发现.所以eureka-client基本都是微服务.

quickstart
pom文件
继承自定义父级工程(1.5.9.RELEASE的springboot)
依赖:
eureka-client依赖

<!--eureka-client-->

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-eureka</artifactId>

</dependency>
 

application.properties
端口 8091
服务名称 service-hi
ip-prefer
注册中心地址
默认注册和抓取就是true,不需要单独配置
server.port=8091

spring.application.name=service-hi

#eureka -client

eureka.instance.prefer-ip-address=true

eureka.client.service-url.defaultZone=http://localhost:8761/eureka

启动类
@EnableEurekaClient

准备一个测试功能
以端口号为标识,返回一个helloworld 的字符串(区分集群中到底访问的是哪个服务实例)

import org.springframework.beans.factory.annotation.Value;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;
@RestController

public class HiController {

    //使用属性读取一个端口号

    @Value("${server.port}")

    private String port;

    //测试访问案例,携带参数name 返回hello world 端口号

    @RequestMapping(value="/client/hello",method=

            {RequestMethod.GET,RequestMethod.POST})

    public String sayHi(String name){

        return "helloworld eureka "+name+",i am from "+port;

    }

}

创建一个service-hi服务的集群
注册中心,管理一个服务(通过服务名称判断是否是同一个服务)的所有注册者信息

利用一个注册中心心中,启动多个后端服务工程,注册同一个服务名称实现服务集群的创建

eureka治理组件的原理

eureka客户端:
通过配置注册中心地址 http://localhost:8761/eureka, 对客户端提供了一个可以访问注册中心的接口地址,客户端总会通过http请求访问这个地址实现各种功能的调用.

注册: 客户端会在启动时,携带自身信息(服务名称,ip地址,端口号,等等),在注册中心维护一份注册信息,注册的开启与关闭就是通过配置eureka.client.register-with-eureka实现的
抓取: 客户端会访问注册中心服务端,实现每隔30秒中抓取一次注册中心的注册信息
心跳:客户端为了保证让服务端总是记录自己的信息而不做超时剔除,会每隔30秒钟发送一次心跳
eureka服务端
管理注册:根据请求过来的客户端携带的信息,在内存中生成一份当前微服务集群里所有微服务服务信息数据(双层map),而客户端抓取的注册信息就是这个双层map对象.双层map代码结构
map<String,map<String,Instance>>

第一层map的key值:服务名称,整个集群中,同一个服务名称只能在一个注册中心中存在一个key

第一层map的value值:第二层map对象

第二层map对象的key值: 实例名称.默认结构 域名:服务名称:端口号

第二层map对象的value值:该实例的详细信息,包含ip 端口 时间戳等

判断超时监听:
通过每隔60秒中,判断一次注册信息中所有实例的最后时间戳是否超时(距离现在时间)90秒没有客户端发送心跳检测,如果超过时间点,将会把实例从map对象中key-value剔除

保护机制:
为了防止由于网络波动导致的大面积的服务提供者未能有效的发送心跳续约,从而按照超时逻辑被剔除,而被提出的服务并没有宕机故障。会造成微服务不可用,甚至瘫痪。所以出现了保护机制。当eureka服务端,一次性判断大量服务宕机故障(15%以上),属于不正常剔除。开启保护机制,保存所有微服务不剔除。阈值(15%)测试环境中非常容易达到

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

观察超时剔除可以关闭自我保护机制:

在注册中心中,关闭配置属性

eureka.server.enable-self-preservation=false

eureka治理中专业名词

注册中心:不要把他单独堪称服务端,也具备客户端角色

服务提供者(服务实例):都是客户端所在的工程

eureka的高可用结构

客户端集群:一旦将多个客户都安服务提供者启动后注册在注册中心,为同一个服务提供调用功能,这个集群就是高可用。
注册中心高可用:目前结构只有一个注册中心。没法形成高可用。一定要形成注册中心的集群。
原理:将多个(2个)注册中心,相互作为客户端进行注册,相互抓取注册信息同步数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值