Files
docs/阿里云生产环境选型压测与上线手册.md
T
2026-08-21 09:20:52 +08:00

30 KiB
Raw Blame History

阿里云生产环境选型、压测与上线手册

适用范围:虫虫出海国内头程与海外仓系统首次生产部署。

读者:初次负责生产运维的开发、测试和运维人员。

本文只提供选型、建设、压测和验收步骤,不授权创建、变更或删除任何阿里云生产资源,也不替代阿里云账单确认、安全评审和业务上线审批。

1. 先给结论

当前开发、测试环境采用单宿主机共置,8 核 32 GB 已接近占满。生产环境不建议在同一台机器上为相同服务强行启动两个实例:同机双实例只能防单进程故障,不能防宿主机、磁盘、网络或 Docker 故障,还会进一步挤压内存。

首次生产建议:

  • 国内、海外分别建设独立部署单元,遵守《双区域部署与 Nacos 规划》;
  • 每个区域至少两台应用 ECS,核心服务在不同 ECS 上各运行一个实例;
  • MySQL、Redis、Nacos、RocketMQ 优先使用阿里云托管服务,降低新手自建集群的运维风险;
  • 国内和海外分别创建私有 OSS Bucket,文件不再依赖单机 /data/files;
  • 上线前先在隔离的预发布环境压测,禁止第一次满负载压测直接打生产;
  • 先设置 JVM 与容器资源上限,再决定 ECS 规格,不能直接把开发机占用乘以实例数采购。

生产目标拓扑:

国内区域 production-cn
  Internet
    -> WAF(可选)/ ALB
      -> ECS-CN-A: gateway + 国内核心服务副本 A
      -> ECS-CN-B: gateway + 国内核心服务副本 B
  RDS MySQL 高可用(国内 Schema)
  Tair/Redis 高可用(国内会话、幂等与缓存)
  MSE Nacos(国内实例)
  RocketMQ(国内实例)
  OSS-CN(国内文件)

海外区域 production-overseas
  Internet
    -> WAF(可选)/ ALB
      -> ECS-OS-A: gateway-overseas + lastleg/warehouse-overseas 副本 A
      -> ECS-OS-B: gateway-overseas + lastleg/warehouse-overseas 副本 B
  RDS MySQL 高可用(海外 Schema)
  Tair/Redis 高可用(海外本地数据)
  MSE Nacos(海外实例)
  RocketMQ(海外实例)
  OSS-OS(海外文件)

跨区域仅开放:海外 Token/JWKS、受保护的双区域 API、Event Bridge/MQ 事件链路。

如果首期预算只能支撑一台生产 ECS:每个服务先运行一个实例,做好备份、监控和快速重建,不做同机伪双实例。准备好第二台 ECS 后,再把核心服务分布到两台机器。

2. 生产上线前必须补齐的工程差距

当前 Compose 可以用于开发、测试,但不能直接视为生产高可用方案:

  1. 多数服务没有明确的容器内存限制和 JVM Xms/Xmx;同一宿主机上多个 JVM 可能共同耗尽内存。
  2. Compose 使用固定 container_name 和宿主机端口,单机内不能直接横向扩展同一服务。
  3. File 服务使用宿主机目录 /data/files;多机器部署后不同节点无法看到同一文件。
  4. 国内、海外生产 Nacos、Redis、数据库和 Event Bridge 仍需按双区域规划落地并验收。
  5. 多个模块存在 @Scheduled 调度器。部分 Outbox、Event Bridge 和船期任务已有数据库租约,但不能因此认定所有任务都可安全多实例运行。
  6. 跨服务默认 URL 中仍可能出现 Compose 服务名;跨机器部署时应改成 Nacos 服务发现、区域内负载均衡地址或稳定内网域名。

上线门禁:

  • API 实例可扩为 2 个;
  • 未验证的定时任务/Worker 先保持 1 个;
  • File 服务完成 OSS 适配后才能跨机器扩容;
  • 所有服务具备健康检查、优雅停机、超时、重试和连接池上限;
  • 数据库变更、生产部署和真实压测分别审批,不互相隐含授权。

