優化一個分布式系統的吞吐能力,除了應用本身代碼外,很大程度上是在優化它所依賴的中間件叢集處理能力。如:
kafka
/
redis
/
rabbitmq
/
postgresql
/分布式存儲(
CephFS
,
JuiceFS
,
C urve
,
Longhorn
)等叢集的處理能力。
分布式存儲叢集(Longhorn)
這裡主要用于
Citus
叢集的
協調器(coordinator)
和
工作器(worker)
節點的資料持久化。
具體文檔,請參閱:
- https://longhorn.io/
分布式 PostgreSQL 叢集(Citus)
這裡主要用于對
Sentry
事件源資料大表
nodestore_node
的分片。
具體文檔,請參閱:
- https://docs.citusdata.com/en/v11.1/
讀寫分離和高可用(PgPool+Repmgr)
這裡主要用于對
Citus
節點(
協調器
/
工作器
)進行讀寫分離和主備高可用。
具體文檔,請參閱:
- https://www.pgpool.net/docs/pgpool-II-4.2.3/en/html/example-kubernetes.html
- https://repmgr.org/
管理叢集節點(PgAdmin)
具體文檔,請參閱:
- https://www.pgadmin.org/
nodestore_node 大表分片
選擇分布式 key,并将表轉換分布式表,這裡将表劃分為
64
個分片,資料平均配置設定到
6
台
worker
節點:
# 建立分布式表
SELECT create_distributed_table('nodestore_node', 'id', colocate_with => 'none', shard_count => 64);
# 平衡分片
SELECT rebalance_table_shards();
# 查詢分片
SELECT * FROM citus_shards;
總結
中間件叢集基礎設施建設,本身涉及細節較多,可以說是另一個領域。