← BACK · 返回原型集
OPS LIVE 07 / OPERATIONS & SRE v1.0
OPERATIONS & SRE · 运维与 SRE

上线、监控、灾备 —— SRE 视角全景 CI/CD · MULTI-AZ · SLO · INCIDENT RESPONSE

运维 ≠ 运营:业务面板(用户、订单、活动)在运营后台,而部署、健康、Kafka 滞后、RPC 延迟、KMS 轮换这些 SRE 视角的东西在这里。 所有变更通过 GitHub Actions → ECR → ECS Fargate;生产环境只接受经过 staging 验证的镜像; sign-service 部署单独 subnet 不与业务共网。
Ops console ≠ business admin. Deployment, observability, KMS rotation, and incident response live here. Single CI/CD path, no manual deploys to prod, sign-service isolated.

01
CI/CD 流水线 GITHUB ACTIONS → ECR → ECS FARGATE

一条流水线串到底:PR 触发测试 → main 合并后构建镜像 → ECR 打 tag → ECS 蓝绿发布。 prod 部署需要 staging 通过 + 二人审批 + Slack 公告。回滚 = 切回上一个 tag,~30s。

01
🌱
PR Opened
lint · unit
contract test
02
Merge to main
2 reviewers
+ CI green
03
🐳
Build + Push
multi-arch
ECR · SHA tag
04
🧪
Deploy → Staging
auto
ECS rolling
GATE
🚪
Acceptance + Approve
smoke · e2e
2-of-N sign-off
05
🚀
Deploy → Prod
blue/green
auto-rollback
06
📊
Post-deploy verify
SLO check
10min watch
02
三环境隔离 DEV · STAGING · PROD · STRICT ISOLATION

三套独立 AWS 账户,VPC、DB、Redis、Kafka、KMS、Secrets 全独立。environmentexecutionChain 正交: dev 可跑本地 Anvil,staging 跑测试网(Sepolia · BSC Testnet · Tron Nile · BTC testnet),prod 跑 BSC / ETH / TRON(USDT 充提);BTC mainnet 后续开放。 prod 永不允许人工 kubectl / ssh,所有变更经流水线。

▸ DEV · 开发
本地 + 共享开发环境
AWSaccount-dev
ChainLocal Anvil · BSC Testnet
DBRDS t4g.small
Multi-AZ单 AZ · 省钱
Backup7 天
Access工程师可直接连
Data假数据 / seed
▸ STAGING · 预发
生产镜像验证
AWSaccount-staging
ChainBSC Testnet · Tron Nile
DBRDS r6g.large · Multi-AZ
Multi-AZ2 AZ
Backup30 天 + PITR
Access需 break-glass 工单
Data脱敏的 prod 子集
▸ PROD · 生产
真实用户 / 真实资金
AWSaccount-prod
ChainBSC · TRON 主网
DBRDS r6g.2xlarge · Multi-AZ
Multi-AZ≥ 2 AZ
Backup90 天 + PITR
Access禁直连 · 仅流水线
Data真实加密 PII
03
AWS Multi-AZ 拓扑(生产) PROD VPC · CROSS-AZ HA · ISOLATED SIGN SUBNET

ECS Fargate 在 ap-southeast-1aap-southeast-1b 各部署一份,ALB 跨 AZ 分流。 sign-service独立 subnet仅接受业务服务的 mTLS 内部调用。 RDS / Redis / Kafka 全部 Multi-AZ。

AZ-A · ap-southeast-1a · primary
gateway × 2ECS · ALB
user-svc × 2ECS · port 8081
game-svc × 2ECS · port 8082
pay-svc × 2ECS · port 8083
chain-svc × 2ECS · port 8084
sms-svc × 1ECS · port 8085
🔒 sign-svc × 2isolated subnet
RDS primaryr6g.2xlarge
Redis primarycluster · 3 shards
Kafka broker × 3MSK 3-node
AZ-B · ap-southeast-1b · standby
gateway × 2ECS · ALB
user-svc × 2ECS · port 8081
game-svc × 2ECS · port 8082
pay-svc × 2ECS · port 8083
chain-svc × 2ECS · port 8084
sms-svc × 1ECS · port 8085
🔒 sign-svc × 2isolated subnet
RDS standbysync replication
Redis replicaasync
Kafka brokercross-AZ replication
04
可观测性栈 METRICS · LOGS · TRACES · BUSINESS

四类信号都有家:指标走 CloudWatch / Prometheus,日志走 CloudWatch Logs / Loki, 链路追踪走 OpenTelemetry → Tempo,业务面板(开奖延迟、热钱包余额、链同步滞后)走 Grafana 单独仪表盘。

📈

指标 Metrics

CLOUDWATCH · PROMETHEUS

Spring Boot Actuator → Prometheus scrape; CloudWatch 系统指标(CPU / 内存 / IO)双写。

📜

日志 Logs

CLOUDWATCH LOGS · LOKI

结构化 JSON,traceId 透传。30 天热数据 + 90 天冷归档(S3 Glacier)。

🔗

链路 Traces

OTEL · TEMPO