3. 阿里云账号、地域和网络

3.1 账号安全

  • 日常操作使用 RAM 用户,不使用主账号 AccessKey;
  • 开启 MFA;
  • 按职责授予最小权限,不直接长期授予 AdministratorAccess;
  • 应用访问 OSS 等云资源时优先使用 ECS RAM 角色或临时凭证,不把长期 AccessKey 写进源码、Nacos、镜像或 Jenkins 日志;
  • 国内和海外资源使用资源组、标签和费用中心区分,例如 env=prod、region-role=cn/overseas、system=baiyue。

3.2 地域选择

  • 国内 ECS、RDS、Tair、MSE、RocketMQ、OSS、ALB 应在同一阿里云地域和 VPC,通过内网访问;
  • 海外资源选择靠近主要海外仓、网络合规允许的地域,不能仅按价格选择;
  • 国内与海外数据库、Redis、Nacos、OSS 分开,不做业务服务跨境直连数据库;
  • 地域创建后通常不能直接修改,购买前先确认仓库位置、网络延迟、数据合规和对应产品是否在售。

3.3 VPC 与安全组

每个区域建议:

一个生产 VPC
├─ 可用区 A 应用交换机
├─ 可用区 B 应用交换机
├─ 可用区 A 数据交换机
└─ 可用区 B 数据交换机

安全组原则:

  • 互联网只进入 ALB/WAF 的 80/443;
  • ECS 不直接暴露 MySQL 3306、Redis 6379、Nacos 8848/9848、RocketMQ 或 Actuator 管理端口;
  • 数据服务白名单只允许生产 VPC/应用安全组;
  • SSH 只允许堡垒机或固定运维出口,并优先使用密钥登录;
  • 国内到海外只开放已经确认的 HTTPS/JWKS/Event Bridge 端口和来源白名单。

4. ECS 与应用实例怎么选

4.1 先测量,后采购

开发环境先连续采集一天或完整业务回归周期:

docker stats

记录每个容器:

指标 记录方式 用途
内存常态/峰值 每 1~5 分钟采样 计算 JVM 和容器上限
CPU 常态/峰值 高峰与批处理时段 计算 ECS 核数
GC 暂停、堆占用 JVM 指标/APM 判断是否只是堆配置过大
数据库连接数 RDS/连接池监控 防止多实例后连接翻倍
容器重启/OOM Docker 与系统日志 找出不稳定服务
磁盘和日志增长 df、日志平台 计算磁盘及保留周期

每个 Java 服务先设置:

容器内存上限 > JVM Xmx + 非堆内存 + 线程栈 + Native 内存

示例不是统一生产值:

轻服务:容器 1.5 GB,Xms 256 MB,Xmx 768 MB
普通业务服务:容器 3 GB,Xms 512 MB,Xmx 2 GB
File/导出类服务:根据并发文件大小单独测量,不能照抄

内存验收应保留至少 25%~30% 宿主机余量;CPU 长期不超过约 60%~70%,为故障切换后单机接管流量留空间。

4.2 初始购买建议

没有压测数据前,不把以下规格当成最终答案:

  • 预发布:可先用 8 核 32 GB,拆出 MySQL、Redis、Nacos、MQ 后重新观察;
  • 生产应用节点:可以两台 16 核 64 GB 作为评估起点,但必须用压测结果确认,可能需要降配或增加第三台;
  • 系统盘与数据盘分开,日志写数据盘并设置轮转;
  • 两台 ECS 放在同地域不同可用区,由 ALB 做健康检查和流量转发。

应用实例建议:

服务 首次生产实例数 说明
gateway、gateway-overseas 每区域 2 放在不同 ECS/可用区
auth 国内 2 统一账号入口,Redis/RDS 也需高可用
firstleg、order、国内 warehouse 国内各 2 国内核心链路
lastleg-service、warehouse-overseas-service 海外各 2 海外仓核心链路
iam、finance 初期可 1,稳定后 2 接受单服务维护窗口时可暂缓
file OSS 改造完成后 2 本地目录模式禁止跨机器双实例
integration、print、audit 初期 1 结合业务中断容忍度调整
Event Bridge/定时 Worker 初期 1 完成并发领取和幂等演练后再扩 2

