本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Neptune 與 Neo4j 之間的架構差異
當客戶第一次考慮將應用程式從 Neo4j 遷移至 Neptune 時,根據執行個體大小執行 like-to-like比較通常很吸引人。不過,Neo4j 和 Neptune 的架構有著根本上的差異。Neo4j 是以資料載入、資料ETL、應用程式查詢、資料儲存和管理操作都發生在相同運算資源集中的方法為基礎 all-in-one,例如EC2執行個體。
相比之下,Neptune 是一個OLTP聚焦的圖形資料庫,其中架構將責任與資源分離,以便它們可以動態且獨立地擴展。
從 Neo4j 遷移到 Neptune 時,請確定應用程式的資料持久性、可用性和可擴展性需求。Neptune 的叢集架構可簡化需要高持久性、可用性和可擴展性之應用程式的設計。了解 Neptune 的叢集架構後,您就可以設計 Neptune 叢集拓撲來滿足這些需求。
Neo4j 的叢集架構
許多生產應用程式會使用 Neo4j 的因果叢集
核心伺服器透過使用 Rraft 通訊協定複寫資料,提供資料持久性和容錯能力。
僅供讀取複本會使用交易日誌傳送,以非同步方式複寫高讀取輸送量工作負載的資料。
叢集中的每個執行個體 (不論是核心伺服器還是僅供讀取複本) 都包含圖形資料的完整副本。
Neptune 的叢集架構
Neptune 叢集是由一個主要寫入器執行個體和最多 15 個僅供讀取複本執行個體組成。叢集中的所有執行個體共用與執行個體分開的相同基礎分散式儲存服務。
主要寫入器執行個體會協調資料庫的所有寫入操作,並可垂直擴展,以針對不同的寫入工作負載提供彈性支援。它還支援讀取操作。
-
僅供讀取複本執行個體支援基礎儲存磁碟區的讀取操作,並可讓您水平擴展以支援高讀取工作負載。它們也會做為主要執行個體的容錯移轉目標,以提供高可用性。
注意
對於繁重的寫入工作負載,最好將僅供讀取複本執行個體擴展至與寫入器執行個體相同的大小,以確保讀取器可以與資料變更保持一致。
基礎儲存磁碟區會在資料庫中的資料增加時自動擴展儲存體容量,儲存體最多可為 128 TiB。
執行個體大小是動態且獨立的。每個執行個體都可以在叢集執行時調整大小,而且可以在叢集執行時新增或移除僅供讀取複本。
Neptune Serverless 功能可以隨著需求增加和降低自動擴展您的運算容量。這不僅可以降低您的管理負荷,還可以讓您設定資料庫來處理需求中的大量激增,而不會降低效能或要求您過度佈建。
您最多可以停止 Neptune 叢集 7 天。
Neptune 還支援自動擴展,以根據工作負載自動調整讀取器執行個體大小。
使用 Neptune 的全球資料庫功能,您最多可在 5 個其他區域鏡像叢集。
Neptune 也會特意設計為具備容錯能力:
為叢集中的所有執行個體提供資料儲存的叢集磁碟區跨越單一 中的多個可用區域 (AZs) AWS 區域。每個可用區域都包含叢集資料的完整副本。
如果主要執行個體無法使用,Neptune 會自動容錯移轉到現有的僅供讀取複本,資料不會遺失,通常在 30 秒內完成。如果叢集中沒有現有的僅供讀取複本,Neptune 會自動佈建新的主要執行個體 - 同樣,不會遺失資料。
這一切意味著,從 Neo4j 因果叢集遷移到 Neptune 時,您不必明確地架構叢集拓撲,以實現高資料持久性和高可用性。這使您只需透過幾種方式便可針對預期的讀取和寫入工作負載,以及任何增加的可用性需求調整叢集大小:
若要擴展讀取操作,請新增僅供讀取複本執行個體或啟用 Neptune Serverless 功能。
若要改善可用性,請將叢集中的主要執行個體和僅供讀取複本分散至多個可用區域 (AZs)。
若要縮短任何容錯移轉時間,請至少佈建一個僅供讀取複本執行個體,做為主要執行個體的容錯移轉目標。您可以指派每個複本的優先順序,確定僅供讀取複本執行個體在失敗之後提升為主要執行個體的順序。最佳實務是確保容錯移轉目標具有能夠處理應用程式寫入工作負載的執行個體類別 (如果提升為主要執行個體的話)。