Condividi tramite


Configurare il comportamento del buffer dei messaggi basato su disco

Importante

Per questa impostazione è necessario modificare la risorsa Broker. Viene configurato solo durante la distribuzione iniziale usando l'interfaccia della riga di comando di Azure o il portale di Azure. Se sono necessarie modifiche alla configurazione di Broker, è necessaria una nuova distribuzione. Per altre informazioni, vedere Personalizzare Broker predefinito.

La funzionalità buffer dei messaggi supportata dal disco viene usata per una gestione efficiente delle code di messaggi all'interno del broker MQTT distribuito. I vantaggi includono:

  • Gestione efficiente delle code: in un broker MQTT ogni sottoscrittore è associato a una coda di messaggi. La velocità di elaborazione dei messaggi di un sottoscrittore influisce direttamente sulle dimensioni della coda. Se un sottoscrittore elabora i messaggi lentamente o se si disconnette ma richiede una sessione permanente MQTT, la coda può aumentare di dimensioni superiori alla memoria disponibile.
  • Conservazione dei dati per sessioni persistenti: la funzionalità buffer di messaggi con backup su disco garantisce che quando una coda supera la memoria disponibile, viene memorizzata facilmente nel buffer su disco. Questa funzionalità impedisce la perdita di dati e supporta sessioni permanenti MQTT, consentendo ai sottoscrittori di riprendere le sessioni con le code di messaggi intatte quando si riconnette. Il disco viene usato come risorsa di archiviazione temporanea e funge da spillover dalla memoria. I dati scritti su disco non sono durevoli e si perdono quando il pod viene chiuso. Se almeno un pod in ogni catena back-end rimane funzionale, il broker nel suo complesso non perde alcun dato.
  • Gestione dei problemi di connettività: i connettori cloud vengono considerati sottoscrittori con sessioni persistenti che possono affrontare problemi di connettività quando non riescono a comunicare con sistemi esterni come un broker MQTT Griglia di eventi di Azure a causa della disconnessione di rete. In questi scenari, i messaggi (PUBLISHes) si accumulano. Il broker MQTT memorizza in modo intelligente questi messaggi in memoria o su disco fino a quando non viene ripristinata la connettività, garantendo l'integrità dei messaggi.

Per impostazione predefinita, la funzionalità buffer dei messaggi supportata dal disco è disabilitata. In questo caso, i messaggi rimangono in memoria e la pressione di backup viene applicata ai client quando il pool di lettura o il pool di scratch raggiunge il limite definito dal limite di coda del sottoscrittore.

La configurazione del buffer di messaggi supportato dal disco è essenziale per mantenere un sistema di accodamento messaggi affidabile e affidabile, soprattutto negli scenari in cui la velocità di elaborazione dei messaggi e la connettività sono fondamentali.

Nota

Il broker MQTT scrive i dati sul disco esattamente come ricevuto dai client, senza aggiungere la crittografia. La protezione del disco è essenziale per proteggere i dati archiviati dal broker.

Opzioni di configurazione

Per configurare il buffer dei messaggi basato su disco, modificare la diskBackedMessageBuffer sezione nella risorsa Broker. Attualmente, questa configurazione è supportata solo usando il --broker-config-file flag quando si distribuiscono le operazioni di Azure IoT usando il az iot ops create comando .

Per iniziare, preparare un file di configurazione broker seguendo le informazioni di riferimento sull'API DiskBackedMessageBuffer .

Ad esempio, la configurazione più semplice prevede solo la specifica delle dimensioni massime. In questo caso, viene montato un emptyDir volume . Il maxSize valore viene utilizzato come limite di dimensioni del emptyDir volume. Questa opzione è tuttavia l'opzione meno preferita a causa delle limitazioni del emptyDir volume.

{
  "diskBackedMessageBuffer": {
    "maxSize": "<SIZE>"
  }
}

Per ottenere una configurazione migliore del buffer di messaggi basato su disco, specificare un volume temporaneo o un'attestazione di volume permanente per montare un volume di archiviazione dedicato per il buffer dei messaggi. Ad esempio:

{
  "diskBackedMessageBuffer": {
    "maxSize": "<SIZE>",
    "ephemeralVolumeClaimSpec": {
      "storageClassName": "<NAME>",
      "accessModes": [
        "<MODE>"
      ]
    }
  }
}
{
  "persistentVolumeClaimSpec": {
    "maxSize": "<SIZE>",
    "ephemeralVolumeClaimSpec": {
      "storageClassName": "<NAME>",
      "accessModes": [
        "<MODE>"
      ]
    }
  }
}

Personalizzare le opzioni del buffer dei messaggi broker modificando le impostazioni seguenti:

  • Configurare il volume: specificare un modello di attestazione di volume per montare un volume di archiviazione dedicato per il buffer dei messaggi.
  • Selezionare una classe di archiviazione: definire la classe di archiviazione desiderata usando la storageClassName proprietà .
  • Definire le modalità di accesso: determinare le modalità di accesso necessarie per il volume. Per altre informazioni, vedere Modalità di accesso al volume persistente.

