SpringCloud 入门 - 准备工作
0. 序言
0.1 微服务架构深度解析
📌 微服务架构核心定义:将单体应用按业务领域边界拆分为独立、自治的小型服务,每个服务聚焦单一业务能力,通过标准化接口通信,具备独立部署、扩展和维护能力。
0.1.1 微服务核心特征
- 自治性:服务可独立开发、测试、构建、部署,不依赖其他服务的部署周期
- 去中心化:
- 数据去中心化:每个服务管理专属数据库(避免跨服务联表查询)
- 治理去中心化:服务间通过契约(API)协作,无需中心化调度
- 轻量级通信:优先采用 HTTP/REST API(同步)、MQ(异步)等轻量协议
- 单一职责:服务边界严格遵循「高内聚、低耦合」,仅覆盖单个业务领域(如订单服务仅处理订单相关逻辑)
- 技术多样化:不同服务可采用最合适的技术栈
0.1.2 微服务 vs 单体架构对比
| 维度 | 微服务架构 | 单体架构 |
|---|---|---|
| 代码维护 | 代码量小,边界清晰,易维护 | 代码量大,模块耦合高,维护成本高 |
| 部署能力 | 独立部署,故障影响范围小 | 整体部署,单点故障致全量不可用 |
| 扩展性 | 按需扩展单个服务(如订单服务扩容) | 全量扩展,资源利用率低 |
| 技术栈 | 支持多技术栈(如 Java+Go 混合) | 单一技术栈,灵活性低 |
| 复杂度 | 分布式问题(事务、一致性、监控) | 无分布式复杂度,调试简单 |
| 适用场景 | 中大型系统、业务迭代快、团队分工明确 | 小型系统、快速验证业务、团队规模小 |
0.1.3 微服务架构优缺点
- 优势:迭代效率高、故障隔离、资源利用率高、技术栈灵活
- 挑战:分布式事务、服务依赖管理、监控告警复杂度、部署运维成本高
0.2 SpringCloud 核心组件架构
0.3 SpringCloud 与 SpringBoot 生态关系
🔍 生态协同核心逻辑:SpringBoot 解决「单一服务快速开发」问题,SpringCloud 解决「多服务协同治理」问题,二者结合形成微服务开发闭环。
0.3.1 核心组件分工
| 技术框架 | 核心能力 | 解决的问题 |
|---|---|---|
| SpringBoot | 自动配置、嵌入式容器、starter 依赖 | 简化单体服务开发,减少 XML 配置 |
| SpringCloud | 服务发现、配置中心、网关、容错 | 解决微服务间通信、治理、监控问题 |
| SpringCloud Alibaba | 基于 SpringCloud 的本土化增强(Nacos、Sentinel) | 适配国内中间件生态,提供更稳定的企业级能力 |
1. 版本准备
1.1 核心组件版本清单
📌 核心组件版本对应表(经过生产环境验证的兼容组合)
| 组件 | 版本 | 官方下载地址 | 作用 |
|---|---|---|---|
| Java | 17 | Oracle Java 17 | 运行环境(SpringBoot 3.x 最低要求) |
| Nacos | 2.3.2 | Nacos 2.3.2 | 服务注册中心、配置中心 |
| Sentinel | 1.8.6 | Sentinel 1.8.6 | 流量控制、熔断降级 |
| Mysql | 8.0.33 | Mysql 8.0.33 | 关系型数据库 |
| Redis | 7.0-alpine | Redis 7.0 | 缓存、分布式锁、消息队列 |
| SpringCloud | 2023.0.1 | SpringCloud 2023.0.1 | 微服务架构核心框架 |
| SpringCloud Alibaba | 2023.0.1.0 | SpringCloud Alibaba | 阿里系微服务组件封装 |
| SpringBoot | 3.2.4 | SpringBoot 3.2.4 | 应用开发基础框架 |
1.2 版本兼容性原理与验证
🔍 版本兼容核心逻辑:
- SpringBoot 与 SpringCloud 存在严格版本绑定(遵循
spring-cloud-dependencies定义) - SpringCloud Alibaba 需同时兼容 SpringBoot 和 SpringCloud 版本
- 中间件(Nacos/Sentinel)版本需与 SpringCloud Alibaba 版本匹配
💡 版本验证方法:
- 官方兼容性矩阵:版本发布说明-阿里云Spring Cloud Alibaba官网(选择对应版本后,查看版本发布声明)
- 验证命令(Maven 项目):
bash
mvn dependency:tree | grep -E "spring-cloud|spring-boot|nacos|sentinel"
检查输出中是否存在版本冲突提示(如omitted for conflict)
⚠️ 常见版本冲突问题:
- SpringBoot 3.x 必须搭配 SpringCloud 2022.0.0 + 和 SpringCloud Alibaba 2022.0.0.0+
- Nacos 2.3.x 需对应 SpringCloud Alibaba 2023.0.1.0+
- Sentinel 1.8.x 与 SpringBoot 3.x 兼容需额外引入
spring-cloud-starter-bootstrap
2. 环境安装与配置
2.1 Java 17 安装与配置
📌 核心知识点:SpringBoot 3.x 基于 Jakarta EE 9,必须使用 Java 17 及以上版本
2.1.1 安装步骤(以 Windows 为例)
-
下载 JDK 17 压缩包并解压:
解压压缩包jdk-17.0.16_windows-x64_bin.zip,放置在环境目录下(建议目录用英文命名)
-
配置环境变量(配置系统变量)
新增 JAVA_HOME变量,路径为:解压目录\jdk-17.0.7
新增 CLASSPATH变量,值为:【.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar】
修改 Path变量,新建【%JAVA_HOME%\bin】
java -version # 应输出java version "17.0.10"
2.2 Nacos 安装与配置(服务治理中心)
📌 核心功能:服务注册发现、配置管理、动态 DNS、服务元数据管理
2.2.1 单机模式安装(Docker方式)
-
需拉取与前文版本一致的 Nacos 2.3.2 镜像,避免版本兼容问题:
bash
# 拉取 Nacos 2.3.2 官方镜像 docker pull nacos/nacos-server:v2.3.2 -
创建本地挂载目录(持久化配置与日志)
为避免容器销毁后配置和日志丢失,需在宿主机创建目录并挂载到容器:
bash
# 创建 Nacos 配置、日志、数据持久化目录 mkdir -p /docker/nacos/{conf,logs,data} -
编写 Nacos 核心配置文件(本地挂载)
在宿主机
/docker/nacos/conf目录下创建application.properties文件,配置数据库连接(暂时不使用外置数据库,真实项目需配置)、服务端口等核心参数(容器启动时会覆盖默认配置):# ====================== 服务基础配置 ====================== server.port=8848 nacos.server.ip=0.0.0.0 nacos.core.auth.enabled=false # ====================== 数据库配置 ====================== # 使用内置Derby数据库(单机模式) spring.datasource.platform=derby nacos.standalone=true # ====================== 日志配置 ====================== # Nacos使用固定日志配置,通过目录挂载实现持久化 # logging.config=classpath:nacos-logback.xml # logging.level.root=INFO # ====================== 其他核心配置 ====================== # 关闭分布式事务 nacos.core.distributed.transaction.enabled=false # 控制台上下文路径 server.servlet.contextPath=/nacos -
在宿主机
/docker/nacos/conf 下放入下载好的.../conf/nacos-logback.xml,下载地址:https://github.com/alibaba/nacos ,或者使用wget/curl命令下载文件到宿主机目录 -
通过
docker run命令启动容器,指定挂载目录、环境变量、端口映射:docker run -d \ --name nacos-2.3.2 \ # 容器名称(便于管理) --restart=unless-stopped\ # 宿主机自动启动容器 -p 8848:8848 \ # 控制台/服务通信端口(宿主机端口:容器端口) -p 9848:9848 \ # 客户端gRPC通信端口(Nacos 2.x新增,必须映射) -p 9849:9849 \ # 服务端gRPC通信端口(集群模式需映射) -e MODE=standalone \ # 启动模式:standalone(单机)/cluster(集群) -e JVM_XMS=512m \ # JVM初始堆内存(根据服务器配置调整) -e JVM_XMX=512m \ # JVM最大堆内存 -e JVM_XMN=256m \ # JVM新生代内存 -v /docker/nacos/conf:/home/nacos/conf \ # 挂载配置目录 -v /docker/nacos/logs:/home/nacos/logs \ # 挂载日志目录 -v /docker/nacos/data:/home/nacos/data \ # 挂载数据目录 nacos/nacos-server:v2.3.2 # 镜像名称:版本 -
验证启动:访问
http://主机ip:8848/nacos
⚠️ 注意事项:
- 生产环境必须配置外置数据库(Mysql 8.0+)
- 防火墙需开放 8848(服务端口)、9848(客户端通信端口)
- 执行命令时,去掉注释
2.3 Sentinel 安装与配置(流量治理,Linux环境)
📌 核心功能:流量控制、熔断降级、系统负载保护、热点参数限流
2.3.1 控制台安装
- 下载 jar 包后直接启动:
java -jar sentinel-dashboard-1.8.6.jar --server.port=8080
- 访问控制台:
http://主机ip:8080,默认账号密码sentinel/sentinel
2.3.2 客户端集成配置
📝 SpringBoot 项目配置示例:
yaml
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080 # 控制台地址
port: 8719 # 客户端与控制台通信端口
eager: true # 立即初始化Sentinel
💡 实用技巧:
- 本地开发可通过
-Dcsp.sentinel.dashboard.server=localhost:8080动态指定控制台 - 真实环境建议关闭控制台直接访问,通过网关转发并配置认证
⚠️ 注意事项:
- Sentinel 官方未提供 Docker 镜像,如果需要,推荐使用社区维护的 bladex/sentinel-dashboard 镜像
2.4 Mysql 8.0.33 安装(Docker 方式)
📌 核心作用:存储业务数据、配置中心数据(Nacos)、服务治理元数据
2.4.1 安装命令
# 拉取镜像
docker pull mysql:8.0.33
# 创建Mysql数据持久化、配置目录
mkdir -p /docker/mysql/{data,conf.d}
# 创建配置文件
touch /docker/mysql/conf.d/my.cnf
# 修改配置文件,见2.4.2
# 启动容器(带持久化配置)
docker run -d \
--name mysql8.0.33 \
--restart=unless-stopped \
-p 3307:3306 \ # 映射端口
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/conf.d:/etc/mysql/conf.d \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=abc123 \
-e MYSQL_DATABASE=app_db \
-e MYSQL_USER=appuser \
-e MYSQL_PASSWORD=abc123 \
mysql:8.0.33
2.4.2 关键配置(/docker/mysql/conf.d/my.cnf)
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time-zone='+8:00'
max_connections=1000
⚠️ 注意事项:
- Mysql 8.0 默认使用
caching_sha2_password认证插件,部分客户端需兼容 - 生产环境必须配置数据备份策略(如每日全量 + 增量备份)
2.5 Redis 7.0 安装(Docker 方式)
📌 核心作用:分布式缓存、分布式锁、服务限流计数器、临时数据存储
2.5.1 安装命令
bash
# 拉取镜像
docker pull redis:7.0-alpine
# 创建Redis数据持久、配置目录
mkdir -p /docker/redis/{data,conf}
# 启动容器(带持久化)
docker run -d \
--name redis7-alpine \
-p 6379:6379 \
--restart=unless-stopped\
--log-opt max-size=100m \
--log-opt max-file=2 \
-v /docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /docker/redis/data:/data \
redis:7.0-alpine \
redis-server /etc/redis/redis.conf \
--appendonly yes --requirepass 123
2.5.2 核心配置(/docker/redis/conf/redis.conf)
ini
# 持久化配置
appendonly yes
appendfilename "appendonly.aof"
save 60 1000 # 60秒内有1000次修改则触发RDB
# 安全配置
requirepass yourpassword # 生产环境必须设置密码
maxmemory 2gb # 根据服务器内存配置
maxmemory-policy allkeys-lru # 内存满时淘汰策略
⚠️ 注意事项:
- 执行命令时,去掉其中的注释
- DockerHub无法访问,需要配置国内的镜像加速,如下:
# 创建/编辑Docker配置文件
vi /etc/docker/daemon.json
# 添加国内镜像源(如阿里云、网易等)
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://mirrors.tuna.tsinghua.edu.cn",
"http://mirrors.sohu.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://ccr.ccs.tencentyun.com",
"https://docker.m.daocloud.io",
"https://docker.awsl9527.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://reg-mirror.qiniu.com"
]
}
3. 辅助开发工具
3.1 Redis 可视化工具:Another Redis Desktop Manager
📌 核心功能:Redis 数据可视化、命令执行、集群管理、数据导入导出
💡 实用技巧:
- 支持同时连接多个 Redis 实例,适合微服务多缓存节点场景
- 可通过 "Console" 标签页直接执行 Redis 命令(如
KEYS *、HGETALL) - 批量操作功能可快速清理测试环境缓存数据
3.2 性能测试工具:Jmeter
📌 核心用途:接口性能测试、高并发场景模拟、服务容量评估
3.2.1 微服务测试常用配置
- 创建线程组:设置并发用户数、循环次数
- 添加 HTTP 请求:配置服务地址、接口路径、请求参数
- 添加监听器:查看结果树、聚合报告、响应时间曲线
- 添加断言:验证接口返回结果正确性
💡 最佳实践:
- 测试前通过
jconsole监控服务 JVM 状态 - 逐步提升并发数(50→100→200),观察服务性能拐点
- 结合 Sentinel 控制台,验证流量控制规则生效情况
3.3 接口管理工具:Apifox
📌 核心功能:接口设计、文档生成、自动化测试、Mock 服务
3.3.1 在微服务开发中的应用
- 前期:定义接口规范(路径、参数、返回值),团队共享
- 开发中:生成 Mock 数据,前端无需等待后端开发完成
- 测试阶段:创建接口测试用例,支持批量执行和断言
- 上线前:导出接口文档(HTML/PDF/Markdown)
⚠️ 注意事项:
- 接口变更时需及时同步,避免前后端协作不一致
- 生产环境接口测试需注意数据隔离,避免污染真实数据
4. 总结与扩展
4.1 环境准备 Checklist
- Java 17 环境变量配置正确
- Nacos 启动成功并连接外置数据库
- Sentinel 控制台可正常访问
- Mysql 已创建必要数据库(如 nacos_config)
- Redis 配置了持久化和密码
- 开发工具已安装并能连接各中间件
4.2 进阶学习方向
- 服务治理深入:Nacos 集群部署、配置热更新原理
- 流量控制进阶:Sentinel 规则持久化、网关流控
- 分布式事务:结合 Seata 解决微服务数据一致性问题
- 可观测性:集成 SkyWalking 实现链路追踪和性能分析
💡 学习建议:
- 先搭建基础环境,跑通服务注册与发现的最小 demo
- 逐步添加功能(配置中心→流量控制→服务调用)
- 每个组件先掌握核心用法,再深入原理源码
- 结合实际业务场景思考组件应用方式(如 Redis 分布式锁实现)
开坑了,欢迎入坑!!!


被折叠的 条评论
为什么被折叠?



