2.4 KiB
2.4 KiB
Cloudflare Analytics 热冷分层 Runbook
架构
- 热查询:Cloudflare Analytics Engine,数据集
autumn_events_hot,只用于近 90 天 dashboard/API analytics。 - 历史归档:Cloudflare Pipelines 写入 R2 Data Catalog/Iceberg 表,保留所有事件明细。
- 回退:Tinybird 保持可读可写,直到连续对账达标后再退役。
- 主业务:积分余额、扣减、订阅和幂等仍以 Postgres/Drizzle 为准。
Cloudflare 资源
Production:
cd server
bunx wrangler pipelines streams create autumn-events-archive
Staging:
cd server
bunx wrangler pipelines streams create autumn-events-archive-staging
Analytics Engine dataset 由 wrangler.jsonc 的 analytics_engine_datasets binding 负责绑定。
上线开关顺序
CLOUDFLARE_ANALYTICS_WRITE_ENABLED=falseCLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED=falseCLOUDFLARE_ANALYTICS_HOT_READ_ENABLED=false- 部署含 bindings 的 Worker。
- 在 staging 打开
CLOUDFLARE_ANALYTICS_WRITE_ENABLED=true。 - 在 staging 打开
CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED=true。 - 对账 staging 的 Tinybird row count、Analytics Engine row count、R2 archive row count。
- production 先打开写入和归档,保持读路径走 Tinybird。
- production 对账 7 天后,打开
CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED=true。
回滚
读路径回滚:
cd server
bunx wrangler secret put CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED
输入:
false
写路径回滚:
cd server
bunx wrangler secret put CLOUDFLARE_ANALYTICS_WRITE_ENABLED
bunx wrangler secret put CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED
两个值都输入:
false
对账 SQL
Analytics Engine 近 24 小时事件数:
SELECT count() AS events
FROM autumn_events_hot
WHERE index1 = 'org_...'
R2 SQL 历史归档事件数按天验证:
SELECT date_trunc('day', timestamp) AS day, count(*) AS events
FROM autumn_events_archive
GROUP BY day
ORDER BY day DESC
LIMIT 14
Tinybird 退役门槛
- Cloudflare 双写连续 30 天无系统性失败。
/query/event_names/list和/query/raw在 production 的 Cloudflare 热读结果与 Tinybird 对账差异低于 1%。- R2 归档至少覆盖 90 天以上历史,并能通过 R2 SQL 查回指定 org/env/customer/event_name。
- revenue analytics 和 migration item events 有独立替代方案,或明确继续保留 Tinybird 只服务这些低频路径。