5. 负载均衡 ALB

国内和海外各创建一个 ALB:

  1. 进入“应用型负载均衡 ALB”控制台,选择与 ECS 相同地域和 VPC;
  2. 在两个可用区分别选择交换机;
  3. 创建 HTTPS 监听 443,绑定证书;HTTP 80 只用于跳转 HTTPS;
  4. 创建服务器组,将两台 Gateway ECS 加入服务器组;
  5. 健康检查协议选 HTTP,路径使用 /actuator/health 或单独的轻量 /healthz;
  6. 健康检查只验证实例能否接流量,不执行写数据库等重操作;
  7. 配置连接空闲超时、请求超时、最大请求体和上传超时;
  8. 开启访问日志,监控后端 5xx、健康实例数和响应时间;
  9. 发布时先将新实例加入服务器组,小流量验证,再摘除旧实例。

ALB 会持续健康检查并自动屏蔽异常后端,具体配置见阿里云《配置和管理健康检查》。

6. RDS MySQL 高可用怎么选

6.1 推荐选择

国内、海外各购买一套独立 RDS MySQL:

控制台选项 首次生产建议
数据库引擎 与当前代码一致的 MySQL 8.0;升级到 8.4 前先做兼容验证
产品系列 高可用系列;业务规模和 RPO 要求进一步提高时评估集群系列
部署方案 多可用区,主备位于不同可用区
规格类型 核心业务优先独享规格;预算有限可先通用规格压测
网络 与本区域 ECS 相同 VPC,只开内网地址
存储 根据压测选择 ESSD/高性能云盘或本地盘,预留 30% 以上空间
备份 自动全量备份 + 日志备份/时间点恢复,定期做恢复演练
白名单 只允许生产应用安全组/VPC,不开放 0.0.0.0/0

高可用系列是一主一备,适合大多数生产场景;多可用区可实现同地域可用区级容灾。阿里云创建说明和系列对比见《创建 RDS MySQL 实例》和《RDS MySQL 选型指南》。

6.2 初始规格如何估算

首次可把 4 核 16 GB 作为压测候选规格,不作为直接采购结论。满足以下任一条件时升配:

  • CPU 高峰持续超过 70%;
  • 活跃连接接近实例上限的 70%;
  • IOPS/吞吐接近规格上限;
  • Buffer Pool 命中率持续偏低且内存成为瓶颈;
  • P95/P99 SQL 延迟超过业务目标;
  • 主备复制或备份明显影响业务。

国内多个服务初期可以共用一个国内 RDS 实例、保持独立 Schema;海外使用另一个 RDS 实例并保持独立 Schema。不要为了“微服务形式”在首期机械地每个服务购买一套 RDS,但必须保留数据库账号和 Schema 权限隔离。

6.3 必做配置

  • 为每个服务创建独立数据库账号,只授予所属 Schema 权限;
  • 连接串使用内网地址和 TLS;
  • HikariCP 等连接池设置最大连接数,实例扩容时计算“单实例连接数 × 应用实例数”;
  • 打开慢 SQL、性能洞察和磁盘告警;
  • 设置自动备份和保留周期,关键上线前创建手工备份;
  • 每季度至少做一次“从备份恢复到新实例”的演练;只看到备份成功不等于可恢复;
  • 应用具备连接重建能力,演练 RDS 主备切换时不能依赖旧连接永久有效。

7. Tair/Redis 高可用怎么选

国内、海外各购买一个独立实例:

控制台选项 首次生产建议
产品 云数据库 Tair(兼容 Redis),选择与当前客户端兼容的 Redis 版本
架构 标准架构高可用,不选单节点
可用区 多可用区主备
规格 初期可从 4 GB 候选规格压测,再按内存、带宽和连接数调整
网络 与应用相同 VPC,只用内网地址
认证 开启密码/账号 ACL,凭据由生产密钥系统注入