OpenTelemetry SDK;网关入口注入 traceId,全链路追踪到 sign / chain。

💰

业务 Business

GRAFANA · CUSTOM PANELS

开奖时延、热钱包余额、链同步滞后、用户增长 —— SRE 视角,与运营后台分离。

05
SLO / RTO / RPO 目标 SERVICE LEVEL · RECOVERY OBJECTIVES

错误预算每月 0.1%(≈ 43 分钟)。RTO = 故障到完全恢复的时间,RPO = 故障可接受的数据丢失窗口。 这些数字是承诺给用户和老板的,月度复盘时拿出来对照。

▸ AVAILABILITY · 可用性
99.9%
月度 SLO;允许停机 ~43 分钟 / 月。
▸ RTO · 恢复时间
≤ 30min
完整恢复读写所需最大时间。
▸ RPO · 数据丢失
≤ 5min
RDS PITR + Kafka 跨 AZ 复制保证。
路径 / Path SLI SLO(目标) 验收来源 / Source
登录 / TG initData 校验 P95 latency ≤ 300ms 压测 + 灰度
购票 / Buy ticket P95 latency · success rate ≤ 800ms · ≥ 99.5% 压测 + 灰度
开奖端到端 / Round draw E2E 触发到中奖款到账 ≤ 30s(FULL_CHAIN) 链上演练
提现 / Withdraw broadcast 请求到链上 broadcast ≤ 5s 链上演练
充值入账 / Deposit credit tx 确认到账本入账 ≤ 60s(≥ N confirmations) 链上演练

数字均为 SLO 目标,非线上实测。线上数据由 CloudWatch / Grafana 看板维护, 每月复盘对比目标值。
All numbers are SLO targets, not measured production values. Actual metrics live in the dashboards and are reviewed monthly.

06
告警分级 + 路由 ALERTING TIERS · PAGER · SLACK

P1 直接 PagerDuty 电话叫人,P2 Slack #oncall 频道 + 邮件,P3 只发邮件 / 日报汇总。 sign-service 相关告警一律 P1,资金相关告警一律 ≥ P2。

SEV
触发条件 / Trigger
英文说明
路由
P1
sign-service 不健康 / 异常签名调用 / 5xx
Sign-service unhealthy / unexpected calls / 5xx
📞 PagerDuty
P1
热钱包余额 < 阈值 / 提现卡链 ≥ 10 分钟
Hot wallet drained / withdrawals stuck ≥ 10min
📞 PagerDuty
P1
RDS 主切 / Kafka 节点丢失 / 跨 AZ 复制失败
RDS failover / Kafka node loss / cross-AZ repl failure
📞 PagerDuty
P2
开奖 E2E 时延超 SLO / VRF 长时间未回调
Draw E2E latency SLO breach / VRF callback missing
📩 Slack + 邮件
P2
链同步滞后 > 50 区块 / 监听器掉线
Chain lag > 50 blocks / listener dropped
📩 Slack + 邮件
P3
Nacos 配置变更 / 容器 OOM × 1
Nacos config change / single container OOM
📧 日报汇总
07
备份 + 灾备 + KMS 轮换 BACKUP · DISASTER RECOVERY · KEY ROTATION

备份分两条线:RDS 自动快照 + Point-in-Time Recovery + Kafka 跨 AZ;KMS 主 key 季度轮换, 演练参考 docs/9-ops/kms-rotation-log.mdkms-dr-drill.md

💾

RDS 备份

DAILY SNAPSHOT · PITR 90 DAYS

每日全量快照,5min 粒度 PITR,跨区域复制到 ap-northeast-1

🔁

Kafka 复制

CROSS-AZ · RF 3

复制因子 3,所有 topic 跨 3 个 AZ 写入;单 AZ 失联不影响生产。

🔑

KMS 轮换

QUARTERLY · AUTO

主 key 90 天自动轮换;私钥 KEK / DEK 分层,演练每季度跑一次。

🆘

DR 演练

QUARTERLY DRILL

每季度模拟 AZ-A 失联,在 AZ-B 单独运行 1 小时;同步演练 KMS 切换路径。

08
事故响应阶梯 INCIDENT RESPONSE LADDER

统一节奏:检测 → 接听 → 分流 → 控损 → 复盘。docs/9-ops/incident-templates/ 备好模板: 故障 / 资金 / 安全 / 数据泄漏。所有 P1 必须在 24 小时内出复盘文档。

01 · DETECT

检测

ALERT FIRES

告警系统首次触发;DataDog/PagerDuty 通知 oncall。

02 · ACK

接听

≤ 5min

oncall ack 告警 → 开 Slack #incident-XXX 频道 → 写 status page。

03 · TRIAGE

分流

≤ 15min

定位故障范围 → 决定升级(需要否产品/管理/合规介入)。

04 · MITIGATE

控损

RECOVER FIRST

先恢复服务(回滚、Nacos 切流、scale up),事后再调查根因。

05 · POST-MORTEM

复盘

≤ 24h FOR P1

无指责复盘:根因 + 时间线 + 改进项 + Owner + 跟踪 ticket。