Merge pull request ‘docs(m4): 补充 T4.6 服务治理演示复现说明’ (#18) from docs/t4.6-demo-runbook into master
「分布式计算环境」课程大作业项目:基于 Spring Cloud Alibaba 构建大模型对话助手微服务系统,演示限流、熔断、降级、灰度流量分隔四项服务治理能力带来的稳定性收益。
✅ 项目已完成:六模块 Maven 工程 clean verify 通过,三组对比实验(限流 / 熔断降级 / 90-10 灰度)均以三轮或双执行者独立复跑数据收口。完整报告见 report/report.md,实验结论速览见下表。
clean verify
report/report.md
每组能力都可在本机按 assets/demo-runbook.md 现场复跑(完整复现说明与坑位处理见 assets/t4.6-demo-runbook.md);下表给出核心量化结论与已归档的运行态证据。
assets/demo-runbook.md
assets/t4.6-demo-runbook.md
assets/exp1-rate-limiting.csv
assets/exp2-circuit-degrade.csv
assets/raw/m5-exp-20260828/b6y-*
assets/exp3-traffic-split.csv
口径说明:降级响应按”传输可用”计入、与完整业务成功分开统计;429 为受控拒绝。详见报告 §7.1 指标定义。
report/
survey/
design/
code/
assets/
assets/m5-evidence-inventory-20260829.md
环境依赖(第一项最容易踩坑,Docker Desktop 未装/未启动时 Nacos 起不来):
design/tech-stack.md
一键启停(推荐):
# 启动全套:默认 baseline(Feign Sentinel/fallback 关闭) powershell -ExecutionPolicy Bypass -File tools/up.ps1 -Mode baseline # 治理实验改用 governed;切换模式前须先 tools/down.ps1 停净旧 chat powershell -ExecutionPolicy Bypass -File tools/up.ps1 -Mode governed # 停净(反向):powershell -ExecutionPolicy Bypass -File tools/down.ps1
baseline 与 governed 会在 chat 启动日志打印并校验;模式与 feign.sentinel.enabled 不一致时拒绝启动,防止实验组混淆。
baseline
governed
feign.sentinel.enabled
手动逐步:
# 1. Nacos(docker-compose,仅中间件进容器;微服务本机 mvn spring-boot:run) docker compose -f code/docker-compose.yml up -d powershell -ExecutionPolicy Bypass -File tools/nacos-init.ps1 # 首次必跑,见下方实测说明 # 2. Sentinel Dashboard(本机 jar,不进 compose——官方无镜像,且 Dashboard 需回调各服务 transport 端口) powershell -ExecutionPolicy Bypass -File tools/get-dashboard.ps1 # 首次下载 1.8.9 jar # 注意 -Dcsp.sentinel.api.port:Dashboard 内嵌客户端默认占 8719,与 gateway 的 transport 冲突(实测,tech-stack §3) java -Dcsp.sentinel.api.port=8730 -jar tools/sentinel-dashboard-1.8.9.jar --server.port=8858 # 3. 四服务(llm-provider 双实例) mvn -f code/pom.xml -DskipTests install mvn -f code/user/pom.xml spring-boot:run mvn -f code/llm-provider/pom.xml spring-boot:run # 8102 mvn -f code/llm-provider/pom.xml spring-boot:run -Dspring-boot.run.arguments=--server.port=8103 mvn -f code/chat/pom.xml spring-boot:run mvn -f code/gateway/pom.xml spring-boot:run
控制台地址与账号(Nacos 行为按 nacos/nacos-server:v3.0.3 镜像实测,2026-08-21):
nacos/nacos-server:v3.0.3
/nacos
tools/nacos-init.ps1
NACOS_AUTH_TOKEN
docker compose down
java -jar
JDK 17 · Spring Boot 3.5.0 · Spring Cloud 2025.0.0 · Spring Cloud Alibaba 2025.0.0.0 · Nacos 3.0.3 · Sentinel 1.8.9
tools/up.ps1
curl -X POST localhost:8080/api/chat -d '{"userId":"u1","message":"hi"}' -H "Content-Type: application/json"
reply/degraded/backend/instanceId/costMs/user/reqId
X-Request-Id
curl localhost:8080/api/profile/u1
curl -X POST localhost:8102/admin/fault -d '{"delayMs":2000}' -H "Content-Type: application/json"
errorRate∈[0,1]
timeoutMs>0
delayMs
curl localhost:8102/admin/fault
{}
契约细节(JSON 形状、访客降级口径)见 design/architecture.md §4「接口契约细化」。
design/architecture.md
自检(PR 合并前必跑,任一断言 FAIL 退出码 1):
powershell -ExecutionPolicy Bypass -File tools/smoke.ps1 -Stage M3 # 断言:主链路字段齐 / 双实例轮换 / profile 正常 / reqId 贯穿三段日志 / delay 注入变慢清零恢复 / transport 端口无冲突 # M3 另断言:规则热切换 / gateway + provider 429 / chat 熔断降级;结束后自动清零 fault 和规则
完整的 M1 验收命令、测试计数、requestId 日志与重启恢复证据见 assets/m1-validation.md。
assets/m1-validation.md
user 停机、访客降级与自动重启也可由脚本一次完成;M2 下重启会同时恢复 user 的 Sentinel transport 8723:
powershell -ExecutionPolicy Bypass -File tools/restart-recovery.ps1 -ConfirmRestart
五个进程分别使用 Sentinel transport 端口 8719-8723,并统一连接 localhost:8858。运行态配置可从每个进程的 /actuator/sentinel 核对;冻结后的资源名和 baseline/governed 对照结果见 assets/m2-validation.md。
localhost:8858
/actuator/sentinel
assets/m2-validation.md
M2 已接好 starter、fallback、gateway 429 回调和状态观察器;M3 在 gateway/chat/llm-provider 接通 Nacos datasource,规则启动加载、热更新和重启恢复均以 Nacos 为唯一来源。
Sentinel 规则集下发(M3 已接通 datasource;规则只在 Nacos 改,Dashboard 只看不动):
powershell -ExecutionPolicy Bypass -File tools/rules.ps1 -Get # 回读三份 dataId powershell -ExecutionPolicy Bypass -File tools/rules.ps1 -Set all-off # 三份全 [](实验二 baseline) powershell -ExecutionPolicy Bypass -File tools/rules.ps1 -Set exp1-rate-on # 仅 gateway 限流(实验一) powershell -ExecutionPolicy Bypass -File tools/rules.ps1 -Set exp2-cb-on # chat 熔断规则(资源名已由 M2 T2.2 实测冻结) powershell -ExecutionPolicy Bypass -File tools/rules.ps1 -Set provider-rate-on # 仅 provider 二级限流 smoke,不混入主实验
完整 G1(T3.2-T3.5)走查使用 PowerShell 5.1/7 兼容的 runspace 并发脚本。它会验证空/有规则无需重启即可切换、两个限流层的 429、B1-B4 及熔断状态日志,并在 finally 清理双实例故障与三份规则:
finally
powershell -ExecutionPolicy Bypass -File tools/m3-acceptance.ps1 -Scope Full
本轮实际的限流计数、B1-B4 时延、状态转换、错误 dataId 与重启恢复证据见 assets/m3-validation.md。
assets/m3-validation.md
reqId 贯穿演示:任一请求的 X-Request-Id 响应头即 reqId,可一行 grep 串起 gateway/chat/llm-provider 三段日志:
Select-String -Path code\*\logs\*.log -Pattern '<reqId>'
验收清单第 4 条手工演示(user 挂掉不拖垮 chat,重启自动恢复):
# 1. 停 user(按端口杀进程树) Get-NetTCPConnection -LocalPort 8104 -State Listen | ForEach-Object { taskkill /PID $_.OwningProcess /T /F } # 2. chat 主链路仍 200,user 字段变为访客身份(source=guest,无 5xx) curl -X POST localhost:8080/api/chat -d '{"userId":"u1","message":"hi"}' -H "Content-Type: application/json" # 3. 重启 user(Nacos 心跳超时摘除旧实例约 10-20s,之后 chat 自动恢复真实身份) mvn -f code/user/pom.xml spring-boot:run # 4. 稍候 source 恢复 user;用 tools/down.ps1 + up.ps1 全量重启更省事
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
基于微服务架构的服务治理 —— 大模型对话助手
「分布式计算环境」课程大作业项目:基于 Spring Cloud Alibaba 构建大模型对话助手微服务系统,演示限流、熔断、降级、灰度流量分隔四项服务治理能力带来的稳定性收益。
治理能力演示速览
每组能力都可在本机按
assets/demo-runbook.md现场复跑(完整复现说明与坑位处理见assets/t4.6-demo-runbook.md);下表给出核心量化结论与已归档的运行态证据。assets/exp1-rate-limiting.csvassets/exp2-circuit-degrade.csvassets/raw/m5-exp-20260828/b6y-*assets/exp3-traffic-split.csv、C 组复跑仓库导航
report/survey/design/code/assets/assets/m5-evidence-inventory-20260829.md)快速开始
环境依赖(第一项最容易踩坑,Docker Desktop 未装/未启动时 Nacos 起不来):
design/tech-stack.md)一键启停(推荐):
手动逐步:
控制台地址与账号(Nacos 行为按
nacos/nacos-server:v3.0.3镜像实测,2026-08-21):/nacos前缀;② 无默认密码,首次启动须初始化(tools/nacos-init.ps1,幂等);③ 镜像强制鉴权:不设NACOS_AUTH_TOKEN容器直接退出——compose 已内置;④ derby 内嵌存储未挂卷,docker compose down重建容器后需重跑 init 脚本java -jar运行技术栈
JDK 17 · Spring Boot 3.5.0 · Spring Cloud 2025.0.0 · Spring Cloud Alibaba 2025.0.0.0 · Nacos 3.0.3 · Sentinel 1.8.9
M1:全链路 API 速查(
tools/up.ps1启动后可用)curl -X POST localhost:8080/api/chat -d '{"userId":"u1","message":"hi"}' -H "Content-Type: application/json"reply/degraded/backend/instanceId/costMs/user/reqId,响应头回写X-Request-Idcurl localhost:8080/api/profile/u1curl -X POST localhost:8102/admin/fault -d '{"delayMs":2000}' -H "Content-Type: application/json"errorRate∈[0,1];timeoutMs>0优先于delayMs)curl localhost:8102/admin/fault{})契约细节(JSON 形状、访客降级口径)见
design/architecture.md§4「接口契约细化」。自检(PR 合并前必跑,任一断言 FAIL 退出码 1):
完整的 M1 验收命令、测试计数、requestId 日志与重启恢复证据见
assets/m1-validation.md。user 停机、访客降级与自动重启也可由脚本一次完成;M2 下重启会同时恢复 user 的 Sentinel transport 8723:
M2:Sentinel 治理接入
五个进程分别使用 Sentinel transport 端口 8719-8723,并统一连接
localhost:8858。运行态配置可从每个进程的/actuator/sentinel核对;冻结后的资源名和 baseline/governed 对照结果见assets/m2-validation.md。M2 已接好 starter、fallback、gateway 429 回调和状态观察器;M3 在 gateway/chat/llm-provider 接通 Nacos datasource,规则启动加载、热更新和重启恢复均以 Nacos 为唯一来源。
Sentinel 规则集下发(M3 已接通 datasource;规则只在 Nacos 改,Dashboard 只看不动):
完整 G1(T3.2-T3.5)走查使用 PowerShell 5.1/7 兼容的 runspace 并发脚本。它会验证空/有规则无需重启即可切换、两个限流层的 429、B1-B4 及熔断状态日志,并在
finally清理双实例故障与三份规则:本轮实际的限流计数、B1-B4 时延、状态转换、错误 dataId 与重启恢复证据见
assets/m3-validation.md。reqId 贯穿演示:任一请求的
X-Request-Id响应头即 reqId,可一行 grep 串起 gateway/chat/llm-provider 三段日志:验收清单第 4 条手工演示(user 挂掉不拖垮 chat,重启自动恢复):