No Container Service for Kubernetes (ACK), o acesso direto a dispositivos de memória persistente (PMEM) proporciona alto throughput e baixa latência. Este tópico descreve como usar memória dinâmica de acesso aleatório (DRAM) e PMEM para implantar instâncias Redis em memória que exigem grande capacidade.
Informações de fundo
Para implantar instâncias Redis em memória que exigem alta capacidade, monte volumes NVM (memória não volátil) como memória direta. Essa solução oferece os seguintes benefícios:
O acesso aos volumes NVM ocorre de forma declarativa, simplificando o uso desses recursos.
Redução de custos entre 30% e 50% mantendo a mesma capacidade de memória.
Minimização das alterações necessárias nas aplicações.
O Redis utiliza dispositivos NVM como memória direta e chama a função MMAP para mapear o espaço de endereçamento contíguo do PMEM. Nesse cenário, são obrigatórias versões específicas do Redis. Os exemplos a seguir demonstram como consultar as imagens das instâncias Redis.
Usar DRAM para implantar uma instância Redis em memória
A DRAM oferece desempenho de acesso de alta velocidade, mas perde dados ao perder energia. Devido ao custo elevado, esse tipo de memória não é adequado para cenários de grande escala.
-
Siga as etapas abaixo para implantar uma instância Redis:
-
Use o modelo de exemplo a seguir para crie um arquivo redis-normal.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: redis-normal labels: app: redis-normal spec: selector: matchLabels: app: redis-normal template: metadata: labels: app: redis-normal spec: containers: - name: redis image: registry.cn-hangzhou.aliyuncs.com/plugins/redis:v1-normal imagePullPolicy: Always resources: requests: memory: 30Gi limits: memory: 30Gi -
Execute o comando a seguir para implantar a instância Redis:
kubectl apply -f redis-normal.yaml
-
-
Execute o comando a seguir para consultar o pod que executa a instância Redis:
kubectl get pod | grep redis-normalSaída esperada:
redis-normal-*** 1/1 Running 0 4d8h -
Execute o comando a seguir para testar o desempenho de gravação da instância Redis:
LD_PRELOAD=/usr/local/lib/libmemkind.so redis-benchmark -d 102400 -t set -n 1000000 -r 1000000Saída esperada:
1000000 requests completed in 13.03 seconds 76751.86 requests per secondA saída anterior indica que a instância Redis em memória implantada com DRAM processa aproximadamente 76.751 solicitações por segundo.
Usar PMEM para implantar uma instância Redis em memória
O PMEM fornece armazenamento não volátil e assemelha-se à DRAM quanto ao método e à velocidade de acesso.
-
Execute o comando a seguir para implantar uma instância Redis em memória:
kubectl apply -f redis-normal.yamlO modelo a seguir apresenta um exemplo do arquivo redis-normal.yaml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pmem-pvc-direct spec: accessModes: - ReadWriteOnce resources: requests: storage: 60Gi storageClassName: csi-pmem-direct --- apiVersion: apps/v1 kind: Deployment metadata: name: redis-pmem-direct labels: app: redis-pmem-direct spec: selector: matchLabels: app: redis-pmem-direct template: metadata: labels: app: redis-pmem-direct spec: containers: - name: nginx image: registry.cn-hangzhou.aliyuncs.com/plugins/redis:v1-pmem imagePullPolicy: Always volumeMounts: - name: pmem-pvc mountPath: "/mnt/pmem" volumes: - name: pmem-pvc persistentVolumeClaim: claimName: pmem-pvc-direct -
Execute o comando a seguir para consultar o pod que executa a instância Redis:
kubectl get pod | grep redis-pmem-directSaída esperada:
redis-pmem-direct-5b469546db-5tk2j 1/1 Running 0 4d9h -
Execute o comando a seguir para testar o desempenho de gravação da instância Redis:
LD_PRELOAD=/usr/local/lib/libmemkind.so redis-benchmark -d 10240 -t set -n 1000000 -r 1000000Saída esperada:
1000000 requests completed in 19.89 seconds 50266.41 requests per secondA saída anterior demonstra que a instância Redis em memória implantada com PMEM processa cerca de 50.266 solicitações por segundo.
Em comparação com a instância Redis em memória baseada em DRAM, a versão com PMEM reduz o desempenho de gravação em 34%, mas mantém o mesmo desempenho de leitura e gera uma economia de custos de 50%. Tipos de instância Elastic Compute Service (ECS) equipados com dispositivos NVM, como ecs.ebmre6p.26xlarge, oferecem 1,5 TB de memória MEM — cinco vezes a capacidade dos bancos de dados em memória convencionais.