Figma数据库团队如何应对规模挑战
2024 年 4 月 3 日

Figma 数据库团队如何应对规模挑战

Figma 数据库团队如何应对规模挑战。这是一个最佳的扩展故事:

“自 2020 年以来,Figma 的数据库堆栈已经增长了近 100 倍。2020 年,我们在 AWS 的最大物理实例上运行了一个单独的 Postgres 数据库,到 2022 年底,我们已经构建了一个带有缓存、读取副本和十几个垂直分区数据库的分布式架构。”

我喜欢他们称之为“colos”(sharded groups of related tables)的概念,这些表被分组在一起,以便可以使用连接来查询这些表。

另一个聪明之处是将迁移分为“逻辑分片”阶段 - 在这个阶段,所有查询仍然在单个数据库上运行,即使它们在逻辑上被路由,好像数据库已经被分片 - 然后是“物理分片”,在这个阶段,数据实际上被分片。 逻辑分片是使用PostgreSQL视图实现的,这些视图可以接受读取和写入操作:

CREATE VIEW table_shard1 AS SELECT * FROM table
WHERE hash(shard_key) >= min_shard_range AND hash(shard_key) < max_shard_range)

最后一步是DBProxy,这是一个用Go语言编写的自定义PostgreSQL查询代理,它可以解析查询到一个AST,并使用它来决定将查询发送到哪个分片。令人印象深刻的是,它还具有分散聚集机制,因此"select * from table"可以同时发送到所有分片,然后将结果合并在一起。