SpringCloud 入门 - 准备工作

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 核心组件版本清单

📌 核心组件版本对应表(经过生产环境验证的兼容组合)

组件版本官方下载地址作用
Java17Oracle Java 17运行环境(SpringBoot 3.x 最低要求)
Nacos2.3.2Nacos 2.3.2服务注册中心、配置中心
Sentinel1.8.6Sentinel 1.8.6流量控制、熔断降级
Mysql8.0.33Mysql 8.0.33关系型数据库
Redis7.0-alpineRedis 7.0缓存、分布式锁、消息队列
SpringCloud2023.0.1SpringCloud 2023.0.1微服务架构核心框架
SpringCloud Alibaba2023.0.1.0SpringCloud Alibaba阿里系微服务组件封装
SpringBoot3.2.4SpringBoot 3.2.4应用开发基础框架

1.2 版本兼容性原理与验证

🔍 版本兼容核心逻辑

  1. SpringBoot 与 SpringCloud 存在严格版本绑定(遵循spring-cloud-dependencies定义)
  2. SpringCloud Alibaba 需同时兼容 SpringBoot 和 SpringCloud 版本
  3. 中间件(Nacos/Sentinel)版本需与 SpringCloud Alibaba 版本匹配

💡 版本验证方法

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 为例)
  1. 下载 JDK 17 压缩包并解压:

    解压压缩包jdk-17.0.16_windows-x64_bin.zip,放置在环境目录下(建议目录用英文命名)

  2. 配置环境变量(配置系统变量)

    新增 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方式)
  1. 需拉取与前文版本一致的 Nacos 2.3.2 镜像,避免版本兼容问题:

    bash

    # 拉取 Nacos 2.3.2 官方镜像
    docker pull nacos/nacos-server:v2.3.2
  2. 创建本地挂载目录(持久化配置与日志)

    为避免容器销毁后配置和日志丢失,需在宿主机创建目录并挂载到容器:

    bash

    # 创建 Nacos 配置、日志、数据持久化目录
    mkdir -p /docker/nacos/{conf,logs,data}
  3. 编写 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
  4. 在宿主机 /docker/nacos/conf 下放入下载好的.../conf/nacos-logback.xml,下载地址:https://github.com/alibaba/nacos ,或者使用wget/curl命令下载文件到宿主机目录

  5. 通过 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 # 镜像名称:版本
  6. 验证启动:访问http://主机ip:8848/nacos

⚠️ 注意事项

  • 生产环境必须配置外置数据库(Mysql 8.0+)
  • 防火墙需开放 8848(服务端口)、9848(客户端通信端口)
  • 执行命令时,去掉注释

2.3 Sentinel 安装与配置(流量治理,Linux环境)

📌 核心功能:流量控制、熔断降级、系统负载保护、热点参数限流

2.3.1 控制台安装
  1. 下载 jar 包后直接启动:
java -jar sentinel-dashboard-1.8.6.jar --server.port=8080
  1. 访问控制台: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 微服务测试常用配置
    1. 创建线程组:设置并发用户数、循环次数
    2. 添加 HTTP 请求:配置服务地址、接口路径、请求参数
    3. 添加监听器:查看结果树、聚合报告、响应时间曲线
    4. 添加断言:验证接口返回结果正确性

    💡 最佳实践

    • 测试前通过jconsole监控服务 JVM 状态
    • 逐步提升并发数(50→100→200),观察服务性能拐点
    • 结合 Sentinel 控制台,验证流量控制规则生效情况

    3.3 接口管理工具:Apifox

    📌 核心功能:接口设计、文档生成、自动化测试、Mock 服务

    3.3.1 在微服务开发中的应用
    1. 前期:定义接口规范(路径、参数、返回值),团队共享
    2. 开发中:生成 Mock 数据,前端无需等待后端开发完成
    3. 测试阶段:创建接口测试用例,支持批量执行和断言
    4. 上线前:导出接口文档(HTML/PDF/Markdown)

    ⚠️ 注意事项

    • 接口变更时需及时同步,避免前后端协作不一致
    • 生产环境接口测试需注意数据隔离,避免污染真实数据

    4. 总结与扩展

    4.1 环境准备 Checklist

    •  Java 17 环境变量配置正确
    •  Nacos 启动成功并连接外置数据库
    •  Sentinel 控制台可正常访问
    •  Mysql 已创建必要数据库(如 nacos_config)
    •  Redis 配置了持久化和密码
    •  开发工具已安装并能连接各中间件

    4.2 进阶学习方向

    1. 服务治理深入:Nacos 集群部署、配置热更新原理
    2. 流量控制进阶:Sentinel 规则持久化、网关流控
    3. 分布式事务:结合 Seata 解决微服务数据一致性问题
    4. 可观测性:集成 SkyWalking 实现链路追踪和性能分析

    💡 学习建议

    • 先搭建基础环境,跑通服务注册与发现的最小 demo
    • 逐步添加功能(配置中心→流量控制→服务调用)
    • 每个组件先掌握核心用法,再深入原理源码
    • 结合实际业务场景思考组件应用方式(如 Redis 分布式锁实现)

    开坑了,欢迎入坑!!!

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值