Exportar (0) Imprimir
Expandir Tudo

Planejamento de capacidade para filas e tópicos do Barramento de Serviço

Autores: Valery Mizonov e Ralph Squillace

Este tópico descreve:

  • A diferença geralmente importante em limites de tamanho de fila entre as filas do Windows Azure e as filas e os tópicos do Barramento de Serviço do Windows Azure

  • Como estimar a capacidade correta da fila do Barramento de Serviço quando você quer tirar proveito dos recursos de filas e tópicos do Barramento de Serviço

  • Uma execução de teste com mensagens de tamanhos diferentes para dar uma ideia do número de mensagens desse tamanho que podem ser colocadas em uma fila ou um tópico do Barramento de Serviço

Limitações de tamanho de fila e tópico no Barramento de Serviço do Windows Azure

Tanto as filas do Windows Azure quanto as filas do Barramento de Serviço são implementações de armazenamento de acesso em fila, mas cada uma tem um conjunto de recursos um pouco diferente, o que significa que você pode escolher uma ou outra dependendo das necessidades de seu aplicativo em particular. Por exemplo, o Barramento de Serviço tem tópicos e assinaturas, uma implementação pub-sub que é geralmente importante em cenários de notificações comerciais; enquanto as filas do Windows Azure podem armazenar até 100 terabytes de dados, as filas do Barramento de Serviço estão limitadas a 5 gigabytes.

As duas principais áreas de diferença – tamanho máximo da mensagem e tamanho máximo da fila -- são mostradas abaixo:

 

Comparação Filas do Windows Azure Filas do Barramento de Serviço

Tamanho máximo da mensagem

64 KB

Observação: isso inclui a sobrecarga aproximada de 25% de codificação base64.

256 KB

Observação: isso inclui os cabeçalhos e o corpo, onde o tamanho máximo do cabeçalho é 64 KB.

Tamanho máximo da fila

100 TB

Observação: o tamanho máximo é limitado ao nível da conta de armazenamento.

1, 2, 3, 4 ou 5 GB

O tamanho é definido na criação de uma fila ou um tópico.

Esta última diferença – o limite de tamanho de filas e tópicos de 5 GB do Barramento de Serviço, comparado ao limite de 100 TB para as filas do Windows Azure – pode ser razoavelmente importante, pois significa que, se você usar recursos do Barramento de Serviço, como mensagens mortas, tópicos e assinaturas, regras ou ações, você deve avaliar o quanto da capacidade de filas ou tópicos do Barramento de Serviço você precisará para seu aplicativo antes de compilar o aplicativo sólido que você deseja. Pode ser fácil para um aplicativo muito ativo criar uma fila ou um tópico com 5 GB de dados dependendo do tamanho da mensagem, do tamanho dos cabeçalhos de mensagens e do tamanho de quaisquer propriedades personalizadas de mensagens – e da rapidez com que essas mensagens são enfileiradas ou enviadas a um tópico.

Finalmente, com as filas do Barramento de Serviço, você estabelece o tamanho da fila ao criar a fila. Você não pode redimensionar a fila depois que ela é criada; considerando que as filas do Windows Azure têm acesso a tanto armazenamento, não chega a ser necessário pensar em aumentar o tamanho da fila do Windows Azure.

Quando uma fila ou um tópico excede sua capacidade configurada, as solicitações subsequentes para enfileirar uma mensagem resultam em uma exceção Microsoft.ServiceBus.Messaging.QuotaExceededException. Seu aplicativo deve fornecer o tratamento adequado para esse tipo de exceção em particular. Por exemplo, uma abordagem seria suspender temporariamente a entrega de mensagens a uma fila ou um tópico e oferecer aos consumidores tempo suficiente para processar a lista de pendências antes de a publicação de mensagens ser retomada.

