準備從 Neo4j 遷移到 Neptune - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

準備從 Neo4j 遷移到 Neptune

遷移的方法

將 Neo4j 應用程式遷移到 Neptune 時,我們建議您使用以下兩種策略之一:平台轉換或重構/重新架構。如需有關遷移策略的詳細資訊,請參閱將應用程式遷移至雲端的 6 個策略,這是 Stephen Orban 所撰寫的部落格文章。

「平台轉換方法」有時稱為「捨棄再購買」(lift-tinker-and-shift),其中涉及以下步驟:

  • 識別您的應用程式想要滿足的使用案例。

  • 修改現有的圖形資料模型和應用程式架構,以使用 Neptune 的功能充分處理這些工作負載需求。

  • 決定如何將來源應用程式的資料、查詢和其他部分遷移至目標模型和架構。

如果這是一個全新的專案,這種回溯運作方法可讓您將應用程式遷移到您可能設計的 Neptune 解決方案。

相比之下,「重構方法」涉及:

  • 識別現有實作的元件,包括基礎設施、資料、查詢和應用程式功能。

  • 在 Neptune 中尋找可用來建置類似實作的等效項目。

這種向前運作方法試圖將一個實作交換為另一個實作。

在實務中,您可能會採用這兩種方法的混合。您可以從使用案例開始,設計目標 Neptune 架構,但然後轉至現有的 Neo4j 實作,來識別您必須維護的限制條件和不變量。例如,您可能必須繼續與其他外部系統整合,或繼續為圖形應用程式的消費者提供特定的 API。使用此資訊,您可以判斷已存在哪些資料要移至目標模型,以及哪些資料必須在其他位置取得。

在其他時候,您可能從分析 Neo4j 實作的特定部分開始,作為最佳資訊來源,取得應用程式打算執行之工作的相關資訊。現有應用程式中的這種考古方式可以協助定義一個使用案例,然後您可以使用 Neptune 的功能針對其進行設計。

無論您是使用 Neptune 建置新的應用程式還是從 Neo4j 遷移現有的應用程式,我們建議您透過使用案例的回溯運作來設計資料模型、一組查詢,以及處理您商務需求的應用程式架構。

Neptune 與 Neo4j 之間的架構差異

當客戶第一次考慮將應用程式從 Neo4j 遷移到 Neptune 時,通常很容易根據執行個體大小執行類似的比較。不過,Neo4j 和 Neptune 的架構有著根本上的差異。Neo4j 基於一體化方法,其中資料載入、資料 ETL、應用程式查詢、資料儲存以及管理操作都在同一組運算資源 (例如 EC2 執行個體) 中進行。

相比之下,Neptune 是以 OLTP 為中心的圖形資料庫,其中架構會分隔責任且資源會被分開,以便它們可以動態和獨立擴展。

從 Neo4j 遷移到 Neptune 時,請確定應用程式的資料持久性、可用性和可擴展性需求。Neptune 的叢集架構可簡化需要高持久性、可用性和可擴展性之應用程式的設計。了解 Neptune 的叢集架構後,您就可以設計 Neptune 叢集拓撲來滿足這些需求。

Neo4j 的叢集架構

許多生產應用程式會使用 Neo4j 的因果叢集來提供資料持久性、高可用性和可擴展性。Neo4j 的叢集架構會使用核心伺服器和僅供讀取複本執行個體:

  • 核心伺服器透過使用 Rraft 通訊協定複寫資料,提供資料持久性和容錯能力。

  • 僅供讀取複本會使用交易日誌傳送,以非同步方式複寫高讀取輸送量工作負載的資料。

叢集中的每個執行個體 (不論是核心伺服器還是僅供讀取複本) 都包含圖形資料的完整副本。

Neptune 的叢集架構

Neptune 叢集是由一個主要寫入器執行個體和最多 15 個僅供讀取複本執行個體組成。叢集中的所有執行個體共用與執行個體分開的相同基礎分散式儲存服務。

  • 主要寫入器執行個體會協調資料庫的所有寫入操作,並可垂直擴展,以針對不同的寫入工作負載提供彈性支援。它還支援讀取操作。

  • 僅供讀取複本執行個體支援基礎儲存磁碟區的讀取操作,並可讓您水平擴展以支援高讀取工作負載。它們也會做為主要執行個體的容錯移轉目標,以提供高可用性。

    注意

    對於繁重的寫入工作負載,最好將僅供讀取複本執行個體擴展至與寫入器執行個體相同的大小,以確保讀取器可以與資料變更保持一致。

  • 基礎儲存磁碟區會在資料庫中的資料增加時自動擴展儲存體容量,儲存體最多可為 128 TiB。

執行個體大小是動態且獨立的。每個執行個體都可以在叢集執行時調整大小,而且可以在叢集執行時新增或移除僅供讀取複本。

Neptune Serverless 功能可以隨著需求增加和降低自動擴展您的運算容量。這不僅可以降低您的管理負荷,還可以讓您設定資料庫來處理需求中的大量激增,而不會降低效能或要求您過度佈建。

您最多可以停止 Neptune 叢集 7 天。

Neptune 還支援自動擴展,以根據工作負載自動調整讀取器執行個體大小。

