全部產品
Search
文件中心

Tair:記憶體型(相容Redis 6.0)效能白皮書

更新時間:Jun 30, 2024

本文介紹雲原生記憶體資料庫Tair記憶體型(相容Redis 6.0)效能測試的測試環境、測試載入器、測試方法與測試結果。

產品概述

Tair記憶體型適合并發量大、讀寫熱點多、對效能要求極高的情境。相比KVStore for Redis社區版,記憶體型主要在下述方面進行了最佳化:

更多介紹,請參見記憶體型

測試環境

資料庫

測試環境資訊說明
地區和可用性區域華北3(張家口)地區,可用性區域A。
儲存介質記憶體型。
執行個體版本6.2.1.1
執行個體架構標準版(雙副本)架構,不啟用叢集,詳情請參見標準架構
執行個體規格由於測試結果受規格影響較小,本次測試以4 GB(tair.rdb.4g)規格為例,規格詳情請參見記憶體型執行個體規格

測試用戶端

測試環境資訊說明
部署壓測工具的裝置Elastic Compute Service執行個體,規格為ecs.g5ne.16xlarge,詳情請參見執行個體規格類型系列
地區和可用性區域華北3(張家口)地區,可用性區域A。
作業系統CentOS 7.2 64位。
網路Tair執行個體為相同Virtual Private Cloud,且與Tair執行個體通過專用網路串連。

測試載入器

使用開源Redis的redis-benchmark工具進行壓測,它是Redis官方的效能測試工具,可以有效地測試Tair服務的效能。本次測試使用的redis-benchmark工具版本為7.0.6。
說明 為確保redis-benchmark工具支援--threads參數,自測時推薦使用最新的Redis版本進行編譯,更多資訊請參見Redis開源專案

使用方法

在ECS執行個體下載Redis原始碼,並且編譯產生redis-benchmark檔案,即可開始測試。

例如測試SET命令的執行效能,測試命令樣本如下(啟動16個線程、256個串連、3000000個Key、Value取值範圍為64位元組):
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 10000000  -c 256 -t set -d 64 --threads 16
表 1. 參數說明
參數說明
-hTair執行個體的內網串連地址。具體操作,請參見查看串連地址
-pTair執行個體的服務連接埠,預設為6379。
-aTair執行個體的密碼。
說明 如果使用通過控制台建立的帳號串連Tair,串連密碼格式需為<user>:<password>。例如,帳號名為admin,密碼為Rp829dlwa,則串連Tair時的密碼為admin:Rp829dlwa
-c並發的串連數量。
-n測試的總請求數量,可設定較大的值以持續壓測。
-t測試的命令,例如GET、SET等。
-dSET或GET所操作的值的資料大小,單位為位元組(Byte)。
-r使用的Key的隨機範圍,即使用多少個不同key。
--threads啟動多線程壓測,並指定線程個數。
說明 參數的更多資訊,請參見redis-benchmark

測試結果

主要對包括SET、GET等在內的十餘種Redis基礎命令進行效能測試並給出測試單位,且囊括了不同線程數、不同寫入資料大小的情境。

測試單位

測試單位說明
QPS每秒處理的讀寫運算元,單位為次/秒。
Latency操作的平均延遲分布,單位為毫秒(ms)。
99th Percentile Latency99%操作延遲,單位為毫秒(ms),指99%操作的最大延遲時間。例如該指標的值為0.5毫秒,表示99%的請求可以在0.5毫秒內被處理。

String資料結構

  • GET
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key、Value取值範圍為16位元組):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -d 16 -t get
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    16523907.660.4760.719
    128519363.590.4760.871
    256517027.440.4800.839
    1024487709.720.5090.879
    4096385728.060.6291.319
    說明
    • 讀命令不會受到主備同步和資料持久化的影響,CPU使用率較高。
    • 本次測試在開啟AOF落盤功能下進行,若關閉AOF落盤功能大約還可以提升10%的QPS效能。
  • SET
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key、Value取值範圍為16位元組):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -d 16 -t set
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    16260642.910.9561.871
    128244758.091.0352.015
    256235128.141.0722.119
    1024173761.951.4622.783
    409666198.863.85766.687
    說明 本次測試在Tair執行個體標準架構上進行,其預設最大頻寬為96 MB/s。大約在Value大小為480位元組、QPS為200000時,測試流量會達到Tair執行個體標準架構的頻寬上限,觸發Tair執行個體的流量控制機制。隨著Value的不斷增大,QPS會快速降低。在實際使用中,若您有更高頻寬需求,您可以選擇叢集架構或讀寫分離架構。
  • MSET
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key、Value取值範圍為16位元組):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -d 16 -t mset
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    1666533.603.6379.735
    12866533.603.75612.679
    25670439.073.61014.487
    102438634.906.49797.407
  • INCR
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -t incr
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    244758.091.0242.879

List資料結構

  • LPUSH
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key、Value取值範圍為16位元組):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -d 16 -t lpush
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    16133220.841.9113.943
    128137797.981.8463.831
    256130332.781.9564.087
    1024116400.882.1834.439
    409668101.343.7328.727
  • LPOP
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key、Value取值範圍為16位元組):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -d 16 -t lpop
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    16122354.092.0844.343
    128122324.162.0854.359
    256113079.532.2394.719
    102474447.233.4197.007
    409674449.073.4107.071
  • RPUSH
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key、Value取值範圍為16位元組):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -d 16 -t rpush
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    16119875.342.1294.583
    128116391.852.1874.631
    256105148.782.4095.095
    102482674.243.0736.023
    409669683.183.6566.271
  • RPOP
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key、Value取值範圍為16位元組):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -d 16 -t rpop
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    16110996.012.2814.919
    128101584.732.5005.287
    25692205.562.7645.783
    102476324.233.3396.759
    409679377.683.2076.267

Set資料結構

  • SADD
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -t sadd
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    111020.662.2864.927
  • SPOP
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -t spop
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    67315.893.7847.847

Zset資料結構

  • ZADD
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -t zadd
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    53490.244.7619.799
  • ZPOPMIN
    測試命令樣本如下(啟動16個線程、256個串連、3000000個Key):
    ./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -t zpopmin
    測試結果:
    Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
    114163.942.2274.871

Hash資料結構

HSET

測試命令樣本如下(啟動16個線程、256個串連、3000000個Key、Value取值範圍為16位元組):
./src/redis-benchmark -h r-bp1s02ae14mr****.redis.rds.aliyuncs.com -p 6379 -a testaccount:Rp829dlwa -n 3000000 -r 30000000 -c 256 --threads 16 -d 16 -t hset
測試結果:
Value長度(位元組)QPS(次/秒)Average Latency(毫秒)99th Percentile Latency(毫秒)
16108964.122.3275.103
128111012.432.2935.039
256108960.162.3365.103
1024103334.252.4665.143
409661469.114.1477.263

總結

Tair記憶體型基於自研的多線程架構,大幅提升了程式運行QPS,降低了延時,可滿足更高的效能需求,並且極大地豐富了業務的使用情境。