标准高可用采用主备架构并支持故障切换,单节点不建议用于生产。只有单分片容量、带宽或 QPS 确实不足时才升级集群架构;读请求远高于写请求时再评估读写分离。官方架构说明见《Tair 产品架构概述》和《标准架构》。

必须监控:

  • 内存使用率和内存碎片率;
  • 连接数、连接失败和带宽;
  • CPU、命令延迟、慢查询;
  • evicted_keys、过期 Key、热点 Key 和大 Key;
  • 主备切换事件。

应用要求:

  • 连接池必须支持断线重连;
  • Session、Token 和幂等 Key 设置明确 TTL;
  • Redis 不作为不可恢复的唯一业务事实来源;
  • 海外服务不得访问国内 Redis。

8. OSS 怎么开、怎么接

8.1 必须创建两个 Bucket

建议命名,实际名称需增加公司/账号随机后缀以满足全局唯一:

baiyue-prod-cn-files-<suffix>
baiyue-prod-overseas-files-<suffix>

国内文件进入国内 Bucket,海外现场照片和海外业务文件进入海外 Bucket。禁止海外应用为了省事直接把文件写入国内 Bucket。

8.2 控制台创建步骤

  1. 登录 OSS 控制台并开通 OSS;
  2. 进入 Bucket 列表,单击“创建 Bucket”;
  3. 地域选择对应应用 ECS 所在地域;
  4. 存储类型首次选“标准存储”;
  5. 数据冗余生产优先选择 ZRS 同城冗余,测试可用 LRS;
  6. 读写权限选择“私有”;
  7. 开启“阻止公共访问”;
  8. 开启服务端加密:普通合规要求可先选 SSE-OSS/AES-256;必须自主管理密钥时选 SSE-KMS;
  9. 开启版本控制,防止覆盖和误删;
  10. 开启访问日志或接入日志服务;
  11. 创建完成后记录内网 Endpoint、Bucket 名称和地域,不记录 AccessKey;
  12. 为 File 服务绑定 RAM 角色或最小权限 RAM 策略,只允许指定 Bucket/前缀的必要读写操作。

OSS 官方控制台步骤见《OSS 控制台快速入门》。生产建议 ZRS,Bucket 必须私有并开启阻止公共访问,相关能力见《Bucket 概览》和《阻止公共访问》。加密方式见《OSS 数据加密》。

8.3 访问方式

  • 浏览器/PDA 不持有 OSS 长期 AccessKey;
  • 上传可以由 File 服务中转,或由 File 服务签发短时上传凭证/预签名 URL;
  • 下载由业务服务先校验账号、客户、文件用途和权限,再返回短时预签名 URL;
  • URL 有效期尽量短,日志不得记录完整签名 URL;
  • Bucket 不设公共读,不能把“知道 URL”当作权限控制;
  • CORS 只允许正式 Admin/Client 域名和必要方法/Header,不使用任意来源 *;PDA 原生上传不依赖浏览器 CORS。

8.4 生命周期建议

先按文件类别划分前缀:

evidence/      现场证据和业务照片
documents/     单证与凭证
exports/       临时导出文件
temp/          临时上传
logs/          OSS 访问日志

建议初始规则:

  • 未完成的分片上传:7 天自动清理;
  • temp/:7~30 天清理,前提是确认没有业务引用;
  • exports/:根据产品约定 7~30 天清理;
  • 历史版本:可在 90~180 天后转低频或删除,但必须先确认审计和凭证保留要求;
  • evidence/、documents/:未获得财务、法务和产品明确保留期前禁止自动删除;
  • 冷数据转低频/归档前确认最低存储时长和取回费用。

生命周期规则也会影响存量对象,API 更新规则具有覆盖语义,详细机制见《OSS 生命周期概述》。

8.5 代码改造门禁

