Operações de limitação no Barramento de Serviço do Azure

As soluções nativas de nuvem fornecem uma noção de recursos ilimitados que podem ser escalados com sua carga de trabalho. Embora essa noção seja mais verdadeira na nuvem do que com os sistemas locais, ainda há limitações que existem na nuvem. Essas limitações podem causar a limitação de solicitações de aplicativos cliente nas camadas Standard e Premium, conforme discutido neste artigo.

Limitação na camada standard

A camada Standard do Barramento de Serviço do funciona como uma configuração multilocatário com um modelo de preços de pagamento conforme o uso. Aqui, vários namespaces no mesmo cluster compartilham os recursos alocados. A camada standard é a opção recomendada para ambientes de desenvolvimento, ambientes de garantia de qualidade e sistemas de produção de baixa taxa de transferência.

No passado, o Barramento de Serviço tinha limites grosseiros de limitação estritamente dependentes da utilização de recursos. No entanto, há uma oportunidade de refinar a lógica de limitação e fornecer um comportamento de limitação previsível a todos os namespaces que estão compartilhando esses recursos.

Em uma tentativa de garantir o uso e a distribuição justos de recursos em todos os namespaces padrão do Barramento de Serviço que usam os mesmos recursos, o Barramento de Serviço Standard atualmente usa a lógica de limitação baseada em crédito.

Observação

É importante observar que a limitação não é novidade no Barramento de Serviço do Azure nem em qualquer serviço de nuvem nativo.

A limitação baseada em crédito se trata simplesmente de refinar a maneira como vários namespaces compartilham recursos em um ambiente de camada standard multilocatário e, portanto, de habilitar o uso justo por todos os namespaces que compartilham os recursos.

O que é limitação baseada em crédito?

A limitação baseada em crédito limita o número de operações que podem ser executadas em um determinado namespace em um período de tempo específico. Aqui, temos o fluxo de trabalho para a limitação baseada em crédito.

  • No início de cada período, o Barramento de Serviço fornece um determinado número de créditos para cada namespace.
  • Todas as operações executadas pelos aplicativos cliente remetente ou receptor serão contadas para esses créditos (e subtraídas dos créditos disponíveis).
  • Se os créditos estiverem esgotados, as operações subsequentes serão limitadas até o início do próximo período de tempo.
  • Os créditos são reabastecidos no início do próximo período de tempo.

Quais são os limites de crédito?

Os limites de crédito estão definidos como 1000 créditos por segundo (por namespace). Nem todas as operações são criadas da mesma forma. Veja a seguir os custos de crédito de cada uma das operações.

Operação Custo de crédito
Operações de dados (Send, SendAsync, Receive, ReceiveAsync, Peek) 1 crédito por mensagem
Operações de gerenciamento (Create, Read, Update, Delete em filas, tópicos, assinaturas, filtros) 10 créditos

Observação

Ao enviar a um tópico, cada mensagem é avaliada em relação aos filtros antes de ser disponibilizada na assinatura. Cada avaliação de filtro também é contabilizada para o limite de crédito (ou seja, 1 crédito por avaliação de filtro).

Como saber se estou sofrendo limitações?

Quando as solicitações de aplicativo cliente estão sendo limitadas, o aplicativo cliente recebe a resposta do servidor a seguir.

The request was terminated because the entity is being throttled. Error code: 50009. Please wait 2 seconds and try again.

Como posso evitar a limitação?

Com recursos compartilhados, é importante impor algum tipo de uso justo em vários namespaces do Barramento de Serviço que compartilham esses recursos. A limitação garante que um pico em uma só carga de trabalho não cause limitação em nenhuma outra carga de trabalho nos mesmos recursos. Conforme mencionado posteriormente neste artigo, não há risco de existir limitação, uma vez que os SDKs do cliente (e outras ofertas de PaaS do Azure) têm a política de repetição padrão interna. Todas as solicitações limitadas serão repetidas com retirada exponencial e, eventualmente, serão passadas quando os créditos forem reabastecidos.

