hailin
|
127f2cdd81
|
feat: Debezium CDC 安全加固 + WAL 防护 (来自 rwadurian 生产事故经验)
## 背景
rwadurian 2.0 服务器发生 Debezium CDC 事故:
- DBZ-7316 bug: Debezium ≤2.4 的 searchWalPosition 循环不推进 confirmed_flush_lsn
- PostgreSQL WAL 从正常涨到 306GB, 磁盘占用 23% → 修复后降至 6%
- Kafka Connect REST API 暴露公网, 被注入 3 个恶意 SSRF connector
- pg_logical_emit_message 心跳无效: 写入 WAL 但不经过 publication
## 变更内容
### 1. Debezium 版本锁定 (docker-compose.yml)
- debezium/connect:2.5 → debezium/connect:2.5.4.Final
- 2.5.1 修复 DBZ-7316, 2.5.4 为该系列最终稳定版
### 2. PostgreSQL WAL 安全阀 (docker-compose.yml)
- 新增 max_slot_wal_keep_size=10GB
- 限制单个 replication slot 最多保留 10GB WAL
- 超限后 PostgreSQL 使 slot 失效, 防止磁盘被吃满
### 3. 端口安全加固 (docker-compose.yml)
绑定 127.0.0.1, 禁止公网访问:
- PostgreSQL 5432 (数据库直连)
- Redis 6379 (无密码保护)
- Kafka Connect 8083 (SSRF 注入风险)
- Kafka 29092 (外部访问端口)
- Kong Admin 8001 (路由篡改风险)
- MinIO Console 9001 (默认密码)
### 4. 基础设施可用性 (docker-compose.yml)
- 所有基础设施服务添加 restart: unless-stopped
- Kafka Connect 添加 OFFSET_FLUSH_INTERVAL_MS=10s (默认 60s)
### 5. Debezium 支持表 (040_create_debezium_support.sql)
- debezium_heartbeat: 心跳表, singleton 约束, INSERT...ON CONFLICT DO UPDATE
- debezium_signal: 信号表, 用于增量快照等运维操作
- debezium_outbox_publication: 包含 outbox + heartbeat + signal 三表
### 6. Connector 配置 (scripts/debezium/outbox-connector.json)
- heartbeat TABLE 方式 (非 pg_logical_emit_message)
- publication.autocreate.mode=disabled (使用预建 publication)
- signal.enabled.channels=source,kafka (支持增量快照重放)
- ExtractNewRecordState + RegexRouter transforms
### 7. 部署脚本 (scripts/debezium/register-connectors.sh)
- 等待 Kafka Connect 就绪
- 支持创建和更新 connector
- 验证 connector 状态
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-15 06:42:03 -08:00 |
hailin
|
e20c321d12
|
refactor: 遥测与版本管理拆分为独立微服务 (telemetry-service + admin-service)
架构重构: 将遥测(Telemetry)和版本管理(App Version)从 user-service 拆分为两个独立微服务,
严格遵循 DDD + Clean Architecture 四层架构。
新增服务:
- telemetry-service (:3011) — 用户心跳检测、事件采集、DAU统计、Prometheus指标
- domain: 3实体 + 3值对象(EventName/InstallId/TimeWindow) + 2领域事件
- infrastructure: Redis(Sorted Set心跳) + Kafka(事件发布) + Prometheus(5指标)
- 定时任务: 每分钟在线快照、每小时清理过期、凌晨DAU精确计算、滚动DAU更新
- admin-service (:3012) — APK/IPA版本管理、OTA更新、MinIO文件存储
- domain: 1实体 + 4值对象(VersionCode/VersionName/FileSha256/DownloadUrl)
- infrastructure: MinIO(文件上传/下载) + APK/IPA解析器
- 移动端: 检查更新API(无认证) + 下载重定向(预签名URL)
- 管理端: 版本CRUD + 上传解析 + 启禁用
user-service 清理:
- 删除24个已迁移文件(4实体+4服务+4基础设施+5控制器+6DTO+1gitkeep)
- 移除不再需要的依赖: @nestjs/schedule, minio, prom-client, kafkajs
- 精简 user.module.ts,仅保留用户核心功能(Profile/KYC/Wallet/Message/Admin)
基础设施更新:
- Kong: 遥测路由 → telemetry-service:3011, 版本路由 → admin-service:3012
- docker-compose: 新增2个服务容器 + MinIO app-releases bucket
- 07开发指南: 更新为独立服务架构描述
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-12 18:30:39 -08:00 |