Di Container Service for Kubernetes (ACK), akses langsung ke perangkat memori persisten (PMEM) memungkinkan throughput tinggi dan latensi rendah. Topik ini menjelaskan cara menggunakan dynamic random-access memory (DRAM) dan PMEM untuk menyebarkan instance Redis berbasis memori dengan kapasitas besar.
Informasi latar belakang
Untuk menyebarkan instance Redis berbasis memori dengan kapasitas besar, Anda dapat memasang volume NVM (non-volatile memory) sebagai memori langsung. Solusi ini menawarkan manfaat berikut:
Volume NVM diakses secara deklaratif, sehingga mempermudah penggunaan sumber daya NVM.
Dengan kapasitas memori yang sama, biaya dapat dikurangi hingga 30%–50%.
Modifikasi aplikasi diminimalkan.
Redis menggunakan perangkat NVM sebagai memori langsung dan memanggil fungsi MMAP untuk memetakan ruang alamat berturut-turut dari PMEM. Dalam hal ini, versi Redis tertentu diperlukan. Contoh berikut menunjukkan cara menanyakan gambar instance Redis.
Gunakan DRAM untuk menyebarkan instance Redis berbasis memori
DRAM memberikan kinerja akses berkecepatan tinggi tetapi kehilangan data saat daya dimatikan. Oleh karena itu, DRAM tidak cocok untuk skenario berskala besar karena biayanya yang tinggi.
Ikuti langkah-langkah berikut untuk menyebarkan instance Redis:
Gunakan template contoh berikut untuk membuat file 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: 30GiJalankan perintah berikut untuk menyebarkan instance Redis:
kubectl apply -f redis-normal.yaml
Jalankan perintah berikut untuk menanyakan pod yang menjalankan instance Redis:
kubectl get pod | grep redis-normalKeluaran yang Diharapkan:
redis-normal-*** 1/1 Running 0 4d8hJalankan perintah berikut untuk menguji kinerja penulisan instance Redis:
LD_PRELOAD=/usr/local/lib/libmemkind.so redis-benchmark -d 102400 -t set -n 1000000 -r 1000000Keluaran yang Diharapkan:
1000000 permintaan selesai dalam 13.03 detik 76751.86 permintaan per detikKeluaran di atas menunjukkan bahwa instance Redis berbasis memori yang disebarkan dengan DRAM dapat memproses sekitar 76.751 permintaan per detik.
Gunakan PMEM untuk menyebarkan instance Redis berbasis memori
PMEM menyediakan penyimpanan non-volatile dan memiliki metode akses serta kecepatan yang mirip dengan DRAM.
Jalankan perintah berikut untuk menyebarkan instance Redis berbasis memori:
kubectl apply -f redis-normal.yamlTemplate berikut memberikan contoh file 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-directJalankan perintah berikut untuk menanyakan pod yang menjalankan instance Redis:
kubectl get pod | grep redis-pmem-directKeluaran yang Diharapkan:
redis-pmem-direct-5b469546db-5tk2j 1/1 Running 0 4d9hJalankan perintah berikut untuk menguji kinerja penulisan instance Redis:
LD_PRELOAD=/usr/local/lib/libmemkind.so redis-benchmark -d 10240 -t set -n 1000000 -r 1000000Keluaran yang Diharapkan:
1000000 permintaan selesai dalam 19.89 detik 50266.41 permintaan per detikKeluaran di atas menunjukkan bahwa instance Redis berbasis memori yang disebarkan dengan PMEM dapat memproses sekitar 50.266 permintaan per detik.
Dibandingkan dengan instance Redis berbasis memori yang disebarkan dengan DRAM, instance Redis berbasis memori yang disebarkan dengan PMEM mengurangi kinerja penulisan sebesar 34%, tetapi menawarkan kinerja baca yang sama serta penghematan biaya hingga 50%. Tipe instance Elastic Compute Service (ECS) dengan perangkat NVM, seperti ecs.ebmre6p.26xlarge, menawarkan 1,5 TB memori MEM, yang lima kali lipat kapasitas database berbasis memori umum.