Filas do Armazenamento e filas do Barramento de Serviço — comparações e contrastes

Este artigo vai analisar as diferenças e semelhanças entre dois tipos de filas oferecidas pelo Microsoft Azure: filas de Armazenamento e filas de Barramento de Serviço. Com essas informações, será possível tomar uma decisão mais informada sobre a solução que atende às suas necessidades de modo mais adequado.

Introdução

O Azure dá suporte a dois tipos de mecanismo de fila: filas do Armazenamento e filas do Barramento de Serviço.

As filas de Armazenamento fazem parte da infraestrutura do Armazenamento do Azure. Elas permitem armazenar uma grande quantidade de mensagens. Você acessa as mensagens em qualquer lugar do mundo por meio de chamadas autenticadas usando HTTP ou HTTPS. Uma mensagem da fila pode ter até 64 KB. Uma fila pode conter milhões de mensagens, até o limite da capacidade total de uma conta de armazenamento. As filas são normalmente usadas para criar uma lista de pendências de trabalho para processamento assíncrono. Para obter mais informações, confira o artigo O que são filas de Armazenamento do Azure?.

As filas de Barramento de Serviço fazem parte de uma infraestrutura mais ampla do sistema de mensagens do Azure. Elas são compatíveis com o enfileiramento, a publicação/assinatura e outros padrões de integração avançados. Elas são projetadas para integrar aplicativos ou componentes de aplicativos que podem abranger vários protocolos de comunicação, contratos de dados, domínios de confiança ou ambientes de rede. Para obter mais informações sobre filas/tópicos/assinaturas do Barramento de Serviço, confira Filas, tópicos e assinaturas do Barramento de Serviço.

Considerações de seleção da tecnologia

As filas de Armazenamento e as filas de Barramento de Serviço têm um conjunto de recursos um pouco diferente. É possível escolher um deles ou ambos, de acordo com as necessidades de sua solução específica.

Ao determinar qual tecnologia de enfileiramento se ajusta ao propósito de uma determinada solução, os arquitetos e desenvolvedores de soluções deverão considerar essas recomendações.

Considerar usar filas de Armazenamento

Como arquiteto/desenvolvedor de soluções, você deve considerar o uso das filas do Armazenamento quando:

  • Seu aplicativo precisar armazenar mais de 80 GB de mensagens em uma fila.
  • Seu aplicativo desejar acompanhar o progresso do processamento de uma mensagem na fila. Isso será útil caso haja falha no processamento de trabalho de uma mensagem. Outro trabalho poderá usar essas informações para prosseguir do ponto em que o trabalho anterior parou.
  • Você precisar de logs do servidor de todas as transações executadas em suas filas.

Considerar usar filas de Barramento de Serviço

Como arquiteto/desenvolvedor de soluções, você deve considerar o uso das filas do Barramento de Serviço quando:

  • Sua solução precisar receber mensagens sem a necessidade de sondar a fila. Com o Barramento de Serviço, é possível obter esse cenário usando uma operação de recebimento de sondagem longa com protocolos baseados em TCP compatíveis com o Barramento de Serviço.
  • Sua solução exigir que a fila forneça uma entrega ordenada PEPS (primeiro a entrar, primeiro a sair).
  • Sua solução precisar dar suporte à detecção automática de duplicatas.
  • Você desejar que seu aplicativo processe mensagens como fluxos paralelos de longa execução (mensagens associadas a um fluxo usando a propriedade ID de sessão na mensagem). Nesse modelo, cada nó no aplicativo de consumo compete por fluxos, em oposição às mensagens. Quando um fluxo é fornecido a um nó de consumo, o nó pode examinar o estado do fluxo do aplicativo usando transações.
  • Sua solução exigir comportamento transacional e atomicidade ao enviar ou receber várias mensagens de uma fila.
  • Seu aplicativo processa mensagens que podem exceder 64 KB, mas provavelmente não se aproximarão do limite de 256 KB ou 1 MB, dependendo da camada de serviço escolhida (embora as filas do Barramento de Serviço possam processar mensagens de até 100 MB).
  • Você tiver que lidar com a necessidade de fornecer um modelo de acesso baseado em função às filas e diferentes direitos/permissões para remetentes e destinatários. Para obter mais informações, consulte os seguintes artigos:
  • O tamanho da fila não excederá 80 GB.
  • Você desejar usar o protocolo do sistema de mensagens baseado em padrões AMQP 1.0. Para obter mais informações sobre AMQP, confira Visão geral do AMQP do Barramento de Serviço.
  • Preveja uma eventual migração da comunicação ponto a ponto baseada em fila para um padrão de mensagens de publicação/assinatura. Esse padrão permite integrar destinatários adicionais (assinantes). Cada destinatário recebe cópias independentes de algumas mensagens enviadas à fila ou todas elas.
  • Sua solução de mensagens precisar dar suporte às garantias de entrega "No máximo uma vez" e "Pelo menos uma vez" sem a necessidade de criar mais componentes de infraestrutura.
  • Sua solução precisar publicar e usar lotes de mensagens.

