1、SpringCloud常⽤组件有哪些
最常⽤的5个组件是Nacos、Gateway⽹关、Feign远程调⽤、Sentinel熔断降级和Ribbon负载均衡,其中Nacos是eureka的升级版,是阿⾥巴巴开发的,不仅仅可以作为注册中⼼,还可以作为配置中⼼
1.1. 注册中⼼
服务提供者在启动时,会将⾃⼰的元数据信息注册到Nacos服务器中,同时Nacos也会对注册的服务进⾏
⼼跳检测,以确保服务的可⽤性,服务消费者在需要调⽤服务时,可以通过Nacos的服务发现功能获取
服务提供者的地址列表,从⽽实现负载均衡和服务调⽤
1.2 配置中⼼
配置中⼼则是负责管理应⽤程序的配置信息,nacos提供了⼀个可视化的配置管理界⾯,⽀持多种格式的
配置⽂件,⽀持动态配置管理,当配置信息发⽣变化时,Nacos会⾃动推送最新的配置信息给应⽤程
序,从⽽实现配置的实时更新
1.3 ⽹关Gateway
⽤于实现服务的路由、负载均衡、过滤和熔断等功能。采⽤了异步⾮阻塞的模型,采⽤Netty作为底层的
HTTP库,提⾼了⽹关的吞吐量和性能。
⽹关中的过滤器:
-
默认过滤器(只能使⽤SpringCloudGateway⾃带的过滤器)
-
路由过滤器(只能使⽤SpringCloudGateway⾃带的过滤器)
-
全局过滤器(创建⼀个类实现GlobalFilter接⼝,重写filter⽅法.可⽤于鉴权)
-
三种过滤器默认执⾏顺序(默认 -> 路由 -> 全局)全局过滤器实现Ordered接⼝,重写
1.4. Feign远程调⽤
- 定义接⼝:在Feign客户端的接⼝中定义需要调⽤的远程服务的⽅法,使⽤注解指定服务名称、请求
⽅式、请求路径、请求参数,响应结果等信息。
- 解析接⼝:在应⽤启动时,Feign会扫描所有带有@FeignClient注解的接⼝,并将其解析成可执⾏的
HTTP请求,⽣成动态代理对象并保存在Spring的容器中。
- 发起请求:当应⽤调⽤Feign客户端的接⼝⽅法时,Feign中依赖的ribbon组件会去获取
@FeignClient注解中name属性的值,即服务名,通过这个服务名去找注册中⼼拉取服务提供者列
表,缓存到本地。基于负载均衡的⽅式选择⼀个服务提供者,根据接⼝声明的⽅法上的请求路径,
请求参数,请求⽅法,发送http请求
- 响应结果:远程服务接收到请求后,会根据请求路径和请求参数执⾏相应的逻辑,并将结果封装成
HTTP响应返回。Feign客户端接收到响应后,根据响应结果类型进⾏反序列化,并返回给应⽤程
序。以接⼝和注解的⽅式,实现对HTTP请求的映射和调⽤
1.5. Sentinel熔断降级
Sentinel是⼀款开源的服务治理组件,主要提供流量控制、熔断降级和系统负载保护等功能。熔断
降级是指在分布式系统中,即当系统出现异常或不可⽤时,通过断路器的⽅式将请求快速失败,避免请
求不断堆积,引起系统的崩溃(雪崩)。Sentinel在防⽌微服雪崩上有以下4种⽅案:
-
超时处理:设定超时时间,请求超过⼀定时间没有响应就返回错误信息,不会⽆休⽌等待
-
舱壁模式:限定每个业务能使⽤的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离
-
熔断降级:由断路器统计业务执⾏的异常⽐例,如果超出阈值则会熔断该业务,拦截访问该业务的
⼀切请求。
- 流量控制:限制业务访问的QPS,避免服务因流量的突增⽽故障。
1.6. Ribbon负载均衡
主要作⽤是在服务消费者与服务提供者之间进⾏负载均衡,将请求分发到不同的服务实例上,从⽽
提⾼系统的可⽤性和性能。Ribbon通过向注册中⼼获取服务实例信息,并通过算法选择合适的实例进⾏
请求转发,从⽽实现负载均衡。可以通过配置不同的负载均衡策略,实现不同的负载均衡⽅式,如轮
询、随机、加权随机、最少活跃数