使用 Neptune 的全球資料庫功能,您最多可在 5 個其他區域鏡像叢集。

Neptune 也會特意設計為具備容錯能力

  • 將資料儲存提供給叢集中所有執行個體的叢集磁碟區跨越單一 AWS 區域 中的多個可用區域 (AZ)。每個 AZ 都包含叢集資料的完整副本。

  • 如果主要執行個體無法使用,Neptune 會自動容錯移轉到現有的僅供讀取複本,資料不會遺失,通常在 30 秒內完成。如果叢集中沒有現有的僅供讀取複本,Neptune 會自動佈建新的主要執行個體 - 同樣,不會遺失資料。

這一切意味著,從 Neo4j 因果叢集遷移到 Neptune 時,您不必明確地架構叢集拓撲,以實現高資料持久性和高可用性。這使您只需透過幾種方式便可針對預期的讀取和寫入工作負載,以及任何增加的可用性需求調整叢集大小:

  • 若要擴展讀取操作,請新增僅供讀取複本執行個體或啟用 Neptune Serverless 功能。

  • 若要改善可用性,請將叢集中的主要執行個體和僅供讀取複本分佈在數個可用區域 (AZ) 上。

  • 若要縮短任何容錯移轉時間,請至少佈建一個僅供讀取複本執行個體,做為主要執行個體的容錯移轉目標。您可以指派每個複本的優先順序,確定僅供讀取複本執行個體在失敗之後提升為主要執行個體的順序。最佳實務是確保容錯移轉目標具有能夠處理應用程式寫入工作負載的執行個體類別 (如果提升為主要執行個體的話)。

Neptune 與 Neo4j 之間的資料儲存差異

Neptune 會使用以原生四元組模型為基礎的圖形資料模型。將資料遷移至 Neptune 時,資料模型和儲存層的架構中有幾個差異,您應該注意這些差異,以充分利用 Neptune 提供的分散式和可擴展共用儲存體:

  • Neptune 不會使用任何明確定義的結構描述或限制條件。它可讓您動態新增節點,邊緣和屬性,而無需提前定義結構描述。Neptune 不會限制所儲存資料的值和類型,但 Neptune 限制中提及的除外。作為 Neptune 儲存體架構的一部分,資料也會以處理許多最常見存取模式的方式自動編製索引。這種儲存體架構移除了建立和管理資料庫結構描述和索引最佳化的操作負荷。

  • Neptune 提供唯一的分散式和共用儲存體架構,此架構會隨著資料庫的儲存體需求成長自動以 10 GB 區塊擴展,最高可達 128 TiB。此儲存層可靠、耐用且容錯,資料複製 6 次,其中 3 個可用區域各複製 2 次,。根據預設,它為所有 Neptune 叢集提供高可用性和容錯資料儲存層。Neptune 的儲存體架構可降低成本,並免除佈建或過度佈建儲存體以處理未來資料成長的需求。

在將您的資料遷移到 Neptune 之前,最好先熟悉 Neptune 的屬性圖資料模型交易語義

Neptune 與 Neo4j 之間的操作差異

Neptune 是一個全受管服務,可以自動執行您在使用內部部署或自我管理的資料庫 (例如 Neo4j 企業版或社群版) 時必須執行的許多正常操作任務:

  • 自動備份 – Neptune 會自動備份您的叢集磁碟區,並在您指定的保留期 (從 1 到 35 天) 保留備份。這些備份具有連續性和增量性,因此,您可以快速還原到保留期內的任何時間點。寫入備份資料時不會影響資料庫服務的效能或中斷服務。

  • 手動快照 – Neptune 可讓您建立資料庫叢集的儲存磁碟區快照,來備份整個資料庫叢集。然後,這種快照可以用來還原資料庫、製作其副本,以及跨帳戶共用。

  • 複製 – Neptune 支援複製功能,此功能可讓您快速建立具成本效益的資料庫複製。複製會使用寫入時複製通訊協定,以在建立它們之後只需要最少的額外空間。資料庫複製是試用新 Neptune 功能或升級的有效方法,而不會中斷原始叢集。

  • 監控 – Neptune 提供各種方法來監控叢集的效能和使用情況,包括:

    • 執行個體

    • 與 Amazon CloudWatch 和 AWS CloudTrail 的整合

    • 稽核日誌功能

    • 事件通知

    • 標記

  • 安全性 – Neptune 預設會提供安全環境。叢集位於私有 VPC 內,此 VPC 會提供與其他資源的網路隔離。所有流量都透過 SSL 加密,而所有資料都使用 AWS KMS 進行靜態加密。

    此外,Neptune 還與 AWS Identity and Access Management (IAM) 整合以提供身分驗證。透過指定 IAM 條件金鑰,您可以使用 IAM 政策,對資料動作提供更精細的存取控制。

Neptune 與 Neo4j 之間的工具和整合差異

Neptune 具有與 Neo4j 不同的整合和工具架構,這可能會影響應用程式的架構。Neptune 會使用叢集的運算資源來處理查詢,但會利用其他一流的 AWS 服務來實現全文檢索搜尋 (使用 OpenSearch)、ETL (使用 Glue) 等功能。如需這些整合的完整清單,請參閱 Neptune 整合