开通 OSS 不代表应用自动支持 OSS。当前 File 服务仍使用 /data/files,需要完成:

  • OSS SDK 与存储适配层;
  • Bucket、Endpoint、地域、前缀配置;
  • RAM 角色/临时凭证接入;
  • 上传内容类型、大小、用途和客户范围校验;
  • 文件元数据仍落 File 数据库,业务表只保存稳定 fileId;
  • 预签名上传/下载 URL;
  • 上传失败、重复提交、超时、断点续传和孤儿对象清理;
  • 国内/海外 Bucket 路由;
  • 迁移或测试文件的校验方案。

完成自动化测试和真实 OSS 测试 Bucket 验收后,才能移除生产本地文件卷。

9. Nacos:优先使用 MSE

对于新手运维,不建议自己在 ECS 上维护 Nacos 三节点、数据库、升级和故障恢复。国内、海外分别创建 MSE Nacos 实例:

  1. 进入 MSE 控制台;
  2. 选择“注册配置中心 > 创建实例”;
  3. 引擎选择 Nacos,版本与现有 Spring Cloud Alibaba 客户端兼容;
  4. 地域、VPC、交换机选择本区域生产网络;
  5. 中小规模生产可评估 MSE Serverless;明确要求固定资源和集群节点时选择专业版;
  6. 专业版高可用至少 3 节点;开发版单节点不能作为正式高可用生产配置;
  7. 开启鉴权,关闭公网白名单,不暴露管理端口;
  8. 国内、海外使用不同实例,不依赖跨区域 Namespace;
  9. 数据库密码、JWT 私钥和内部 Token 不写 Nacos 明文,使用 Jenkins Credentials/KMS/密钥管理系统注入;
  10. 上线前验证配置发布、服务注册、实例下线和故障切换。

MSE 创建与节点要求见阿里云《创建 Nacos 实例》。

10. RocketMQ:优先使用云消息队列

国内、海外分别建立本区域 RocketMQ 实例。选型前核对当前 Java Client、协议、Topic、Consumer Group、事务/延时消息和 ACL 与阿里云实例版本兼容。

首次建议:

  • 不选早期单机实例;
  • 业务事件量不确定时先用按量/Serverless 做预发布验证;
  • 财务、跨区域 Event Bridge 等要求堆积消息也具备多可用区数据高可用时,选择支持跨可用区数据复制的实例类型;
  • Topic、Consumer Group 按 prod-cn、prod-overseas 和业务域命名隔离;
  • 开启 ACL、VPC 访问、消息堆积量和最老消息年龄告警;
  • 保留数据库 Outbox/Inbox 幂等与重试,不能因为使用托管 MQ 就删除业务可靠性设计。

阿里云 RocketMQ 5.x 除早期单机版外默认具备多可用区服务高可用;跨可用区消息数据同步能力取决于实例系列,见《RocketMQ 实例容灾》。

11. 压测前准备

11.1 压测环境

推荐建立 staging/预发布环境:

  • 拓扑、JVM 参数、RDS/Tair 架构与生产一致;
  • 规格可以缩小,但必须记录缩放比例,不能直接把小规格结果当生产结果;
  • 使用独立数据库、Redis、MQ Topic、OSS Bucket/前缀和测试账号;
  • 测试数据必须脱敏,不复制真实客户密码、Token、证件、单证和照片;
  • 禁止压测请求进入生产支付、短信、邮件、船司、OCR、Amazon 等第三方真实接口;使用沙箱或明确 Mock;
  • 压测前建立监控面板和停止开关;
  • 明确执行时间、负责人、目标 RPS、最大 RPS、持续时间和停止条件。

11.2 选择业务场景

不能只压 /actuator/health。至少覆盖:

场景 建议比例 注意事项
登录/刷新 Token 5% 避免触发真实账号锁定;使用专用账号池
列表、详情和权限读取 45% 模拟常见筛选、分页和不同客户
下单/入库/状态推进 20% 每次使用唯一业务号和幂等键
PDA 批量扫码提交 10% 模拟真实批量大小,不逐码伪造提交
海外入仓、库存、托盘查询 10% 请求直接进入海外 Gateway
文件上传/下载 5% 与普通 API 分开测,设置文件大小分布
导出、事件和异步任务 5% 观察 MQ 堆积、Worker 吞吐和最终一致性