Comparar filas de Armazenamento e filas de Barramento de Serviço

As tabelas mostradas nas seções a seguir fornecerão um agrupamento lógico de recursos de fila. Elas permitem comparar de modo rápido as funcionalidades disponíveis nas filas de Armazenamento do Azure e nas filas de Barramento de Serviço.

Recursos básicos

Esta seção compara alguns dos recursos básicos de enfileiramento fornecidos pelas filas do Armazenamento e filas do Barramento de Serviço.

Critérios de comparação Filas de armazenamento Filas do Barramento de Serviço
Garantia de ordenação Nenhum

Para obter mais informações, confira a primeira observação na seção Informações Adicionais
.
Sim - FIFO

(usando sessões de mensagem)
Garantia de entrega Pelo menos uma vez Pelo menos uma vez (usando o modo de recebimento PeekLock. esse é o padrão)

No máximo uma vez (usando o modo de recebimento ReceiveAndDelete)

Saiba mais sobre vários Modos de recebimento
Suporte à operação atômica Não Sim

Comportamento de recebimento Sem bloqueio

(conclusão imediata se nenhuma mensagem nova for encontrada)
Como bloquear usando um tempo limite ou sem ele

(oferece sondagem longa ou "Técnica Comet")

Sem bloqueio

(usando apenas a API gerenciada do .NET)
API de estilo push No Sim

Nossos SDKs .NET, Java, JavaScript e Go fornecem API de estilo push.
Modo de recebimento Inspecionar e Conceder Inspecionar e bloquear

Receber e excluir
Modo de acesso exclusivo Baseado em concessão Baseado em bloqueio
Duração da concessão/do bloqueio 30 segundos (padrão)

7 dias (máximo) (Você pode renovar ou liberar uma concessão de mensagem usando a API UpdateMessage.)
30 segundos (padrão)

Você pode renovar o bloqueio de mensagem pela mesma duração de bloqueio manualmente todas as vezes ou usar o recurso de renovação automática de bloqueio em que o cliente gerencia a renovação de bloqueio para você.
Precisão da concessão/do bloqueio Nível da mensagem

Cada mensagem pode ter um valor de tempo limite diferente. Ele pode ser atualizado conforme sua necessidade durante o processamento da mensagem usando uma API UpdateMessage.
Nível da fila

(cada fila tem uma precisão de bloqueio aplicada a todas as suas mensagens, mas o bloqueio pode ser renovado conforme descrito na linha anterior)
Recebimento em lote Yes

(especificando explicitamente a contagem de mensagens ao recuperar mensagens, até um máximo de 32 mensagens)
Yes

(habilitando implicitamente uma propriedade de pré-busca ou explicitamente usando transações)
Envio em lote No Sim

(usando transações ou envio em lote do lado do cliente)

