測試 Redis 執行個體的效能可能是一項複雜的工作。 Redis 執行個體的效能可能會根據各種參數而有所不同,例如用戶端數目、資料值的大小,以及是否使用管線。 要最佳化輸送量還是延遲,也可能需要取捨。
所幸,有數項工具可讓 Redis 的效能評定更容易進行。 兩個最受歡迎的工具是 redis-benchmark 和 memtier-benchmark 。 本文著重於 memtier_benchmark,通常稱為 memtier。
如何使用 memtier_benchmark 公用程式
在您可以用於測試的用戶端虛擬機器 (VM) 上安裝 memtier。 請遵循 Memtier 文件,以取得如何安裝開放原始碼映像的指示。
用於測試的用戶端虛擬機器 (VM) 應位於與 Azure Managed Redis (AMR) 執行個體相同的區域中。
請確定您使用的用戶端 VM 與目前測試的快取執行個體至少有一樣的計算能力和頻寬。
設定網路隔離和防火牆設定,以確保用戶端 VM 能夠存取 Azure Managed Redis 執行個體。
如果您是在快取執行個體上使用 TLS/SSL,則必須將
--tls和--tls-skip-verify參數新增至 memtier_benchmark 命令。memtier_benchmark依預設會使用連接埠 6379。 使用-p 10000參數來覆寫此設定,因為 AMR 會改用連接埠 10000。針對使用 OSS 叢集原則的所有 Azure Managed Redis 執行個體,您必須將
--cluster-mode參數新增至 memtier 命令。 使用企業叢集原則的 AMR 執行個體可以視為非叢集快取,而且不需要此設定。從 VM 的 CLI 或殼層啟動
memtier_benchmark。 如需如何設定和執行工具的指示,請參閱 Memtier 文件。
效能評定建議
如果您未取得所需的效能,請嘗試擴展至更進階的層級。 平衡層通常會有兩倍於記憶體最佳化層的 vCPU,而計算最佳化層通常會有兩倍於平衡層的 vCPU。 由為 Azure Managed Redis 是以 Redis Enterprise 而非社群 Redis 為基礎所建置,所以核心 Redis 流程能夠利用多個 vCPU。 因此,具有更多 vCPU 的執行個體具有明顯更好的輸送量效能。
擴展至較大的記憶體大小也會新增更多 vCPU,從而提升效能。 不過,擴展至較大的記憶體大小通常不如使用效能更高的階層有效。 請參閱 各層級與 SKU 概覽,詳細解析每個大小和層級的 vCPU 配置。
對快閃最佳化層進行效能評定可能會很困難,因為有些金鑰儲存在 DRAM 上,而有些金鑰則儲存在 NVMe 快閃磁碟上。 DRAM 效能評定上的金鑰幾乎和其他 Azure Managed Redis 執行個體一樣快,但 NVMe 快閃磁碟上的金鑰速度較慢。 由於快閃最佳化層會以智慧方式將最常使用的金鑰放入 DRAM 中,請確定您的效能評定設定符合您預期的實際使用情況。
使用 TLS/SSL 會降低輸送量效能,但高度建議作為生產最佳做法。
在效能評定之前,必須先將資料填入 Redis 執行個體中。 對清空快取進行效能評定會產生比您實際看到更好的結果。
使用的連線數目對效能評定有顯著的影響。 使用太多連線會開始降低快取的效能。 使用太少連線不能充分發揮快取的效能。 建議您根據實際的應用程式需求設定連線數目。 您可以透過將用戶端數目乘以執行緒數目來確定連線總數。
管線設定對效能測試具有顯著的影響。 如果將管線設定設為較大,您會看到更多輸送量,但延遲更長。 如需詳細資訊,請參閱管線。
memtier_benchmark 範例
備註
此範例顯示使用 OSS 叢集原則和 TLS,對計算最佳化 X3 執行個體進行效能評定。
測試前設定:準備快取執行個體,其中包含測試所需的資料。 向執行個體載入資料可確保結果更準確地反映真實世界的情況。
{number-of-keys} 參數應該由 AMR 執行個體的大小和每個金鑰的大小來決定。 考慮到緩衝區,好的經驗法則是將執行個體填滿大約 75%。 您可以使用此公式:numberOfKeysToSet = (<TotalCacheSizeInBytes> * 0.75) / (1024 + 300)。 例如,如果您要對計算最佳化 X3 執行個體進行效能評定,請使用 1,024 位元組金鑰大小,如先前所示,這意指 {number-of-keys} = (3 * 1000000000 * 0.75) / (1024 + 300)。 結果等於大約 1,699,396 個金鑰。
memtier_benchmark -h {your-cache-name}.{region}.redis.azure.net -p 10000 -a {your-access-key} --hide-histogram --pipeline=10 --clients=50 --threads=6 --key-maximum=1699396 -n allkeys --key-pattern=P:P --ratio=1:0 --data-size=1024 --tls --cluster-mode
備註
此範例使用 --tls、--tls-skip-verify 和 --cluster-mode 旗標。 如果您在非 TLS 模式中使用 Azure 受控 Redis,或分別使用 企業叢集原則,則不需要這些專案。
若要測試輸送量:此命令會測試具有 1k 承載的管線 GET 要求。 使用此命令來測試快取執行個體預期多少讀取輸送量。 此範例假設您使用的是 TLS 和 OSS 叢集原則。
--key-pattern=R:R 參數確保隨機存取金鑰,從而增加效能評定的真實性。 此測試會執行五分鐘。
memtier_benchmark -h {your-cache-name}.{region}.redis.azure.net -p 10000 -a {your-access-key} --hide-histogram --pipeline=10 --clients=50 --threads=6 -d 1024 --key-maximum=1699396 --key-pattern=R:R --ratio=0:1 --distinct-client-seed --test-time=300 --json-out-file=test_results.json --tls --tls-skip-verify --cluster-mode
範例效能基準資料
下表顯示最佳輸送量,這是我們在使用所有讀取命令的工作負載和 1KB 承載,測試各種大小的 Azure Managed Redis 執行個體時觀察到的。 除了連線計數之外,工作負載在所有 SKU 上都相同(也就是memtier_benchmark所需的不同線程和用戶端計數)。 每個 SKU 都會選擇連線計數,以最佳方式運用 Azure Managed Redis 執行個體。 我們已從 IaaS Azure VM 對 Azure Managed Redis 端點使用 memtier_benchmark,利用 memtier_benchmark 範例一節中顯示的 memtier 命令。 輸送量數字僅適用於 GET 命令。 一般而言,SET 命令的輸送量較低。 真實世界的效能會根據 Redis 設定和命令而有所不同。 這些數字是以參考點的形式提供,而不是保證。
謹慎
這些值並非保證值,也沒有關於這些數字的 SLA。 強烈建議您執行自己的效能測試,以確認您的應用程式適合的快取大小。 效能可能會因為各種原因而有所不同,例如不同的連線計數、承載大小、執行等命令。
這很重要
Microsoft 會定期更新快取執行個體中使用的基礎 VM。 這可以變更不同快取間和不同區域間的效能特性。 此頁面上的範例效能評定值會反映單一區域中的特定世代快取硬體。 在實際使用中,您可能會看到不同的結果,尤其是在網路頻寬方面。
Azure Managed Redis 提供叢集原則的選擇:企業和 OSS。 企業叢集原則是較簡單的設定,不需要用戶端支援叢集。 另一方面,OSS 叢集原則會使用 Redis 叢集通訊協定,來支援更高的輸送量。 建議您在大部分情況下使用 OSS 叢集原則,特別是當您需要高效能時。 如需詳細資訊,請參閱 叢集。
| 大小 (以 GB 為單位) | 記憶體最佳化每秒的 GET 要求數 | 平衡每秒的 GET 要求數 | 每秒的 GET 請求數量(計算優化) |
|---|---|---|---|
| 0.5 | - | 120,000 | - |
| 1 | - | 120,000 | - |
| 3 | - | 230,000 | 48萬 |
| 6 | - | 230,000 | 48萬 |
| 12 | 230,000 | 48萬 | 810,000 |
| 24 | 48萬 | 810,000 | 1,600,000 |
| 六十 | 810,000 | 1,500,000 | 2,000,000 |
| 120 | 1,500,000 | 2,000,000 | 2,900,000 |
下表根據 memtier_benchmark 執行緒計數和用來產生輸送量數字的用戶端計數列出連線計數。 如上所述,變更連線計數可能會導致不同的效能。
| 大小 (以 GB 為單位) | 記憶體最佳化的用戶端/執行緒/連線計數 | 平衡的用戶端/執行緒/連線計數 | 計算最佳化的用戶端/執行緒/連線計數 |
|---|---|---|---|
| 0.5 | - | 10/4/40 | - |
| 1 | - | 10/4/40 | - |
| 3 | - | 10/4/40 | 10/8/80 |
| 6 | - | 10/4/40 | 10/8/80 |
| 12 | 10/4/40 | 10/8/80 | 10/16/160 |
| 24 | 10/8/80 | 10/16/160 | 20/16/320 |
| 六十 | 10/16/160 | 20/16/320 | 20/32/640 |
| 120 | 20/16/320 | 20/32/640 | 20/64/1280 |