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 suportado por disco é uma funcionalidade que permite ao broker MQTT transferir as filas de mensagens dos assinantes para o disco quando estas excedem a memória disponível. Antes da implementação, decida se precisa de bufferização de mensagens com suporte em disco para o seu broker MQTT.
Importante
Essa configuração requer que você modifique o recurso Broker. 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 forem necessárias alterações na configuração do Broker. Para saber mais, consulte Personalizar o corretor padrão.
A funcionalidade de buffer de mensagens baseado em disco é utilizada para gerir eficientemente as filas de mensagens no broker MQTT distribuído. Os benefícios incluem:
- Gestão eficiente de filas: Num corretor MQTT, cada assinante está associado a uma fila de mensagens. A velocidade de processamento de mensagens de um assinante afeta diretamente o tamanho da fila. Se um subscritor processar mensagens lentamente ou se se desconectar mas solicitar uma sessão persistente MQTT, a fila pode crescer para além da memória disponível.
- Preservação de dados para sessões persistentes: A funcionalidade de buffer de mensagens apoiado em disco garante que, quando uma fila excede a memória disponível, é armazenada de forma fluida para o disco. Esta funcionalidade previne a perda de dados e suporta sessões persistentes MQTT, permitindo que os assinantes retomem as suas sessões com as filas de mensagens intactas quando se reconectam. O disco é usado como armazenamento efémero e serve de extensão à memória. Os dados escritos no disco não são duráveis e perdem-se quando o pod sai. Se pelo menos um pod em cada cadeia de backend continuar funcional, o broker como um todo não perde nenhuns dados.
- Gestão de desafios de conectividade: Os conectores cloud são tratados como assinantes com sessões persistentes que podem enfrentar desafios de conectividade quando não conseguem comunicar com sistemas externos, como um corretor Azure Event Grid MQTT, devido a desconexões de rede. Nesses cenários, as mensagens (PUBLISHes) acumulam-se. O corretor MQTT armazena inteligentemente estas mensagens em buffer para a memória ou disco até que a conectividade seja restabelecida, o que garante a integridade da mensagem.
Por predefinição, a funcionalidade de buffer de mensagens baseado em disco está desativada. Neste caso, as mensagens permanecem na memória e a pressão de retrocesso é aplicada aos clientes à medida que o uso de memória atinge o limite definido pelo limite da fila de assinantes.
Note
O corretor MQTT escreve os dados no disco exatamente como recebidos dos clientes, sem encriptação adicional. Proteger o disco é essencial para proteger os dados que o corretor armazena.
Configurar o buffer de mensagens apoiado em disco
Para configurar o buffer de mensagens apoiado em disco, edite a diskBackedMessageBuffer secção no recurso Broker. Atualmente, esta configuração é suportada apenas usando a flag --broker-config-file quando se implementa Operações IoT do Azure usando o comando az iot ops create. Para mais informações, consulte o suporte da CLI Azure para configuração avançada de corretores MQTT.
Esta definição não pode ser alterada após a implementação. Para alterar a configuração do buffer de mensagens em disco, reimplante a instância IoT Operations.
Para começar, prepare um ficheiro de configuração Broker seguindo a referência da API DiskBackedMessageBuffer .
Depois, implemente o IoT Operations com o --broker-config-file flag (outros parâmetros omitidos para brevidade):
az iot ops create ... --broker-config-file <FILE>.json
Por exemplo, a configuração mais simples envolve apenas especificar o tamanho máximo. Neste caso, um emptyDir volume é montado. O maxSize valor é usado como limite de tamanho do emptyDir volume. Mas esta opção é a menos preferida devido às limitações do emptyDir volume.
{
"diskBackedMessageBuffer": {
"maxSize": "1G"
}
}
Para obter uma melhor configuração do buffer de mensagens apoiado em disco, especifique uma reivindicação de volume efémero ou de volume persistente para montar um volume de armazenamento dedicado para o seu 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 corretor ajustando as seguintes definições:
- Configure o volume: Especifique um modelo de reclamação de volume para montar um volume de armazenamento dedicado para o seu buffer de mensagens.
-
Selecione uma classe de armazenamento: Defina a classe de armazenamento desejada usando a
storageClassNamepropriedade. - Defina modos de acesso: Determine os modos de acesso de que precisa para o seu volume. Para mais informações, veja Modos de acesso a volumes persistentes.
Volume temporário
O volume efémero é a opção preferida para o teu buffer de mensagens.
Para volume efémero, siga os conselhos na secção Considerações para fornecedores de armazenamento .
O valor da propriedade ephemeralVolumeClaimSpec é usado como a propriedade ephemeral.volumeClaimTemplate.spec do volume nas especificações StatefulSet das cadeias de backend.
Por exemplo, para usar um volume efémero com capacidade de 1 gigabyte, especifique os seguintes parâmetros no seu recurso Broker:
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"ephemeralVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
Volume persistente
O volume persistente é a opção preferida seguinte para o teu buffer de mensagens, depois do volume efémero.
Para volume persistente, siga os conselhos na secção Considerações para fornecedores de armazenamento .
O valor da propriedade persistentVolumeClaimSpec é usado como propriedade volumeClaimTemplates.spec das especificações StatefulSet das cadeias de backend.
Por exemplo, para usar um volume persistente com capacidade de 1 gigabyte, especifique os seguintes parâmetros no seu recurso Broker:
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"persistentVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
volume vazio de Dir
Um volume vazio de Dir é a opção menos preferida após volume persistente.
Utilize um volume emptyDir apenas quando utilizar um cluster com quotas do sistema de ficheiros. Para mais informações, consulte o separador de quota de projetos do sistema de ficheiros. Se a funcionalidade não estiver ativada, o cluster faz varreduras periódicas que não impõem qualquer limite e permitem que o nó anfitrião preencha espaço no disco e marque todo o nó anfitrião como insalubre.
Por exemplo, para usar um emptyDir volume com capacidade de 1 gigabyte, especifique os seguintes parâmetros no seu recurso Broker:
{
"diskBackedMessageBuffer": {
"maxSize": "1G"
}
}
Considerações para fornecedores de armazenamento
Considere o comportamento do fornecedor de armazenamento escolhido, por exemplo, quando utiliza fornecedores como rancher.io/local-path. Se o fornecedor não suportar limites, preencher o volume consome o espaço em disco do nó. Este comportamento pode levar o Kubernetes a marcar o nó e todos os pods associados como pouco saudáveis. É fundamental compreender como o seu fornecedor de armazenamento se comporta nesses cenários.
Tip
Quando especifica um modelo Ephemeral Volume Claim (EVC) ou Persistent Volume Claim (PVC), pode usar uma classe de armazenamento à sua escolha, o que aumenta a flexibilidade para alguns cenários de implementação. Por exemplo, volumes persistentes provisionados usando um modelo PVC aparecem em comandos como kubectl get pv, que é útil para inspecionar o estado do cluster.
Se os seus nós Kubernetes não têm espaço local suficiente para o buffer de mensagens, use uma classe de armazenamento que forneça armazenamento em rede, como o Armazenamento de Blobs do Azure. É melhor usar um disco local com um valor mais pequeno maxSize porque o buffer de mensagens beneficia de acesso rápido e não requer durabilidade.
Disabled
Se não quiser usar o buffer de mensagens apoiado em disco, não inclua essa diskBackedMessageBufferSettings propriedade no seu recurso Broker. Este comportamento é também o padrão.
Buffer de disco vs. persistência
O buffer de mensagens apoiado em disco e a persistência do broker escrevem ambos dados no disco, mas servem propósitos diferentes:
| Feature | Buffer de mensagens com backup de disco | Persistência |
|---|---|---|
| Objetivo | Descarregar filas de espera de assinantes da memória para disco quando se tornam demasiado grandes | Preservar o estado crítico do broker (mensagens retidas, sessões, subscrições) durante os reinícios do pod |
| Durability | Efémero — os dados perdem-se quando a cápsula sai | Durável — os dados persistem após reinícios dos pods |
| Quando utilizar | Subscritores lentos, sessões persistentes offline, interrupções de conectividade com a cloud | Precisa de mensagens retidas ou estado de sessão para sobreviver aos reinícios do corretor |
| Âmbito dos dados | Mensagens PUBLISH em filas de subscritores | Mensagens retidas, metadados da fila de assinantes, dados de armazenamento de estado |
| Configuração |
diskBackedMessageBuffer no recurso do Broker |
Definições de persistência na implementação ou em tempo de execução |
Note
O buffer de disco e a persistência podem ser usados em conjunto. A persistência garante que o estado sobrevive aos reinícios, enquanto o buffer do disco previne condições de falta de memória durante o funcionamento normal.