Spring Cloud Alibaba,它是由一些阿里巴巴的开源组件和云产品组成的。这个项目的目的是为了给Java开发者带来使用 Spring Boot 和 Spring Cloud 的更多便利。
Spring Cloud Alibaba 致力于 提供微服务开发的一站式解决方案。该项目包含开发分布式应用微服务必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发
分布式应用服务。依托 SpringCloudAlibaba,您只需添加一些注解和少量配置,就可以将SpringCloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
作为微服务都需要考虑 服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理 等领域的解决方案。
这些功能Spring Cloud Alibaba都能满足,而且都做的非常好。
主要功能如下
服务注册与发现:适配 SpringCloud 服务注册与发现标准,默认集成了 Ribbon的支持。
分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
服务限流降级:默认支持 Servlet、Feign、RestTemplate、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,
还支持查看限流降级 Metrics 监控。
消息驱动能力:基于 SpringCloudStream 为微服务应用构建消息驱动能力。
阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持
海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
为了实现上面的功能alibabaCloud也提供了一系列的组件 ,具体可以参考这张图
这个图片中展示所有的组件可以分为三大分类: 阿里开源组件、阿里商业化组件、集成 Spring Cloud 组件。
(1)阿里开源组件
Nacos:
Nacos 是一款开源的注册中心和配置中心,能够帮助用户动态服务发现、配置管理和服务治理。它支持 Kubernetes 和 Spring Cloud 等多种环境,并提供了一组易于使用的 API 接口,方便用户快速集成和使用。
Nacos 的架构设计基于三个核心模块:命名服务(Naming)、配置服务(Configuration)和服务治理(Governance)。其中,命名服务负责服务的注册和发现,配置服务负责配置的管理和发布,服务治理负责服务的负载均衡和流量控制。
Sentinel:
Sentinel 是一款轻量级的流量控制和熔断降级框架,能够帮助用户解决高并发场景下的稳定性问题。它提供了实时的监控和告警功能,能够对服务的 QPS、RT、异常率等指标进行实时监控和统计,同时也支持基于规则的熔断降级、流量控制和系统保护。
Sentinel 的架构设计基于两个核心模块:流量控制和熔断降级。其中,流量控制负责限制服务的流量,避免系统被过载;熔断降级负责在服务异常或不可用时进行自动熔断,避免系统崩溃。多个维度来保护服务的稳定性。
RocketMQ:
RocketMQ 是一款开源的分布式消息中间件,能够帮助用户快速构建可靠的消息传递系统。它支持多种消息模式和协议,包括点对点模式和发布订阅模式,并提供了高可用、高性能和可扩展的特性。
Dubbo:
Dubbo 是一款高性能、轻量级的 RPC 框架,可以帮助开发者快速构建分布式应用程序。Dubbo 可以实现基于 RPC 的远程服务调用、负载均衡、服务注册和发现等功能,支持多种通信协议和序列化方式。
Seata:
Seata 是一个开源的分布式事务解决方案,它提供了高可用的事务管理功能和高性能的本地事务处理能力。Seata 可以与多种框架和平台进行集成,包括 Spring Cloud Alibaba、Dubbo 和 Apache ServiceComb 等。
Arthas:开源的Java动态追踪工具,基于字节码增强技术,功能非常强大。
(2)阿里商业化组件
作为一家商业公司,阿里巴巴推出 Spring Cloud Alibaba,很大程度上市希望通过抢占开发者生态,来帮助推广自家的云产品。所以在开源社区,夹带了不少私货,这部分组件
整体易用性和稳定性还是很高的。
Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。
Alibaba Cloud OSS:阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、
任何时间、任何地点存储和访问任意类型的数据。
Alibaba Cloud SchedulerX:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
(3)集成 Spring Cloud 组件
Spring Cloud Alibaba 作为整套的微服务解决组件,只依靠目前阿里的开源组件是不够的,更多的是集成当前的社区组件,所以 Spring Cloud Alibaba 可以集成 Zuul,
OpenFeign等网关,也支持 Spring Cloud Stream 消息组件。
在网上找到一个Spring Cloud Alibaba 项目成员提供的对于SpringCloudAlibaba整个生态的理解,我觉得这幅图画的真好。
这幅图它们叫3 + 2
,3是指图中深色的部分(这部分又分为3小部分),2是指上图中最外的一圈(这一圈又被分为两小部分)。下面来讲解为什么分为这两大部分,每小部分的含义。
3的含义
其实这一整个3我们可以去理解是整个 Spring Cloud 标准,一共有3部分组成。
第一层、中间颜色最深的部分就是及整个微服务最核心的内容,包括了 RPC 调用”以及“服务注册与发现。可以说只要是微服务都首先需要考虑的也是微服务最核心的。
第二层、也就是围绕着核心的这一圈,是一些辅助微服务更好的工作功能,包括了负载均衡、路由、网关、断路器,还有就是追踪等等这些内容。这部分可以让我们更好
的去使用微服务,但它们并不是一定必须的,而是说通常都需要考虑的。
第三层、再外层的话,主要是一些分布式云环境里通用能力。必要程度可以比上面再轻一点。
2指的含义
“2”,指的就是上图中最外面这一圈。这一部分就是这个我们 Spring Cloud Alibaba 的一个定义,它其实包含两个部分的内容:
右上部分、是对于 Spring Cloud 标准的实现。例如,我们通过 Dubbo 实现了 RPC 调用功能,通过 Nacos 实现了“服务注册与发现”、“分布式配置”,通过 Sentinel 实现了
断路器等等,这里就不一一列举了。
左下部分、 是我们 Spring Cloud Alibaba 对阿里云各种服务的集成。在实际生产过程中,单独使用微服务框架其实并不足以支撑我们去构建一个完整的系统。所以这部分是
用阿里帮助开发者完成微服务以外的云产品集成的功能。
注意
右上部分是阿里完全开源的,开发者可以只是用这部分实现运行在任何云平台中。当然,左下部分,由于天然是对阿里云服务的集成,这部分是和平台相关的,
是需要我们付费购买服务的。
现在AlibabaCloud这么火热的很大的一个原因在于spring cloud中的几乎所有的组件都使用Netflix公司的产品,然后在其基础上做了一层封装。然而Netflix的服务发现组件`Eureka已经
停止更新`。这里有张图对于它们之间的比较
重点
从里可以看出 Spring Cloud Alibaba 是所有的实现方案中功能最齐全的。尤其是在 Netflix 停止更新了以后,Spring Cloud Alibaba 依然在持续更新和迭代。
Spring Cloud Alibaba 虽然诞生时间不久,但是背靠大树好乘凉,赖于阿里巴巴强大的技术影响力,已经成为微服务解决方案的重要选择之一。
我认为 Spring Cloud Alibaba 的优势有以下几点:
(1)、阿里巴巴强大的技术输出能力
阿里巴巴无疑是国内开源技术领域的最有影响力的公司之一,已经有Dubbo、Druid,FastJson等成功的开源组件,再加上阿里不遗余力的推广,社区发展也非常快。
(2)、集成Dubbo,利用Dubbo在微服务领域的超高人气
Dubbo是国内应用最广的分布式服务框架之一,基于Dubbo改造的Dubbox等也有很多公司在使用, Spring Cloud Alibaba对Dubbo做了比较好的集成,可以吸引不少使用Dubbo
的开发者。
(3)、云原生趋势,集成阿里云商业化组件
云原生(Cloud Native)是今年技术领域特别热门的一个词,云原生是一种专门针对云上应用而设计的方法,用于构建和部署应用,以充分发挥云计算的优势。
Spring Cloud Alibaba 集成了阿里云的商业化组件,可以说天然支持云原生特性。