-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
Task: Redis-Shake 双向同步部署 (CN ↔ JP)
🎯 背景
为 /api/askai
API 接口实现每日 200 次全局限流,需要在 CN 与 JP 两个地域部署的 Redis 实例间进行分钟级别的数据同步。选用 redis-shake
双向同步方案。
✅ 前提条件
-
Redis 部署与配置
- 确保 CN 与 JP 的 Redis 版本一致(建议 ≥5.0)
- 将限流计数器存储在独立 DB(如
db 1
),避免与业务数据混用 - 启用持久化(推荐:
appendonly yes
+appendfsync everysec
)
-
网络与连通性
- CN Redis 能访问 JP Redis 的 6379 端口,反之亦然
- 使用专线 / VPN / WireGuard 确保安全传输
- 确认跨地域时延稳定在几十~几百毫秒范围
-
写入冲突容忍
- 业务接受在 1 分钟同步延迟内可能短时超额
- 确认
redis-shake
增量同步采用后写覆盖策略
-
系统与进程管理
- 在 CN 与 JP 节点分别部署
redis-shake
并以后台方式运行 - 使用
systemd
管理,保证崩溃后自动重启 - 设置日志轮转,错误日志同步到 syslog 便于告警
- 在 CN 与 JP 节点分别部署
-
Nginx + Lua 配置
- 限流逻辑使用
INCR
+EXPIRE
保证单实例内原子性 - 跨实例一致性依靠
redis-shake
收敛 - Lua 脚本能处理 Redis 连接失败:fallback 或返回 429/503,而非直接 500
- 限流逻辑使用
📌 参考配置
- Redis Key:
limit:askai:YYYYMMDD
(TTL = 86400 秒) - redis-shake 配置参数:
sync_type: incremental
checkpoint_interval: 60
aof_rewrite_use_rdb: true
🎯 验收标准
- CN 节点的限流写入在 60 秒内出现在 JP 节点
- CN/JP 两边的
limit:askai:YYYYMMDD
值偏差 ≤10 次 - 当请求总数超过 200 时,Nginx 返回 HTTP 429
Metadata
Metadata
Assignees
Labels
No labels