Spring Cloud 浅显入门理解
Spring Cloud
负载均衡 Ribbon
RestTemplate
是Spring
提供的一个访问 Http 服务的客户端类
为什么需要 Ribbon?
Ribbon
是 Netflix
公司的一个开源的负载均衡 项目,是一个客户端/进程内负载均衡器,运行在消费者端。
Nginx 和 Ribbon 的对比
Nignx
是一种集中式的负载均衡器,就是将所有请求都集中起来,然后再进行负载均衡。
Ribbon 的几种负载均衡算法
负载均衡,不管 Nginx
还是 Ribbon
都需要其算法的支持,如果我没记错的话 Nginx
使用的是 轮询和加权轮询算法。而在 Ribbon
中有更多的负载均衡调度算法,其默认是使用的 RoundRobinRule
轮询策略。
-
RoundRobinRule
:轮询策略。Ribbon
默认采用的策略。若经过一轮轮询没有找到可用的provider
,其最多轮询 10 轮。若最终还没有找到,则返回null
。 -
RandomRule
: 随机策略,从所有可用的provider
中随机选择一个。 -
RetryRule
: 重试策略。先按照RoundRobinRule
策略获取provider
,若获取失败,则在指定的时限内重试。默认的时限为 500 毫秒。
Open Feign
每次都调用 RestRemplate
的 API
太麻烦
OpenFeign
也是运行在消费者端的,使用Ribbon
进行负载均衡,所以OpenFeign
直接内置了Ribbon
。
Hystrix
什么是 Hystrix 之熔断和降级?
总体来说 Hystrix
就是一个能进行 熔断 和 降级 的库,通过使用它能提高整个系统的弹性。
所谓 熔断 就是服务雪崩的一种有效解决方案。当指定时间窗内的请求失败率达到设定阈值时,系统将通过 断路器 直接将此请求链路断开。
熔断 就是指的 Hystrix
中的 断路器模式 ,你可以使用简单的 @HystrixCommand
注解来标注某个方法,这样 Hystrix
就会使用 断路器 来“包装”这个方法,每当调用时间超过指定时间时(默认为 1000ms),断路器将会中断对这个方法的调用。
降级是为了更好的用户体验,当一个方法调用异常时,通过执行另一种代码逻辑来给用户友好的回复。这也就对应着 Hystrix
的 后备处理模式。你可以通过设置 fallbackMethod
来给一个方法设置备用的代码逻辑。
微服务网关—Zuul
网关是系统唯一对外的入口,介于客户端与服务器端之间,用于对请求进行鉴权、限流、 路由、监控等功能。
网关有的功能,Zuul
基本都有。而 Zuul
中最关键的就是 路由和过滤器 了
-
Zuul 的路由功能
需要在启动类上加入
@EnableZuulProxy
注解 -
Zuul 的过滤功能
能实现 限流,灰度发布,权限控制 等等
要实现自己定义的
Filter
我们只需要继承ZuulFilter
然后将这个过滤器类以@Component
注解加入 Spring 容器中就行了过滤器类型:
Pre
、Routing
、Post
。前置Pre
就是在请求之前进行过滤,Routing
路由过滤器就是路由策略,而Post
后置过滤器就是在Response
之前进行过滤的过滤器。
Zuul
作为网关肯定也存在 单点问题 ,如果我们要保证 Zuul
的高可用,我们就需要进行 Zuul
的集群配置,这个时候可以借助额外的一些负载均衡器比如 Nginx
。
配置管理—Config
既能对配置文件统一地进行管理,又能在项目运行时动态修改配置文件呢?
Spring Cloud Config
为分布式系统中的外部化配置提供服务器和客户端支持。使用Config
服务器,可以在中心位置管理所有环境中应用程序的外部属性。
简单来说,Spring Cloud Config
就是能将各个 应用/系统/模块 的配置文件存放到 统一的地方然后进行管理(Git 或者 SVN)。
在应用运行时去更改远程配置仓库(Git)中的对应配置文件,那么依赖于这个配置文件的已启动的应用不会进行其相应配置的更改。所以会使用 Bus
消息总线 + Spring Cloud Config
进行配置的动态刷新。
Spring Cloud Bus
简单理解为 Spring Cloud Bus
的作用就是管理和广播分布式系统中的消息,也就是消息引擎系统中的广播模式。当然作为 消息总线 的 Spring Cloud Bus
可以做很多事而不仅仅是客户端的配置刷新功能。
拥有了 Spring Cloud Bus
之后,我们只需要创建一个简单的请求,并且加上 @ResfreshScope
注解就能进行配置的动态修改