ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Talivia架构深度剖析:ClickHouse+PostgreSQL+Redis+Kafka构建高吞吐分析引擎

Talivia架构深度剖析:ClickHouse+PostgreSQL+Redis+Kafka构建高吞吐分析引擎 Talivia架构深度剖析ClickHousePostgreSQLRedisKafka构建高吞吐分析引擎【免费下载链接】taliviaOpen-source, self-hosted revenue-first analytics for founders: web analytics, Session Replay, revenue attribution, and customer revenue integrations. datafast alternative项目地址: https://gitcode.com/gh_mirrors/ta/taliviaTalivia 是一个开源、可自托管的收入优先Revenue-first分析平台其架构用 ClickHouse 承载海量事件数据、PostgreSQL 管理业务实体、Redis 提供缓存与限流、Kafka 实现写入解耦四者协同构成高吞吐分析引擎。本文带你用通俗的方式看懂这套架构的设计思路以及每个组件在数据流中扮演的角色。一、Talivia 是什么与普通网页统计工具不同Talivia 的核心定位是把流量和收入连起来Web Analytics访客、会话、页面浏览、渠道来源UTM / ClickIDSession Replay会话回放还原访客真实操作Revenue Attribution将 Stripe、LemonSqueezy、Polar、Dodo、Yolfi 等支付渠道的收入归因到具体会话高吞吐数据管道事件采集 → 异步写入 → 预聚合 → 秒级查询官方主界面预览二、总体数据流一条事件的生命周期先建立全局视角一次访客浏览页面的数据旅程大致如下站点内嵌的 Tracking 脚本src/tracker/index.js采集事件回传到 Next.js 的采集路由 src/app/(collect)/p/[slug]/route.ts服务端校验后将事件批量写入ClickHouse的website_event表配置了 Kafka 时事件先投递到 Kafka Topic由消费端异步落库把写入压力从 Web 进程剥离ClickHouse 的物化视图实时把原始事件预聚合为小时级统计表仪表盘查询直接命中预聚合表Redis 在中间层缓存热点结果并做接口限流用户、网站、支付账户等业务元数据全部由PostgreSQLPrisma ORM管理这套OLAP 存事件 OLTP 存业务的组合正是高吞吐分析引擎的关键。三、PostgreSQL业务数据的账本 PostgreSQL 负责存放结构化、关系型、变更频繁的数据用户、角色、网站、站点协作者、分享链接Boards / Links / Pixels支付服务商凭据与订阅状态、收入记录数据库结构定义在 prisma/schema.prisma迁移脚本按时间排序存放在 prisma/migrations/例如 20260924181000_oss_installation_identity/历史数据转换脚本放在 db/postgresql/data-migrations/包括把收入回填到独立 revenue 表的populate-revenue-table.sql一句话定位PostgreSQL 管谁拥有哪个网站、收了多少钱这类需要事务一致性的数据它不背事件大表的性能压力。四、ClickHouse高吞吐分析引擎的核心 ⚡ClickHouse 是 Talivia 的事件存储与查询引擎客户端封装见 src/lib/clickhouse.ts。它的表设计db/clickhouse/schema.sql处处体现为聚合查询而生的思路4.1 事件主表MergeTree 按月分区website_event表schema.sql#L2-L69采用经典三件套MergeTree引擎PARTITION BY toYYYYMM(created_at)按月分区查询某时间段只扫对应分区旧数据可整分区快速删除排序键按小时 网站 访客 会话组织(toStartOfHour(created_at), website_id, visitor_id, session_id, created_at)保证同一访客的会话数据物理上连续去重与聚合都走顺序读LowCardinality(String)标注浏览器、操作系统、国家等低基数列大幅压缩存储常用维度URL 路径、referrer 域名还建立了Projectionschema.sql#L264-L277相当于为高频查询预排一份数据副本查询优化器自动选择4.2 小时级物化视图仪表盘秒开的关键 真正让仪表盘秒开的是website_event_stats_hourly这张AggregatingMergeTree表 物化视图schema.sql#L108-L262每次有新事件写入website_event物化视图实时按小时 × 网站 × 会话 × 维度预聚合出浏览量、首末页面、UTM 数组等仪表盘的大多数聚合查询直接读这张小表而不是扫描原始事件表上声明了SAMPLE BY cityHash64(session_id)未来数据量增长时可按比例抽样查询代价可控这就是典型的预聚合Pre-aggregation思想把写路径上的 CPU 成本换来读路径上的极致速度。4.3 其它专用表session_dataReplacingMergeTree EAV 结构存会话级自定义属性schema.sql#L90-L105session_replay会话回放分块存储事件负载用CODEC(ZSTD(3))压缩schema.sql#L315-L330website_revenue物化视图从事件数据中自动抽取 revenue / currency 字段把收入事件沉淀为可分析表schema.sql#L279-L312表结构演进通过 db/clickhouse/migrations/ 下编号 SQL 管理由 scripts/migrate-clickhouse.ts 执行。五、Kafka写入解耦的缓冲带 Talivia 把 Kafka 设计成可选组件只有同时配置KAFKA_URL与KAFKA_BROKER时才启用src/lib/kafka.ts#L14。生产者以acks1发送 JSON 事件在吞吐与可靠性之间取平衡src/lib/kafka.ts#L66-L91支持 SASL/SSL 认证适配托管 Kafkasrc/lib/kafka.ts#L16-L51架构收益采集端只做轻投递落库与重试压力转移到消费端流量高峰时事件在 Topic 中缓冲Web 进程不会被拖垮中小规模部署可以不开 Kafka直接写 ClickHouse规模上来后开启 Kafka代码路径自动切换——这正是该架构渐进式扩容的体现。六、Redis缓存、限流与轻量计数器Redis 同样是可选组件REDIS_URL封装见 src/lib/redis.ts。它承担三类职责查询结果缓存fetch(key, query, time)模式先查缓存、未命中再查 ClickHouse 并回填默认 TTL 3600 秒src/lib/redis.ts#L84-L98热点仪表盘面板的重复请求几乎零成本接口限流基于INCR EXPIRE的滑动窗口式限流rateLimit()src/lib/redis.ts#L72-L82保护采集端点软删除标记用DELETED哨兵值缓存已删除状态避免缓存穿透七、三引擎查询层一套接口三种后端Talivia 最有工程味的设计是查询路由。每个业务查询都提供 PrismaPostgreSQL与 SQLClickHouse两套实现统一由 src/queries/prisma/ 与 src/queries/sql/ 组织。运行时按环境变量选择后端src/lib/db.ts#L22-L36export async function runQuery(queries: any) { if (process.env.CLICKHOUSE_URL) { if (queries[KAFKA]) return queries[KAFKA](); return queries[CLICKHOUSE](); } // 否则回落到 PrismaPostgreSQL }这个设计带来两个好处可降级没有 ClickHouse 时整个产品依然可用小规模自托管场景可对比同一指标在 OLTP 与 OLAP 两种引擎下都有实现方便验证数据一致性项目中大量*.test.ts覆盖此类语义八、收入归因Talivia 的差异化引擎 分析 收入的闭环依赖两条管线支付 Webhook 管道Stripe、LemonSqueezy、Polar、Dodo、Yolfi 的 Webhook 分别由 src/lib/stripe-webhook.ts、src/lib/lemonsqueezy-webhook.ts 等处理收入写入 PostgreSQL 的收入表同时事件进入 ClickHouse 供归因分析归因 Workerscripts/talivia-attribution-worker.ts 后台作业结合首触/末触模型把订单关联到访客会话归因查询逻辑见 src/lib/attribution-query.ts定时任务生产环境由 src/instrumentation.ts 启动 Cron 调度器src/lib/cron/驱动数据回填与清理九、本地跑起来五分钟体验架构 ⏱️官方用 Docker Compose 把最小依赖收敛为App PostgreSQL两个容器docker-compose.ymlClickHouse、Kafka、Redis 通过环境变量按需接入。本地开发只需 Node.js 22/24 pnpm安装后执行 Prisma 迁移并启动默认管理员账号为admin。完整的采集端点、实时接口src/app/api/realtime/与心跳健康检查/api/heartbeat都已内置方便你观察整条数据链路。十、总结这套架构好在哪组件角色关键设计ClickHouse事件 OLAP 引擎按月分区、排序键对齐会话、物化视图预聚合、Projection、ZSTD 压缩PostgreSQL业务 OLTP用户/网站/支付等元数据Prisma 迁移管理Kafka写入解耦可选组件Topic 缓冲削峰acks1 平衡吞吐Redis缓存与限流查询缓存 TTL、INCR 限流、软删除哨兵读写分离到极致写路径轻校验 → 投递读路径快预聚合 缓存渐进式扩容PostgreSQL 单机可起步ClickHouse / Kafka / Redis 按需开启代码自动切换可验证性同一指标双引擎实现 完善的测试矩阵架构演进有安全网理解 Talivia 的架构本质上就是理解一个通用模式用 OLAP 吃掉事件洪峰用 OLTP 守住业务一致性用消息队列吸收流量毛刺用缓存守住查询时延——这套组合拳正是高吞吐分析引擎的通用答案。【免费下载链接】taliviaOpen-source, self-hosted revenue-first analytics for founders: web analytics, Session Replay, revenue attribution, and customer revenue integrations. datafast alternative项目地址: https://gitcode.com/gh_mirrors/ta/talivia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表