比例必须根据未来真实业务调整。写场景压测后要有测试数据清理方案,但不得用广泛删除 SQL 清理生产。

11.3 没有线上数据时怎么估算 RPS

先估算高峰小时的真实业务事务数:

平均 RPS = 高峰小时请求总数 / 3600
容量目标 RPS = 预计峰值 RPS × 2
瞬时并发 ≈ RPS × 平均响应时间(秒)

示例:高峰一小时预计 36,000 次 API 请求,平均约 10 RPS;考虑仓库集中操作和增长,预计峰值按 30 RPS,压测容量目标可先设 60 RPS,而不是直接从 1,000 RPS 开始。

阿里云 PTS 支持并发和 RPS 两种压力模型;容量规划更适合从 RPS 模式开始。RPS 模式下响应越慢,工具为了维持吞吐会积累更多并发,因此必须设置停止条件。参考《PTS 压力模型》和《RPS 与并发计算》。

12. 压测执行步骤

12.1 分阶段施压

不要一步打满:

阶段 压力 建议持续时间 目的
冒烟 1~5 RPS 5 分钟 验证脚本、数据和监控
基线 预计峰值的 25% 10 分钟 获得无压力基线
爬坡 50%、75%、100% 每档 10~15 分钟 找出首个瓶颈
稳态 100% 容量目标 60 分钟 观察内存泄漏、连接池和堆积
峰值 150%~200% 预计峰值 5~10 分钟 验证限流和降级
恢复 降回 10% 10 分钟 确认队列、连接和 RT 恢复

初始验收参考值,需要产品和技术负责人确认后才成为正式 SLO:

  • HTTP/业务非预期错误率 < 0.5%;
  • 普通查询 P95 < 500 ms;
  • 核心写操作 P95 < 1 s;
  • CPU 稳态 < 70%;
  • 宿主机和容器内存稳态 < 75%,压测结束后能回落;
  • RDS 连接、IOPS、吞吐均不超过规格上限的约 70%;
  • Redis 无持续淘汰、连接失败和热点 Key 风暴;
  • MQ 堆积能在规定时间内清空,Outbox/Inbox 无持续增长;
  • 任一应用节点下线后剩余节点能接管目标流量。

立即停止条件:

  • 错误率持续超过 5%;
  • P95 持续超过目标 3 倍;
  • 数据库、Redis、MQ 出现不可恢复错误;
  • 生产或第三方真实系统被误调用;
  • CPU/内存/连接数接近耗尽;
  • 出现数据跨客户、重复扣费、重复状态推进或不可清理脏数据。

12.2 使用阿里云 PTS

  1. 开通 PTS,进入“性能测试 > 创建场景 > PTS 压测”;
  2. 每个业务会话配置串行 API,例如登录 → 列表 → 详情;不同业务会话并行;
  3. URL 使用预发布域名,不使用生产域名;
  4. Token、账号、业务号通过参数文件和变量传递,不写进场景名称或公开报告;
  5. 容量规划优先选 RPS 模式,从低 RPS 开始;
  6. 设置爬坡时间、最大 RPS、持续时间、请求超时和停止条件;
  7. 开启 ECS、RDS、Tair、ALB、JVM/APM 和 RocketMQ 监控关联;
  8. 先调试 1 个虚拟用户,确认不会操作真实数据;
  9. 发起正式压测并实时观察错误率、RT、资源和日志;
  10. 导出报告,记录压测版本、环境、数据规模、RPS、P95/P99、瓶颈和结论。

PTS 官方流程见《PTS 快速入门》。PTS 会产生费用,发起前核对资源包和预计量级。

12.3 使用 k6 做低成本预压测

先安装 k6,再创建本地临时脚本;Token 通过环境变量传入,禁止提交:

