Status persistensi di Linux

Topik dan langganan yang dibuat dalam modul Event Grid disimpan dalam sistem file kontainer secara default. Tanpa persistensi, jika modul diterapkan ulang, semua metadata yang dibuat akan hilang. Untuk mempertahankan data di seluruh penerapan dan mulai ulang, Anda harus mempertahankan data di luar sistem file kontainer.

Secara default, hanya metadata yang dipertahankan dan peristiwa masih disimpan dalam memori untuk peningkatan performa. Ikuti bagian peristiwa persistensi untuk mengaktifkan persistensi peristiwa juga.

Artikel ini menyediakan langkah-langkah untuk menerapkan modul Event Grid dengan persistensi dalam penerapan Linux.

Catatan

Modul Event Grid berjalan sebagai pengguna dengan hak istimewa rendah dengan 2000 UID dan eventgriduser nama.

Persistensi melalui pemasangan volume

Volume docker digunakan untuk mempertahankan data di seluruh penerapan. Anda dapat membiarkan docker secara otomatis membuat volume bernama sebagai bagian dari penerapan modul Event Grid. Opsi ini adalah opsi paling sederhana. Anda dapat menentukan nama volume yang akan dibuat di bagian Ikatan sebagai berikut:

  {
     "HostConfig": {
          "Binds": [
                 "<your-volume-name-here>:/app/metadataDb"
           ]
      }
   }

Penting

Jangan mengubah bagian kedua pada nilai ikatan. Bagian ini menunjuk ke lokasi tertentu dalam modul. Untuk modul Event Grid di Linux, lokasi ini harus /app/metadataDb.

Misalnya, konfigurasi berikut akan menghasilkan pembuatan volume egmetadataDbVol tempat metadata akan dipertahankan.

 {
  "Env": [
    "inbound__serverAuth__tlsPolicy=strict",
    "inbound__serverAuth__serverCert__source=IoTEdge",
    "inbound__clientAuth__sasKeys__enabled=false",
    "inbound__clientAuth__clientCert__enabled=true",
    "inbound__clientAuth__clientCert__source=IoTEdge",
    "inbound__clientAuth__clientCert__allowUnknownCA=true",
    "outbound__clientAuth__clientCert__enabled=true",
    "outbound__clientAuth__clientCert__source=IoTEdge",
    "outbound__webhook__httpsOnly=true",
    "outbound__webhook__skipServerCertValidation=false",
    "outbound__webhook__allowUnknownCA=true"
  ],
  "HostConfig": {
    "Binds": [
      "egmetadataDbVol:/app/metadataDb",
      "egdataDbVol:/app/eventsDb"
    ],
    "PortBindings": {
      "4438/tcp": [
        {
          "HostPort": "4438"
        }
      ]
    }
  }
}

Alih-alih memasang volume, Anda dapat membuat direktori pada sistem host dan memasang direktori tersebut.

Persistensi melalui pemasangan direktori host

Selain volume docker, Anda juga memiliki opsi untuk memasang folder host.

  1. Pertama-tama buat pengguna dengan nama eventgriduser dan ID 2000 pada komputer host dengan menjalankan perintah berikut:

    sudo useradd -u 2000 eventgriduser
    
  2. Buat direktori pada sistem file host dengan menjalankan perintah berikut.

    md <your-directory-name-here>
    

    Misalnya, menjalankan perintah berikut ini akan membuat direktori yang disebut myhostdir.

    md /myhostdir
    
  3. Selanjutnya, jadikan eventgriduser pemilik folder ini dengan menjalankan perintah berikut.

    sudo chown eventgriduser:eventgriduser -hR <your-directory-name-here>
    

    Misalnya,

    sudo chown eventgriduser:eventgriduser -hR /myhostdir
    
  4. Gunakan Ikatan untuk memasang direktori Anda dan menerapkan ulang modul Event Grid dari portal Microsoft Azure.

    {
         "HostConfig": {
            "Binds": [
                "<your-directory-name-here>:/app/metadataDb",
                "<your-directory-name-here>:/app/eventsDb",
             ]
         }
    }
    

    Misalnya,

    {
          "Env": [
            "inbound__serverAuth__tlsPolicy=strict",
            "inbound__serverAuth__serverCert__source=IoTEdge",
            "inbound__clientAuth__sasKeys__enabled=false",
            "inbound__clientAuth__clientCert__enabled=true",
            "inbound__clientAuth__clientCert__source=IoTEdge",
            "inbound__clientAuth__clientCert__allowUnknownCA=true",
            "outbound__clientAuth__clientCert__enabled=true",
            "outbound__clientAuth__clientCert__source=IoTEdge",
            "outbound__webhook__httpsOnly=true",
            "outbound__webhook__skipServerCertValidation=false",
            "outbound__webhook__allowUnknownCA=true"
          ],
          "HostConfig": {
                "Binds": [
                  "/myhostdir:/app/metadataDb",
                  "/myhostdir2:/app/eventsDb"
                ],
                "PortBindings": {
                      "4438/tcp": [
                        {
                          "HostPort": "4438"
                        }
                      ]
                }
          }
    }
    

    Penting

    Jangan mengubah bagian kedua pada nilai ikatan. Bagian ini menunjuk ke lokasi tertentu dalam modul. Untuk modul Event Grid di linux, lokasi ini harus /app/metadataDb dan /app/eventsDb

Mempertahankan peristiwa

Untuk mengaktifkan persistensi peristiwa, Anda harus terlebih dahulu mengaktifkan persistensi metadata baik melalui pemasangan volume atau pemasangan direktori host menggunakan bagian di atas.

Hal-hal penting yang perlu diperhatikan tentang peristiwa yang dipertahankan:

  • Peristiwa yang dipertahankan diaktifkan berdasarkan per Langganan Peristiwa dan disetujui setelah volume atau direktori dipasang.
  • Persistensi peristiwa dikonfigurasi pada Langganan Peristiwa pada waktu pembuatan dan tidak dapat dimodifikasi setelah Langganan Peristiwa dibuat. Untuk beralih persistensi peristiwa, Anda harus menghapus dan membuat ulang Langganan Peristiwa.
  • Peristiwa yang dipertahankan hampir selalu lebih lambat daripada dalam operasi memori, namun perbedaan kecepatan sangat bergantung pada karakteristik drive. Tradeoff antara kecepatan dan keandalan melekat pada semua sistem olahpesan, tetapi hanya dapat dilihat dalam skala besar.

Untuk mengaktifkan persistensi peristiwa pada Langganan Peristiwa, atur persistencePolicy ke true:

       {
         "properties": {
           "persistencePolicy": {
             "isPersisted": "true"
           },
           "destination": {
             "endpointType": "WebHook",
             "properties": {
               "endpointUrl": "<your-webhook-url>"
             }
           }
         }
       }