Usare le sezioni seguenti per comprendere le diverse modalità di volume:

I volumi permanenti e temporanei sono in genere forniti dalle stesse classi di archiviazione. Se sono disponibili entrambe le opzioni, scegliere effimero. I volumi temporanei richiedono Kubernetes 1.23 o versione successiva.

Suggerimento

Quando si specifica un modello EVC (EVC) o Un'attestazione di volume permanente (PVC), è possibile usare una classe di archiviazione di propria scelta, che aumenta la flessibilità per alcuni scenari di distribuzione. Ad esempio, i volumi persistenti di cui è stato effettuato il provisioning usando un modello DI PVC vengono visualizzati in comandi come kubectl get pv, che è utile per controllare lo stato del cluster.

Se i nodi Kubernetes non dispongono di spazio su disco locale sufficiente per il buffer dei messaggi, usare una classe di archiviazione che fornisce archiviazione di rete come Archiviazione BLOB di Azure. È preferibile usare un disco locale con un valore inferiore maxSize perché il buffer dei messaggi trae vantaggio dall'accesso rapido e non richiede durabilità.

Distribuire operazioni IoT con buffer di messaggi basato su disco

Per usare un buffer di messaggi basato su disco, distribuire operazioni IoT usando il az iot ops create comando con il --broker-config-file flag . Vedere il comando seguente. Altri parametri vengono omessi per brevità.

az iot ops create ... --broker-config-file <FILE>.json

Questa impostazione non può essere modificata dopo la distribuzione. Per modificare la configurazione del buffer dei messaggi su disco, ridistribuire l'istanza di operazioni IoT.

Volume temporaneo

Il volume temporaneo è l'opzione preferita per il buffer dei messaggi.

Per il volume temporaneo, seguire i consigli nella sezione Considerazioni per i provider di archiviazione.

Il valore della ephemeralVolumeClaimSpec proprietà viene utilizzato come ephemeral.volumeClaimTemplate.spec proprietà del volume nelle StatefulSet specifiche delle catene back-end.

Ad esempio, per usare un volume temporaneo con una capacità di 1 gigabyte, specificare i parametri seguenti nella risorsa broker:

{
  "diskBackedMessageBuffer": {
    "maxSize": "1G",
    "ephemeralVolumeClaimSpec": {
      "storageClassName": "foo",
      "accessModes": [
        "ReadWriteOnce"
      ]
    }
  }
}

Volume permanente

Il volume permanente è l'opzione preferita successiva per il buffer dei messaggi dopo il volume temporaneo.

Per un volume permanente, seguire i consigli nella sezione Considerazioni per i provider di archiviazione.

Il valore della persistentVolumeClaimSpec proprietà viene utilizzato come volumeClaimTemplates.spec proprietà delle StatefulSet specifiche delle catene back-end.

Ad esempio, per usare un volume permanente con una capacità di 1 gigabyte, specificare i parametri seguenti nella risorsa broker:

{
  "diskBackedMessageBuffer": {
    "maxSize": "1G",
    "persistentVolumeClaimSpec": {
      "storageClassName": "foo",
      "accessModes": [
        "ReadWriteOnce"
      ]
    }
  }
}

Volume emptyDir

Un volume emptyDir è l'opzione meno preferita dopo il volume permanente.

Usare un emptyDir volume solo quando si usa un cluster con quote di file system. Per altre informazioni, vedere la scheda Quota del progetto file system. Se la funzionalità non è abilitata, il cluster esegue l'analisi periodica che non applica alcun limite e consente al nodo host di riempire lo spazio su disco e contrassegnare l'intero nodo host come non integro.

Ad esempio, per usare un emptyDir volume con una capacità di 1 gigabyte, specificare i parametri seguenti nella risorsa broker:

{
  "diskBackedMessageBuffer": {
    "maxSize": "1G"
  }
}

Considerazioni per i provider di archiviazione

Si consideri il comportamento del provider di archiviazione scelto, ad esempio quando si usano provider come rancher.io/local-path. Se il provider non supporta i limiti, il riempimento del volume utilizza lo spazio su disco del nodo. Questo comportamento potrebbe portare a Kubernetes contrassegnando il nodo e tutti i pod associati come non integri. È fondamentale comprendere il comportamento del provider di archiviazione in tali scenari.

Disabilitata

Se non si vuole usare il buffer dei messaggi basato su disco, non includere la diskBackedMessageBufferSettings proprietà nella risorsa broker. Questo comportamento è anche l'impostazione predefinita.

Persistenza

È importante comprendere che la funzionalità buffer dei messaggi basata su disco non è sinonimo di persistenza. In questo contesto, salvataggio permanente si riferisce ai dati che sopravvivono tra i riavvii dei pod. Questa funzionalità fornisce spazio di archiviazione temporaneo per i dati da salvare su disco, che impedisce gli overflow di memoria e la perdita di dati durante i riavvii dei pod.