Neo4j分布式集群架構

2022-08-09 09:03:09 字數 1598 閱讀 2016

從下圖可見,neo4j集群由兩個不同的角色core servers和read replicas組成,這兩個角色是任何生產部署中的基礎,但彼此之間的管理規模不同,並且在管理整個集群的容錯性和可伸縮性方面承擔著不同的角色。

核心伺服器的主要責任是保護資料。 核心伺服器通過使用raft協議複製所有事務來做到這一點。 在確認向終端使用者應用程式提交事務之前,raft確保資料安全持久。 在實際環境中,這意味著一旦集群(n / 2 + 1)中的大多數核心伺服器都接受了事務,安全性要求會影響寫入延遲。 隱式寫入將以最快的多數core servers被確認,但是隨著群集中核心伺服器數量的增加,確認一次寫入所需的core servers的數量也會增加。實際上,這意味著典型的core server集群中需要一定數量的伺服器,足以為特定部署提供足夠的容錯能力。 這是使用公式m = 2f +1計算的,其中m是容忍f故障所需的核心伺服器數量。 例如:

- 為了容忍兩個發生故障的核心伺服器,我們需要部署五個核心的集群。

- 最小的容錯群集(乙個可以容忍乙個故障的群集)必須具有三個核心。

- 也可以建立僅包含兩個核心的因果集群。 但是,該群集不是容錯的。 如果兩個伺服器之一發生故障,其餘伺服器將變為唯讀。

請注意,如果core server集群遭受足夠的故障而無法處理寫入,則它將變為唯讀狀態以保持安全。

唯讀副本的主要職責是擴充套件圖資料負載能力(密碼查詢,過程等)。 唯讀副本的作用類似於core server保護的資料的快取,但它們不是簡單的鍵值快取。 實際上,唯讀副本是功能齊全的neo4j資料庫,能夠完成任意(唯讀)圖資料查詢和過程。

唯讀副本是通過事務日誌傳送從core servers非同步複製的。 唯讀副本將定期(通常在ms範圍內)輪詢核心伺服器以查詢自上次輪詢以來已處理的任何新事務,並且核心伺服器會將這些事務傳送到唯讀副本。 可以從相對較少的core server中饋送許多唯讀副本資料,從而使查詢工作量大為增加,從而擴大規模。

但是,與核心伺服器不同,唯讀副本不參與有關群集拓撲的決策。 唯讀副本通常應以相對較大的數量執行,並視為一次性使用。 丟失唯讀副本不會影響群集的可用性,除了丟失其圖表查詢吞吐量的一部分。 它不會影響群集的容錯能力。

從應用程式的角度來看,集群的執行機制很有趣,但是考慮應用程式將如何使用資料庫完成工作也很有幫助。 在應用程式中,我們通常希望從圖中讀取並寫入圖中。 根據工作負載的性質,我們通常希望從圖中進行讀取以考慮先前的寫入,以確保因果一致性。

因果一致性使得可以寫入core server(資料是安全的)並從read replica(其中圖操作被擴充套件)中讀取這些寫入。 例如,因果一致性可確保當該使用者隨後嘗試登入時,會出現建立該使用者帳戶的寫操作。

在執行事務時,客戶可以要求書籤,然後將其作為引數提供給後續事務。 使用該書籤,集群可以確保只有處理了該客戶已新增書籤的事務的伺服器才能執行其下乙個事務。 這提供了因果鏈,從客戶的角度確保了正確的寫後讀語義。

除了書籤之外,其他所有事情都由集群處理。 資料庫驅動程式與群集拓撲管理器一起使用,以選擇最合適的核心伺服器和唯讀副本,以提供高質量的服務。

分布式集群架構

策略優點 缺點格式 uuid 實現簡單不占用頻寬 無序 不可讀 查詢慢 32位db自增 無 遞迴 db單點故障 擴充套件有瓶頸 snowflake 不占用頻寬 低位趨勢遞增 依賴伺服器時間 18位redis 無單點故障 效能優於db遞增 占用頻寬 redis集群需要維護 12位關係型資料庫都實現資料...

RabbitMQ分布式集群架構

設計集群的目的 1 集群配置方式 rabbitmq可以通過三種方法來部署分布式集群系統,分別是 cluster,federation,shovel federation 應用於廣域網,允許單台伺服器上的交換機或佇列接收發布到另一台伺服器上交換機或佇列的訊息,可以是單獨機器或集群。federation...

RabbitMQ分布式集群架構

通過增加更多的節點來擴充套件訊息通訊的吞吐量 federation 應用於廣域網,允許單台伺服器上的交換機或佇列接收發布到另一台伺服器上交換機或佇列的訊息,可以是單獨機器或集群。federation佇列類似於單向點對點連線,訊息會在聯盟佇列之間 任意次,直到被消費者接受。通常使用federation...