Dimensionamento com Hubs de Eventos

Há dois fatores que influenciam o dimensionamento com Hubs de Eventos.

  • Unidades de rendimento (nível padrão) ou unidades de processamento (nível premium)
  • Partições

Unidades de débito

A capacidade de taxa de transferência dos hubs de eventos é controlada por unidades de taxa de transferência. As unidades de taxa de transferência são unidades de capacidade pré-compradas. Uma única unidade de taxa de transferência permite:

  • Ingresso: até 1 MB por segundo ou 1.000 eventos por segundo (o que ocorrer primeiro).
  • Saída: até 2 MB por segundo ou 4.096 eventos por segundo.

Além da capacidade das unidades de taxa de transferência compradas, a entrada é limitada e os Hubs de Eventos lançam um ServerBusyException. A saída não produz exceções de limitação, mas ainda está limitada à capacidade das unidades de taxa de transferência compradas. Se receber exceções da taxa de publicação ou estiver à espera de ver uma saída superior, não se esqueça de verificar quantas unidades de débito adquiriu para o espaço de nomes. Você pode gerenciar unidades de taxa de transferência na página Escala dos namespaces no portal do Azure. Você também pode gerenciar unidades de taxa de transferência programaticamente usando as APIs dos Hubs de Eventos.

As unidades de taxa de transferência são pré-compradas e cobradas por hora. Assim que forem adquiridas, as unidades de débito são faturadas por um mínimo de uma hora. Pode comprar até 40 unidades de débito para um espaço de nomes dos Hubs de Eventos e partilhá-las entre todos os hubs de eventos desse espaço de nomes.

O recurso de inflação automática dos Hubs de Eventos aumenta automaticamente aumentando o número de unidades de taxa de transferência, para atender às necessidades de uso. O aumento das unidades de taxa de transferência evita cenários de limitação, nos quais:

  • As taxas de entrada de dados excedem as unidades de taxa de transferência definidas.
  • As taxas de solicitação de saída de dados excedem as unidades de taxa de transferência definidas.

O serviço Hubs de Eventos aumenta a taxa de transferência quando a carga aumenta além do limite mínimo, sem que nenhuma solicitação falhe com erros ServerBusy .

Para obter mais informações sobre o recurso de autoinflação, consulte Dimensionar unidades de taxa de transferência automaticamente.

Unidades de processamento

Os Hubs de Eventos Premium oferecem desempenho superior e melhor isolamento em um ambiente PaaS multilocatário gerenciado. Os recursos em uma camada Premium são isolados no nível da CPU e da memória para que cada carga de trabalho do locatário seja executada isoladamente. Esse contêiner de recursos é chamado de Unidade de Processamento (PU). Você pode comprar 1, 2, 4, 8 ou 16 unidades de processamento para cada namespace Premium de Hubs de Eventos.

O quanto você pode ingerir e transmitir com uma unidade de processamento depende de vários fatores, como seus produtores, consumidores, a taxa em que você está ingerindo e processando, e muito mais.

Por exemplo, o namespace Premium dos Hubs de Eventos com uma PU e um hub de eventos (100 partições) pode oferecer aproximadamente uma capacidade central de entrada de ~5-10 MB/s e saída de 10-20 MB/s para cargas de trabalho AMQP ou Kafka.

Para saber mais sobre como configurar PUs para um namespace de camada premium, consulte Configurar unidades de processamento.

Nota

Para saber mais sobre cotas e limites, consulte Hubs de Eventos do Azure - cotas e limites.

Partições

Os Hubs de Eventos organizam sequências de eventos enviados para um hub de eventos em uma ou mais partições. À medida que novos eventos chegam, eles são adicionados ao final desta sequência.

Image that shows an event hub with a few partitions.

Uma partição pode ser pensada como um log de confirmação. As partições contêm dados de eventos que contêm as seguintes informações:

  • Corpo do evento
  • Saco de propriedades definido pelo usuário descrevendo o evento
  • Metadados, como seu deslocamento na partição, seu número na sequência de fluxo
  • Carimbo de data/hora do lado do serviço no qual foi aceito

Diagram that displays the older to newer sequence of events.

Vantagens de usar partições

Os Hubs de Eventos foram projetados para ajudar no processamento de grandes volumes de eventos, e o particionamento ajuda com isso de duas maneiras:

  • Embora os Hubs de Eventos sejam um serviço de PaaS, há uma realidade física por baixo. A manutenção de um log que preserva a ordem dos eventos requer que esses eventos sejam mantidos juntos no armazenamento subjacente e em suas réplicas, o que resulta em um limite de taxa de transferência para esse log. O particionamento permite que vários logs paralelos sejam usados para o mesmo hub de eventos e, portanto, multiplicando a capacidade de taxa de transferência de entrada-saída (IO) bruta disponível.
  • Seus próprios aplicativos devem ser capazes de acompanhar o processamento do volume de eventos que estão sendo enviados para um hub de eventos. Pode ser complexo e requer uma capacidade de processamento paralela substancial e escalonada. A capacidade de um único processo para lidar com eventos é limitada, portanto, você precisa de vários processos. As partições são como sua solução alimenta esses processos e ainda garante que cada evento tenha um proprietário de processamento claro.

