springcloud组件简介

Spring Cloud作为Java语言的微服务框架,它依赖于Spring Boot,有快速开发、持续交付和容易部署等特点。Spring Cloud的组件非常多,涉及微服务的方方面面。主要功能有:服务的注册和发现,服务的负载均衡,服务的容错,服务网关,服务配置的统一管理,链路追踪,实时日志等。常用的组件有Spring Cloud Netflix组件下的,服务注册与发现组件 Eureka、网关路由组件Zuul、负载均衡组件Ribbon、声明式调用Feign、熔断器组件Hystrix。

一、服务治理Eureka:

Eureka服务注册与发现,Eureka包含两个组件:Eureka Server和Eureka Client,分别为Eureka的注册中心和客户端。这个注册中心是整个springcloud组件的注册中心,eureka客户端以及其他的组件都可以注册到上面去。底层使用ConcurrentHashMap保存多个实例信息。

二、客户端负载均衡Ribbon:

是一个基于http和tcp的客户端负载均衡组件,简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)。
常见的负载均衡有软件Nginx,硬件 F5等。

三、服务容错保护Hystrix

熔断器。在分布式系统中,服务与服务之间的依赖错综复杂,一种不可避免的情况就是某些服务会出现故障,导致依赖于它们的其他服务出现远程调度的线程阻塞。Hystrix提供了熔断器功能,能够阻止分布式系统中出现联动故障。Hystrix是通过隔离服务的访问点阻止联动故障的,并提供了故障的解决方案,从而提高整个分布式系统的弹性。

Hystrix的三个特性:断路器机制、Fallback、资源隔离

断路器机制:当Hystrix Command请求后端服务器失败数量超过一个阈值比例,断路器就会切换到开路状态

Fallback:降级回滚策略

资源隔离:不同的微服务调用不同的线程池来管理

基础服务的故障可能会导致级联的故障,进而造成整个系统不可用的情况,即服务雪崩

四、声明式服务调用feign:

1、介绍:

整合了ribbon和Hystrix,除此之外还提供了一种申明式的web服务客户端定义方式。

Feign定义接口,并在接口上添加注解,消费者通过调用接口的形式进行消费。Feign采用了声明式API接口,将Java Http 客户端绑定到它的内部。Feign可以整合Hystrix,实现熔断降级的功能。微服务之间存在着相互调用的场景,Ribbon和Feign就是为了解决微服务之间的服务调用。不同点在于,feign提供接口的形式,更符合java封装的思想,两者二选一即可。feign和ribbon都是提供controller接口给外部调用,feign封装service接口供controller调用,这个service接口头使用@FeignClient注解,接口名和eureka-client的服务接口名一致;而ribbon封装service类给controller调用,service方法使用RestTemplate调用eureka-client的接口。

2、参数配置

因为feign整合了ribbon和hystrix,所以feign也拥有这两者的配置。

2.1、ribbon配置:

由于feign的客户端负载均衡是通过ribbon实现的,所以可以直接通过配置ribbon客户端的方式来自定义各个服务客户端调用的参数。

(1)全局配置

通过ribbon.<key> = <value>的方式来配置ribbon的各项默认参数,如修改默认的客户端调用超时时间

ribbon.ConnectTomeout = 1000;
ribbon.ReadTimeout = 2000;
(2) 指定服务配置:

以设置超时时间为例,如需指定服务,可以使用@FeignClient注解中的value或name属性值来设置对应服务的ribbon参数,如

my-service.ribbon.ConnectTomeout = 1000;
my-service.ribbon.ReadTimeout = 2000;
my-service.ribbon.OkToRetryOnAllOpretions= true;
2.2、hystrix配置: 

(1)全局配置:

(2)禁用hystrix

(3)指定命令配置:

(4)服务降级配置: 在feign中,服务降级逻辑的实现只需要为feign客户端的定义接口编写一个具体的实现类,在重写方法时定义相应的服务降级逻辑,然后通过@FeignClient注解的fallback属性来指定对应的服务降级实现类。如:

测试:启动eureka-service和feign,但是不启动eureka-client,然后访问feign接口

2.3、其他配置

(1)请求压缩

(2)日志配置

五、gateway网关

1、介绍:

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。Gateway网关是我们服务的守门神,所有微服务的统一入口。

从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、协议转换、限流熔断、静态响应处理。

API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API

2、网关的核心功能特性
2.1、权限控制:

(身份验证、权限校验)。网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。

2.2、请求路由

(服务路由、负载均衡)。一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。

2.3、限流

当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大。

3、与zuul的区别

在SpringCloud中网关的实现包括两种:zuul和gateway。

(1)Zuul是基于Servlet的实现,属于阻塞式编程。本质上是一个Web Servlet应用。Zuul 提供了动态路由、监控等服务,这些功能实现的核心是一系列的filters(过滤器)

(2)SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 2.0之前的非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。

4、与nginx区别

Nginx适合做门户网关,是作为整个全局的网关,对外的处于最外层的那种;而Gateway属于业务网关,主要用来对应不同的客户端提供服务,用于聚合业务。各个微服务独立部署,职责单一,对外提供服务的时候需要有一个东西把业务聚合起来。

六、分布式配置中心Spring Cloud Config:

SpringCloud Config 配置中心。为分布式系统提供了配置服务器和配置客户端,通过对它们的配置,可以很好地管理集群中的配置文件。Spring Cloud Sleuth 服务跟踪框架,可以 Zipkin Apache HTrace ELK 等数据分析、服务跟踪系统进行整合,为服务跟踪、解决问题提供了便利。

七、消息总线Bus:

八、消息驱动的微服务Stream:

九、分布式服务跟踪Sleuth:



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值