import http from 'k6/http'
import { check, sleep } from 'k6'

export const options = {
  scenarios: {
    api_capacity: {
      executor: 'ramping-arrival-rate',
      startRate: 2,
      timeUnit: '1s',
      preAllocatedVUs: 20,
      maxVUs: 200,
      stages: [
        { target: 10, duration: '5m' },
        { target: 30, duration: '10m' },
        { target: 60, duration: '10m' },
        { target: 60, duration: '30m' },
        { target: 5, duration: '5m' }
      ]
    }
  },
  thresholds: {
    http_req_failed: ['rate<0.005'],
    http_req_duration: ['p(95)<500']
  }
}

const baseUrl = __ENV.BASE_URL
const token = __ENV.ACCESS_TOKEN

export default function () {
  const response = http.get(`${baseUrl}/api/platform/v1/example?page=1&size=20`, {
    headers: {
      Authorization: `Bearer ${token}`,
      'X-Request-Id': `load-${__VU}-${__ITER}`
    },
    timeout: '5s'
  })

  check(response, {
    'HTTP 200': (value) => value.status === 200,
    '业务成功': (value) => String(value.json('code')) === '200'
  })
  sleep(0.2)
}

运行时只使用预发布地址:

$env:BASE_URL='https://staging-api.example.com'
$env:ACCESS_TOKEN='<专用压测账号的短时Token>'
k6 run .\load-test.js
Remove-Item Env:ACCESS_TOKEN

不要把 Token 放进脚本、Git、终端截图或压测报告。写接口必须生成唯一幂等键并使用专用数据集。

13. 高可用与故障演练

通过容量压测后,保持约 30%~50% 目标流量执行:

  1. 摘除/停止一台 Gateway ECS,验证 ALB 健康检查和剩余实例接管;
  2. 滚动发布一个业务服务,验证请求无明显中断;
  3. 在变更窗口执行 RDS 主备切换演练,验证连接池自动恢复;
  4. 执行 Tair 主备切换演练,验证 Session、Token 和幂等请求行为;
  5. 暂停 MQ 消费者,制造受控堆积,再恢复并验证 Outbox/Inbox 最终清空;
  6. 停止 Event Bridge Worker,恢复后验证跨区域事件幂等重放;
  7. 模拟 OSS 超时/拒绝,确认业务不会记录“文件上传成功”;
  8. 验证单台 ECS 故障不会让区域入口完全不可用;
  9. 验证海外区域故障不会让国内数据库或 Redis 被直接跨区访问。

每次演练记录:开始/结束时间、影响、RTO、数据丢失量、告警是否触发、人工步骤和改进项。未经审批不在真实生产高峰执行故障演练。

14. 监控和告警清单

层级 必须监控
ALB QPS、4xx/5xx、P95/P99、健康后端数、连接数
ECS CPU、内存、Load、磁盘使用率/IO、网络、OOM、容器重启
JVM Heap/Non-Heap、GC 次数与暂停、线程数、连接池、HTTP 线程池
应用 成功率、业务错误码、P95/P99、登录失败、幂等冲突、队列积压
RDS CPU、内存、连接数、IOPS、吞吐、磁盘、慢 SQL、锁等待、主备状态
Tair CPU、内存、连接、带宽、慢命令、淘汰、大 Key/热点 Key、切换事件
MSE 注册实例数、配置发布失败、节点状态、请求量和延迟
RocketMQ 生产/消费 TPS、堆积量、最老消息年龄、消费失败/DLQ
OSS 4xx/5xx、请求量、流量、存储量、异常公网流出、生命周期执行
Event Bridge Inbox/Outbox PENDING、失败/死信、租约超时、跨区延迟

建议告警至少分三级:

  • P1:区域入口不可用、数据库不可用、数据跨客户、持续错误率高;立即通知电话/短信;
  • P2:单实例故障、资源超过 80%、MQ 持续堆积、慢 SQL;即时群通知;
  • P3:容量趋势、证书临近过期、备份/生命周期异常;工作时间处理。

