《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Spring-Cloud-Alibaba/intro/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

本文在提供完整代码示例,可见 https://github.com/YunaiV/SpringBoot-Labs

原创不易,给点个 Star 嘿,一起冲鸭!

1. Spring Cloud 体系

相信很多胖友都看过如下一张图:演进图

  • SpringBean(对象) 为中心,提供 IOC、AOP 等功能。
  • Spring BootApplication(应用) 为中心,提供自动配置监控等功能。
  • Spring CloudService(服务) 为中心,提供服务的注册与发现、服务的调用与负载均衡等功能。

先来一起看看 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 Common 子项目,定义了统一的抽象 API。如下图所示:Spring Cloud Common 图

而后,不同厂商结合其自身的中间件,提供自己的 Spring Cloud 套件,例如说:

  • Netflix 结合自己的 Eureka、Ribbon、Hystrix 等开源中间件,实现了 spring-cloud-netflix

    Spring Cloud Netflix 是目前国内使用最为流行的 Spring Cloud 套件。不过随着 Netflix 在开源的调整,逐步会慢慢没落。

  • Kubernetes 结合自己的 apiserver、configmap 等功能,实现了 spring-cloud-kubernetes

  • Alibaba 结合自己的 Nacos、Dubbo、Sentinel 等开源中间件,实现了 spring-cloud-alibaba

    目测 Spring Cloud Alibaba 在国内会火?!

当然,Spring Cloud 官方还是提供了一些功能的具体实现的,嘿嘿。例如说:

下面,我们把 Spring Cloud 官方、Netflix、Alibaba 三者整理成如下表格:

Spring Cloud 技术栈整理

2. Spring Cloud Alibaba 套件

Spring Cloud Alibaba 套件,阿里开源组件、阿里云商业组件整合进 Spring Cloud 体系当中,同时对 Spring Cloud Gateway、OpenFeign、Ribbon 等等进行集成。整体如下图所示:

Spring Cloud Alibaba 全景图

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

开源 V.S. 商业

主要功能如下:

  • 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
  • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
  • 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  • 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
  • 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。

商业化独有功能如下:

  • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

    曾经,阿里 SchedulerX 也是一个开源项目,现在已经木有消息了…嘿嘿,希望未来能够重启。

  • 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。

  • 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

    友情提示:艿艿还是比较推荐使用云片来发送短信,客服妹子基本是秒回,特别是审核短信模板的时候。

2.1 阿里开源组件

2.1.1 Nacos

Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

2.1.2 Dubbo

Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。

2.1.3 Sentinel

Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

2.1.4 RocketMQ

RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。

2.1.5 Seata

Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

2.2 阿里云商业组件

2.2.1 Alibaba Cloud ACM

Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。

2.2.2 Alibaba Cloud OSS

Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

2.2.3 Alibaba Cloud SchedulerX

Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。

2.2.4 Alibaba Cloud SMS

Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

2.3 集成其它 Spring Cloud 组件

Spring Cloud Alibaba 在融入 Spring Cloud 体系之后,可以方便和其它 Spring Cloud 组件进行混合使用,强强联合。这也可以弥补,Alibaba 暂时缺失的开源组件。

友情提示:如下艿艿只补充 Spring Cloud Alibaba 缺失的组件。

2.3.1 API 网关

2.3.2 链路追踪

2.3.3 服务调用 + 负载均衡

3. 选择 Spring Cloud 还是 Dubbo?

相信很多胖友在做微服务架构的技术选型的时候,基本会面临到的一个问题,特别是这个问题发生在 Dubbo 停止维护的时期?知乎上还有一个非常热门的讨论帖子《Spring Cloud 和 Dubbo 各自的优缺点是什么?

3.1 选择 Spring Cloud 体系?

先假设,选择 Spring Cloud 体系,那么我们就要思考选择哪一个 Spring Cloud 套件。目前最流行的,可能是 Netflix 提供的 Spring Cloud Netflix 套件。

但是世界总是这么有趣,Netflix 开始减少在开源领域的投入,逐步开始停止维护其组件:

因此,Spring Cloud Netflix 进入维护模式,可见《Spring Cloud Greenwich.RC1 available now》新闻。如下图所示:

Spring Cloud Netflix 维护模式

那么,Spring Cloud Netflix 可能不是一个很好的选择。但是,Spring Cloud 又暂时没有其它非常流行的套件,暂时可靠的貌似只有 Alibaba 提供的 Spring Cloud Alibaba 套件!在 Wanted: who’s using 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 Cloud Alibaba 上。主要原因是,我们面向的是 B 端业务,需要考虑私有化部署,而 Spring Cloud 相比 Dubbo 更易实现中间件的透明迁移

例如说,Spring Cloud Stream RocketMQ 迁移到 Spring Cloud Stream Kafka 或 Spring Cloud Stream RabbitMQ 只需要修改配置文件即可。感兴趣的胖友,可以对比学习如下三篇文章:

旁白君:毕竟私有化部署时,对方可能会对使用什么基础组件会有要求,他就不喜欢 RocketMQ 而要 RabbitMQ 消息队列。

很多时候,这是 JPA 相比 MyBatis 的优势。

666. 彩蛋

未来,艿艿会把自己开源电商项目 https://github.com/YunaiV/onemall,迁移到 Spring Cloud Alibaba 架构,胖友可以 Star 一波。

另外,在 https://github.com/YunaiV/SpringBoot-Labs 项目中,艿艿会不断更新更多 Spring Cloud 和 Spring Cloud Alibaba 入门与实战的文章,让你不断秃头!

考虑到部分胖友对微服务暂时没有总体的认知,推荐阅读如下几篇文章:

参考文章如下:

文章目录
  1. 1. 1. Spring Cloud 体系
  2. 2. 2. Spring Cloud Alibaba 套件
    1. 2.1. 2.1 阿里开源组件
      1. 2.1.1. 2.1.1 Nacos
      2. 2.1.2. 2.1.2 Dubbo
      3. 2.1.3. 2.1.3 Sentinel
      4. 2.1.4. 2.1.4 RocketMQ
      5. 2.1.5. 2.1.5 Seata
    2. 2.2. 2.2 阿里云商业组件
      1. 2.2.1. 2.2.1 Alibaba Cloud ACM
      2. 2.2.2. 2.2.2 Alibaba Cloud OSS
      3. 2.2.3. 2.2.3 Alibaba Cloud SchedulerX
      4. 2.2.4. 2.2.4 Alibaba Cloud SMS
    3. 2.3. 2.3 集成其它 Spring Cloud 组件
      1. 2.3.1. 2.3.1 API 网关
      2. 2.3.2. 2.3.2 链路追踪
      3. 2.3.3. 2.3.3 服务调用 + 负载均衡
  3. 3. 3. 选择 Spring Cloud 还是 Dubbo?
    1. 3.1. 3.1 选择 Spring Cloud 体系?
    2. 3.2. 3.2 选择 Spring Cloud Alibaba 还是 Dubbo?
  4. 4. 666. 彩蛋