SpringCloud组件功能总结
SpringCloud技术组件图

服务注册中心
服务注册中心是指集中管理微服务实例信息的组件,主要管理微服务实例的名称,状态,主机,端口等信息,当微服务实例的状态发生变化(健康/故障)后,根据一定策略保留或删除微服务实例。服务注册中心是实现高可用分布式微服务系统的基础,为了实现高可用,一般服务注册中心和微服务实例都采用集群化配置。
Eureka
Eukeka是Netflix开发的服务发现框架,包含服务端和客户端,功能是提供服务注册和服务发现。在SpringBoot中集成eureka十分简单,因为SpringCloud已经把eureka整合进来,只要在pom中导入spring-cloud-starter-netflix-eureka-server或spring-cloud-starter-netflix-eureka-client依赖,然后在application.properties中对eureka进行配置,最后在主程序上添加@EnableEurekaServer或@EnableEurekaClient注解即可。
Eureka在CAP原则中满足AP原则,即可用性(Availability)和分区容错性(Partition tolerance)。在开启自我保护模式时,当微服务实例发生故障后,eureka不会立刻将其移除,而是等待其恢复。
ZooKeeper
ZooKeeper是Apache开发的分布式应用程序协调组件,主要功能有配置维护,分布式同步以及服务注册等等。利用ZooKeeper作为服务注册中心的开发流程和Eureka类似,都是导入依赖,添加配置等。
ZooKeeper在CAP原则中满足CP原则,即一致性(Consistency)和分区容错性(Partition tolerance)。当服务实例发生故障后,在一定时间后或无法收到一定次数的心跳后,ZooKeeper将会将其移除。
Consul
Consul是HashiCorp开发的服务发现和配置组件,主要功能是提供服务发现和配置共享。将Consul作为服务注册中心的开发流程和Eureka类似,都是导入依赖,添加配置等。
Consul在CAP原则中和ZooKeeper一样满足CP原则,当服务发生故障后,会在一定时间后移除服务实例。Consul和Eureka一样自带Web管理界面,方便查看微服务实例的注册信息。
服务调用与负载均衡
服务调用是指微服务通过HTTP,RPC等方式调用其他服务的过程。为了提高微服务系统的可用性,服务提供者一般会形成集群,此时服务调用者如何选择调用目标,使得调用成功率较高,避免一直访问繁忙的机器,就成为一个值得探讨的问题。为了解决这个问题就需要引入负载均衡的概念。负载均衡是指通过一些算法将服务调用产生的负载以尽可能“均衡”的方式平摊到被访问的服务,比较常用的算法有轮询法,随机法,最小连接数法等等。
Ribbon
Ribbon是Netflix开发的基于HTTP和TCP的客户端负载均衡工具,后来被SpringCloud整合成为SpringCloud微服务体系中的负载均衡组件。Ribbon自带了一些常见的负载均衡算法,如轮询法和随机法等,默认使用轮询法,如果要修改默认的算法是只需要配置一个IRule类型的Bean即可,并且它支持开发者自定义负载均衡算法,只需要实现IRule接口即可,因其灵活性和易用性,使它广受开发者的青睐。Ribbon可以和SpringCloud自带的RestTemplate工具类结合使用,只需要配置一个RestTemplate类的Bean,并添加@LoadBalanced注解,就能起到负载均衡的效果。
OpenFeign
OpenFeign是SpringCloud下的一个子项目,前身是已经停更的Feign,是一个服务调用组件,并且由于它基于Ribbon,因此具有负载均衡的功能。OpenFeign通过对服务提供方进行接口绑定,并添加FeignClient注解,高度封装了服务调用的过程,简化了使用Ribbon调用服务的开发量。
服务降级
服务降级是一个广义的概念,他是为了解决微服务架构中会出现的雪崩效应而提出的。微服务架构由于其分布式、轻量级、体量小的特点,当一个服务需要完成的业务较复杂时,它可能需要调用很多其它服务,而它所调用的服务也很可能依赖别的服务,因此很容易形成较长的服务调用链。当服务调用链中的一环出现异常或宕机导致长时间的阻塞后,所有调用该故障服务的服务也将阻塞,并且请求还在不断地接收,最终引发雪崩效应,拖垮了整个系统。
为了防止雪崩效应的发生,需要引入服务降级的概念。广义的服务降级包含三个部分:服务降级、服务熔断和服务限流。
第一个服务降级是狭义的服务降级,是指当服务发生异常,超时等意外情况时,能够快速地返回一个友好的备用结果,避免长时间的阻塞。
第二个服务熔断是指当服务在一定时间段内的处理失败次数超过一定阈值后,服务熔断将从关闭状态变为开启状态,当服务熔断处于开启状态时,如果该接口被调用,那么它都会直接返回备用结果。在经过一段时间后,服务熔断会变为半开状态,并尝试处理一些请求,如果成功率较高,那么说明故障已经被排除,此时服务熔断将从半开状态变为关闭状态。
第三个服务限流是指对服务的请求进行限制,当每秒的请求超过一定数量后,多余的请求将被快速失败或者直接丢弃。
Hystrix
Hystrix是Netflix开发的面向微服务架构的,提供服务降级,熔断,限流机制的组件。使用Hystrix可以为微服务系统提供服务降级、服务熔断、服务限流等特性,只需要在pom中导入hystrix依赖,然后在application.properties中对hystrix进行配置,最后在需要关注的服务方法上添加@HystrixCommand注解,并配置注解参数即可。注意@HystrixCommand是标注在Service方法上而不是Controller方法上的。使用Hystrix时,当Service方法的数量增多时,如果对每一个Service方法都配置一个fallback方法会导致代码膨胀的问题,此时可以通过配置一个默认的全局fallbacak方法来解决该问题。
服务网关
服务网关是一种介于服务调用者和服务提供者之间的,具有鉴权,反向代理,流量控制等功能的服务,它包含三大核心概念:路由,断言和过滤。路由是构建网关的基本模块,它由ID,目标URL,一系列的断言和过滤器组成,控制服务的访问。断言能够控制服务被访问的条件,如哪些路由前缀的服务能被访问,或者从何时起能够被访问等。过滤顾名思义能够对请求进行筛选,并在路由前和路由后对请求或相应进行修改,比如作为拦截器或者反向代理等。
Gateway
Gateway是在Sprng生态系统之上构建的API网关服务,旨在提供一种简单而有效的方式对API进行路由,以及提供一些强大的过滤器功能,如熔断,限流等。相比于Zuul1.x版本基于阻塞IO的架构,Gateway则基于Netty实现了异步非阻塞架构,大大提升了请求处理的速度。使用Spring Cloud Gateway需要先导入依赖包,然后在application.properties中对Gateway进行配置,并注册进服务注册中心即可。Gateway的大部分功能都可以通过配置来实现,相比于用编码来实现相同的功能,用配置则更加方便。
服务配置
服务配置是指对微服务的配置文件进行管理。当微服务项目越来越多后,相应的配置文件也越来越多,如果不进行统一管理,那么在需要对配置文件进行修改时,可能需要重复进行相同的配置修改工作,效率很低,而且容易出错。如果能够对配置进行统一管理,实现一处修改,处处生效,那么开发和维护效率就会提高。
Config
Spring Cloud Config是Spring Cloud体系下负责配置管理的组件,为微服务架构中的微服务提供集中化的外部配置支持。它分为服务端和客户端,服务端负责与版本控制系统(Github,Gitee等)通信,获取最新的配置信息,而客户端一般是指微服务,通过与服务端通信来获取最新的配置信息。这样一来当开发者修改了git中的配置文件并提交后,服务端就可以获取更新后的配置,而微服务客户端也能够获取更新后的配置。
服务总线
服务总线也称为消息总线,负责微服务系统中消息的广播和传输,是面向服务架构中的关键部分。如果缺少消息总线,那么微服务架构中的组件就缺少了消息驱动的能力,导致某些需要广播的消息无法发送到目标组件,引发不一致的风险。例如使用Spring Cloud Config时,当配置文件更新后,微服务并不能从配置服务器获取到最新的配置,此时就需要消息总线来广播配置更新的消息,使更新的配置在微服务中生效。
Bus
Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的组件,它整合了事件处理机制和消息中间件的功能,目前支持RabbitMQ和Kafka。使用Spring Cloud Bus比较简单,只需要在配置服务器和微服务中添加依赖,然后在application,properties中对bus进行配置,最后在主启动类上添加注解即可。
消息驱动
消息驱动是指将消息中间件加入到微服务架构中,实现微服务之间通过消息中间件进行消息的发布、订阅等功能。目前市场上的消息中间件有Kafka,RabbitMQ,RocketMQ等等,不同消息中间件的设计理念有差异,提供的特性也有不同,如果微服务系统中使用的消息中间件种类较多,有时会发生消息中间件切换的需求,当系统规模较大时,这项工作会变得相当复杂。为了解决该问题,Spring Cloud提供了Stream组件,充当不同消息中间件的适配器,屏蔽与不同消息中间件交互的细节,开发者只需要了解如何与Stream交互就可以实现消息驱动。
Stream
Spring Cloud Stream是Spring开发的,为Spring Cloud体系引入消息驱动机制的组件。它能够屏蔽开发者与消息中间件的交互过程,使用一套统一的机制就能够与不同的消息中间件进行交互,避免了因切换不同消息中间件所带来的工作。目前Stream仅支持Kakfa以及RabbitMQ。
请求链路跟踪
对于面向微服务架构的系统而言,当系统越来越庞大后,微服务之间的调用链也会变得越来越复杂。当调用链中的某一环出现问题后,如果缺少请求链路跟踪,那么问题的分析将变得异常困难,因为无法直接锁定出问题的节点,需要对节点挨个儿排查,耗时耗力。并且,如果需要分析某个服务的性能瓶颈,那么有请求链路跟踪和没有请求链路跟踪的分析效率差异也将十分明显。总之请求链路分析能够让开发者监控服务调用链的状态,即时发现有问题的节点或者性能瓶颈节点,然后予以修复和优化。
Sleuth
Spring Cloud Sleuth是Spring整合了Zipkin开发的请求链路跟踪组件,Zipkin可独立运行并且提供web可视化界面,使用sleuth只需要在pom中导入依赖spring-cloud-starter-zipkin,并在application.properties中配置zipkin和sleuth即可,不需要代码侵入编程。
本文概述了SpringCloud中的关键组件,包括服务注册中心(Eureka、ZooKeeper、Consul)、负载均衡(Ribbon和OpenFeign)、服务降级(Hystrix)、服务网关(Gateway)、配置管理(Config)以及消息驱动(Stream)。重点介绍了它们的功能和在微服务架构中的应用。
690

被折叠的 条评论
为什么被折叠?



