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 uma revisão não recebe tráfego, por predefinição, é dimensionada para zero instâncias de contentores. No entanto, se quiser, pode alterar esta predefinição para especificar uma instância a manter inativa ou "ativa" através da definição minimum instances (instâncias mínimas).
O número de instâncias agendadas é afetado pelos seguintes fatores:
- A quantidade de CPU necessária para processar um pedido
- A definição de simultaneidade
- A definição do número máximo de instâncias do contentor
- A definição do número mínimo de instâncias de contentores
Em alguns casos, pode querer limitar o número total de instâncias de contentores que podem ser iniciadas, por motivos de controlo de custos ou para uma melhor compatibilidade com outros recursos usados pelo seu serviço. Por exemplo, o seu serviço Knative serving pode interagir com uma base de dados que só consegue processar um determinado número de ligações abertas em simultâneo.
Acerca do número máximo de instâncias de contentores
Pode usar a definição de instâncias máximas do contentor para limitar o número total de instâncias que podem ser iniciadas em paralelo, conforme documentado no artigo Definir um número máximo de instâncias do contentor.
Exceder o número máximo de instâncias
Em circunstâncias normais, a sua revisão é dimensionada horizontalmente através da criação de novas instâncias para processar a carga de tráfego recebido. No entanto, quando define um limite máximo de instâncias, em alguns cenários, existem instâncias insuficientes para satisfazer essa carga de tráfego. Nesse caso, os pedidos recebidos ficam em fila durante um máximo de 60 segundos. Durante este período de 60 segundos, se uma instância terminar de processar pedidos, fica disponível para processar pedidos em fila. Se não ficarem disponíveis instâncias durante o período de 60 segundos, o pedido falha com um código de erro 429
no Cloud Run.
Garantias de escalabilidade
O limite máximo de instâncias é um limite superior. A definição de um limite elevado não significa que a sua revisão vai ser expandida até ao número especificado de instâncias do contentor. Significa apenas que o número de instâncias de contentores em qualquer momento não deve exceder o limite.
Picos de tráfego
Em alguns casos, como picos de tráfego rápidos, o Knative Serving pode, durante um curto período, criar ligeiramente mais instâncias de contentores do que o valor máximo de instâncias especificado. Se o seu serviço não tolerar este comportamento temporário, é aconselhável ter em conta uma margem de segurança e definir um valor de instâncias máximo inferior.
Implementações
Quando implementa uma nova revisão, o Knative Serving migra gradualmente o tráfego da revisão antiga para a nova. Como os limites máximos de instâncias são definidos para cada revisão, pode exceder temporariamente o limite especificado durante o período após a implementação.
Instâncias inativas e minimização dos inícios a frio
Os recursos do Kubernetes só são consumidos quando uma instância está a processar um pedido, mas isto não significa que o Knative Serving encerre imediatamente as instâncias assim que processarem todos os pedidos. Para minimizar o impacto dos inícios a frio, o Knative Serving pode manter algumas instâncias inativas. Estas instâncias estão prontas para processar pedidos em caso de um pico de tráfego repentino.
Por exemplo, quando uma instância de contentor termina de processar pedidos, pode permanecer inativa durante algum tempo caso seja necessário processar outro pedido. Uma instância de contentor inativa pode manter recursos, como ligações de base de dados abertas. No entanto, para o Cloud Run, a CPU não está disponível
Para manter as instâncias inativas permanentemente disponíveis, use a definição
min-instance
.
O que se segue?
- Para gerir o número máximo de instâncias dos seus serviços Knative serving, consulte o artigo Definir um número máximo de instâncias de contentores.
- Para gerir o número máximo de pedidos simultâneos processados por cada instância do contentor, consulte o artigo Definir simultaneidade.
- Para otimizar a definição de simultaneidade, consulte as dicas de desenvolvimento para ajustar a simultaneidade.
- Para especificar uma instância inativa a manter em execução para minimizar a latência ou os inícios a frio
nos primeiros pedidos, consulte
Usar
min-instance
para ativar instâncias inativas.