Informações adicionais

  • As mensagens das filas de Armazenamento geralmente são as primeiras a serem recebidas, bem como enviadas. No entanto, às vezes elas podem estar fora de ordem. Por exemplo, quando a duração do tempo limite da visibilidade de uma mensagem expira porque houve falha em um aplicativo cliente durante o processamento de uma mensagem. Quando o tempo limite da visibilidade se esgotar, a mensagem se tornará visível novamente na fila de outro trabalho para que seja removida da fila. Nesse momento, a mensagem recém-visível poderá ser colocada na fila para ser removida dela novamente.
  • O padrão PEPS garantido nas filas do Barramento de Serviço exige o uso de sessões de mensagens. Caso haja falha no aplicativo durante o processamento de uma mensagem recebida no modo Espiar e Bloquear, na próxima vez que um destinatário da fila aceitar uma sessão de mensagens, ele começará com a mensagem em que houve falha após a expiração do período bloqueio da sessão.
  • As filas de Armazenamento são projetadas para dar suporte a cenários de enfileiramento padrão, como os mostrados abaixo:
    • Como desacoplar componentes de aplicativos para aumentar a escalabilidade e a tolerância a falhas
    • Nivelamento de carga
    • Como criar fluxos de trabalho de processo.
  • As inconsistências relacionadas ao processamento de mensagens no contexto de sessões do Barramento de Serviço podem ser evitadas usando o estado de sessão para armazenar o estado do aplicativo relativo ao progresso do processamento da sequência de mensagens da sessão, bem como usando transações de acomodação de mensagens recebidas e atualização do estado de sessão. Esse tipo de recurso de consistência às vezes é rotulado exatamente como processado em produtos de outros fornecedores. As falhas de transação certamente farão com que as mensagens sejam entregues novamente. Por esse motivo, o termo não é exatamente adequado.
  • As filas do Armazenamento fornecem um modelo de programação uniforme e consistente entre filas, tabelas e Blobs, para desenvolvedores e equipes de operações.
  • As filas do Barramento de Serviço fornecem suporte para transações locais no contexto de uma fila única.
  • O modo Receber e Excluir com suporte do Barramento de Serviço tem a capacidade de reduzir a contagem de operações de mensagens (e custos associados) em troca da garantia de entrega reduzida.
  • As filas do Armazenamento fornecem concessões com a capacidade de estender as concessões para mensagens. Esse recurso permite que os processos de trabalho mantenham concessões curtas nas mensagens. Desse modo, caso haja falha em um trabalho, a mensagem poderá ser processada novamente de modo rápido por outro trabalho. Além disso, um trabalho pode estender a concessão em uma mensagem caso precise processá-la por mais tempo do que o tempo de concessão.
  • As filas do Armazenamento oferecem um tempo limite de visibilidade que você pode definir no enfileiramento de uma mensagem ou na remoção dela da fila. Ademais, é possível atualizar uma mensagem com diferentes valores no runtime, bem como atualizar diferentes valores entre mensagens na mesma fila. Os tempos limite de bloqueio do Barramento de Serviço são definidos nos metadados da fila. No entanto, você pode renovar o bloqueio de mensagem pela duração de bloqueio pré-definida manualmente ou usar o recurso de renovação automática de bloqueio em que o cliente gerencia a renovação de bloqueio para você.
  • O tempo limite máximo para um bloqueio de operação de recebimento nas filas do Barramento de Serviço é de 24 dias. No entanto, os tempos limite baseados em REST têm um valor máximo de 55 segundos.
  • O envio em lote do lado do cliente fornecido pelo Barramento de Serviço permite que um cliente da fila coloque em lote várias mensagens em uma única operação de envio. O envio em lote está disponível apenas para operações de envio assíncronas.
  • Os recursos como o teto máximo de 200 TB das filas de Armazenamento (maior quando as contas são virtuais) e as filas ilimitadas tornam o envio em lote uma plataforma ideal para provedores de SaaS.
  • As filas do Armazenamento fornecem um mecanismo de controle de acesso flexível e delegado ao desempenho.

