Citus 簡介,將 Postgres 轉(zhuǎn)換為分布式數(shù)據(jù)庫
什么是 Citus?
Citus 是 Postgres 的開源擴(kuò)展,它在集群中的多個節(jié)點上分布數(shù)據(jù)和查詢。因為 Citus 是 Postgres 的擴(kuò)展(不是 fork),所以當(dāng)您使用 Citus 時,您也在使用 Postgres。您可以利用最新的 Postgres 功能、工具和生態(tài)系統(tǒng)。
Citus 將 Postgres 轉(zhuǎn)換為具有分片、分布式 SQL 引擎、引用表和分布式表等功能的分布式數(shù)據(jù)庫。 Citus 將并行性、在內(nèi)存中保留更多數(shù)據(jù)和更高的 I/O 帶寬相結(jié)合,可以顯著提高多租戶 SaaS 應(yīng)用程序、面向客戶的實時分析儀表板和時間序列工作負(fù)載的性能。
獲得 Citus 的三種方法:
1.開源:您可以下載 Citus 開源代碼,或訪問 GitHub 上的 Citus 存儲庫。
https://www.citusdata.com/download
https://github.com/citusdata/citus
2.企業(yè)軟件:Citus Enterprise 可作為軟件訂閱以及 24x7 支持,供那些想要手動管理 Citus 的人使用。
3.托管數(shù)據(jù)庫服務(wù):Citus 在 Azure 上以 Hyperscale (Citus) 的形式提供,這是 Azure Database for PostgreSQL 托管服務(wù)中的內(nèi)置部署選項。
https://docs.microsoft.com/azure/postgresql/hyperscale
Citus 可以擴(kuò)展多遠(yuǎn)?
Citus 通過添加工作節(jié)點進(jìn)行水平擴(kuò)展,并通過升級 workers/coordinator 進(jìn)行垂直擴(kuò)展。在實踐中,我們的客戶已經(jīng)達(dá)到了以下規(guī)模,還有更大的增長空間:
Algolia
- 每天攝取 5-10B 行
Heap
- 700+ 億次事件
- 70 節(jié)點 Citus 數(shù)據(jù)庫集群上的 1.4PB 數(shù)據(jù)
Chartbeat
- 每月添加 >2.6B 行數(shù)據(jù)
Pex
- 每天更新 80B 行
- 20 節(jié)點 Citus 數(shù)據(jù)庫集群是 Google Cloud
- 2.4TB 內(nèi)存、1280 核、80TB 數(shù)據(jù)
- …計劃增長到 45 個節(jié)點
Mixrank
- 1.6PB 的時間序列數(shù)據(jù)
何時使用 Citus
多租戶數(shù)據(jù)庫
大多數(shù) B2B 應(yīng)用程序已經(jīng)在其數(shù)據(jù)模型中內(nèi)置了租戶、客戶或帳戶的概念。在此模型中,數(shù)據(jù)庫為許多租戶提供服務(wù),每個租戶的數(shù)據(jù)都與其他租戶分開。
Citus 為該工作負(fù)載提供了完整的 SQL 覆蓋,并支持將您的關(guān)系數(shù)據(jù)庫擴(kuò)展到 100K+ 租戶。 Citus 還為多租戶添加了新功能。例如,Citus 支持租戶隔離,為大租戶提供性能保證,并具有引用表的概念,以減少跨租戶的數(shù)據(jù)重復(fù)。
這些功能允許您在多臺機器上擴(kuò)展租戶數(shù)據(jù),并輕松添加更多 CPU、內(nèi)存和磁盤資源。此外,在多個租戶之間共享相同的數(shù)據(jù)庫模式可以有效地利用硬件資源并簡化數(shù)據(jù)庫管理。
Citus 對于多租戶應(yīng)用程序的一些優(yōu)勢:
- 快速查詢所有租戶
- 數(shù)據(jù)庫中的分片邏輯,而不是應(yīng)用程序
- 在單節(jié)點 PostgreSQL 中保存的數(shù)據(jù)比可能的多
- 保持高并發(fā)下的性能
- 跨客戶群的快速指標(biāo)分析
- 輕松擴(kuò)展以處理新客戶注冊
- 隔離大小客戶的資源使用情況
實時分析
Citus 支持對大型數(shù)據(jù)集的實時查詢。通常,這些查詢發(fā)生在快速增長的事件系統(tǒng)或具有時間序列數(shù)據(jù)的系統(tǒng)中。示例用例包括:
- 具有亞秒級響應(yīng)時間的分析儀表板
- 關(guān)于正在展開的事件的探索性查詢
- 大型數(shù)據(jù)集歸檔和報告
- 使用漏斗、細(xì)分和同類群組查詢分析會話
Citus 的優(yōu)勢在于它能夠并行化查詢執(zhí)行并隨集群中工作數(shù)據(jù)庫的數(shù)量線性擴(kuò)展。 Citus 在實時應(yīng)用方面的一些優(yōu)勢:
- 隨著數(shù)據(jù)集的增長保持亞秒級響應(yīng)
- 實時分析發(fā)生的新事件和新數(shù)據(jù)
- 并行化 SQL 查詢
- 橫向擴(kuò)展而不放棄 SQL
- 保持高并發(fā)下的性能
- 快速響應(yīng)儀表板查詢
- 使用一個數(shù)據(jù)庫,而不是拼湊
- 豐富的 PostgreSQL 數(shù)據(jù)類型和擴(kuò)展
使用注意事項
Citus 擴(kuò)展了 PostgreSQL 的分布式功能,但它不是擴(kuò)展所有工作負(fù)載的直接替代品。高性能 Citus 集群需要考慮數(shù)據(jù)模型、工具和所使用的 SQL 功能的選擇。
以下是考慮工具和 SQL 功能的一個好方法:如果您的工作負(fù)載與此處描述的用例一致,并且您碰巧遇到了不受支持的工具或查詢,那么通常有一個很好的解決方法。
當(dāng) Citus 不合適時
一些工作負(fù)載不需要強大的分布式數(shù)據(jù)庫,而另一些工作負(fù)載則需要工作節(jié)點之間的大量信息流。在第一種情況下,Citus 是不必要的,而在第二種情況下,通常性能不佳。這里有些例子:
- 當(dāng)單節(jié)點 Postgres 可以支持您的應(yīng)用程序并且您不希望增長時
- 離線分析,無需實時攝取或?qū)崟r查詢
- 不需要支持大量并發(fā)用戶的分析應(yīng)用程序
- 返回大量數(shù)據(jù)的 ETL 結(jié)果而不是摘要的查詢