É compreensível que alguns aplicativos possam ser sensíveis com relação à limitação. Nesse caso, é recomendável migrar seu namespace do Barramento de Serviço atual de Standard para Premium. Na migração, você poderá alocar recursos dedicados ao namespace do Barramento de Serviço e escalar verticalmente os recursos da maneira adequada se houver um pico na carga de trabalho e reduzir a probabilidade de ser limitado. Além disso, quando sua carga de trabalho é reduzida a níveis normais, você pode reduzir verticalmente os recursos alocados ao seu namespace.

Limitação na camada Premium

A camada Premium do Barramento de Serviço aloca recursos dedicados, em termos de unidades do sistema de mensagens, a cada configuração de namespace pelo cliente. Esses recursos dedicados fornecem taxa de transferência e latência previsíveis e são recomendados para alta taxa de transferência ou sistemas de nível de produção sensíveis. Além disso, a camada Premium também permite que os clientes aumentem a capacidade de taxa de transferência deles quando experimentarem picos na carga de trabalho. Para saber mais, confira Atualizar automaticamente as unidades do sistema de mensagens de um namespace do Barramento de Serviço do Azure.

Como a limitação funciona no Barramento de Serviço Premium?

Com a alocação de recurso exclusiva para a camada Premium, a limitação é puramente controlada pelas limitações dos recursos alocados ao namespace. Se o número de solicitações for maior do que o que os recursos atuais puderem atender, as solicitações serão limitadas.

Como saber se estou sofrendo limitações?

Há várias maneiras de identificar a limitação na camada Premium do Barramento de Serviço.

  • As solicitações limitadas aparecem nas métricas de Solicitação do Azure Monitor para identificar quantas solicitações foram limitadas.
  • Alto uso da CPU indica que a alocação de recurso atual é alta e que as solicitações poderão ser limitadas se a carga de trabalho atual não for reduzida.
  • Alto uso de memória indica que a alocação de recurso atual é alta e que as solicitações poderão ser limitadas se a carga de trabalho atual não for reduzida.

Como posso evitar a limitação?

Assim como o namespace Premium do Barramento de Serviço já tem recursos dedicados, você pode reduzir a possibilidade de ser limitado ao escalar verticalmente o número de unidades do sistema de mensagens alocadas ao seu namespace no evento (ou antecipação) de um pico na carga de trabalho. Para saber mais, confira Atualizar automaticamente as unidades do sistema de mensagens de um namespace do Barramento de Serviço do Azure.

Perguntas frequentes

Como a limitação afeta meu aplicativo?

Quando uma solicitação é limitada, ela indica que o serviço está ocupado porque está enfrentando mais solicitações do que o que os recursos permitem. Se a mesma operação for tentada novamente após alguns instantes, depois que o serviço tiver trabalhado por meio de sua carga de trabalho atual, a solicitação poderá ser respeitada.

Como a limitação é o comportamento esperado de qualquer serviço nativo de nuvem, a lógica de repetição é integrada ao SDK do Barramento de Serviço. O padrão é definido como a repetição automática com uma retirada exponencial para garantir que não tenhamos a mesma solicitação sendo limitada sempre. A lógica de repetição padrão será aplicada a todas as operações.

Observação

O código de processamento de mensagens que chama outros serviços de terceiros também pode ser limitado por esses outros serviços. Para obter mais informações sobre como lidar com esses cenários, confira a documentação sobre o Padrão de Limitação.

A limitação resulta em perda de dados?

O Barramento de Serviço do Azure é otimizado para persistência. Garantimos que todos os dados enviados ao Barramento de Serviço sejam confirmados no armazenamento antes que o serviço reconheça o sucesso da solicitação.

Após a solicitação ser confirmada com êxito pelo Barramento de Serviço, isso significa que o Barramento de Serviço processou a solicitação com êxito. Se o Barramento de Serviço retorna uma falha, isso significa que o Barramento de Serviço não pôde processar a solicitação e que o aplicativo cliente precisa repeti-la.

No entanto, quando uma solicitação é limitada, o serviço está implicando que não pode aceitar e processar a solicitação no momento, devido a limitações de recursos. Isso não implica nenhum tipo de perda de dados porque o Barramento de Serviço simplesmente não examinou a solicitação. Nesse caso, depender da política de repetição padrão do SDK do Barramento de Serviço garante que a solicitação seja eventualmente processada.

Para obter mais informações e exemplos de uso do sistema de mensagens do Barramento de Serviço, consulte os tópicos avançados a seguir: