Eureka注册中心

简介

eureka是netflix的子模块之一,也是一个核心的子模块,eureka里有俩个组件

  • EurekaServer(一个独立的项目)这个是用于定位以实现中间层服务器的负载均衡和故障转移
  • EurekaClient(我们的微服务)它是用于与Server交互的,可以使得交互变得非常简单:只需要通过服务标识符即可拿到服务

Eureka负责管理记录服务提供者的信息

调用者无需自己寻找服务,而是把自己需求高速Eureka,然后Eureka会把符合你需求的服务告诉你,类似物业

springcloud封装了netflix公司开发的Eureka模块来实现服务注册和发现

原理

Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址

提供者:启动后向Eureka注册自己信息(地址,提供什么服务)

消费者:向Eureka订阅服务,Eureka会将对应的服务所提供者地址列表发送给消费者,并且定期更新

心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态,会监听有没有定期更新,如果长时间没有心跳

Ribbon

概述

实际环境中骂我们往往会开启很多个集群,此时我们获取的服务列表中就会有多个,到底该访问哪一个呢

spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具

Ribbon是netflix发布的开源项目,主要概念是提供客户端的软件均衡负载算法,将Netflix的中间层服务连接在一起

Ribbon是Netflix发布的负载均衡器,默认为我们提供了很多负载均衡算法,列入轮询,随机等.当然我们也可以Ribbon实现自定义负载均衡算法

在Springcloud中,当Ribbon与Eureka配合使用时,Ribbon可以动从Eureka Server获取服务提供者地址列表,给予负载均衡算法请求其中一个服务提供者实例

Feigen

在请求接口时,路径仍存在问题,只解决了服务名,没有解决服务后给你路径问题,因为有可能是别人开发的,你不知道后面功能路径是什么

Feign是一个声明式的WebService客户端,Feign使编写javahttp客户端变得更容易.fegin在RestTemplate基础上做了进一步的封装,由他来帮助我们定义和实现以来服务接口的定义

feign可以吧请求进行隐藏,你不用再自己拼接url,拼接参数等等操作,一切都交给feign去做,调用时,使用的复杂均衡,是当前客户端配置的负载均衡

Hystrix

雪崩问题

一个服务依赖于另一个服务的,如果这个功能服务挂掉了,那么依赖就不能再用了,这种级联的失败我们称之为雪崩

Hystrix简介

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等

Hystix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性

操作

降级

概念

当某个微服务的响应时间过程,或者不可用了,要把错误信息返回回来,或是一直卡在那,所以在服务端需要对调用不了的服务做降级。(不然那个微服务down掉了再做降级也没有什么意义了)

降级步骤

在服务调用方法添加依赖,启动类加入注解@EnableHystrix

熔断

熔断机制是应对雪崩小莹的一种微服务链路保护机制

当某个微服务不可用或者响应太长时间时,会进行服务降级,进而熔断该节点的微服务调用,返回错误的响应信息。
当检测到该节点微服务响应正常后恢复调用链路,在SpringCloud框架机制通过Hystrix实现,Hystrix会监控微服务见调用的状况,当失败的调用到一个阈值,缺省是5秒内20次调用失败就会启动熔断机制

限流

顾名思义就是限制某个微服务的使用流量

hystrix通过线程池的方式来管理你的微服务调用,他默认是一个线程池(10大小)管理你所有的服务

一个线程可用理解为一个请求,当10请求同事访问,都没有得到要响应的时候,就会自动调用fallback方法

zuul网关

api网关顾名思义,是统一管理api的一个网络关口,通道,是整个微服务平台所有请求的唯一入口,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能

没有网关:没有网关的时候用户可以随意访问一台微服务

有:有了网关后,请求必须要先经过网关,确定这个请求是否合法,如果合法,zuul会对其作出判断,转发到指定的微服务,也会自动帮助做负载均衡

概述

Zuul是netflix出品的一个基于jvm录音和服务端均衡负载器(网关)

zuul包含了对请求的路由和过滤俩个最主要的功能

  • 路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础
  • 过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础

zuul也作为一个客户端注册进Eureka

将Zuul自身注册为Eureka服务治理下的应用

同事Eureka中获得其他微服务的消息,也即永恒的访问微服务都是通过Zuul跳转后获得

过滤器

过滤器是zuul的核心组件zuul大部分功能都是通过过滤器来实现的

zuul中定义了4中标准过滤器类型

  • PRE:这种过滤器在请求被路由之前调用,可以利用这种过滤器实现身份认证,在急群众选择请求的微服务,记录调试信息等
  • ROUTING:这种过滤器将请求路由到微服务.这种过滤器用于侯建发送给微服务的请求,并使用Apache GttpClient或Netfilx Ribbon请求微服务
  • POST:这种过滤器在路由到微服务以后执行,这种过滤器可以用来为响应添加标准的HTTP Header ,收集统计信息和指标,将响应从微服务发送给客户端等
  • ERROR:在其他阶段发生错误时,执行该过滤器

以下是系统提供的默认过滤器

SpringCloudConfig

做项目就少不了配置微服务架构中,配置文件众多,每个服务的配置文件也有可能不一样,spring为我们提供了想要的配置中心组建Spingcloudconfig

他是一个配置管理中心,用于集中程序中各个环节下的配置,我们可以将配置通过git或svn方式推送到我们的应用程同Eureka一样,他也分为server端和clint端

优点

提供服务端和客户端的支持

集中式管理分布式环境下的应用与配置

给予Sping环境,无缝与spring应用集成

可用于任何语言开发的程序

默认实现基于git仓库,可以进行版本管理

可替换自定义实现

server

作为配置中心服务端,

拉去配置时更新git仓库副本,保证是最新结果,支持数据结构丰富,yml,json,properties等

配合eureka可实现服务发现,配合cloud bus可实现配置推送更新配置存储给予git仓库,可以进行版本管理

简单可靠,有丰富的配置方案

Client

springboot项目不需要改动任何代码加入体格启动配置文件指明ConfigServer哪个配置文件即可

Last modification:September 26, 2021
如果觉得我的文章对你有用,请随意赞赏