运维 ≠ 运营:业务面板(用户、订单、活动)在运营后台,而部署、健康、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.
一条流水线串到底:PR 触发测试 → main 合并后构建镜像 → ECR 打 tag → ECS 蓝绿发布。
prod 部署需要 staging 通过 + 二人审批 + Slack 公告。回滚 = 切回上一个 tag,~30s。
三套独立 AWS 账户,VPC、DB、Redis、Kafka、KMS、Secrets 全独立。environment 和 executionChain 正交:
dev 可跑本地 Anvil,staging 跑测试网(Sepolia · BSC Testnet · Tron Nile · BTC testnet),prod 跑 BSC / ETH / TRON(USDT 充提);BTC mainnet 后续开放。
prod 永不允许人工 kubectl / ssh,所有变更经流水线。
ECS Fargate 在 ap-southeast-1a 和 ap-southeast-1b 各部署一份,ALB 跨 AZ 分流。
sign-service 在独立 subnet且仅接受业务服务的 mTLS 内部调用。
RDS / Redis / Kafka 全部 Multi-AZ。
四类信号都有家:指标走 CloudWatch / Prometheus,日志走 CloudWatch Logs / Loki, 链路追踪走 OpenTelemetry → Tempo,业务面板(开奖延迟、热钱包余额、链同步滞后)走 Grafana 单独仪表盘。
Spring Boot Actuator → Prometheus scrape; CloudWatch 系统指标(CPU / 内存 / IO)双写。
结构化 JSON,traceId 透传。30 天热数据 + 90 天冷归档(S3 Glacier)。
OpenTelemetry SDK;网关入口注入 traceId,全链路追踪到 sign / chain。
开奖时延、热钱包余额、链同步滞后、用户增长 —— SRE 视角,与运营后台分离。
错误预算每月 0.1%(≈ 43 分钟)。RTO = 故障到完全恢复的时间,RPO = 故障可接受的数据丢失窗口。
这些数字是承诺给用户和老板的,月度复盘时拿出来对照。
| 路径 / 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.
P1 直接 PagerDuty 电话叫人,P2 Slack #oncall 频道 + 邮件,P3 只发邮件 / 日报汇总。
sign-service 相关告警一律 P1,资金相关告警一律 ≥ P2。
备份分两条线:RDS 自动快照 + Point-in-Time Recovery + Kafka 跨 AZ;KMS 主 key 季度轮换,
演练参考 docs/9-ops/kms-rotation-log.md 和 kms-dr-drill.md。
每日全量快照,5min 粒度 PITR,跨区域复制到 ap-northeast-1。
复制因子 3,所有 topic 跨 3 个 AZ 写入;单 AZ 失联不影响生产。
主 key 90 天自动轮换;私钥 KEK / DEK 分层,演练每季度跑一次。
每季度模拟 AZ-A 失联,在 AZ-B 单独运行 1 小时;同步演练 KMS 切换路径。
统一节奏:检测 → 接听 → 分流 → 控损 → 复盘。docs/9-ops/incident-templates/ 备好模板:
故障 / 资金 / 安全 / 数据泄漏。所有 P1 必须在 24 小时内出复盘文档。
告警系统首次触发;DataDog/PagerDuty 通知 oncall。
oncall ack 告警 → 开 Slack #incident-XXX 频道 → 写 status page。
定位故障范围 → 决定升级(需要否产品/管理/合规介入)。
先恢复服务(回滚、Nacos 切流、scale up),事后再调查根因。
无指责复盘:根因 + 时间线 + 改进项 + Owner + 跟踪 ticket。