Recursos avançados

Esta seção compara recursos avançados fornecidos pelas filas do Armazenamento e do Barramento de Serviço.

Critérios de comparação Filas de armazenamento Filas do Barramento de Serviço
Entrega agendada Sim Sim
Mensagens mortas automáticas No Sim
Aumentando o valor da vida útil da fila Sim

(por meio da atualização in-loco do tempo limite de visibilidade)
Yes

(fornecido por uma função de API dedicada)
Suporte a mensagens suspeitas Sim Sim
Atualização in-loco Sim Sim
Log de transações do servidor Sim Não
Métricas de armazenamento Sim

As Métricas de Minuto fornecem métricas em tempo real de itens que incluem: disponibilidade, TPS, contagens de chamadas à API, contagens de erros e muito mais. Todas elas são fornecidas em tempo real, agregadas por minuto e relatadas após poucos minutos de um evento ocorrido na produção. Para obter mais informações, confira Sobre as Métricas de Analítica de Armazenamento.
Sim

Para obter informações sobre as métricas com suporte pelo Barramento de Serviço do Azure, consulte Métricas de mensagem.
Gerenciamento de estado Não Sim (Active, Disabled, SendDisabled e ReceiveDisabled. Para obter detalhes sobre esses estados, confira Status da fila)
Encaminhamento automático de mensagens Não Sim
Função Limpar fila Sim No
Grupos de mensagens No Sim

(usando sessões de mensagens)
Estado do aplicativo por grupo de mensagens Não Sim
Detecção de duplicidade Não Sim

(configurável no lado do remetente)
Procurando grupos de mensagens No Sim
Buscando sessões de mensagem por ID Não Sim

Informações adicionais

  • Ambas as tecnologias de enfileiramento permitem que uma mensagem seja agendada para entrega em um momento posterior.
  • O encaminhamento automático de filas permite que milhares de filas encaminhem de modo automático as respectivas mensagens para uma fila única, da qual o aplicativo de recebimento recebe a mensagem. É possível usar esse mecanismo para fins de segurança, controlar o fluxo e isolar o armazenamento entre cada editor de mensagem.
  • As filas do Armazenamento dão suporte à atualização do conteúdo da mensagem. Você pode usar essa funcionalidade para informações de estado persistentes e atualizações incrementais de progresso na mensagem para que ela possa ser processada a partir do último ponto de verificação conhecido, em vez de começar do zero. Com filas do Barramento de Serviço, você pode habilitar o mesmo cenário usando as sessões de mensagens. Para obter mais informações, confira Estado de sessões de mensagem.
  • As filas de Barramento de Serviço são compatíveis com mensagens mortas. Isso pode ser útil para isolar mensagens que atendam aos seguintes critérios:
    • As mensagens não podem ser processadas com êxito pelo aplicativo receptor
    • As mensagens não podem ser entregues no respectivo destino porque uma propriedade TTL (vida útil) expirou. O valor de TTL especifica quanto tempo uma mensagem permanece na fila. Com o Barramento de Serviço, a mensagem será movida para uma fila especial chamada $DeadLetterQueue quando o período TTL expirar.
  • Para localizar mensagens “suspeitas” nas filas do Armazenamento, ao remover uma mensagem da fila, o aplicativo examina a propriedade DequeueCount da mensagem. Se DequeueCount for maior que um determinado limite, o aplicativo moverá a mensagem para uma fila de "mensagens mortas" definida pelo aplicativo.
  • As filas de Armazenamento permitem obter um log detalhado de todas as transações executadas na fila, bem como as métricas agregadas. Essas duas opções são úteis para depurar e entender como o aplicativo usa as filas do Armazenamento. Elas também são úteis para ajustar o desempenho do aplicativo e reduzir os custos de uso de filas.
  • As sessões de mensagens compatíveis com o Barramento de Serviço permitem que as mensagens de um grupo lógico sejam associadas a um destinatário. Elas criam uma afinidade semelhante a uma sessão entre as mensagens e os respectivos destinatários. Você pode habilitar essa funcionalidade avançada no Barramento de Serviço definindo a propriedade ID de sessão em uma mensagem. Os receptores podem escutar em uma ID de sessão específica e receber mensagens que compartilham o identificador de sessão especificado.
  • O recurso de detecção de duplicação de filas de Barramento de Serviço remove de modo automático as mensagens duplicadas enviadas a uma fila ou a um tópico com base no valor da propriedade ID de mensagem.

