Amazon MemoryDB 常見問題集

一般問題

Amazon MemoryDB 是一種與 Valkey 和 Redis OSS 相容、持久的記憶體資料庫服務,可提供超快效能。MemoryDB 可讓您實現微秒讀取延遲,低於 10 毫秒的寫入延遲、高輸送量和多重 AZ 耐用性,例如採用微服務架構建置的應用程式。這些應用程式需要低延遲、高可擴展性,並使用 Valkey 和 Redis OSS 靈活的資料結構和 API,使開發過程變得敏捷且輕鬆。MemoryDB 將整個資料集存放在記憶體中,並利用分散式交易日誌,提供記憶體內速度和資料耐久性、一致性和復原能力。您可以使用 MemoryDB 作為完全受管的主要資料庫,讓您無需分別管理快取、耐用資料庫或所需的基礎架構,即可建置高效能應用程式。 藉助 MemoryDB 多區域,您可以輕鬆快速地在多個區域中建置應用程式,具有高達 99.999% 的可用性及微秒讀取和個位數毫秒寫入延遲。

您可以使用 AWS 管理主控台、命令列介面 (CLI) 或軟體開發套件 (SDK),建立新的 MemoryDB 叢集來開始使用。若要在主控台中建立 MemoryDB 叢集,請登入並瀏覽至 Amazon MemoryDB。從那裡選取「開始使用」,然後選取「建立新叢集」。 如需更詳細的步驟,以及如何開始使用 CLI,請參閱 MemoryDB 文件

是,MemoryDB 會保持與 Valkey 和 Redis OSS 的相容性,並支援您熟悉的同一組資料類型、參數和命令。這意味著您現在已與 Valkey 和 Redis OSS 一起使用的應用程式程式碼、用戶端和工具可與 MemoryDB 搭配使用。MemoryDB 支援所有 Valkey 和 Redis OSS 資料類型,例如字串、清單、集合、雜湊、排序集、hyperloglog、點陣圖和串流。此外,除了 Valkey 和 Redis OSS 管理命令外,MemoryDB 支援 200 多個 Valkey 和 Redis OSS 命令,因為 MemoryDB 會為您管理叢集。

如需 MemoryDB 中支援的 Redis OSS 版本資訊,請瀏覽 MemoryDB 文件

MemoryDB 叢集是一或多個節點的集合,為單一資料集提供服務。MemoryDB 資料集會分割成碎片,每個碎片都有一個主節點和最多 5 個選用複本節點。主節點會為讀取和寫入請求提供服務,而複本僅為讀取請求提供服務。主節點可以容錯移轉至複本節點,將該複本提升到該碎片的新主節點。如需詳細資訊,請參閱 MemoryDB 文件

MemoryDB 是耐用的記憶體資料庫,適用於需要超快速、與 Valkey 或 Redis OSS 相容的主要資料庫的工作負載。如果工作負載需要提供超快速效能的耐用資料庫 (微秒讀取和低於 10 毫秒的寫入延遲),則應考慮使用 MemoryDB。如果您想要使用 Valkey 或 Redis OSS 資料結構和具有主要耐用資料庫的 API 來建置應用程式,MemoryDB 也可能是您使用案例的理想選項。最後,您應考慮使用 MemoryDB 來簡化應用程式架構並降低成本,藉此使用快取取代資料庫的使用情況,以提高耐用性和效能。

ElastiCache 是一項服務,通常用於使用 Valkey、Memcached 或 Redis OSS 來快取其他資料庫和資料存放區中的資料。您應考慮使用 ElastiCache 進行快取工作負載,建議您使用現有的主要資料庫或資料存放區來加速資料存取 (微秒讀取和寫入效能)。如果您想要使用 Valkey 或 Redis OSS 資料結構和 API,來存取主要資料庫或資料存放區中存放的資料,您也應考慮將 ElastiCache 用於這類使用案例。

如需目前的限制和配額,請參閱 MemoryDB 文件。

MemoryDB 多區域

