Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O buffer de mensagens baseado em disco é um recurso que permite que o broker MQTT grave em disco as filas de mensagens dos assinantes quando elas excedem a memória disponível. Decida antes da implantação se você precisa de buffer de mensagens com backup de disco para seu agente MQTT.
Importante
Essa configuração requer que você modifique o recurso do Agente. Ele é configurado somente na implantação inicial usando a CLI do Azure ou o portal do Azure. Uma nova implantação será necessária se as alterações de configuração do Agente forem necessárias. Para saber mais, confira Personalizar o Agente padrão.
O recurso de buffer de mensagens baseado em disco é usado para o gerenciamento eficiente de filas de mensagens no broker MQTT distribuído. Os benefícios incluem:
- Gerenciamento eficiente de filas: em um agente MQTT, cada assinante é associado a uma fila de mensagens. A velocidade de processamento de mensagens de um assinante afeta diretamente o tamanho da fila. Se um assinante processa mensagens lentamente ou se desconectam, mas solicitam uma sessão persistente de MQTT, a fila pode ficar maior do que a memória disponível.
- Preservação de dados para sessões persistentes: o recurso de buffer de mensagens com suporte em disco garante que, quando uma fila exceder a memória disponível, ela seja perfeitamente armazenada em buffer em disco. Esse recurso impede a perda de dados e dá suporte a sessões persistentes de MQTT, permitindo que os assinantes retomem suas sessões com suas filas de mensagens intactas quando se reconectam. O disco é usado como armazenamento efêmero e serve como extensão da memória. Os dados gravados no disco não são persistentes e são perdidos quando o pod é encerrado. Se pelo menos um pod em cada cadeia de backend permanecer funcional, o agente como um todo não perde nenhum dado.
- Lidar com desafios de conectividade: os conectores de nuvem são tratados como assinantes com sessões persistentes que podem enfrentar desafios de conectividade quando não conseguem se comunicar com sistemas externos como um Grade de Eventos do Azure agente MQTT devido à desconexão de rede. Nesses cenários, as mensagens (PUBLISHes) se acumulam. O agente MQTT armazena essas mensagens em buffer inteligente para memória ou disco até que a conectividade seja restaurada, o que garante a integridade da mensagem.
Por padrão, o recurso de buffer de mensagens com suporte em disco está desabilitado. Nesse caso, as mensagens permanecem na memória e a pressão de retorno é aplicada aos clientes à medida que o uso de memória atinge o limite definido pelo limite de fila do assinante.
Note
O agente do MQTT grava dados no disco exatamente como recebidos dos clientes, sem a adição de criptografia. Proteger o disco é essencial para proteger os dados que o broker armazena.
Configurar o buffer de mensagens com backup de disco
Para configurar o buffer de mensagens com backup de disco, edite a diskBackedMessageBuffer seção no recurso Broker. Atualmente, essa configuração só tem suporte usando o --broker-config-file sinalizador quando você implanta Operações do Azure IoT usando o az iot ops create comando. Para obter mais informações, consulte o suporte da CLI do Azure para a configuração avançada do agente MQTT.
Essa configuração não pode ser alterada após a implantação. Para alterar a configuração do buffer de mensagens com suporte em disco, reimplante a instância de Operações de IoT.
Para começar, prepare um arquivo de configuração do Broker seguindo a referência à API DiskBackedMessageBuffer .
Em seguida, implante operações de IoT com o --broker-config-file sinalizador (outros parâmetros omitidos para brevidade):
az iot ops create ... --broker-config-file <FILE>.json
Por exemplo, a configuração mais simples envolve especificar apenas o tamanho máximo. Neste caso, um volume emptyDir é montado. O maxSize valor é usado como o limite de tamanho do emptyDir volume. Mas essa opção é a opção menos preferencial devido às limitações do emptyDir volume.
{
"diskBackedMessageBuffer": {
"maxSize": "1G"
}
}
Para obter uma melhor configuração de buffer de mensagens com suporte em disco, especifique um volume efêmero ou uma declaração de volume persistente para montar um volume de armazenamento dedicado para o buffer de mensagens. Por exemplo:
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"ephemeralVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"persistentVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
Adapte as opções de buffer de mensagens do agente ajustando as seguintes configurações:
- Configure o volume: especifique um modelo de declaração de volume para montar um volume de armazenamento dedicado para o buffer de mensagens.
-
Selecione uma classe de armazenamento: defina a classe de armazenamento desejada usando a
storageClassNamepropriedade. - Definir modos de acesso: determine os modos de acesso necessários para seu volume. Para obter mais informações, consulte os modos de acesso ao volume persistente.
Volume efêmero
O volume efêmero é a opção preferencial para o buffer de mensagens.
Para volume efêmero, siga os conselhos na seção Considerações sobre provedores de armazenamento .
O valor da propriedade ephemeralVolumeClaimSpec é usado como a propriedade ephemeral.volumeClaimTemplate.spec do volume nas especificações StatefulSet das cadeias de back-end.
Por exemplo, para usar um volume efêmero com uma capacidade de 1 gigabyte, especifique os seguintes parâmetros em seu recurso do Broker:
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"ephemeralVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
Volume persistente
O volume persistente é a próxima opção preferencial para o buffer de mensagens após o volume efêmero.
Para volume persistente, siga os conselhos na seção Considerações para provedores de armazenamento .
O valor da propriedade persistentVolumeClaimSpec é usado como a propriedade volumeClaimTemplates.spec nas especificações StatefulSet das cadeias de back-end.
Por exemplo, para usar um volume persistente com capacidade de 1 gigabyte, especifique os seguintes parâmetros no recurso Broker:
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"persistentVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
Volume emptyDir
Um volume emptyDir é a opção menos preferida após o volume persistente.
Use um emptyDir volume somente quando estiver usando um cluster com cotas de sistema de arquivos. Para obter mais informações, consulte a guia Cota de projeto do Sistema de Arquivos. Se o recurso não estiver habilitado, o cluster fará uma verificação periódica que não impõe nenhum limite e permite que o nó do host preencha o espaço em disco e marque todo o nó do host como não íntegro.
Por exemplo, para usar um emptyDir volume com uma capacidade de 1 gigabyte, especifique os seguintes parâmetros em seu recurso do Broker:
{
"diskBackedMessageBuffer": {
"maxSize": "1G"
}
}
Considerações para provedores de armazenamento
Considere o comportamento do provedor de armazenamento escolhido, por exemplo, quando você usa provedores como rancher.io/local-path. Se o provedor não dá suporte a limites, o preenchimento do volume consumirá o espaço em disco do nó. Esse comportamento pode levar o Kubernetes a marcar o nó e todos os pods associados como não saudáveis. É crucial entender como seu provedor de armazenamento se comporta nesses cenários.
Dica
Ao especificar um modelo de EVC (Declaração de Volume Efêmero) ou PVC (Declaração de Volume Persistente), você pode usar uma classe de armazenamento de sua escolha, o que aumenta a flexibilidade para alguns cenários de implantação. Por exemplo, volumes persistentes provisionados usando um modelo de PVC aparecem em comandos como kubectl get pv, o que é útil para inspecionar o estado do cluster.
Se os nós do Kubernetes não tiverem espaço em disco local suficiente para o buffer de mensagens, use uma classe de armazenamento que forneça armazenamento de rede como Armazenamento de Blobs do Azure. É melhor usar um disco local com um valor menor maxSize porque o buffer de mensagem se beneficia do acesso rápido e não requer durabilidade.
Desactivado
Se você não quiser usar o buffer de mensagens baseado em disco, não inclua a propriedade diskBackedMessageBufferSettings no recurso Broker. Esse comportamento também é o padrão.
Buffer de disco versus persistência
O buffer de mensagens baseado em disco e a persistência do broker gravam dados em disco, mas têm finalidades diferentes:
| Característica | Buffer de mensagens com backup de disco | Persistência |
|---|---|---|
| Finalidade | Descarregar filas de assinantes da memória para o disco quando ficarem grandes demais | Preservar o estado crítico do agente (mensagens retidas, sessões, assinaturas) durante reinicializações de pods |
| Durability | Efêmero — os dados são perdidos quando o pod é encerrado | Durável – os dados sobrevivem às reinicializações do pod |
| Quando usar | Assinantes lentos, sessões persistentes offline, interrupções de conectividade com a nuvem | São necessárias mensagens retidas ou estado de sessão para sobreviver às reinicializações do agente |
| Escopo de dados | PUBLICAR mensagens em filas de assinantes | Mensagens retidas, metadados da fila do assinante, dados do repositório de estado |
| Configuration |
diskBackedMessageBuffer no recurso do Broker |
Configurações de persistência em implantação ou runtime |
Note
O buffer de disco e a persistência podem ser usados juntos. A persistência garante que o estado sobreviva às reinicializações, enquanto o buffer de disco impede condições de memória insuficiente durante a operação normal.