Capacidade e cotas

Esta seção compara as filas do Armazenamento e as filas do Barramento de Serviço da perspectiva de capacidade e cotas que podem ser aplicáveis.

Critérios de comparação Filas de armazenamento Filas do Barramento de Serviço
Tamanho máximo da fila 500 TB

(limitado a uma capacidade de conta de armazenamento única)
1 GB a 80 GB

(definido na criação de uma fila e habilitando particionamento – confira a seção "Informações adicionais")
Tamanho máximo da mensagem 64 KB

(48 KB ao usar a codificação Base64)

O Azure oferece suporte a mensagens grandes combinando filas e blobs — nesse ponto, você pode enfileirar até 200 GBs para um único item.
256 KB ou 100 MB

(incluindo cabeçalho e corpo, tamanho máximo do cabeçalho: 64 KB).

Depende da camada de serviço.
TTL máxima da mensagem Infinito (versão da API de 27/07/2017 ou posterior) TimeSpan.MaxValue
Número máximo de filas Ilimitado 10.000

(por namespace do serviço)
Número máximo de clientes simultâneos Ilimitado 5\.000

Informações adicionais

  • O Barramento de Serviço impõe limites de tamanho de fila. O tamanho máximo da fila é especificado durante a criação dela. Ele pode ter entre 1 GB e 80 GB. Caso o tamanho da fila atinja esse limite, mensagens de entrada adicionais serão rejeitadas e o chamador receberá uma exceção. Para obter mais informações sobre cotas no Barramento de Serviço, confira Cotas do Barramento de Serviço.
  • Na camada de mensagens Standard, é possível criar filas e tópicos de Barramento de Serviço de vários tamanhos: 1 GB (padrão), 2 GB, 3 GB, 4 GB ou 5 GB. Com o particionamento habilitado na camada Standard, o Barramento de Serviço criará 16 cópias (16 partições) da entidade, cada uma com o mesmo tamanho especificado. Desse modo, caso crie uma fila com um tamanho de 5 GB e 16 partições, o tamanho máximo da fila será (5 x 16) = 80 GB. É possível ver o tamanho máximo da fila ou do tópico particionado no portal do Azure.
  • Com as filas de Armazenamento, caso o conteúdo da mensagem não seja seguro para XML, ele deverá ser codificado em Base64. Se você codificar a mensagem em Base64, a carga de usuário poderá ser de até 48 KB, em vez de 64 KB.
  • Com as filas do Barramento de Serviço, cada mensagem armazenada em uma fila é composta por duas partes: um cabeçalho e um corpo. O tamanho total da mensagem não poderá exceder o tamanho máximo da mensagem compatível com a camada de serviço.
  • Quando os clientes se comunicam com as filas do Barramento de Serviço pelo protocolo TCP, o número máximo de conexões simultâneas para uma única fila do Barramento de Serviço é limitado a 100. Esse número é compartilhado entre remetentes e receptores. Caso essa cota seja atingida, as solicitações para obter conexões adicionais serão rejeitadas e uma exceção será recebida pelo código de chamada. Esse limite não é imposto a clientes que se conectam às filas usando uma API baseada em REST.
  • Se precisar de mais de 10.000 filas em um único namespace do Barramento de Serviço, você poderá entrar em contato com a equipe de suporte do Azure e solicitar um aumento. Para escalar para além de 10.000 filas com o Barramento de Serviço, você também pode criar namespaces adicionais usando o Portal do Azure.