Amazon MemoryDB 多區域是一個全受管的、主動-主動式的多區域資料庫,可讓您建置具有高達 99.999% 的可用性和微秒讀取以及個位數毫秒寫入延遲的應用程式。其可提供跨多個 AWS 區域的資料備援,因此即使在某個區域中斷應用程式處理且無法連線到其 MemoryDB 端點,您也可以改善多區域應用程式的可用性和恢復能力。MemoryDB 多區域提供主動-主動式複寫,因此您可以透過微秒讀取以及個位數毫秒寫入延遲,從最接近客戶的區域提供本機讀取和寫入服務。其會以非同步方式複寫區域之間的資料,而且通常會在一秒內傳播資料。MemoryDB 多區域會自動解決更新衝突並修正資料差異問題,因此您可以專注於應用程式。

如果您想要建置需要最高級別可用性、提升的恢復能力以及已改善的業務連續性的應用程式,您應該使用 MemoryDB 多區域。如果您希望在世界任何地方建置和執行需要快速回應時間的多區域應用程式,也可以使用 MemoryDB 多區域。

使用 MemoryDB 多區域時,MemoryDB 會在稱為多區域叢集的組態中複製跨區域叢集的資料。將資料寫入多區域叢集中的任何區域叢集時,MemoryDB 通常會在一秒內自動非同步地將該資料複製到所有其他區域叢集,而不會影響應用程式的效能。MemoryDB 多區域會自動解決更新衝突,並修正資料差異問題。衝突解決為全受管且在背景執行,不會影響應用程式的可用性。

若要開始使用 MemoryDB 多區域,您可以使用 AWS Console、AWS SDK 或 CLI 在所需的 AWS 區域中建立新的多區域叢集和區域叢集。在您建立第一個區域叢集之後,您最多可以將四個額外的區域新增至多區域叢集。將資料寫入任何區域叢集時,MemoryDB 多區域通常會在一秒內自動將該資料複製到多區域叢集中的所有其他區域叢集。如果您現在正在使用 MemoryDB,則可以擷取叢集的快照,並使用它來種植新的多區域叢集和區域叢集。  

您可以在各自的 AWS 區域中建立區域叢集,將新區域叢集新增至 MemoryDB 多區域叢集。不過,您無法將現有的 MemoryDB 叢集新增至現有的 MemoryDB 多區域叢集。您只能建立新區域叢集,或從 MemoryDB 多區域叢集移除現有的區域叢集。移除區域叢集時,MemoryDB 多區域將刪除該特定區域中的叢集,同時維護 MemoryDB 多區域叢集。客戶可以選擇稍後在相同的 MemoryDB 多區域叢集中新增更多區域叢集。

MemoryDB 多區域提供最終一致性,因為它執行非同步複製,可保留記憶體速度。通常在不到一秒鐘的時間內,對其中一個 MemoryDB 多區域區域叢集中的金鑰所做的任何更新都會以非同步方式傳播到 MemoryDB 多區域叢集內的其他區域叢集。

MemoryDB 多區域使用無衝突複複資料類型 (CRDT) 在衝突並行寫入之間進行調整。CRDT 是一種無需協調即可獨立且並行更新的資料結構。寫入與寫入器衝突可在每個複本上獨立合併,並達成最終一致性。

如果區域彼此隔離或開始降級,MemoryDB 多區域會記錄它已執行但尚未傳播到所有區域叢集的任何寫入。當該區域恢復聯機時,MemoryDB 多區域將從該區域繼續傳播任何擱置中寫入至其他區域中的區域叢集。它還會繼續將寫入從其他區域叢集傳播到現在恢復聯機的區域。無論區域隔離多長時間,MemoryDB 多區域最終都會傳播所有先前成功的寫入。若應用程式約同時更新不同區域中的同一金鑰,則可能會發生衝突。MemoryDB 多區域使用並行更新之間的無衝突複複資料類型 (CRDT) 調整。衝突解決為全受管且在背景執行,不會影響應用程式的可用性。

性能和耐用性

