Simultaneidade

No Knative serving, cada revisão é automaticamente dimensionada para o número de instâncias de contentores necessárias para processar todos os pedidos recebidos.

Quando mais instâncias de contentores estão a processar pedidos, é usada mais CPU e memória, o que resulta em custos mais elevados. Quando é necessário iniciar novas instâncias de contentores, os pedidos podem demorar mais tempo a serem processados, o que diminui o desempenho do seu serviço.

Para lhe dar mais controlo, o Knative Serving oferece uma definição de concorrência que especifica o número máximo de pedidos que podem ser processados simultaneamente por uma determinada instância de contentor.

Valores de simultaneidade

Por predefinição, as instâncias de contentores do Knative Serving podem receber muitos pedidos em simultâneo (até um máximo de 80). Tenha em atenção que, em comparação, as soluções de funções como serviço (FaaS), como as funções do Cloud Run, têm uma concorrência fixa de 1.

Embora deva usar o valor de simultaneidade predefinido, se necessário, pode diminuir a simultaneidade máxima. Por exemplo, se o seu código não conseguir processar pedidos paralelos, defina a simultaneidade como 1.

O valor de simultaneidade especificado é um máximo e o Knative serving pode não enviar tantos pedidos a uma determinada instância de contentor se a CPU da instância já estiver a ser muito usada.

O diagrama seguinte mostra como a definição de simultaneidade afeta o número de instâncias do contentor necessárias para processar os pedidos simultâneos recebidos:

Diagrama de simultaneidade

Quando limitar a simultaneidade a um pedido de cada vez

Pode limitar a simultaneidade para que apenas um pedido de cada vez seja enviado para cada instância de contentor em execução. Deve considerar fazê-lo nos casos em que:

  • Cada pedido usa a maior parte da CPU ou da memória disponível.
  • A sua imagem do contentor não foi concebida para processar vários pedidos ao mesmo tempo, por exemplo, se o seu contentor depender de um estado global que dois pedidos não podem partilhar.

Tenha em atenção que uma concorrência de 1 afeta provavelmente o desempenho de escalabilidade de forma negativa, porque muitas instâncias de contentores têm de ser iniciadas para processar um aumento acentuado nos pedidos recebidos.

Caso prático

As métricas seguintes mostram um exemplo de utilização em que 400 clientes estão a fazer 3 pedidos por segundo a um serviço de publicação do Knative definido para uma simultaneidade máxima de 1. A linha superior verde mostra os pedidos ao longo do tempo. A linha inferior azul mostra o número de instâncias de contentores iniciadas para processar os pedidos.

Simultaneidade definida como um

As métricas seguintes mostram 400 clientes a fazer 3 pedidos por segundo a um serviço de publicação do Knative definido para uma concorrência máxima de 80. A linha superior verde mostra os pedidos ao longo do tempo. A linha inferior azul mostra o número de instâncias do contentor iniciadas para processar os pedidos. Repare que são necessárias muito menos instâncias para processar o mesmo volume de pedidos.

Concorrência definida como 80

O que se segue?

Para gerir a simultaneidade dos seus serviços Knative Serving, consulte o artigo Definir simultaneidade.

Para otimizar a definição de simultaneidade, consulte as dicas de desenvolvimento para ajustar a simultaneidade.