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