本文档规定化永续期货平台(方案二)的灰度策略、应急响应、开关矩阵与回滚流程。旨在确保Phase 2与Phase 3的平稳上线与故障恢复。
目标: 7天内全量路由HL运行零故障,风控计算精度验证通过
灰度周期: 7天(共4个阶段)
失败处理: 任何阶段发现>1%错误率 → 回滚到Phase 1, 修复后重新灰度
目标: 内部测试1周,BTC/ETH对赌开放,逐步放量到生产
灰度周期: 10天(共4个阶段)
失败处理:
所有开关存储在配置中心(Consul/etcd),修改后10秒内全局生效(无需重启)。
| 开关名称 | 类型 | 默认值 | 控制范围 | 操作权限 | 回滚动作 | 生效延迟 |
|---|---|---|---|---|---|---|
| global_betting_enabled | bool | false | 全局对赌开关 (true=对赌模式, false=纯HL) | Super Admin | 关闭→全量HL路由 | <1s |
| routing_mode | enum | HL_MODE | 路由模式切换 | Risk Manager | 切回HL_MODE | <1s |
| normal_threshold | money | $10,000 | NORMAL_MODE下: 金额≤阈值→INTERNAL, >阈值→HL | Risk Manager | 提高或设$0(走HL) | <5s |
| betting_threshold | money | $50,000 | BETTING_MODE下: 金额≤阈值→INTERNAL | Risk Manager | 降低或关闭 | <5s |
| auto_mode_switch | bool | false | 自动模式切换(基于敞口) | Risk Manager | 关闭(防误触) | <5s |
| hedge_enabled | bool | true | 对冲引擎开关 | Risk Manager | 关闭→手动对冲 | <1s |
| hedge_max_leverage | float | 3.0x | 对冲最大杠杆 | Risk Manager | 降低到1.5x(保守) | <5s |
| per_symbol_betting | list | BTC,ETH | 允许对赌的币种列表 | Risk Manager | 清空(禁止对赌) | <5s |
| liquidation_enabled | bool | true | 清算引擎开关(关闭=极端故障) | Super Admin | 关闭(人工清算) | <1s |
| liquidation_detection_interval_ms | int | 500 | 清算检测频率(ms) | Risk Manager | 改为2000(降低CPU) | <5s |
| withdrawal_enabled | bool | true | 提现开关(挤兑防御) | Super Admin | 关闭(暂停提现) | <1s |
| max_internal_exposure_usd | money | $500,000 | 单币内部净敞口上限 | Risk Manager | 降低到$100K | <5s |
| hedge_threshold_tier1 | money | $100,000 | 第一层对冲触发(50%对冲) | Risk Manager | 提高到$500K | <5s |
| hedge_threshold_tier2 | money | $500,000 | 第二层对冲触发(80%对冲) | Risk Manager | 提高到$1M | <5s |
| risk_reserve_min_usd | money | $200,000 | 准备金最低警线(低于此暂停对赌) | Risk Manager | 提高到$300K | <5s |
| daily_net_loss_limit | money | $500,000 | 日净亏损熔断线 | Risk Manager | 提高或关闭 | <5s |
| max_order_size_internal | money | $10,000 | 单笔对赌最大金额(超过转HL) | Risk Manager | 降低到$1K | <5s |
| force_hl_volatility_threshold | float | 5.0% | 波动超过此值→强制HL | Risk Manager | 提高到10% | <5s |
| force_hl_latency_threshold_ms | int | 500 | HL延迟超过此值→强制HL | Risk Manager | 提高到1000ms | <5s |
权限等级:
变更审计:
timestamp | user | switch_name | old_value | new_value | reasonrollback_switch(switch_name, timestamp)| 告警 | 触发条件 | 立即动作 | 进一步措施 |
|---|---|---|---|
| HL连接断裂 | WebSocket/REST连接中断>1分钟 | 告警Slack/PagerDuty, 自动暂停新订单 | 重连机制启动; 若>5分钟未恢复→人工介入 |
| HL账户保证金率<150% | HL account margin_ratio < 150% | 立即暂停所有HL新开仓 | 1. 补资金到>200%, 2. 撤回高风险对冲单 |
| 对冲账户保证金率<200% | 对冲专用账户保证金率<200% | 同上,额外降杠杆到2x | 紧急补资或清仓高风险对冲 |
| 清算引擎失效 | 清算检测失败连续>5次 或 清算执行失败>10% | 关闭liquidation_enabled, 人工清算 | 排查清算逻辑BUG, 修复后重启 |
| 热钱包余额<$100K | 热钱包可用余额<$100K | 暂停大额提现(>$10K) | 紧急从冷钱包转入 |
| 单笔偏差>5% | 某笔HL订单实际价格 vs 计算价格偏差>5% | 暂停该币种HL路由(转对赌) | 排查原因(滑点/时间差/BUG) |
| 用户资产对账不平>0.1% | 用户查询资产 vs 系统记录偏差>0.1% | 立即暂停交易,启动人工对账 | 手动兜底调整 |
应急响应SLA:
| 告警 | 触发条件 | 动作 | 优先级 |
|---|---|---|---|
| 单币净敞口>$500K | 某币种净INTERNAL敞口>$500K | Slack通知风控, 提醒对冲 | 检查对冲是否执行 |
| 准备金<$500K | 风险准备金余额<$500K | Slack通知风控 | 评估是否继续对赌 |
| 日净亏损>$100K | 当日INTERNAL亏损累计>$100K | Slack通知, 仅日志(暂无熔断) | 监控实时PnL |
| 提现队列堆积 | 待审核提现>50笔 或 等待时间>2小时 | Slack通知运营加速审批 | 可能提现瓶颈 |
| API延迟>100ms P95 | 连续5分钟P95延迟>100ms | 监控页面标红, 内部通知 | 检查服务健康 |
故障发生
↓
[严重程度判断]
├─ 关键路径故障(路由/清算) ──→ Severity=Critical ──→ 立即回滚
├─ 数据一致性故障 ──────────→ Severity=High ──→ 5分钟内回滚
└─ 非关键路径(市场数据延迟) → Severity=Low ──→ 观察/修复
↓
[回滚级别判定]
├─ 单模块故障 (e.g. 对冲引擎bug)
│ └─ 动作: 关闭该开关 (hedge_enabled=false) + 修复 + 灰度重启
├─ 跨模块级故障 (e.g. 路由→清算链路)
│ └─ 动作: 切HL_MODE + 所有对赌禁用 + 人工审查
└─ 全系统故障 (e.g. 数据库故障)
└─ 动作: 全服务降级 → 仅提现+查询 → 等待修复
↓
[执行回滚]
└─ 修改配置中心开关 + 观察5分钟 + 确认恢复
[修复与重启]
└─ 问题修复 → 单元测试通过 → 小流量灰度(5%)
→ 确认正常 → 全量(100%)
症状: 应该走HL的订单被路由到INTERNAL,或反之
立即回滚:
routing_mode = HL_MODE (所有订单→HL)恢复时间: <1分钟
后续修复:
症状: 对赌订单成交失败,或未正确创建对手方仓位
立即回滚:
global_betting_enabled = false恢复时间: <1分钟
后续修复:
症状: 用户仓位不应清算却被强制平仓
立即回滚:
liquidation_enabled = false恢复时间: <1分钟
后续修复:
症状: 对冲指令价格异常,或对冲仓位失控
立即回滚:
hedge_enabled = false恢复时间: <1分钟
后续修复:
症状: 转发到HL的订单执行失败,用户端订单卡住
立即回滚:
恢复时间: 5-10分钟
后续修复:
症状: 订单、仓位、用户余额无法查询
立即回滚:
恢复时间: 15-30分钟
后续修复:
症状: 多个模块同时故障
立即回滚:
恢复时间: 30-60分钟
后续修复:
触发条件: 对赌引擎故障 / 清算故障(但HL通道正常)
用户可用功能:
平台影响:
用户体验:
切换方式:
global_betting_enabled = false
hedge_enabled = false
routing_mode = NORMAL_MODE
触发条件: 清算引擎完全失效 / 多个关键模块故障
用户可用功能:
平台影响:
用户体验:
切换方式:
global_betting_enabled = false
routing_mode = HL_MODE
liquidation_enabled = false
# 自动禁止所有POST /order (新开仓)
触发条件: 全站崩溃 / 数据库完全不可用 / 用户资产面临风险
用户可用功能:
平台影响:
用户体验:
切换方式:
# 关闭所有API网关
global_api_enabled = false
# 返回503 Service Unavailable
# 前端显示维护公告
触发权限: Super Admin 仅
执行任何回滚前,按以下清单验证:
GET /config/switch/{name} 获取开关值set_switch routing_mode HL_MODE --reason "故障回滚"