O padrão de Verificação de Declaração permite que as cargas de trabalho transfiram cargas úteis sem armazená-las em um sistema de mensagens. O padrão armazena o conteúdo em um armazenamento de dados externo e usa uma "verificação de declaração" para recuperar o conteúdo. A verificação de declaração é um token ou chave exclusiva e desconhecida. Para recuperar o conteúdo, os aplicativos precisam apresentar o token de verificação de declaração ao armazenamento de dados externo.
Contexto e problema
Os sistemas de mensagens tradicionais são otimizados para gerenciar um grande volume de mensagens pequenas e, muitas vezes, têm restrições quanto ao tamanho das mensagens que podem processar. As mensagens grandes não só podem exceder esses limites, mas também prejudicar o desempenho de todo o sistema quando o sistema de mensagens as armazena.
Solução
Use o padrão Verificação de Declaração e não envie mensagens grandes para o sistema de mensagens. Em vez disso, envie o conteúdo para um armazenamento de dados externo e gere um token de verificação de declaração para esse conteúdo. O sistema de mensagens envia uma mensagem com o token de verificação de declaração aos aplicativos receptores para que eles possam recuperar o conteúdo do armazenamento de dados. O sistema de mensagens nunca lê ou armazena o conteúdo.
- Conteúdo
- Salva o conteúdo no armazenamento de dados.
- Gera token de verificação de declaração e envia mensagem com o token de verificação de declaração.
- Recebe a mensagem e lê o token de verificação de declaração.
- Recupera o conteúdo.
- Processa o conteúdo.
Problemas e considerações sobre o padrão de Verificação de Declaração
Considere as seguintes recomendações ao implementar o padrão de Verificação de Declaração:
Exclua as mensagens consumidas. Se não for necessário arquivar a mensagem, exclua a mensagem e o conteúdo depois que os aplicativos receptores a consumirem. Use uma estratégia de exclusão síncrona ou assíncrona:
Exclusão síncrona: o aplicativo consumidor exclui a mensagem e o conteúdo imediatamente após o consumo. Ele vincula a exclusão ao workflow de tratamento de mensagens e usa a capacidade de computação do workflow de mensagens.
Exclusão assíncrona: um processo fora do fluxo de trabalho de processamento de mensagens exclui a mensagem e o conteúdo. Ele separa o processo de exclusão do fluxo de trabalho de tratamento de mensagens e minimiza o uso da computação do fluxo de trabalho de mensagens.
Implemente o padrão de forma condicional. Incorpore lógica no aplicativo de envio que aplique o padrão de Verificação de Declaração se o tamanho da mensagem ultrapassar o limite do sistema de mensagens. Para mensagens menores, ignore o padrão e envie a mensagem menor para o sistema de mensagens. Essa abordagem condicional reduz a latência, otimiza a utilização de recursos e melhora os resultados.
Quando usar o padrão de Verificação de Declaração
Os cenários a seguir são os principais casos de uso do padrão de Verificação de Declaração:
Limitações do sistema de mensagens: use o padrão de Verificação de Declaração quando o tamanho das mensagens ultrapassar os limites de seu sistema de mensagens. Descarregue o conteúdo para o armazenamento externo. Envie apenas a mensagem com seu token de verificação de declaração para o sistema de mensagens.
Desempenho do sistema de mensagens: use o padrão de Verificação de Declaração quando mensagens grandes estiverem sobrecarregando o sistema de mensagens e prejudicando o desempenho do sistema.
Os cenários a seguir são casos de uso secundários para o padrão de Verificação de Declaração:
Proteção de dados confidenciais: use o padrão de Verificação de Declaração quando os conteúdos contiverem dados confidenciais que não devem ficar visíveis para o sistema de mensagens. Aplique o padrão a todas ou a partes das informações confidenciais no conteúdo. Proteja os dados confidenciais sem transmiti-los diretamente pelo sistema de mensagens.
Cenários de roteamento complexos: as mensagens que passam por vários componentes podem causar gargalos de desempenho devido às tarefas de serialização, desserialização, criptografia e descriptografia. Use o padrão de Verificação de Declaração para evitar o processamento direto de mensagens por componentes intermediários.
Projeto de carga de trabalho com o padrão de Verificação de Declaração
Um arquiteto deve avaliar como o padrão de Verificação de Declaração pode ser usado no projeto de sua carga de trabalho para atender às metas e aos princípios abordados nos pilares do Azure Well-Architected Framework. Por exemplo:
Pilar | Como esse padrão apoia os objetivos do pilar |
---|---|
As decisões de design de confiabilidade ajudam sua carga de trabalho a se tornar resiliente ao mau funcionamento e garantem que ela se recupere totalmente recovers após a falha. | Os sistemas de mensagens não oferecem a mesma confiabilidade e recuperação de desastre que geralmente estão presentes em armazenamentos de dados dedicados. Separar os dados da mensagem pode proporcionar maior confiabilidade ao conteúdo. Essa separação facilita a redundância de dados que permite recuperar conteúdos após um desastre. - RE:03 Análise do modo de falha - RE:09 Recuperação de desastre |
As decisões de design de segurança ajudam a garantir a confidencialidade, a integridade e a disponibilidade dos dados e sistemas da carga de trabalho. | O padrão de Verificação de Declaração pode extrair dados confidenciais de mensagens e armazená-los em um armazenamento de dados seguro. Essa configuração permite implementar controles de acesso mais rígidos, garantindo que somente os serviços destinados a usar os dados confidenciais possam acessá-los. Ao mesmo tempo, ela oculta esses dados de serviços não relacionados, como os usados para monitoramento de filas. - SE:03 Classificação de dados - SE:04 Segmentação |
A otimização de custos se concentra em sustentar e melhorar o retorno sobre o investimento da sua carga de trabalho. | Os sistemas de mensagens muitas vezes impõem limites ao tamanho das mensagens, e o aumento dos limites de tamanho costuma ser um recurso premium. Reduzir o tamanho do corpo das mensagens pode permitir que você use uma solução de mensagens mais barata. - CO:07 Custos de componentes - CO:09 Custos de fluxo |
A Eficiência de Desempenho ajuda sua carga de trabalho a atender às demandas com eficiência, otimizando o dimensionamento, a transferência de dados e a execução de código. | O padrão de Verificação de Declaração melhora a eficiência dos aplicativos de envio e recebimento, e do sistema de mensagens, gerenciando mensagens grandes com mais eficácia. Ele reduz o tamanho das mensagens enviadas ao sistema de mensagens e garante que os aplicativos receptores acessem mensagens grandes somente quando necessário. - PE:05 Dimensionamento e particionamento - PE:12 Otimização contínua de desempenho |
Tal como acontece com qualquer decisão de design, considere quaisquer compensações em relação aos objetivos dos outros pilares que possam ser introduzidos com este padrão.
Exemplos de padrão de Verificação de Declaração
Os exemplos a seguir demonstram como o Azure facilita a implementação do padrão de Verificação de Declaração:
Sistemas de mensagens do Azure: os exemplos abrangem quatro cenários diferentes do sistema de mensagens do Azure: Armazenamento de Filas do Azure, Hubs de Eventos do Azure (API padrão), Barramento de Serviço do Azure e Hubs de Eventos do Azure (API Kafka).
Geração de token de verificação de declaração automática vs. manual: esses exemplos também mostram dois métodos para gerar o token de verificação de declaração. Nos exemplos de código 1-3, a Grade de Eventos do Azure gera automaticamente o token quando o aplicativo de envio transfere o conteúdo para o Armazenamento de Blobs do Azure. O exemplo de código 4 mostra um processo de geração manual de tokens usando um cliente de linha de comando executável.
Escolha o exemplo que atenda às suas necessidades e siga o link fornecido para visualizar o código no GitHub:
Código de exemplo | Cenários do sistema de mensagens | Gerador de token | Aplicativo de recebimento | Armazenamento de dados |
---|---|---|---|---|
Exemplo de código 1 | Armazenamento de Filas do Azure | Grade de Eventos do Azure | Função | Armazenamento do Blobs do Azure |
Exemplo de código 2 | Hubs de Eventos do Azure (API padrão) | Grade de Eventos do Azure | Cliente de linha de comando executável | Armazenamento do Blobs do Azure |
Exemplo de código 3 | Barramento de Serviço do Azure | Grade de Eventos do Azure | Função | Armazenamento do Blobs do Azure |
Exemplo de código 4 | Hubs de Eventos do Azure (API Kafka) | Cliente de linha de comando executável | Função | Armazenamento do Blobs do Azure |
Próximas etapas
- O site Enterprise Integration Patterns tem uma descrição desse padrão.
- Para obter outro exemplo, consulte Dealing with large Service Bus messages using Claim-Check pattern (postagem no blog).
- Um padrão alternativo para lidar com mensagens grandes é Dividir e Agregar.
- Bibliotecas como NServiceBus fornecem suporte para esse padrão pronto para uso com seu recurso DataBus.