Skip to content

Redis-Shake 双向同步部署 (CN ↔ JP) #65

@svc-design

Description

@svc-design

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 便于告警
  • 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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions