00.2、技术栈介绍
技术栈介绍
在开始构建微服务系统之前,我们需要了解本课程使用的技术栈。技术栈的选择直接影响系统的性能、可维护性和扩展性。本课程选择了当前最先进、最稳定的技术组合。
本节将介绍:Java 21 的特性概览、Spring 6 框架介绍、Spring Boot 3 核心特性、Spring Cloud Alibaba 生态体系,以及数据库与中间件选型。
Java 21 特性概览
Java 21 是 Oracle 在 2023 年 9 月发布的 LTS(长期支持)版本,是继 Java 17 之后的第二个 LTS 版本。
为什么选择 Java 21?
核心特性:
- Virtual Threads(虚拟线程):轻量级线程,大幅提升并发性能
- Record 类型:简化数据类的定义
- Pattern Matching:模式匹配,简化条件判断
- Sealed Classes:密封类,限制类的继承
- String Templates:字符串模板,简化字符串拼接
官方文档:
- Java 21 官方文档:https://docs.oracle.com/en/java/javase/21/
- Java 21 下载:https://www.oracle.com/java/technologies/downloads/#java21
Spring 6 框架介绍
Spring 6 是 Spring 框架的最新主版本,于 2022 年 11 月发布。它要求 Java 17+,并引入了许多新特性。
Spring 6 核心特性
主要改进:
- Java 17+ 支持:充分利用 Java 17+ 的新特性
- 响应式编程增强:更好的 WebFlux 和响应式数据访问支持
- AOT(Ahead-of-Time)编译:支持 GraalVM 原生镜像
- 性能优化:启动速度更快,内存占用更低
官方文档与核心特性:
根据 Spring 6 官方文档 和 新特性说明,Spring 6 的核心特性包括:
-
Java 17+ 最低版本要求:Spring 6 要求 Java 17 作为最低版本,这是 Spring 框架历史上首次要求如此高的 Java 版本。这一要求使得 Spring 6 能够充分利用 Java 17+ 的新特性,如 Records、Pattern Matching、Sealed Classes、Text Blocks 等,提升开发效率和代码质量。
-
AOT(Ahead-of-Time)编译支持:Spring 6 引入了对 GraalVM Native Image 的原生支持,通过 AOT 编译可以将 Spring 应用编译为原生镜像。根据官方文档,原生镜像的启动速度可以提升 10 倍以上,内存占用减少 50% 以上,特别适合云原生和 Serverless 场景。
-
响应式编程增强:Spring 6 对 WebFlux 和响应式数据访问进行了重大改进,提供了更好的响应式编程支持。官方文档中提到,Spring 6 优化了响应式堆栈的性能,改进了 Project Reactor 的集成,使得响应式应用能够更好地处理高并发场景。
参考资源:
- Spring 6 官方文档:https://docs.spring.io/spring-framework/reference/
- Spring 6 新特性:https://github.com/spring-projects/spring-framework/wiki/What's-New-in-Spring-Framework-6.x
Spring Boot 3 核心特性
Spring Boot 3 是 Spring Boot 的最新主版本,于 2022 年 11 月发布。它基于 Spring 6,要求 Java 17+。
Spring Boot 3 核心特性
主要特性:
- 原生镜像支持:支持 GraalVM Native Image,启动速度提升 10 倍以上
- 可观测性增强:内置 Micrometer,更好的指标和追踪支持
- 配置属性改进:类型安全的配置属性,更好的 IDE 支持
- 依赖升级:升级到 Jakarta EE 9+,移除对 javax 的支持
官方文档与核心特性:
根据 Spring Boot 3 官方文档 和 3.0 版本发布说明,Spring Boot 3 的核心特性包括:
-
原生镜像支持(Native Image):Spring Boot 3 全面支持 GraalVM Native Image,可以将应用编译为原生可执行文件。根据官方测试数据,原生镜像的启动时间可以从数秒降低到毫秒级别,内存占用显著减少,特别适合容器化和 Serverless 部署场景。官方文档提供了详细的 AOT 编译指南和最佳实践。
-
可观测性增强(Observability):Spring Boot 3 内置了 Micrometer 作为指标收集框架,提供了开箱即用的可观测性支持。官方文档中提到,Spring Boot 3 改进了指标导出、分布式追踪和日志聚合的集成,使得应用监控变得更加简单和统一。
-
Jakarta EE 9+ 迁移:Spring Boot 3 完全迁移到 Jakarta EE 9+,所有
javax.*包名都改为jakarta.*。这是 Java EE 向 Jakarta EE 演进的重要里程碑。官方文档详细说明了迁移步骤和注意事项,帮助开发者平滑过渡。
参考资源:
- Spring Boot 3 官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/
- Spring Boot 3 新特性:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes
Spring Cloud Alibaba 生态体系
Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,提供了微服务开发所需的组件。
Spring Cloud Alibaba 组件架构
核心组件:
- Nacos:服务注册与发现、配置中心
- Sentinel:流量控制、熔断降级
- Seata:分布式事务解决方案
- RocketMQ:消息队列
- Dubbo:RPC 框架(可选)
官方文档与核心特性:
根据 Spring Cloud Alibaba 官方文档 和 版本说明,Spring Cloud Alibaba 的核心特性包括:
-
核心组件功能概述:Spring Cloud Alibaba 提供了一站式微服务解决方案,核心组件包括:
- Nacos:同时提供服务注册与发现、配置中心两大功能,支持动态服务实例管理和配置热刷新
- Sentinel:提供流量控制、熔断降级、系统自适应保护等能力,支持 WebServlet、WebFlux、OpenFeign、RestTemplate、Dubbo 等多种调用方式
- Seata:分布式事务解决方案,支持 AT、TCC、SAGA 等事务模式,保证跨服务数据一致性
- RocketMQ:高可靠消息中间件,支持事件驱动架构和消息总线模式
-
版本兼容性矩阵:官方文档明确列出了 Spring Cloud Alibaba 与 Spring Boot、Spring Cloud 的版本对应关系。例如:
2022.0.0.0版本对应 Spring Cloud 2022.0.x 和 Spring Boot 3.0.x2021.0.5.0版本对应 Spring Cloud 2021.0.x 和 Spring Boot 2.6.x 选择正确的版本组合对于项目稳定性至关重要。
-
与 Spring Cloud Netflix 的对比优势:Spring Cloud Alibaba 作为 Spring Cloud 的第二代实现,相比 Spring Cloud Netflix(Eureka、Ribbon、Hystrix 等已进入维护模式),提供了更现代、更稳定、性能更好的组件。官方文档强调,Spring Cloud Alibaba 在生产环境中经过大规模验证,特别适合国内企业使用。
参考资源:
- Spring Cloud Alibaba 官方文档:https://github.com/alibaba/spring-cloud-alibaba
- Spring Cloud Alibaba 版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
数据库与中间件选型
数据库:MySQL + MyBatis-Plus
MySQL:
- 成熟稳定的关系型数据库
- 支持 ACID 事务
- 广泛使用,生态完善
MyBatis-Plus:
- 基于 MyBatis 的增强工具
- 简化 CRUD 操作
- 支持代码生成
官方文档与核心特性:
根据 MySQL 官方文档 和 MyBatis-Plus 官方文档,核心特性包括:
-
MySQL 8.0 关键特性:
- 窗口函数(Window Functions):MySQL 8.0 引入了窗口函数支持,可以进行复杂的数据分析和报表查询,大大提升了 SQL 的表达能力
- 通用表表达式(CTE):支持 WITH 子句,使得复杂查询更加清晰和可维护
- JSON 增强:提供了丰富的 JSON 函数和操作符,支持 JSON 数据的存储、查询和索引
- 性能优化:官方文档显示,MySQL 8.0 在查询性能、并发处理能力方面相比 5.7 版本有显著提升
-
MyBatis-Plus 核心功能:
- 代码生成器:MyBatis-Plus 提供了强大的代码生成器,可以根据数据库表结构自动生成 Entity、Mapper、Service、Controller 等代码,大幅提升开发效率
- CRUD 简化:通过继承
BaseMapper接口,无需编写 XML 即可实现基本的 CRUD 操作,支持 Lambda 表达式查询,类型安全且代码简洁 - 分页插件:内置分页插件,支持多种数据库,使用简单,性能优秀
参考资源:
- MySQL 官方文档:https://dev.mysql.com/doc/
- MyBatis-Plus 官方文档:https://baomidou.com/
消息队列:RocketMQ
RocketMQ:
- 阿里巴巴开源的消息队列
- 支持事务消息、顺序消息、延时消息
- 高性能、高可用
官方文档与核心特性:
根据 RocketMQ 官方文档,RocketMQ 的核心特性包括:
-
丰富的消息类型支持:
- 事务消息:RocketMQ 提供了事务消息机制,可以保证本地事务和消息发送的一致性,特别适合分布式事务场景
- 顺序消息:支持全局顺序和分区顺序两种模式,保证消息的有序消费,适合需要保证顺序的业务场景
- 延时消息:支持消息延时投递,可以设置消息在指定时间后消费,适合定时任务、订单超时等场景
- 批量消息:支持批量发送和消费,提升吞吐量
-
高性能和高可用特性:
- 高吞吐量:官方文档显示,RocketMQ 单机可以支持百万级消息吞吐,适合高并发场景
- 高可用架构:支持主从复制、多副本机制,保证消息不丢失
- 消息过滤:支持基于 Tag、SQL 表达式等多种过滤方式,灵活高效
- 消息轨迹:提供完整的消息轨迹追踪功能,便于问题排查和监控
参考资源:
- RocketMQ 官方文档:https://rocketmq.apache.org/
可选组件
Redis(可选):
- 缓存数据库
- 提升系统性能
- 支持分布式锁
官方文档与核心特性:
根据 Redis 官方文档,Redis 的核心特性包括:
-
丰富的数据结构支持:
- String:最基本的键值对类型,支持字符串操作和数值计算
- Hash:适合存储对象,可以单独操作对象的字段
- List:有序列表,支持队列和栈操作
- Set:无序集合,支持集合运算(交集、并集、差集)
- Sorted Set:有序集合,支持范围查询和排序
- Stream:Redis 5.0+ 引入的流数据结构,支持消息队列功能
-
持久化机制:
- RDB(Redis Database):定期快照持久化,适合备份和灾难恢复,恢复速度快
- AOF(Append Only File):记录所有写操作,数据更安全,但文件较大
- 混合持久化:Redis 4.0+ 支持 RDB + AOF 混合模式,兼顾性能和安全性
参考资源:
- Redis 官方文档:https://redis.io/docs/
技术栈版本兼容性
版本要求:
- Java:21(LTS)
- Spring:6.x
- Spring Boot:3.x
- Spring Cloud Alibaba:2022.0.0.0+
注意:版本兼容性非常重要。不同版本之间可能存在不兼容的情况。课程中会详细说明如何查看和选择正确的版本。
技术栈选择理由
为什么选择这些技术?
-
Java 21:
- LTS 版本,长期支持
- 性能提升明显
- 新特性丰富
-
Spring Boot 3:
- 最新稳定版本
- 原生镜像支持
- 可观测性增强
-
Spring Cloud Alibaba:
- 国内企业广泛使用
- 组件完善
- 文档丰富
-
MySQL + MyBatis-Plus:
- 成熟稳定
- 学习成本低
- 生态完善
本节小结
在本节中,我们了解了:
第一个是 Java 21 特性。 LTS 版本,性能提升明显,新特性丰富,是当前最佳选择。
第二个是 Spring 6 框架。 基于 Java 17+,支持 AOT 编译,响应式编程增强。
第三个是 Spring Boot 3。 原生镜像支持,可观测性增强,配置改进。
第四个是 Spring Cloud Alibaba。 提供完整的微服务解决方案,包括 Nacos、Sentinel、Seata 等组件。
第五个是数据库与中间件。 MySQL + MyBatis-Plus 用于数据持久化,RocketMQ 用于消息队列。
这就是技术栈介绍。理解这些技术栈,是开始构建微服务系统的基础。
在下一节,我们将预览项目的最终架构设计,了解我们将构建什么样的微服务系统。