MemoryDB 的輸送量和延遲會根據節點類型、承載大小和用戶端連線數量而有所不同。MemoryDB 在叢集碎片的主節點上提供微秒讀取延遲、低於 10 毫秒寫入延遲,以及先寫後讀延遲。MemoryDB 每秒最多可支援 390K 讀取和 100K 寫入要求,以及每節點最高 1.3 GB/s 讀取和 100 MB/s 寫入輸送量 (基於唯讀和唯寫工作負載的內部測試)。MemoryDB 叢集會跨一或多個節點分割資料,讓您可以將更多碎片或複本新增至叢集,以增加彙總輸送量。

將整個資料集存放在記憶體中之外,MemoryDB 還會使用分散式多可用區域交易日誌,來提供資料耐用性、一致性和復原能力。MemoryDB 可跨多個 AZ 中存放資料,實現快速的資料庫復原和重新啟動。MemoryDB 還將資料存放在記憶體中,可提供超快速效能和高輸送量。

MemoryDB 會利用分散式交易日誌來持續存放資料。MemoryDB 可跨多個 AZ 中存放資料,實現快速的資料庫復原和重新啟動。此外,MemoryDB 為複本節點提供最終一致性,並在主節點上提供一致的讀取。

Valkey 和 Redis OSS 包含選用的僅附加檔案 (AOF) 功能,會將檔案中的資料保留在主節點的磁碟上,以確保耐用性。但是,由於 AOF 會將資料本機存放在單一可用區域的主節點上,因此存在資料遺失的風險。此外,如果發生節點故障,則存在複本一致性問題的風險。

是的,MemoryDB 支援高可用性。您可以建立具有多重 AZ 可用性的 MemoryDB 叢集,其中最多可在不同 AZ 中包含 5 個複本。當主節點發生故障時,MemoryDB 會自動容錯移轉並提升其中一個複本作為新的主節點,並將流量直接寫入至該節點。此外,MemoryDB 還利用分散式交易日誌來確保複本上的資料是最新狀態,即使是主節點故障也是如此。非計劃中斷的容錯移轉通常在 20 秒內發生,而計劃中斷通常在 200 毫秒內發生。

MemoryDB 使用分散式交易日誌,在資料庫復原、重新啟動、容錯移轉以及主要與複本之間的最終一致性期間,可持續存放在資料庫寫入的資料。

Valkey 和 Redis OSS 允許在每個碎片的主節點上寫入和高度一致性讀取,從讀取複本進行最終一致讀取。如果主節點失敗,則不能保證這些一致性屬性,因為在容錯移轉期間可能會遺失寫入,因此違反一致性模式。

MemoryDB 的一致性模式與 Valkey 和 Redis OSS 類似。但是,在 MemoryDB 中,在容錯移轉過程中都不會遺失資料,因此無論節點是否失敗,用戶端都可以從主節點讀取其寫入。只有在多重 AZ 交易日誌中成功保留的資料才可見。複本節點最終仍然是一致的,延遲指標已發佈到 Amazon CloudWatch

憑藉 Redis OSS 的 MemoryDB 7.0 版,我們推出了增強型 I/O 多工處理,可大規模為輸送量和延遲提供額外的改善。Valkey 的 MemoryDB 7.2 版也支援增強型 IO 多工處理。增強型 IO 多工處理非常適合具有多個用戶端連線的輸送量受限工作負載,其優勢隨工作負載並行層級而擴展。例如,當使用 r6g.4xlarge 節點並執行 5200 個並行用戶端時,相較於 Redis OSS 的 MemoryDB 第 6 版,您可以實現高達 46% 的輸送量提升 (每秒讀取和寫入操作數),且 P99 延遲降低達 21%。針對這些類型的工作負載,節點的網路 IO 處理可能成為擴展能力的限制因素。透過增強型 IO 多工處理,每個專用網路 IO 執行緒會將多個用戶端的命令管道化至 MemoryDB 引擎中,利用該引擎有效率地批次處理命令。

如需詳細資訊,請參閱文件

資料擷取和查詢

若要將資料寫入 MemoryDB 叢集和從中讀取資料,請使用其中一個支援的 Valkey 或 Redis OSS 用戶端連線至叢集。如需支援的 Valkey 或 Redis OSS 用戶端清單,請參閱 Valkey 或 Redis OSS 文件。如需如何使用 Valkey 或 Redis OSS 用戶端連線至 MemoryDB 叢集的指示,請參閱 MemoryDB 文件。 Valkey 可與現有的 Redis OSS 用戶端搭配運作,因此您從 Redis OSS 移至 Valkey 時無須變更用戶端。

