SpringCloud基本组件
一、SpringCloud是什么
SpringCloud是一套基于SpringBoot的微服务解决方案。最开始是由NetFilx开源的一些组件,但是由于这些组件已经进入了维护模式(不再进行更新发布,只对一些bug进行修复),于是Alibaba开发了一条组件来加强SpringCloud,SpringCloudAlibaba中基于NetFlix开发的组件进行了完善与提升。
SpringCloud的整个架构中的重要组件:
- 注册中心:Eureka(NetFilx)只能进行服务注册、服务消费、Zookeeper(单独的注册中心,可与Dubbo框架整合使用)、Nacos(Alibaba,既可以进行注册中心,也可以作为配置中心)
- 网关:SpringCloud Getaway
- 负载均衡:Ribbon
- 熔断与限流:Hystrix(NetFilx注解配置)、Sentinel(Alibaba,有完善的可视化窗口,且可以在可视化解密上对限流与熔断进行操控)
- 分布式的链路跟踪:Sleuth
- 服务接口调用:OpenFeign
二、组件的简单介绍
1、NetFilx公司的组件(进入维护模式)
1)EureKa注册中心
注册中心负责服务发现、服务注册,管理已注册的服务。包含两大组件:
- EureKa Server:服务提供者,在注册中心注册服务
- EureKa Client:服务消费者,通过服务注册中心远程消费已注册的服务
2)Ribbon负载均衡
本地式的负载均衡,不像Nginx的服务端载均衡,它是消费者获取到注册中心已注册的全部服务后,交由本地的JVM来进行负载均衡。
常见的两种负载均衡方式(使用Rule类来进行定义):
- RoundRobinRule:轮询
- RandomRule:随机
3)OpenFeign服务接口调用
接口调用:OpenFeign服务接口调用是在Feign基础上的完善,它内部集成了RestTemplate,我们无需再使用繁琐RestTemplate来进行调用,而是使用定义接口的方式,控制层直接调用接口即可(保证接口的类型与注解必须通服务方控制层一致)。
超时控制:OpenFeign默认超时一秒就报错,如果需要修改超时时间或者重试次数需要在application.yml文件中配置相关参数
日志打印:Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节。说白了就是对Feign接口的调用情况进行监控和输出。
4)Hystrix断路器
服务降级Fallback:由于出现异常或者拥塞,不进行调用并返回一个兜底方法。出现服务降级的几种方式:
- 程序运行异常
- 超时自动降级
服务熔断Breaker: 熔断器默认关闭,当发生异常或者调用超时时,熔断器打开,此时服务都不调用,等待一段时间后尝试发送调用请求,成功的话就关闭断路器。
服务限流Flowlimit:避免高并发,大量请求同时进行,超过就进行降级或熔断
服务监控hystrixDashboard:对于服务调用的情况进行可视化图像显示
2、SpringCloud的组件
1)网关Gateway
网关在微服务中处于调用之上负载均衡之下的那部分,负责对请求的过滤及其他处理。主要由三部分组成:
- 路由Route:由一系列断言加过滤组成,判断路由是否匹配,如果断言为true则匹配该路由
- 断言Predicate:为路由匹配提供条件,即判断标准
- 过滤Filter: Filter的作用在于对拦截到的请求在被路由前后进行修改
2)分布式链路请求跟踪Sleuth
Sleuth的作用在于对分布式的调用链路进行跟踪,使用zipkin进行显示化。以便我们对于微服务的调用链路有明确的认识,有利于排错与优化分布式系统
3、SpringCloudAlibaba
1、Nacos(注册中心加配置中心):整合了Ribbon、EureKa、Figure
1)注册中心
类似于EureKa,但是配置方式有所不同,使用EnableDiscoveryClient来标注服务需要被注册中心管理,而且图形化界面更加完善与美观。
2)配置中心
可以在Nacos的可视化界面中进行参数的配置,从而修改服务端的参数,而且支持热部署。参数的配置文件默认会持久化在Nacos的自带derby数据库中,与可以与MySQL数据库进行整合,把配置文件持久化在MySQL数据库中。使用Namespace+Group+Data ID来标识配置文件,最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
2、Sentinel实现熔断与限流
使用Sentinel在可视化界面上进行限流以及熔断的处理。
1)流量控制:
- 阈值类型:QPS每秒请求数、线程数
- 流控模式:直接(直接控制资源)、关联(如果关联的资源被降级,则被管理的也会降级)、链路(指定链路上的流量控制)
- 流控效果:快速失败(直接降级)、WarmUp(根据冷加载因子,对阈值进行处理,即开始时的阈值更小,一段时间后正常阈值)、排队等待(匀速排队,阈值必须设置为QPS)
2)降级规则:
与Hystrix不同的是,指按照自己的规则进行降级,如果发生了异常不做降级处理
- 慢调用比例:调用时间超过阈值的调用次数除以总调用次数
- 异常比例:异常的调用所占比例
- 异常数:发生异常的调用
3)热点Key限流
对于一些需要大量调用的参数进行限流,可以根据参数的索引和类型进行限流处理
4)@SentinelResource
自定义降级方法,可以定义降级类,减少代码耦合和冗余。
- 按URL地址限流:调用默认的降级方法
- 按资源名限流:调用自定义的降级方法
5)规则持久化
将规则参数Json持久化,写在Nacos的配置中心,由于配置中心存在derby数据库,可以实现规则的持久化。
标签:降级,调用,重要,SpringCloud,限流,注册,组件,服务 From: https://www.cnblogs.com/magicsound/p/16856938.html