Este whitepaper apresenta benchmarks de throughput máximo e latência para instâncias com memória otimizada do Tair e Redis Open-Source Edition, além do ambiente de teste, da ferramenta e dos comandos necessários para reproduzir os resultados.
Resultados dos testes
Esses números refletem o desempenho máximo em novas instâncias sob testes de comando único, com média calculada em várias execuções e zonas. Uma margem de erro de aproximadamente 10% é normal. Não execute instâncias com carga máxima em produção. Para um dimensionamento preciso, execute testes com sua própria carga de trabalho.
A tabela a seguir mostra as medições de QPS e latência para onze comandos comuns do Redis.
|
Comando |
QPS do Tair |
Latência média do Tair (ms) |
Percentil 99 do Tair (ms) |
QPS do Redis |
Latência média do Redis (ms) |
Percentil 99 do Redis (ms) |
|
SET |
282.656 |
0,45 |
0,86 |
142.376 |
0,45 |
0,72 |
|
GET |
519.761 |
0,24 |
0,36 |
204.690 |
0,31 |
0,47 |
|
ZADD |
208.169 |
0,62 |
1,14 |
113.135 |
0,57 |
0,78 |
|
ZSCORE |
463.904 |
0,27 |
0,40 |
170.163 |
0,37 |
0,54 |
|
HSET |
260.069 |
0,49 |
1,03 |
124.613 |
0,51 |
0,97 |
|
HGET |
494.603 |
0,25 |
0,37 |
188.903 |
0,34 |
0,52 |
|
LPUSH |
286.324 |
0,44 |
0,84 |
153.269 |
0,42 |
0,59 |
|
LINDEX |
414.070 |
0,30 |
0,45 |
157.568 |
0,40 |
0,58 |
|
SADD |
292.738 |
0,44 |
0,86 |
140.155 |
0,45 |
0,63 |
|
SISMEMBER |
531.139 |
0,24 |
0,34 |
181.492 |
0,35 |
0,52 |
|
EVALSHA |
214.303 |
0,60 |
1,12 |
101.136 |
0,63 |
0,91 |
Definições das métricas:
QPS (Consultas por segundo): Número de operações de leitura e gravação processadas por segundo.
Latência média: Média da latência das operações, em milissegundos (ms).
Latência do percentil 99: Latência máxima para 99% das operações, em ms. Por exemplo, 0,5 ms significa que 99% das solicitações são concluídas em até 0,5 ms.
A latência é medida de ponta a ponta, incluindo o tempo de fila tanto no banco de dados quanto no cliente de teste de estresse.
Dimensionamento de desempenho para outras arquiteturas
A tabela acima abrange a arquitetura padrão (réplica dupla). Para outras arquiteturas, dimensione a partir da linha de base padrão usando as regras a seguir, onde n é o número de shards em uma arquitetura cluster ou o número total de nós em uma arquitetura de divisão de leitura/gravação:
|
Arquitetura |
Regra de dimensionamento de QPS |
|
Cluster (modo proxy) |
>= n x QPS da arquitetura padrão (com chaves distribuídas uniformemente) |
|
Cluster (modo de conexão direta) |
= n x QPS da arquitetura padrão (com chaves distribuídas uniformemente) |
|
Divisão de leitura/gravação |
Gravação: ligeiramente abaixo do padrão devido ao maior tráfego de replicação; Leitura: >= n x QPS da arquitetura padrão |
|
Comando |
Tair com memória otimizada |
Redis Open-Source Edition |
||||
|
QPS |
Latência média |
Latência do percentil 99 |
QPS |
Latência média |
Latência do percentil 99 |
|
|
SET |
282.656 |
0,45 |
0,86 |
142.376 |
0,45 |
0,72 |
|
GET |
519.761 |
0,24 |
0,36 |
204.690 |
0,31 |
0,47 |
|
ZADD |
208.169 |
0,62 |
1,14 |
113.135 |
0,57 |
0,78 |
|
ZSCORE |
463.904 |
0,27 |
0,40 |
170.163 |
0,37 |
0,54 |
|
HSET |
260.069 |
0,49 |
1,03 |
124.613 |
0,51 |
0,97 |
|
HGET |
494.603 |
0,25 |
0,37 |
188.903 |
0,34 |
0,52 |
|
LPUSH |
286.324 |
0,44 |
0,84 |
153.269 |
0,42 |
0,59 |
|
LINDEX |
414.070 |
0,30 |
0,45 |
157.568 |
0,40 |
0,58 |
|
SADD |
292.738 |
0,44 |
0,86 |
140.155 |
0,45 |
0,63 |
|
SISMEMBER |
531.139 |
0,24 |
0,34 |
181.492 |
0,35 |
0,52 |
|
EVALSHA |
214.303 |
0,60 |
1,12 |
101.136 |
0,63 |
0,91 |
Ambiente de teste
Banco de dados
|
Parâmetro |
Valor |
|
Regiões e zonas |
China (Beijing) Zone L, China (Hangzhou) Zone K, China (Shanghai) Zone N, China (Shenzhen) Zone C |
|
Arquitetura da instância |
Arquitetura padrão (réplica dupla); cluster não ativado |
|
Versão da instância |
Redis 7.0 |
|
Tipos de instância |
Tair com memória otimizada 8 GB ( |
A versão tem pouco impacto nos resultados dos testes.
Para obter mais informações, consulte Arquitetura padrão e Tipos de instância e FAQ.
Cliente de teste
|
Parâmetro |
Valor |
|
Tipo de instância |
Elastic Compute Service (ECS) |
|
Região e zona |
Mesma da instância de banco de dados |
|
Sistema operacional |
Alibaba Cloud Linux 3 |
|
Rede |
Mesma virtual private cloud (VPC) da instância Tair |
Ferramenta de teste
Todos os testes utilizam o resp-benchmark, uma ferramenta open-source da equipe Tair.
Para comandos comuns (SET, GET), o comportamento é consistente com o redis-benchmark.
Para comandos complexos, utiliza um modo de teste que simula melhor as cargas de trabalho reais.
O modo multithread é ativado por padrão para maximizar a pressão de solicitações no servidor e evitar que o cliente se torne um gargalo.
Instale o resp-benchmark:
pip install resp-benchmark==0.1.7
Após a instalação, execute resp-benchmark --help para ver a lista completa de opções de configuração.
Se você usar o redis-benchmark, utilize o Redis 7.0 ou posterior para suporte multithread otimizado.
Executar os testes
Antes de começar
Limpe o banco de dados antes de cada teste para evitar interferências de dados existentes.
Ajustar a contagem de conexões
A contagem de conexões (-c) afeta diretamente seus resultados:
Poucas conexões: Carga insuficiente no servidor, resultando em baixo QPS que não reflete a capacidade máxima.
Muitas conexões: A capacidade de processamento do servidor é excedida, fazendo com que pacotes de dados enfileirem no link de rede e aumentando a latência.
Comece com -c 128 e ajuste com base nos seus resultados. Valores comuns são 32, 64, 128, 192 e 256. Se você omitir -c, o resp-benchmark selecionará um valor automaticamente.
Comandos de teste
SET
Testa o desempenho do comando SET. Intervalo de chaves: 0–10.000.000. Tamanho do valor: 64 bytes. Duração do teste: 20 segundos.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SET {key uniform 10000000} {value 64}"
GET
Testa o desempenho do comando GET. Tamanho do valor: 64 bytes. Duração do teste: 20 segundos.
-
Carregue os dados de teste. Intervalo de chaves: 0–10.000.000.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10000000 "SET {key sequence 10000000} {value 64}" -
Execute o teste GET.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "GET {key uniform 10000000}"
ZADD
Testa o desempenho de gravação do comando ZADD. Intervalo de chaves: 0–1.000. Intervalo de pontuação: 0–70.000. Máximo de 10.000 membros por chave. Duração do teste: 20 segundos.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "ZADD {key uniform 1000} {rand 70000} {key uniform 10000}"
ZSCORE
Testa o desempenho do comando ZSCORE. Duração do teste: 20 segundos.
-
Carregue os dados de teste. Intervalo de chaves: 0–1.000. 10.007 membros por chave.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10007000 "ZADD {key sequence 1000} {rand 70000} {key sequence 10007}" -
Execute o teste ZSCORE.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "ZSCORE {key uniform 1000} {key uniform 10007}"
HSET
Testa o desempenho do comando HSET. Intervalo de chaves: 0–1.000. Intervalo de campos: 0–10.000. Tamanho do valor: 64 bytes. Duração do teste: 20 segundos.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "HSET {key uniform 1000} {key uniform 10000} {value 64}"
HGET
Testa o desempenho do comando HGET. Duração do teste: 20 segundos.
-
Carregue os dados de teste. Intervalo de chaves: 0–1.000. 10.007 campos por chave. Tamanho do valor: 64 bytes.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10007000 "HSET {key sequence 1000} {key sequence 10007} {value 64}" -
Execute o teste HGET.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "HGET {key uniform 1000} {key uniform 10007}"
LPUSH
Testa o desempenho do comando LPUSH. Intervalo de chaves: 0–1.000. Tamanho do valor: 64 bytes. Duração do teste: 20 segundos.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "LPUSH {key uniform 1000} {value 64}"
LINDEX
Testa o desempenho do comando LINDEX. Duração do teste: 20 segundos.
-
Carregue os dados de teste. Intervalo de chaves: 0–1.000. 10.000 elementos por chave. Tamanho do valor: 64 bytes.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10000000 "LPUSH {key sequence 1000} {value 64}" -
Execute o teste LINDEX.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "LINDEX {key uniform 1000} {rand 10000}"
SADD
Testa o desempenho do comando SADD. Intervalo de chaves: 0–1.000. Tamanho do valor: 64 bytes. Duração do teste: 20 segundos.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SADD {key uniform 1000} {value 64}"
SISMEMBER
Testa o desempenho do comando SISMEMBER. Duração do teste: 20 segundos.
-
Carregue os dados de teste. Intervalo de chaves: 0–1.000. 10.007 membros por chave. Tamanho do valor: 64 bytes.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 --load -c 256 -P 10 -n 10007000 "SADD {key sequence 1000} {key sequence 10007}" -
Execute o teste SISMEMBER.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "SISMEMBER {key uniform 1000} {key uniform 10007}"
EVALSHA
Testa o desempenho do SET executado via script Lua. Intervalo de chaves: 0–10.000.000. Tamanho do valor: 64 bytes. Duração do teste: 20 segundos.
-
Carregue o script Lua.
redis-cli -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 SCRIPT LOAD "return redis.call('SET', KEYS[1], ARGV[1])" -
Execute o teste EVALSHA usando o resumo SHA1 retornado na etapa anterior.
resp-benchmark -h r-bp1u****8qyvemv2em.redis.rds.aliyuncs.com -p 6379 -s 20 "EVALSHA d8f2fad9f8e86a53d2a6ebd960b33c4972cacc37 1 {key uniform 10000000} {value 64}"