什么是 Citus ?
Citus 数据库是 Postgres 的开源扩展,它在任何规模(从单个节点到大型分布式数据库集群)上为您提供了 Postgres 的所有功能。因为 Citus 是 Postgres 的扩展(而不是 fork 分支),所以当你使用 Citus 时,你也在使用 Postgres。您可以利用最新的 Postgres 特性、工具和生态系统。
使用 Citus,您可以获得分布式 Postgres 特性,如分片、分布式表、引用表、分布式查询引擎、列式存储,以及从 Citus 11.0 开始的从任何节点进行查询的能力。Citus 的并行性、在内存中保留更多数据和更高 I/O 带宽的组合可以为多租户 SaaS 应用程序、面向客户的实时分析仪表板和时间序列工作负载带来显著的性能改进。
获得 Citus 的两种方法:
- 开源: Citus 是 100% 开源的。您可以下载 Citus 的开源代码,或者访问 GitHub 上的 Citus repo 来查看源代码并自己构建它。
- 托管服务: Citus 数据库可以作为托管服务在云上使用 Azure Cosmos DB for PostgreSQL,以前称为 Azure database for PostgreSQL 中的Hyperscale (Citus)。
Citus 给你任何规模的 Postgres
您可以在单个节点上开始使用 Citus,从一开始就使用分布式数据模型,这样您就可以“向外扩展”。当您的 Postgres 工作负载需要扩展时,很容易将 worker 节点添加到 Citus 数据库集群中,或者扩展集群中的 coordinator 和 worker 节点。
- Algolia
- 每天摄入 5-10B 行
- Heap
- 7000 亿次事件
- 100 节点 Citus 数据库集群 1.4PB 数据
- Pex
- 每天更新 80B 行
- 20 节点 Citus 数据库集群
- 2.4TB memory, 1280 cores, and 80TB of data
- 2.4TB 内存,1280 核,80TB 数据
- ...计划增加到 45 个节点
- MixRank
- 10pb 的时间序列数据
Citus 合适的应用场景
多租户 SaaS 数据库
大多数 B2B 应用程序已经在其数据模型中内置了租户(tenant)、客户(customer)或帐户(account)的概念。在此模型中,数据库为许多租户提供服务,每个租户的数据都与其他租户分开。
Citus 为该工作负载提供了完整的 SQL 覆盖,并支持将您的关系数据库扩展到 100K+ 租户。Citus 还为多租户添加了新功能。例如,Citus 支持租户隔离,为大租户提供性能保证,并具有引用表的概念,以减少跨租户的数据重复。
这些功能允许您在多台机器上扩展租户数据,并轻松添加更多 CPU、内存和磁盘资源。此外,在多个租户之间共享相同的数据库架构可以有效地利用硬件资源并简化数据库管理。
Citus 对于多租户应用程序的一些优势:
- 快速查询所有租户
- 数据库中的分片逻辑,而不是应用程序
- 在单节点 PostgreSQL 中保存的数据比可能的多
- 横向扩展而不放弃 SQL
- 保持高并发下的性能
- 跨客户群的快速指标分析
- 轻松扩展以处理新客户注册
- 隔离大小客户的资源使用情况
实时分析
Citus 支持对大型数据集的实时查询。通常,这些查询发生在快速增长的事件系统或具有时间序列数据的系统中。示例用例包括:
- 具有亚秒级响应时间的分析仪表板
- 关于正在展开的事件的探索性查询
- 大型数据集归档和报告
- 使用漏斗、细分和同类群组查询分析会话
Citus 的优势在于它能够并行化查询执行并随集群中工作数据库的数量线性扩展。Citus 在实时应用方面的一些优势:
- 随着数据集的增长保持亚秒级响应
- 实时分析发生的新事件和新数据
- 并行化 SQL 查询
- 横向扩展而不放弃 SQL
- 保持高并发下的性能
- 快速响应仪表板查询
- 使用一个数据库,而不是拼凑
- 丰富的 PostgreSQL 数据类型和扩展
微服务
Citus 支持基于 schema 的分片,它允许在多台机器上分发常规数据库 schemas。这种切分方法非常适合典型的微服务架构,其中存储完全由服务拥有,因此不能与其他租户共享相同的 schema 定义。
基于 Schema 的分片是一种更容易采用的模型,只需创建一个新 schema,并在服务中设置search_path,就可以开始了。
将 Citus 用于微服务的优势:
- 允许跨服务水平分布可伸缩状态,解决微服务的主要问题之一
- 从微服务中摄取战略业务数据到公共分布式表中进行分析
- 通过平衡多台机器上的服务,有效地使用硬件
- 将嘈杂的服务隔离到它们自己的节点
- 易于理解的分片模型
- 采用快速
使用注意事项
Citus 扩展了 PostgreSQL 的分布式功能,但它不是扩展所有工作负载的直接替代品。高性能 Citus 集群需要考虑数据模型、工具和所使用的 SQL 功能的选择。
以下是考虑工具和 SQL 功能的一个好方法:如果您的工作负载与此处描述的用例一致,并且您碰巧遇到了不受支持的工具或查询,那么通常有一个很好的解决方法。
Citus 不太合适的场景
一些工作负载不需要强大的分布式数据库,而另一些工作负载则需要工作节点之间的大量信息流。 在第一种情况下,Citus 是不必要的,而在第二种情况下,通常性能不佳。这里有些例子:
- 当单节点 Postgres 可以支持您的应用程序并且您不希望增长时
- 离线分析,无需实时摄取或实时查询
- 不需要支持大量并发用户的分析应用程序
- 返回大量数据的 ETL 结果而不是摘要的查询