15. 备份、RTO 与 RPO

业务负责人必须确认:

  • RTO:故障后最多允许多久恢复;
  • RPO:最多允许丢失多久的数据;
  • 财务凭证、仓库证据、审计日志和普通临时文件的保留期;
  • 是否要求地域级灾备,而不仅是同地域多可用区。

没有正式指标时可以把“核心业务 RTO 30 分钟、RPO 5 分钟”作为讨论起点,不能直接写入客户 SLA。

最低要求:

  • RDS 自动全量备份、日志备份和时间点恢复;
  • 定期恢复到新实例并做业务校验;
  • OSS 版本控制、ZRS、必要时跨区域复制/云备份;
  • 配置、Jenkins Pipeline、Compose 和初始化 SQL 全部版本化;
  • Redis 不承载唯一业务事实;
  • RocketMQ 事件继续由数据库 Outbox/Inbox 保证可重放;
  • 生产密钥有备份、轮换和紧急吊销流程。

16. 成本控制

  • 预发布先按量付费,压测确认后生产长期资源再评估包年包月;
  • 不为每个微服务机械购买独立 RDS/Tair,先按区域实例 + Schema/账号隔离;
  • OSS 先标准存储,获得真实访问频率后再配生命周期;
  • 建立预算和费用告警,重点关注公网流量、OSS 下载/取回、日志、PTS 和跨区域流量;
  • 资源统一打标签,每月检查闲置 ECS、磁盘、快照、公网 IP、测试 RDS 和 OSS 历史版本;
  • 任何降配前先看 7~30 天监控和业务增长,不以单日低谷判断。

17. 首次上线执行清单

17.1 建设前

  • 确认国内和海外地域、可用区及数据合规;
  • 确认预算、RTO、RPO 和文件保留期;
  • 收集开发环境 docker stats、JVM、MySQL、Redis 指标;
  • 完成 File 服务 OSS 方案和多实例调度审计;
  • 建立 RAM 用户、MFA、资源组、标签和费用告警。

17.2 云资源

  • 每区域至少两个应用交换机/可用区;
  • 国内和海外 ALB;
  • 国内和海外 RDS MySQL 高可用多可用区;
  • 国内和海外 Tair 标准高可用;
  • 国内和海外 MSE Nacos;
  • 国内和海外 RocketMQ;
  • 国内和海外私有 OSS Bucket;
  • 日志、监控、告警和备份策略。

17.3 应用

  • JVM/容器资源上限;
  • 数据库和 Redis 连接池上限;
  • 国内/海外配置、Token、JWKS 和 API Base 隔离;
  • File 服务 OSS 适配;
  • Gateway 和核心服务双实例;
  • Worker/调度器单实例或数据库租约验证;
  • 健康检查、优雅停机、超时、重试、限流;
  • 密钥仅由生产 Credentials/KMS 注入。

17.4 验收

  • 冒烟、爬坡、稳态、峰值和恢复压测;
  • 单 ECS 故障和滚动发布演练;
  • RDS/Tair 切换演练;
  • MQ/Event Bridge 堆积与恢复演练;
  • OSS 上传、下载、拒绝和权限隔离验收;
  • 备份恢复演练;
  • 监控告警通知到真实值班人;
  • 输出最终容量报告和上线/回滚方案。

18. 容量报告模板

版本/Commit:
压测环境与地域:
应用实例与规格:
RDS/Tair/MQ/OSS 规格:
测试数据量:
业务场景及比例:
目标/实际 RPS:
持续时间:
成功率:
P50/P95/P99:
ECS CPU/内存峰值:
JVM Heap/GC:
RDS CPU/连接/IOPS/慢SQL:
Tair 内存/CPU/连接/淘汰:
MQ 最大堆积及清空时间:
发现的瓶颈:
故障切换结果:
本版本安全容量:
建议生产规格:
未覆盖风险:
审批人和日期:

只有完成容量压测、故障演练和备份恢复,才能把“能启动”升级为“具备生产上线条件”。