这个系列开始来讲Spring Cloud Alibaba,第一步先从概述说起。
一、概述
1、简介
Spring Cloud Alibaba,它是由一些阿里巴巴的开源组件和云产品组成的。这个项目的目的是为了给Java开发者带来使用 Spring Boot 和 Spring Cloud 的更多便利。
Spring Cloud Alibaba 致力于 提供微服务开发的一站式解决方案。该项目包含开发分布式应用微服务必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发
分布式应用服务。依托 SpringCloudAlibaba,您只需添加一些注解和少量配置,就可以将SpringCloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
2、 主要功能
作为微服务都需要考虑 服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理 等领域的解决方案。
这些功能Spring Cloud Alibaba都能满足,而且都做的非常好。
主要功能如下
服务注册与发现:适配 SpringCloud 服务注册与发现标准,默认集成了 Ribbon的支持。
分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
服务限流降级:默认支持 Servlet、Feign、RestTemplate、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,
还支持查看限流降级 Metrics 监控。
消息驱动能力:基于 SpringCloudStream 为微服务应用构建消息驱动能力。
阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持
海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
3、主要组件
为了实现上面的功能alibabaCloud也提供了一系列的组件 ,具体可以参考这张图
这个图片中展示所有的组件可以分为三大分类: 阿里开源组件、阿里商业化组件、集成 Spring Cloud 组件。
(1)阿里开源组件
Nacos:阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现
、配置管理
和服务管理平台
。它最大的特点就是把 微服务注册发现
和微服务配置中心都整合在一起,方便我们的使用。
Sentinel:面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。
RocketMQ:分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
Dubbo:这个就不用多说了,在国内应用非常广泛的一款高性能 Java RPC 框架(这里不仅仅可以使用Dubbo服务调用,还好用通过Feign进行服务之前调用)。
Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
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 消息组件。
4、整体理解
在网上找到一个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 和 SpringCloud比较
1、比较
现在AlibabaCloud这么火热的很大的一个原因在于spring cloud中的几乎所有的组件都使用Netflix公司的产品,然后在其基础上做了一层封装。然而Netflix的服务发现组件`Eureka已经
停止更新`。这里有张图对于它们之间的比较
重点
从里可以看出 Spring Cloud Alibaba 是所有的实现方案中功能最齐全的。尤其是在 Netflix 停止更新了以后,Spring Cloud Alibaba 依然在持续更新和迭代。
2、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 集成了阿里云的商业化组件,可以说天然支持云原生特性。
接下来我会对Spring Cloud Alibaba下面每一个组件都进行详细的介绍,从0到1搭建一个Spring Cloud Alibaba微服务完整项目。