Também é importante lembrar que as mensagens nas filas do Barramento de Serviço são compostas de duas partes: um cabeçalho e um corpo. O tamanho total da mensagem inteira (cabeçalho + corpo) não pode exceder 256 KB. A API de mensagens orientadas do Barramento de Serviço utiliza serialização XML binária (não XML de texto), o que reduz o tamanho da saída da carga serializada; embora isso, por sua vez, permita o armazenamento de mensagens ligeiramente maiores do que 256 KB, você deve testar a redução de tamanho que vir para seu próprio aplicativo.

Calculando a capacidade de filas e tópicos do Barramento de Serviço

Vamos examinar o algoritmo básico para calcular o tamanho das mensagens e, portanto, o tipo de filas ou tópicos do Barramento de Serviço de que você poderá precisar para seu aplicativo.

Uma mensagem vazia tem um tamanho de corpo de 1024 bytes e o tamanho de cabeçalho padrão de 156 bytes; incluindo outros elementos, isso é arredondado para um total de 1635 bytes em uma mensagem sem propriedades ou cabeçalhos personalizados e um corpo de mensagem vazio.

A fórmula a seguir pode ser usada para estimar os requisitos de tamanho que o número especificado de mensagens pode introduzir:

Número de mensagens * (tamanho da fila de mensagens + tamanho do cabeçalho da mensagem)

Para determinar o tamanho do corpo, use a propriedade BrokeredMessage.Size. O tamanho do cabeçalho pode ser mais complicado, por isso ele depende do grau de exatidão de que você precisa. O método mais preciso é enviar a mensagem (ou uma mensagem de teste se você precisar conhecer as informações antes de enviar várias mensagens) e, em seguida, consultar os metadados da fila usando o método NamespaceManager.GetTopic (ou NamespaceManager.GetQueue) e usar a propriedade SizeInBytes (dos objetos QueueDescription ou TopicDescription) para determinar a quantidade de cabeçalho adicionada.

O tamanho do tópico requer um algoritmo um pouco diferente. A fórmula para determinar a quantidade de espaço que um determinado número de mensagens consome no tópico é:

Número de mensagens * (tamanho do corpo da mensagem + (tamanho do cabeçalho da mensagem * número de assinaturas))

Observe que o tamanho do cabeçalho é multiplicado pelo número de assinaturas do tópico, o que significa que, se quaisquer cabeçalhos personalizados forem adicionados às suas mensagens do tópico, o tamanho do tópico aumentará na linha com o número de assinaturas.

Por exemplo, se você tivesse uma mensagem padrão com 200 assinaturas, isso resultaria em um tamanho de tópico de 32 KB. Entretanto, se você aumentar o tamanho do cabeçalho para 600 bytes, o tamanho do tópico agora será 120 KB. Finalmente, se você adicionar as mensagens de confirmação (ACK) que fluem de cada destinatário de assinatura, o acréscimo será considerável. Para uma única mensagem com um cabeçalho de 600 bytes correspondente a 200 assinaturas, adicione 200 mensagens de confirmação (uma para cada assinatura) e você terá 568.635 bytes. É importante pensar nisso com antecedência.

Validando aproximações de capacidade

Você pode levar em consideração os dados a seguir ao estimar quantas mensagens podem ser incluídas em uma única fila do Barramento de Serviço. Estes dados foram capturados por um utilitário personalizado para determinar a capacidade da fila com diferentes opções de tamanho de mensagem.

 

Tamanho de mensagem de exemplo Fila de 1 GB Fila de 2 GB Fila de 3 GB Fila de 4 GB Fila de 5 GB

1 KB

1.041.790

2.059.920

3.128.550

4.186.400

5.238.750

10 KB

102.996

208.358

312.537

416.716

520.895

50 KB

20.857

41.792

62.507

83.343

104.179

100 KB

10.466

20.836

31.254

41.672

52.090

250 KB

4.191

8.334

12.501

16.669

20.836

Para descartar o impacto potencial da serialização XML binária nos resultados do teste, todas as mensagens de exemplo foram inicializadas com uma matriz de bytes do respectivo tamanho preenchido com valores aleatórios.

Consulte também


Data da compilação:

2013-10-23

Contribuições da comunidade

A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2014 Microsoft