硬體、擴展和維護

您可以建立內含最多 500 個節點的 MemoryDB 叢集。這樣可提供的最大記憶體儲存容量約為 100 TB,假設每個主節點有 250 個主節點,其中包含一個複本以提供高可用性 (總共 500 個節點)。

是的,您可以水平和垂直重新調整 MemoryDB 叢集的大小。您可以透過新增或移除節點,水平調整叢集。您可以選擇新增碎片以將資料集分散到更多碎片,並且可以在每個碎片中新增其他複本節點,以提高可用性和讀取輸送量。您也可以移除碎片和複本以在叢集中擴展。此外,您可以透過變更節點類型來垂直擴展叢集,這麼做會變更每個節點的記憶體和 CPU 資源。在水平和垂直調整大小作業期間,叢集會繼續保持連線狀態,並提供讀取和寫入請求。

MemoryDB 可讓叢集的維護和更新更輕鬆,並提供兩種不同的叢集維護流程。首先,對於某些強制性更新,MemoryDB 會在您指定的維護時段期間自動修補叢集。其次,對於某些更新,MemoryDB 會利用服務更新,您可以隨時套用這些更新,或將其安排在未來的維護時段中。會在特定日期後將某些服務更新自動安排在維護時段。叢集更新有助於加強叢集的安全性、可靠性和作業效能,而叢集繼續保持在連線狀態,並為讀取和寫入請求提供服務。如需有關叢集維護的詳細資訊,請參閱 MemoryDB 文件

備份與還原

是的,您可以建立快照,來備份 MemoryDB 叢集的資料和中繼資料。您可以手動建立快照,也可以使用 MemoryDB 的自動快照排程器,每天在指定的時間拍攝新的快照。您可以選擇在建立快照後將其保留最多 35 天,以及 MemoryDB。快照會存放在 Amazon S3 中,該服務的設計具有 99.999999999% (11 個 9) 的耐久性。此外,您也可以選擇在刪除叢集時拍攝叢集的最終快照。此外,您還可以將 MemoryDB 快照從服務匯出到 Amazon S3 儲存貯體。如需快照的詳細資訊,請參閱 MemoryDB 文件

是的,建立新的 MemoryDB 叢集時,您可以從快照還原 MemoryDB 叢集。

是的,您可以從 Valkey 或 Redis OSS RDB 檔案還原 MemoryDB 叢集。您可以指定建立新 MemoryDB 叢集時,要從中還原的 RDB 檔案。

是的,您可以將資料從 ElastiCache 遷移到 MemoryDB。首先,建立 ElastiCache 叢集的快照,並將其匯出至 S3 儲存貯體。接下來,建立新的 MemoryDB 叢集,並指定要從中還原的備份。MemoryDB 將使用快照中的資料以及 Valkey 或 Redis OSS 中繼資料建立新叢集。如需有關將資料從 ElastiCache 遷移至 MemoryDB 的詳細資訊,請參閱 MemoryDB 文件

指標

是的,MemoryDB 為叢集提供作業和效能指標。MemoryDB 擁有超過 30 個 CloudWatch 指標,您可以在 MemoryDB 主控台中檢視這些指標。如需有關 CloudWatch 指標和 MemoryDB 的詳細資訊,請參閱 MemoryDB 文件

安全與合規

是的,MemoryDB 支援靜態和傳輸中的資料加密。如需靜態加密,您可以使用 AWS Key Management Service 客戶自管金鑰 (CMK) 或 MemoryDB 提供的金鑰。使用 MemoryDB 叢集的 Graviton2 執行個體,使用永遠啟用的 256 位元 DRAM 加密,在記憶體中加密資料。