Número de partições

O número de partições é especificado no momento da criação de um hub de eventos. Deve estar entre uma e a contagem máxima de partições permitida para cada nível de preço. Para o limite de contagem de partições para cada camada, consulte este artigo.

Recomendamos que você escolha pelo menos quantas partições forem necessárias durante o pico de carga do seu aplicativo para esse hub de eventos específico. Para camadas diferentes das camadas premium e dedicada, não é possível alterar a contagem de partições de um hub de eventos após sua criação. Para um hub de eventos em uma camada premium ou dedicada, você pode aumentar a contagem de partições após sua criação, mas não pode diminuí-las. A distribuição de fluxos entre partições mudará quando for feita à medida que o mapeamento de chaves de partição para partições mudar, então você deve se esforçar para evitar essas alterações se a ordem relativa dos eventos for importante em seu aplicativo.

Definir o número de partições para o valor máximo permitido é tentador, mas tenha sempre em mente que seus fluxos de eventos precisam ser estruturados de forma que você possa, de fato, tirar proveito de várias partições. Se você precisar de preservação de ordem absoluta em todos os eventos ou apenas um punhado de subfluxos, talvez não consiga aproveitar muitas partições. Além disso, muitas partições tornam o lado do processamento mais complexo.

Não importa quantas partições estão em um hub de eventos quando se trata de preços. Depende do número de unidades de preço (unidades de taxa de transferência (TUs) para a camada padrão, unidades de processamento (PUs) para a camada premium e unidades de capacidade (CUs) para a camada dedicada) para o namespace ou o cluster dedicado. Por exemplo, um hub de eventos da camada padrão com 32 partições ou com uma partição incorre exatamente no mesmo custo quando o namespace é definido como uma capacidade de TU. Além disso, você pode dimensionar TUs ou PUs em seu namespace ou CUs do cluster dedicado independentemente da contagem de partições.

Como partição é um mecanismo de organização de dados que permite publicar e consumir dados de forma paralela. Recomendamos que você equilibre unidades de dimensionamento (unidades de taxa de transferência para a camada padrão, unidades de processamento para a camada premium ou unidades de capacidade para a camada dedicada) e partições para obter a escala ideal. Em geral, recomendamos uma taxa de transferência máxima de 1 MB/s por partição. Portanto, uma regra prática para calcular o número de partições seria dividir a taxa de transferência máxima esperada por 1 MB/s. Por exemplo, se o seu caso de uso requer 20 MB/s, recomendamos que você escolha pelo menos 20 partições para alcançar a taxa de transferência ideal.

No entanto, se você tiver um modelo no qual seu aplicativo tenha afinidade com uma partição específica, aumentar o número de partições não é benéfico. Para obter mais informações, consulte disponibilidade e consistência.

Mapeamento de eventos para partições

Pode utilizar uma chave de partição para mapear dados de eventos recebidos em partições específicas para a finalidade de organização de dados. A chave de partição é um valor fornecido pelo remetente transmitido para um hub de eventos. É processado através de uma função de hash estática, que cria a atribuição de partição. Se não especificar uma chave de partição ao publicar um evento, é utilizada uma atribuição round robin.

O publicador de eventos apenas tem conhecimento da respetiva chave de partição, não da partição onde os eventos são publicados. Este desacoplamento da chave e da partição faz com que o remetente não tenha necessidade de saber muito sobre o processamento a jusante. Uma identidade por dispositivo ou utilizador exclusivo faz com que uma chave de partição seja segura, mas outros atributos como a geografia também podem ser utilizados para agrupar os eventos relacionados numa única partição.

Especificar uma chave de partição permite manter os eventos relacionados juntos na mesma partição e na ordem exata em que chegaram. A chave de partição é uma cadeia de caracteres derivada do contexto do aplicativo e identifica a inter-relação dos eventos. Uma sequência de eventos identificados por uma chave de partição é um fluxo. Uma partição é um armazenamento de log multiplexado para muitos desses fluxos.

Nota

Embora você possa enviar eventos diretamente para partições, não recomendamos isso, especialmente quando a alta disponibilidade é importante para você. Ele reduz a disponibilidade de um hub de eventos para o nível de partição. Para obter mais informações, consulte Disponibilidade e consistência.

Próximos passos

Pode saber mais sobre os Hubs de Eventos ao aceder às seguintes ligações: