进入Spring Cloud Alibaba 的世界

1,676 阅读6分钟

初识Spring Cloud Alibaba

Spring Cloud Alibaba 是一个将Spring Cloud “阿里巴巴化“的微服务架构框架,它具备Spring Cloud 所有的能力,并添加了Nacos、Dubbo、RocketMQ等 Spring Cloud不具备的微服务架构能力。简单来说:搭建微服务架构,使用Spring Cloud Alibaba 比使用Spring Cloud更高效,更简单,开发的技术成本更低。

2018年10月31日,Spring Cloud Alibaba正式开源,并提交了第一个正式稳定版本 0.1.0.RELEASE。Spring Cloud Alibaba用了不到两年的时间,完成从0到1,成为了GitHub上的明星项目。

组件能力

Spring Cloud Alibaba 的主要功能:流量控制和服务降级,服务注册与发现,分布式配置,事件驱动,消息总线,分布式事务,Dubbo RPC。

Spring Cloud Alibaba的组件功能既有免费版本,也有收费版本。组件如下:

  • Sentinel:以“流”为切入点,在流量控制、并发性、容错降级和负载保护等方面提供解决方案,以保护服务的稳定性。
  • Nacos:一个具备动态服务发现和分布式配置等功能的管理平台,主要用于构建云原生应用程序。
  • RocketMQ:一个高性能、高可用、高吞吐量的金融级消息中间件。Spring Cloud Alibaba将RocketMQ定制化封装,开发人员可“开箱即用”。
  • Dubbo:一个基于Java的高性能开源RPC框架。
  • Seata:一个高性能且易于使用的分布式事务解决方案,可用于微服务架构。
  • 阿里云OSS:阿里云对象存储服务,一种加密的安全云存储服务。
  • 阿里云SchedulerX:一款分布式任务调度产品,支持定期任务和在指定时间点触发任务。
  • 阿里云SMS:一种覆盖全球的消息服务,提供便捷、高效和智能的通信功能。

学习Spring Cloud Alibaba的建议

在学习Spring Cloud Alibaba之前,需要先熟悉Spring Boot 和 Spring Cloud。在搭建微服务架构的时候,好多程序猿小伙伴,肯定也会遇到该如何选择组件是使用Spring Cloud组件还是使用Spring Cloud Alibaba组件。

我也是从Servlet + Jsp 到 Spring 再到 Spring Boot 一步步过来的,所以框架对开发者的优势感受颇深。

熟悉Spring Boot

很多Spring的初学者会因为繁琐的配置文件而却步,每当增加新的技术组件的时候,开发人员都需要重复地增加一些冗余的配置文件。想必很多同学和我一样,在开启一个新的项目的时候,则一般会快速复制搭建出项目骨架。但是每个项目往往又存在很多差异,所以需要手动地一个个去修改,增加了项目的技术复杂度。

很多技术专家和架构师会尝试封装一些基础组件,但是这些组件很多都不能做到“开箱即用”。

Spring Boot便是一款“开箱即用"的基础服务框架,它通过Factory机制完成普通对象的初始化,并将这些对象注入IOC容器中,通过条件注解控制Bean对象之间的依赖关系,业务开发人员通过注解即可完成执行功能的注入。

熟悉Spring Cloud

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性,巧妙地简化了分布式系统基础设施的开发流程。例如,服务注册发现、配置中心、负载均衡、数据监控等功能,都可以使用Spring Boot开发风格做到一键式部署和启动。

Spring Cloud 并不是 Spring Framework 全新的框架,它只是把一些“能解决微服务架构中常见问题的优秀开源框架”结合起来,通过Spring Boot 风格和Spring Cloud 规范进行整合,屏蔽了繁琐的XML文件配置,提供了“开箱即用”的开发体验。

Spring Cloud 是一套标准的开发规范,是微服务架构的“一篮子”解决方案。

组件能力

  • Spring Cloud Netflix Eureka:Spring Cloud Netflix 中的服务治理组件,包含服务注册中心、服务注册与发现机制的实现。
  • Spring Cloud Netflix Ribbon:Spring Cloud Netflix 中的服务调用和客户端负载均衡组件。
  • Spring Cloud Netflix Hystrix:Spring Cloud Netflix 的容错管理组件,为服务中出现的延迟和故障提供强大的容错能力。
  • Spring Cloud Netflix Feign:基于 Ribbon 和 Hystrix 的声明式服务调用组件。
  • Spring Cloud Netflix Zuul:Spring Cloud Netflix 中的网关组件,提供了智能路由、访问过滤等功能。
  • Spring Cloud Gateway:一个基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关框架,它使用 Filter 链的方式提供了网关的基本功能,例如安全、监控/指标和限流等。
  • Spring Cloud Config:Spring Cloud 的配置管理工具,支持使用 Git 存储配置内容,实现应用配置的外部化存储,并支持在客户端对配置进行刷新、加密、解密等操作。
  • Spring Cloud Bus:Spring Cloud 的事件和消息总线,主要用于在集群中传播事件或状态变化,以触发后续的处理,例如动态刷新配置。
  • Spring Cloud Stream:Spring Cloud 的消息中间件组件,它集成了 Apache Kafka 和 RabbitMQ 等消息中间件,并通过定义绑定器作为中间层,完美地实现了应用程序与消息中间件之间的隔离。通过向应用程序暴露统一的 Channel 通道,使得应用程序不需要再考虑各种不同的消息中间件实现,就能轻松地发送和接收消息。
  • Spring Cloud Sleuth:Spring Cloud 分布式链路跟踪组件,能够完美的整合 Twitter 的 Zipkin。

Spring Cloud Alibaba 与 Spring Cloud 的关系

Spring Cloud Alibaba 依赖Spring Cloud,通过二次开发使开发者使用Spring Cloud 更加简单灵活。开发者可以直接使用Spring Cloud Alibaba来替换Spring Cloud。在Spring Cloud Alibaba中,可采用Spring Cloud协议和Dubbo的协议混合通信。

名称Spring CloudSpring Cloud Alibaba
注册中心Eureka、ConsulNacos
配置中心Spring Cloud ConfigNacos
网关ZuulGateWay
负载均衡RibbonLoadbalancer
熔断降级HystrixSentinel
服务调用FeignDubbo

基于Spring Cloud的设计理念,出现了很多优秀的组件,其中比较优秀的便是Spring Cloud Alibaba。

上图中绿色对号的基本上都是Spring Cloud社区第二代组件,也是目前建议使用的组件。图中红色X号的组件,都基本上面临着淘汰与替换。

Spring Cloud Alibaba 和 Spring Cloud 搭配方案

SpringCoud Alibaba-Nacos:注册中心(服务发现/注册)

SpringCoud Alibaba-Nacos:配置中心(动态配置管理)

SpringCoud Alibaba-Sentinel:服务容错(限流、降级、熔断)

SpringCoud Alibaba-Seata:分布式解决方案

SpringCoud-Ribbon:负载均衡

SpringCoud-Feign:声明式HTTP客户端(调用远程服务)

SpringCoud-Gateway:API网关(webflux编程模式)

SpringCoud-Sleuth:调用链监控


到此,已经简单了解了Spring Cloud Alibaba的基础知识和组件能力。


参考书籍:Spring Cloud Alibaba 微服务架构【实战派】