MemoryDB 會使用存取控制清單 (ACL) 來控制叢集的身分驗證和授權。ACL 讓您能為同一個叢集中的不同使用者定義不同的許可。ACL 是一或多個使用者的集合。每個使用者都有一個密碼和存取字串,用來授與命令和資料的存取權。若要進一步了解 MemoryDB 中的 ACL,請參閱 MemoryDB 文件

是的,所有 MemoryDB 叢集都必須在 VPC 中啟動。

我們將繼續支援更多合規認證。請參閱此處以取得最新的合規準備資訊。

是。要取得從您帳戶發出的 Amazon MemoryDB API 呼叫歷史記錄,只需在 AWS 管理主控台中開啟 CloudTrail 即可。如需詳細資訊,請瀏覽 CloudTrail 首頁。

成本最佳化

Amazon MemoryDB 的資料分層是 MemoryDB 的全新性價比選項,可自動將存取頻率較低的資料從記憶體移至高效能的本機連接固態硬碟 (SSD)。資料分層可增加容量、簡化叢集管理,並改善 MemoryDB 的總體擁有成本 (TCO)。

當您需要更簡單且更具成本效益的方法來擴展 MemoryDB 叢集的資料容量,而不犧牲應用程式的可用性時,應使用資料分層。資料分層非常適合定期存取多達 20% 資料的工作負載,以及在首次需要存取頻率較低的項目時可以容忍額外延遲的應用程式。使用資料分層搭配 R6gd 節點的總容量 (記憶體 + SSD) 增加了近 5 倍,相較於 R6g 節點 (僅記憶體),在以最大使用率執行時,可協助您節省 60% 以上的儲存成本。假設 500 位元組的字串值,與對記憶體中資料的讀取請求相比,對存放在 SSD 上的資料的請求通常會額外增加 450 微秒的延遲。

當可用記憶體容量耗盡時,資料分層可透過運用叢集節點中的 SSD 儲存裝置來運作。使用具有 SSD 儲存空間的叢集節點時,系統會自動啟用資料分層,而 MemoryDB 會管理資料放置,使用最近使用的 (LRU) 政策,透明地在記憶體和磁碟之間移動項目。記憶體完全消耗時,MemoryDB 會自動偵測最近使用的項目,並將其值移至磁碟,從而最佳化成本。當應用程式需要從磁碟擷取項目時,MemoryDB 會在為請求提供服務之前,透明地將其值移動到記憶體,盡可能降低對效能的影響。

若要開始使用,請使用具有以 ARM 為基礎的 AWS Graviton2 處理器和 NVMe SSD (R6gd) 的記憶體最佳化執行個體建立新的 MemoryDB 叢集。然後,您可以透過匯入快照來移轉現有叢集中的資料。

具有資料分層的 R6gd 節點是以每個使用的執行個體小時為基礎。您還需要為使用 R6gd 時寫入的資料付費,這類似於其他 MemoryDB 節點類型。如需詳細資訊,請參閱 MemoryDB 定價頁面

若要開始使用,請使用具有以 ARM 為基礎的 AWS Graviton2 處理器和 NVMe SSD (R6gd) 的記憶體最佳化執行個體建立新的 MemoryDB 叢集。然後,您可以透過匯入快照來移轉現有叢集中的資料。

MemoryDB 預留節點有節點系列和 AWS 區域之內的大小彈性。換言之,使用同一節點系列的所有大小,可自動實施折扣價的預留節點費率。例如,如果您購買 r6g.xlarge 保留節點,並需要擴展到較大的節點 r6g.2xlarge,則保留節點折扣費率會自動套用至相同 AWS 區域中 r6g.2xlarge 節點的 50% 使用率。大小有彈性之下,可減少您管理預留節點所需的時間,加上因為不再綁定特定的資料庫節點大小,所以即使容量需要變更,也能自折扣享有最大優惠。

MemoryDB 保留節點定價是根據節點類型、期限持續時間 (一年或三年)、付款選項 (無預付、部分預付、全部預付) 和 AWS 區域。請注意,預留節點價格不包括資料寫入或快照儲存成本。如需詳細資訊,請參閱 MemoryDB 定價頁面

MemoryDB 為記憶體最佳化的 R6g、R7g 和 R6gd (含資料分層) 節點提供保留節點。