Gerenciamento e operações

Esta seção compara os recursos de gerenciamento fornecidos pelas filas do Armazenamento e do Barramento de Serviço.

Critérios de comparação Filas de armazenamento Filas do Barramento de Serviço
Protocolo de gerenciamento REST sobre HTTP/HTTPS REST sobre HTTPS
Protocolo de runtime REST sobre HTTP/HTTPS REST sobre HTTPS

AMQP 1.0 Padrão (TCP com TLS)
API do .NET Sim

(API do Cliente de Armazenamento .NET)
Sim

(API do Barramento de serviço do .NET)
C++ nativo Sim Yes
API Java Sim Yes
API PHP Sim Yes
API Node.js Sim Sim
Suporte a metadados arbitrários Sim No
Regras de nomenclatura da fila Até 63 caracteres de comprimento

(As letras em um nome de fila devem estar em minúsculas.)
Até 260 caracteres

(Nomes e caminhos de fila não diferenciam maiúsculas de minúsculas.)
Função Obter tamanho da fila Yes

(Valor aproximado se as mensagens expirarem depois da TTL sem que sejam excluídas.)
Sim

(Valor exato, pontual.)
Função Inspecionar Sim Sim

Informações adicionais

  • As filas do Armazenamento dão suporte a atributos arbitrários que podem ser aplicados à descrição da fila, na forma de pares de nome/valor.
  • As duas tecnologias oferecem a capacidade de inspecionar uma mensagem sem precisar bloqueá-la, o que pode ser útil ao implementar uma ferramenta de gerenciador/navegador de filas.
  • As APIs de sistema de mensagens agenciado por .NET do Barramento de Serviço usam conexões TCP full duplex para aprimorar o desempenho quando comparadas à REST em relação ao HTTP, bem como são compatíveis com o protocolo padrão AMQP 1.0.
  • Os nomes das filas do Armazenamento podem ter de 3 a 63 caracteres e podem conter letras minúsculas, número e hifens. Para obter mais informações, confira Nomeando filas e metadados.
  • Os nomes de fila do Barramento de Serviço podem ter até 260 caracteres e têm menos regras restritivas de nomenclatura. Os nomes de fila do Barramento de Serviço podem conter letras, números, pontos, hifens e sublinhados.

Autenticação e autorização

Esta seção aborda os recursos de autenticação e autorização com suporte nas filas do Armazenamento e do Barramento de Serviço.

Critérios de comparação Filas de armazenamento Filas do Barramento de Serviço
Autenticação Chave simétrica e RBAC (controle de acesso baseado em função) Chave simétrica e RBAC (controle de acesso baseado em função)
Federação do provedor de identidade Sim Sim

Informações adicionais

Conclusão

Ao ter uma compreensão mais detalhada sobre as duas tecnologias, você pode tomar uma decisão mais informada sobre qual tecnologia de fila usar e quando. A decisão sobre quando usar as filas de Armazenamento ou as filas do Barramento de Serviço depende claramente de muitos fatores. Esses fatores podem depender consideravelmente das necessidades individuais de seu aplicativo e da respectiva arquitetura.

Talvez você prefira escolher filas de Armazenamento pelos seguintes motivos:

  • Caso seu aplicativo já use as principais funcionalidades do Microsoft Azure
  • Caso precise obter uma comunicação básica e um sistema de mensagens entre serviços
  • Caso precise obter filas com um tamanho maior do que 80 GB

As filas do Barramento de Serviço fornecem muitos recursos avançados, como os descritos a seguir. Portanto, eles podem ser sua opção preferida caso você esteja criando um aplicativo híbrido ou seu aplicativo exija esses recursos.

Próximas etapas

Os artigos a seguir fornecem mais orientação e informações sobre como usar as filas do Armazenamento ou as filas do Barramento de Serviço.