前言
本系列为自己阅读Spring Cloud Alibaba官方文档的记录,会包括文档中Spring Cloud Alibaba的使用方法和一些自己学习过程中的理解。
这是本系列第一篇,目的是搞清楚Spring Cloud Alibaba:
- 用来做什么
- 大概包括哪些部分
这些问题每个人在使用的不同的阶段会有不同深度的理解,我这里记录的只是我作为一个新手的理解。
个人认为,这是学习一项技术非常重要的一部分,把开篇的一些概念弄清楚之后,后面的使用过程中,才会带着自己的目的,更好的明白它为什么需要这样设计,为什么需要这些组件,才能更透彻的理解和掌握。
用来做什么
Spring Cloud Alibaba首先是一个项目,根据文档的介绍,这个项目目的是提供微服务开发的一站式解决方案的。包含了开发分布式应用和服务时需要的组件。
微服务简介
微服务,大多人可能都听过,都有自己的理解,新手我的简单理解,就是
- 把服务拆分成为更细粒度的服务模块,每个模块负责完成相对独立的工作,都是一个独立的应用
- 一些微服务会暴露提供给其他微服务或客户端调用的API接口,远程调用
- 应用客户端一般不直接访问服务,而是通过API网关(Gatewawy)
微服务带来的好处:
- 复杂架构拆分,简单化,降低耦合
- 每个服务模块独立开发,对外提供接口即可
- 每个微服务独立部署
- 每个微服务可独立横向扩展
微服务带来的缺点:
- 属于分布式系统,服务间通信相对单体应用复杂
- 分区数据库架构,事务的一致性保证相对复杂
- 一个功能的测试需要多个服务协调联合测试
- 多个服务需要配置、部署、扩展、监控,考虑服务发现机制等
虽然有复杂度的提升,但是从应用的可持续、可扩展角度考虑,微服务是一个好的选择。
分布式应用和服务
关于分布式,我的简单理解就是:
- 一项任务的完成需要部署在不同机器上的多个应用通过网络调用协调完成
当然,分布式架构也有类似上面提到的微服务的各种优点,毕竟微服务架构也是分布式架构的一种演进结果。
小结
微服务和分布式架构虽然带来了很多单体应用没有好处,但也意味着有更多的要在构建时要考虑的东西,如:
- 服务间通信
- 负载均衡
- 故障处理
- 事务
- 消息队列
- ...等等
Spring Cloud Alibaba声称提供了一站式解决方案,那么这个系列就来看看它是如何解决的。
包含的部分
这块像官方文档一样,简单的介绍Spring Cloud Alibaba包含了那些主要部分,简单有个概念和印象,后面当然会详细的介绍,再去深入理解。
- 服务限流和降级:支持
WebServlet、WebFlux、OpenFeign、RestTemplate、Dubbo访问限流和降级,可以通过console实时修改限流降级策略,支持监控限流降级指标 - 服务注册和发现:可以注册服务,clients可以通过Spring管理的bean发现实例,并融合了Ribbon
- 分布式配置:支持分布式系统的配置扩展,配置改变时自动刷新
- Rpc 服务:扩展Spring Cloud的RestTemplate和OpenFeign支持调用Dubbo RPC服务
- 事件驱动:支持构建通过共享消息系统连接的高度可伸缩的事件驱动的微服务
- 分布式事务:支持高性能、容易使用的分布式事务解决方案
- 阿里云对象存储、阿里云任务调度、阿里云短信服务
上面基本上是把官方文档翻译过来的,可以发现Spring Cloud Alibaba非常强大,还不心动的往下看~
依赖管理
官网提供的依赖管理:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
这是个pom项目,主要用来把Spring Cloud Alibaba开发时可能用到的依赖和版本都声明进去,查看它的pom.xml文件,包含了大量的依赖管理声明,如:
<!--Nacos-->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.client.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-config</artifactId>
<version>${nacos.config.version}</version>
</dependency>
<!-- Apache RocketMQ -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>${rocketmq.starter.version}</version>
</dependency>
因为我们现在一般基于spring-boot构建开发,所以可以考虑创建一个用于Spring Cloud Alibaba开发的父项目叫做dependencies,继承自spring-boot-starter-parent,再加入上面的Spring Cloud Alibaba依赖管理pom
<!-- 只放了关键部分 -->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.2.1.RELEASE</version>
</parent>
<dependencyManagement>
<!-- 上面有,不再重复粘贴 -->
</dependencyManagement>
继承dependencies项目后,在项目中dependency中引入对应依赖(不需要版本)即可愉快使用~、
总结
本篇作为Spring Cloud Alibaba系列的第一篇,主要简单介绍了:
- Spring Cloud Alibaba用来做什么,顺便简单介绍了微服务和分布式架构
- 为了解决上面的问题,Spring Cloud Alibaba都包含了哪些部分
- 简单介绍了Spring Boot + Spring Cloud Alibaba的依赖管理项目,为后面的测试学习做准备