芋道 Spring Cloud Alibaba 介绍
1. Spring Cloud 体系 2. Spring Cloud Alibaba 套件 3. 选择 Spring Cloud 还是 Dubbo? 666. 彩蛋
本文在提供完整代码示例,可见 https://github.com/YunaiV/SpringBoot-Labs
原创不易,给点个 Star 嘿,一起冲鸭!
1. Spring Cloud 体系
相信很多胖友都看过如下一张图:

Spring 以 Bean(对象) 为中心,提供 IOC、AOP 等功能。
Spring Boot 以 Application(应用) 为中心,提供
自动配置 、监控 等功能。Spring Cloud 以 Service(服务) 为中心,提供服务的注册与发现、服务的调用与负载均衡等功能。
先来一起看看 Spring Cloud 官方对自己的简短介绍:
FROM https://github.com/spring-cloud
Tools for building common patterns in distributed systems with Spring
基于 Spring 构建分布式系统的工具集,简称“Spring 全家桶”。
再来一起看看 Spring Cloud 官方对功能点的介绍:
FROM https://spring.io/projects/spring-cloud
功能列表:
【配置中心】Distributed/versioned configuration
【注册中心】Service registration and discovery
【API 网关】Routing
【服务调用】Service-to-service calls
【负载均衡】Load balancing
【服务容错】Circuit Breakers
【分布式消息】Distributed messaging
------------ 分隔线 -------------
如下功能,从 Spring Cloud 迁移到 Spring Integration 中:
【全局锁】Global locks
【领导选举与集群状态】Leadership election and cluster state
虽然 Spring Cloud 提供了非常强大的功能,但是它并不提供所有的实现,而是通过
而后,不同厂商结合其自身的中间件,提供自己的 Spring Cloud 套件,例如说:
Netflix 结合自己的 Eureka、Ribbon、Hystrix 等开源中间件,实现了
spring-cloud-netflix Kubernetes 结合自己的 apiserver、configmap 等功能,实现了
spring-cloud-kubernetes Alibaba 结合自己的 Nacos、Dubbo、Sentinel 等开源中间件,实现了
spring-cloud-alibaba
当然,Spring Cloud 官方还是提供了一些功能的具体实现的,嘿嘿。例如说:
API 网关:
Spring Cloud Gateway 配置中心:
Spring Cloud Config 、Spring Cloud Vault 链路追踪:
Spring Cloud Sleuth 消息驱动:
Spring Cloud Stream 事件总线:
Spring Cloud Bus 服务调用:
Spring Cloud OpenFeign 负载均衡:
Spring Cloud Load Balancer
下面,我们把 Spring Cloud 官方、Netflix、Alibaba 三者整理成如下表格:

2. Spring Cloud Alibaba 套件
我们可以将 Spring Cloud Alibaba 套件中的阿里开源组件和阿里云商业组件整理成如下对照表:

主要功能如下:
服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
分布式事务:使用 注解, 高效并且对业务零侵入地解决分布式事务问题。
商业化独有功能如下:
分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
2.1 阿里开源组件
2.1.1 Nacos
《芋道 Spring Cloud Alibaba 注册中心 Nacos 入门》 《芋道 Spring Cloud Alibaba 配置中心 Nacos 入门》
2.1.2 Dubbo
《芋道 Spring Cloud Alibaba 服务调用 Dubbo 入门》
2.1.3 Sentinel
《芋道 Spring Cloud Alibaba 服务容错 Sentinel 入门》
2.1.4 RocketMQ
《芋道 Spring Cloud Alibaba 消息队列 RocketMQ 入门》 《芋道 Spring Cloud Alibaba 事件总线 Bus RocketMQ 入门》 对应labx-20
2.1.5 Seata
《芋道 Spring Cloud Alibaba 分布式事务 Seata 入门》
2.2 阿里云商业组件
2.2.1 Alibaba Cloud ACM
2.2.2 Alibaba Cloud OSS
2.2.3 Alibaba Cloud SchedulerX
2.2.4 Alibaba Cloud SMS
2.3 集成其它 Spring Cloud 组件
Spring Cloud Alibaba 在融入 Spring Cloud 体系之后,可以方便和其它 Spring Cloud 组件进行混合使用,强强联合。这也可以弥补,Alibaba 暂时缺失的开源组件。
友情提示:如下艿艿只补充 Spring Cloud Alibaba 缺失的组件。
2.3.1 API 网关
【推荐】
《芋道 Spring Cloud 服务网关 Spring Cloud Gateway 入门》 《芋道 Spring Cloud 服务网关 Zuul》计划中...
2.3.2 链路追踪
【推荐】
《芋道 Spring Cloud 链路追踪 SkyWalking 入门》 《芋道 Spring Cloud 链路追踪 Spring Cloud Sleuth》
2.3.3 服务调用 + 负载均衡
《芋道 Spring Cloud Netflix 负载均衡 Ribbon 入门》 《芋道 Spring Cloud 声明式调用 Feign 入门》
3. 选择 Spring Cloud 还是 Dubbo?
相信很多胖友在做微服务架构的技术选型的时候,基本会面临到的一个问题,特别是这个问题发生在 Dubbo 停止维护的时期?知乎上还有一个非常热门的讨论帖子
3.1 选择 Spring Cloud 体系?
先假设,选择 Spring Cloud 体系,那么我们就要思考选择哪一个 Spring Cloud 套件。目前最流行的,可能是 Netflix 提供的 Spring Cloud Netflix 套件。
但是世界总是这么有趣,Netflix 开始减少在开源领域的投入,逐步开始停止维护其组件:
《Netflix 宣布停止开发Hystrix》 《Eureka 2.0 开源工作宣告停止,继续使用风险自负》 Netflix 将 Feign 捐献给
OpenFeign 社区Spring Cloud 官方团队不考虑提供 Zuul 2 的支持,见
Zuul#ISSUE483 Ribbon 进入维护状态,可见
Ribbon 项目首页
因此,Spring Cloud Netflix 进入维护模式,可见

