PostgreSQL 与 Redis 运维
应用可以快速重建,PostgreSQL 和 Redis 的容量与恢复能力决定平台能否长期运行。
PostgreSQL 职责
PostgreSQL 保存用户、凭证、账号、分组、订阅、订单、用量和运维数据。它是最重要的持久化事实来源。
版本与扩展
项目要求 PostgreSQL 15+,官方 Compose 当前使用较新版本。使用托管 PostgreSQL 时确认:
- 支持所需 JSONB、partial index、advisory lock。
pg_dump客户端版本与服务端兼容。- 时区和 SSL mode 正确。
- 可以创建索引和执行迁移。
连接池
应用每个副本都有独立池:
dotenv
DATABASE_MAX_OPEN_CONNS=100
DATABASE_MAX_IDLE_CONNS=25
DATABASE_CONN_MAX_LIFETIME_MINUTES=30
DATABASE_CONN_MAX_IDLE_TIME_MINUTES=5如果数据库连接频繁达到上限:
- 查看慢 SQL 和锁,而不是先无限增加连接。
- 检查长时间范围仪表盘查询。
- 确认聚合任务正常。
- 检查 worker 是否瞬间放大写入。
- 多副本按总连接计算。
迁移
服务启动时应用未执行迁移,并把文件名与 checksum 写入 schema_migrations。
安全流程:
- 阅读新版本迁移。
- 对生产备份副本演练。
- 评估表锁、回填和索引时间。
- 创建升级前逻辑备份。
- 低峰发布。
- 检查 migration log 和表结构。
不要修改已经在生产执行过的迁移文件内容,否则 checksum 可能不一致。
usage_logs 增长
原始用量通常是增长最快的表。关注:
- 表和索引大小。
- 按时间/用户/账号查询的索引命中。
- dashboard aggregation watermark。
- usage cleanup 任务。
- autovacuum 和 dead tuples。
先保证小时/日聚合正确,再缩短原始数据保留期。
PostgreSQL 监控
至少监控:
- 连接 active/idle/waiting。
- CPU、内存、磁盘、IOPS。
- WAL 增长和复制延迟。
- 慢查询与 lock wait。
- autovacuum 延迟。
- 数据库、最大表和索引大小。
- backup 成功与可恢复性。
Redis 职责
Redis 承担:
- 并发槽位和等待队列。
- 鉴权、余额、订阅和平台配额缓存。
- 粘性会话和调度快照。
- 账号临时限流与冷却。
- token refresh 和后台任务锁。
- 部分异步队列。
不能用无持久化、随时清空的共享开发 Redis 作为正式生产依赖。
Redis 持久化
官方 Compose 使用 RDB + AOF everysec。根据业务选择:
- 只使用普通网关:部分临时状态可重建,但重启会造成会话和限流丢失。
- 启用批量任务:队列和 inflight 更重要,必须测试恢复。
- 托管 Redis:确认持久化、故障转移和备份策略。
Redis 内存
主要消耗:
- API Key 与订阅快照。
- 用户平台 quota entry。
- 大量账号调度状态。
- 并发 ZSET 和等待计数。
- sticky/previous response keys。
- batch queue。
监控 used_memory、key count、evicted_keys 和 big keys。随意启用 LRU 淘汰可能删除并发、锁或队列 key。
Redis 超时
dotenv
REDIS_DIAL_TIMEOUT_SECONDS=5
REDIS_READ_TIMEOUT_SECONDS=3
REDIS_WRITE_TIMEOUT_SECONDS=3超时过长会让所有请求堆积;过短会在网络抖动时大量误判失败。应用与 Redis 跨地域部署通常不是好选择。
Redis 高可用
使用 Sentinel、Cluster 或托管 Redis 前确认客户端配置是否与项目当前 Redis 初始化方式兼容。不是所有 Redis HA 形态都能只通过 host/port 无缝接入。
如果项目只配置单 endpoint,优先使用提供稳定主 endpoint 的托管服务或前置代理。
备份与恢复演练
至少每季度执行:
- 把 PostgreSQL 备份恢复到隔离实例。
- 使用相同版本应用连接恢复库。
- 验证管理员登录、账号、分组和 Key。
- 查询历史用量和余额。
- 对 Redis 做故障重启,确认网关恢复策略。
- 如启用批量任务,验证队列恢复。
只看到备份文件生成不代表备份可恢复。