跳转到内容

造轮子还是买轮子?Figma 数据管线重构背后的账本

00_infographic

2020 年,Figma 的数据同步架构非常简单:每天跑一次 cron 任务,执行 SELECT * FROM <TABLE>,把数据库每一行捞出来存入 S3,再倒入 Snowflake

管道里没有流式处理,也没有 CDC。在当时的体量下,这套机制很管用,但随着业务扩张,问题开始显现。

01_scene

全量同步的瓶颈:从几小时到几天的延迟

Section titled “全量同步的瓶颈:从几小时到几天的延迟”

FigJam 发布和 Dev Mode 上线后,Figma 的用户日志急剧增加。初期几小时就能跑完的同步任务,到了 2023 年,处理大表需要花上好几天。

结果是数据分析团队只能根据几天前的数据来做决策。为了维持这种全量导出的方式,Figma 还需要维护专门的数据库副本,以防止同步任务影响主库性能,这每年会消耗数百万美元的基础设施费用。系统显然需要升级了。

自建还是购买?每年数百万美元的成本账本

Section titled “自建还是购买?每年数百万美元的成本账本”

面对瓶颈,Figma 最初考虑了市面上的 SaaS 解决方案,如 FivetranAirbyte,希望能直接解决问题。

但在实际评估中,Figma 发现通用工具很难利用他们底层的云服务特性:

  • 资源利用率低:Figma 使用的是 Amazon RDS for PostgreSQL,AWS 允许将快照直接低成本导出到 S3 而不影响在线性能。多数第三方工具不支持这种方式,这就意味着 Figma 仍需保留庞大的读库副本。
  • 成本高昂:在 Figma 当前的数据规模下,按行或算力收费的专有解决方案成本是内部自建方案的 5 到 10 倍

高昂的费用促使他们决定自己开发。

02_scene

转向增量同步:冷启动、CDC 与数据校验

Section titled “转向增量同步:冷启动、CDC 与数据校验”

重构的核心是从全量覆盖改为增量同步。新架构整合了几个成熟的组件:

  • 冷启动:利用 Amazon RDS 的快照功能,将存量数据导入 S3。
  • 捕获变化(CDC):通过托管在 Amazon MSK 上的 Kafka ConnectSnowflake Connector,实时捕获数据库变更。
  • 增量合并:在 Snowflake 内部,使用存储过程和定时任务合并源数据和增量日志。

为了保证同步的数据一致性,Figma 设计了双工作流机制,其中一条专用于验证。验证过程不仅核对行数,还会进行单元格级别的比对,以确保发现微小的更新差异。

03_scene

重构的收益:延迟缩短 90%,节省数百万美元

Section titled “重构的收益:延迟缩短 90%,节省数百万美元”

新系统上线后,数据延迟从之前的 30 多小时缩短到了 3 小时以内。对于计费等核心表,甚至可以做到半小时级别的更新。

开发人员现在可以直接在 Snowflake 中查询当前状态和历史 CDC 数据。能够查看历史的变更快照,有助于更快速地排查线上问题。

经济上的回报也很直接。废除了全量查询副本后,自建系统每年为 Figma 节省了数百万美元的基础设施支出。回看过去,2020 年的五行代码在当时以低成本扛起了业务,但随着规模的突破,转向增量同步成为了必然的选择。


在你的团队里,也有那种「虽然烂但一直能跑」的旧系统吗?什么契机会让你们下定决心重构它?

Figma. How Figma Upgraded Data Pipeline from Multi-Day Latency to Real-Time. ByteByteGo Newsletter. https://blog.bytebytego.com/p/how-figma-upgraded-data-pipeline