Spring Cloud Netflix 维护模式
那么,Spring Cloud Netflix 可能不是一个很好的选择。但是,Spring Cloud 又暂时没有其它非常流行的套件,暂时可靠的貌似只有 Alibaba 提供的 Spring Cloud Alibaba 套件!在
另外,听说 Spring Cloud Alibaba 会成为 Spring Cloud 第二代标准实现,但是艿艿暂时没找到这块的资料和新闻。
3.2 选择 Spring Cloud Alibaba 还是 Dubbo?
事实上,Dubbo 已经从一个 RPC 框架,慢慢演变成了 Dubbo 生态,如下图所示:
FROM http://dubbo.apache.org/zh-cn/ecology/index.html
Dubbo 生态
非常丰富,我们在 Spring Cloud Alibaba 看到的组件,在 Dubbo 生态中都提供了对应的集成。所以吧,这样看下来,无论选择 Spring Cloud Alibaba 还是 Dubbo 体系,都是非常不错的选择。
如果胖友选择 Dubbo 体系,推荐阅读如下文章:
《芋道 Spring Boot Dubbo 入门》 《芋道 Spring Boot 注册中心 Nacos 入门》 《芋道 Spring Boot 配置中心 Nacos 入门》 《芋道 Spring Boot 服务容错 Sentinel 入门》 《芋道 Spring Boot 消息队列 RocketMQ 入门》 《芋道 Dubbo 分布式事务 Seata 入门》 《芋道 Spring Boot 链路追踪 SkyWalking 入门》
目前,艿艿自己团队选择的是 Spring Boot + Dubbo 作为整体架构,正在考虑慢慢迁移到 Spring Cloud Alibaba 上。主要原因是,我们面向的是 B 端业务,需要考虑私有化部署,而 Spring Cloud 相比 Dubbo 更易实现中间件的透明迁移。
例如说,Spring Cloud Stream RocketMQ 迁移到 Spring Cloud Stream Kafka 或 Spring Cloud Stream RabbitMQ 只需要修改配置文件即可。感兴趣的胖友,可以对比学习如下三篇文章:
旁白君:毕竟私有化部署时,对方可能会对使用什么基础组件会有要求,他就不喜欢 RocketMQ 而要 RabbitMQ 消息队列。
很多时候,这是 JPA 相比 MyBatis 的优势。
《芋道 Spring Cloud Alibaba 消息队列 RocketMQ 入门》 《芋道 Spring Cloud 消息队列 RabbitMQ 入门》 《芋道 Spring Cloud 消息队列 Kafka 入门》
666. 彩蛋
未来,艿艿会把自己开源电商项目
另外,在
考虑到部分胖友对微服务暂时没有总体的认知,推荐阅读如下几篇文章:
《微服务 2.0 技术栈选型手册》 《一张图了解 Spring Cloud 微服务架构》 《12 张手绘图,我搞懂了微服务架构》 《Java 微服务框架选型(Dubbo 和 Spring Cloud?)》 《什么是微服务?》 《这才是微服务划分的正确姿势,值得学习!》
参考文章如下:
《Spring Cloud Alibaba 新一代微服务解决方案》 《Spring Cloud Alibaba 官方文档》