日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用非易失性存儲卷的直接內存訪問方式部署Redis數據庫

在ACK環境下,通過修改應用內存分配部分函數對PMEM(Persistent Memory)設備直接訪問,可以實現接近DRAM訪問的吞吐和時延。本文主要介紹如何在大容量內存場景下通過DRAM及PMEM方式部署內存數據庫Redis。

背景信息

在大容量內存場景下使用非易失性存儲卷的直接內存訪問(Direct Memory)方式部署內存數據庫Redis的優勢:

  • 聲明化非易失性存儲卷內存訪問,降低非易失性存儲卷的使用復雜度。

  • 同樣容量內存節省30%~50%的成本。

  • 最小化應用修改。

Redis以直接內存訪問方式使用非易失性存儲設備調用MMAP對PMEM的連續地址空間進行映射。此場景下需要使用特定的Redis版本,可參考本文示例獲取Redis鏡像。

通過DRAM部署Redis內存數據庫

內存(DRAM)可以提供優異的訪問性能,但掉電時數據容易丟失且價格昂貴,不益于大容量內存使用。

  1. 部署Redis服務。

    1. 使用以下示例模板創建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
    2. 執行以下命令部署Redis服務。

      kubectl apply -f redis-normal.yaml
  2. 執行以下命令查看Redis服務。

    kubectl get pod | grep redis-normal

    預期輸出:

    redis-normal-***         1/1     Running   0          4d8h
  3. 執行以下命令測試Redis寫性能。

    LD_PRELOAD=/usr/local/lib/libmemkind.so redis-benchmark -d 102400 -t set -n 1000000 -r 1000000

    預期輸出:

    1000000 requests completed in 13.03 seconds
    76751.86 requests per second

    從以上預期輸出可以得出:通過DRAM部署的Redis內存數據庫,每秒大約處理76751個請求。

通過PMEM部署Redis內存數據庫

持久化內存PMEM既兼顧非易失性存儲,又接近DRAM的使用方式和速度。

  1. 執行以下命令部署Redis內存數據庫。

    kubectl apply -f redis-normal.yaml

    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
  2. 執行以下命令查看部署的Redis。

    kubectl get pod | grep redis-pmem-direct

    預期輸出:

    redis-pmem-direct-5b469546db-5tk2j   1/1     Running   0          4d9h
  3. 執行以下命令測試Redis寫性能。

    LD_PRELOAD=/usr/local/lib/libmemkind.so redis-benchmark -d 10240 -t set -n 1000000 -r 1000000

    預期輸出:

    1000000 requests completed in 19.89 seconds
    50266.41 requests per second

    從以上預期輸出可以得出:通過PMEM部署的Redis內存數據庫,每秒大約處理50266個請求。

    相比DRAM部署Redis內存數據庫的寫性能,PMEM部署的Redis內存數據庫的寫性能降低僅約34%,讀性能不受影響,但成本下降50%。同時使用非易失性存儲卷對機型ecs.ebmre6p.26xlarge 1.5TB的PMEM內存空間,相比于普通內存數據庫容量提升了4倍。