O Function Compute oferece dois modos de uso para instâncias: sob demanda e provisionado. Em ambos os modos, configure regras de Auto Scaling com base em limites relacionados à quantidade de instâncias e à velocidade de dimensionamento. Para instâncias provisionadas, defina regras de dimensionamento agendado e baseado em limiar.
Comportamento de dimensionamento de instâncias
Function Compute utiliza prioritariamente as instâncias existentes para processar solicitações. Quando essas instâncias atingem a capacidade máxima, o Function Compute cria novas instâncias para atender às requisições. À medida que o volume de solicitações aumenta, o Function Compute continua criando instâncias até haver quantidade suficiente para lidar com o tráfego recebido ou até atingir o limite máximo permitido. A velocidade de dimensionamento é restringida tanto pelo número máximo de instâncias burstáveis quanto pela taxa máxima de crescimento das instâncias. Para mais detalhes sobre os limites em diferentes regiões, consulte Limites na velocidade de dimensionamento de instâncias em diferentes regiões.
Esta seção descreve os comportamentos de dimensionamento para instâncias sob demanda e provisionadas. Configure instâncias provisionadas para uma função permite reservar uma quantidade específica de instâncias antes das invocações, o que ajuda a mitigar cold starts.
Dimensionamento de instâncias sob demanda
Se a quantidade de instâncias ou a velocidade de dimensionamento ultrapassar o limite, o Function Compute retorna um status code HTTP 429, indicando erro de throttling. A figura a seguir ilustra como o Function Compute aplica o throttling durante picos de invocações.
①: O Function Compute cria instâncias imediatamente para lidar com o aumento repentino de solicitações. Cold starts ocorrem durante esse processo. Nenhum erro de throttling é reportado, pois o número de instâncias burstáveis ainda não atingiu o limite superior.
②: O aumento no número de instâncias passa a ser limitado pela taxa de crescimento, pois o limite superior para instâncias burstáveis foi atingido. Erros de throttling são reportados para algumas solicitações.
③: A quantidade de instâncias atinge o limite máximo, resultando em erros de throttling para parte das requisições.
Dimensionamento de instâncias provisionadas
Quando o volume de invocações repentinas é muito alto, erros de throttling tornam-se inevitáveis. Além disso, a criação de novas instâncias introduz cold starts. Ambos os fatores aumentam a latência no tratamento das solicitações. Para reduzir essa latência, reserve instâncias antecipadamente no Function Compute. Essas instâncias reservadas são chamadas de instâncias provisionadas.
A figura a seguir mostra como o Function Compute aplica o throttling quando instâncias provisionadas estão configuradas e ocorrem picos de invocações semelhantes ao cenário de modo sob demanda.
①: Todas as solicitações recebidas são processadas imediatamente até as instâncias provisionadas atingirem sua capacidade total. Durante esse processo, não ocorrem cold starts e nenhum erro de throttling é reportado.
②: As instâncias provisionadas estão totalmente utilizadas. O Function Compute começa a criar instâncias sob demanda para lidar com as solicitações subsequentes até o número de instâncias burstáveis atingir o limite superior. Nesse período, ocorrem cold starts, mas não há registro de erros de throttling.
Limites na velocidade de dimensionamento de instâncias em diferentes regiões
|
Região |
Número máximo de instâncias burstáveis |
Taxa máxima de crescimento de instâncias |
|
China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou) e China (Shenzhen) |
300 |
300 por minuto |
|
Outras regiões |
100 |
100 por minuto |
Na mesma região, os limites de velocidade de dimensionamento não distinguem entre instâncias provisionadas e sob demanda.
Instâncias aceleradas por GPU possuem velocidade de dimensionamento mais lenta comparada às instâncias de CPU. Por isso, recomendamos reservar instâncias aceleradas por GPU antecipadamente usando o modo provisionado.
Caso necessite de velocidades de dimensionamento mais rápidas, participe do grupo do DingTalk (ID do grupo: 64970014484) para obter suporte técnico.
Auto Scaling de instâncias provisionadas
Além de definir um número fixo de instâncias provisionadas, faça ajustes flexíveis configurando políticas de dimensionamento agendado e baseado em limiar. Essa abordagem melhora a utilização das instâncias.
Se nenhuma política de dimensionamento agendado ou baseado em limiar estiver configurada para suas instâncias provisionadas, a quantidade de instâncias provisionadas será sempre igual ao valor do parâmetro defaultTarget.
Quando múltiplas políticas de dimensionamento agendado estiverem configuradas, o número de instâncias provisionadas em qualquer momento será determinado pela meta de instâncias especificada pela política ativa.
Se houver políticas de dimensionamento agendado e baseado em limiar configuradas simultaneamente, a quantidade de instâncias provisionadas em um dado momento corresponderá à maior meta de instâncias entre as políticas ativas.
Para mais informações, consulte Exemplo.
Dimensionamento agendado
Cenários
Escolha o dimensionamento agendado quando sua função apresentar padrões periódicos distintos ou picos de tráfego previsíveis. Se o número de invocações concorrentes exceder a capacidade definida pela política de dimensionamento agendado, todas as solicitações excedentes serão direcionadas para instâncias sob demanda para processamento.
Configuração de exemplo
A figura a seguir apresenta duas ações agendadas para dimensionamento de instâncias: a primeira faz o scale-out das instâncias provisionadas antes do pico de tráfego, enquanto a segunda realiza o scale-in posteriormente.
O trecho de código a seguir demonstra como chamar a operação PutProvisionConfig para configurar políticas de dimensionamento agendado. Neste exemplo, uma função chamada function_1 é configurada para realizar scale-in e scale-out automaticamente, com fuso horário definido como Asia/Shanghai (UTC+8). As configurações entram em vigor das 10:00:00 de 1º de agosto de 2024 até as 10:00:00 de 30 de agosto de 2024 (UTC+8). Durante esse período, o número de instâncias provisionadas aumenta para 50 às 20:00 (UTC+8) e diminui para 10 às 22:00 (UTC+8) diariamente.
"scheduledActions": [
{
"name": "scale_up_action",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"target": 50,
"scheduleExpression": "cron(0 0 20 * * *)",
"timeZone": "Asia/Shanghai"
},
{
"name": "scale_down_action",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"target": 10,
"scheduleExpression": "cron(0 0 22 * * *)",
"timeZone": "Asia/Shanghai"
}
]
Expressões Cron
Dimensionamento baseado em limiar
Cenários
Após configurar uma política de dimensionamento baseado em limiar, o Function Compute coleta periodicamente métricas de concorrência ou utilização de recursos das instâncias provisionadas. O serviço utiliza essas métricas, juntamente com os números mínimo e máximo de instâncias provisionadas especificados, para controlar o dimensionamento e garantir que a quantidade de instâncias esteja alinhada ao uso real dos recursos.
Configuração de exemplo
A figura a seguir mostra um exemplo de Auto Scaling baseado na utilização da concorrência de instâncias. Quando o volume de tráfego aumenta, o limiar de scale-out é acionado e o Function Compute começa a aumentar o número de instâncias provisionadas. O scale-out cessa quando a quantidade atinge o limite superior definido. Solicitações excedentes são enviadas para instâncias sob demanda para processamento.
Para configurar uma política de dimensionamento baseado em limiar, ative primeiro a coleta de métricas no nível da instância. Caso contrário, um erro
400 InstanceMetricsRequiredserá reportado. Para mais informações, consulte Ativar métricas no nível da instância.A métrica de utilização de concorrência inclui apenas a concorrência das instâncias provisionadas, excluindo a das instâncias sob demanda.
Essa métrica avalia a proporção entre solicitações concorrentes tratadas pelas instâncias provisionadas e o número máximo de solicitações concorrentes que todas as instâncias provisionadas conseguem processar. O valor da métrica varia de 0 a 1.
O trecho de código a seguir demonstra como chamar a operação PutProvisionConfig para configurar políticas de dimensionamento baseado em limiar. Neste exemplo, uma função chamada function_1 é configurada para realizar scale-in e scale-out automaticamente com base na métrica ProvisionedConcurrencyUtilization, que rastreia a utilização de concorrência das instâncias provisionadas. O fuso horário está definido como Asia/Shanghai (UTC+8). As configurações entram em vigor das 10:00:00 de 1º de agosto de 2024 até as 10:00:00 de 30 de agosto de 2024 (UTC+8). Durante esse período, quando a utilização de concorrência excede 60%, o número de instâncias provisionadas aumenta até o máximo de 100. Inversamente, quando a utilização cai abaixo de 60%, a quantidade de instâncias provisionadas diminui até o mínimo de 10.
"targetTrackingPolicies": [
{
"name": "action_1",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"metricType": "ProvisionedConcurrencyUtilization",
"metricTarget": 0.6,
"minCapacity": 10,
"maxCapacity": 100,
"timeZone": "Asia/Shanghai"
}
]
Princípios de dimensionamento
Quando o scale-in de instâncias é acionado, o Function Compute reduz gradualmente o número de instâncias provisionadas com base em um coeficiente de scale-in que varia de 0 (excluído) a 1. Esse coeficiente é um parâmetro do sistema usado para desacelerar o scale-in e não requer configuração manual. Os valores alvo para as tarefas de dimensionamento correspondem aos menores inteiros maiores ou iguais aos resultados dos seguintes cálculos:
Valor alvo de scale-out = Instâncias provisionadas atuais × (Valor atual da métrica/Limiar de utilização especificado)
Valor alvo de scale-in = Instâncias provisionadas atuais × Coeficiente de scale-in × (1 - Valor atual da métrica/Limiar de utilização especificado)
O exemplo a seguir demonstra como calcular o alvo de scale-out. Da mesma forma, determine o alvo de scale-in usando o princípio e a fórmula mencionados anteriormente.
Se o valor atual da métrica for 80%, o limiar de utilização especificado for 40% e o número atual de instâncias provisionadas for 100, então o número alvo de instâncias é calculado da seguinte forma: 100 × (80%/40%) = 200. A quantidade de instâncias provisionadas aumenta para 200 (desde que não exceda o máximo permitido) para garantir que a utilização permaneça em torno de 40%.
Exemplo
O exemplo a seguir esclarece como os valores alvo especificados pelo parâmetro defaultTarget e pelas políticas de dimensionamento agendado determinam o número de instâncias provisionadas em um momento específico. Neste cenário, o parâmetro defaultTarget está definido como 5 e duas políticas de dimensionamento agendado estão configuradas, utilizando o fuso horário Asia/Shanghai (UTC+8). As configurações vigoram das 10:00:00 de 9 de janeiro de 2025 até as 00:00:00 de 11 de janeiro de 2025 (UTC+8). Durante esse intervalo, o número de instâncias provisionadas aumenta para 20 às 10:00 (UTC+8) e diminui para 10 às 22:00 (UTC+8) diariamente. O trecho de código a seguir mostra o conteúdo das políticas de dimensionamento:
{
"defaultTarget": 5,
"scheduledActions": [
{
"name": "scale_up_action",
"startTime": "2025-01-09T10:00:00",
"endTime": "2025-01-11T00:00:00",
"target": 20,
"scheduleExpression": "cron(0 0 10 * * *)",
"timeZone": "Asia/Shanghai"
},
{
"name": "scale_down_action",
"startTime": "2025-01-09T10:00:00",
"endTime": "2025-01-11T00:00:00",
"target": 10,
"scheduleExpression": "cron(0 0 22 * * *)",
"timeZone": "Asia/Shanghai"
}
]
}
A figura a seguir ilustra as alterações no número de instâncias provisionadas ao longo do tempo:
Concorrência máxima
O número máximo de solicitações concorrentes que todas as instâncias provisionadas podem processar, ou concorrência máxima, é determinado pela configuração de concorrência da instância.
-
Cada instância processa uma única solicitação por vez
Concorrência máxima = Número de instâncias
-
Cada instância processa múltiplas solicitações simultaneamente
Concorrência máxima = Número de instâncias × Número de solicitações processadas simultaneamente por uma instância
Para mais informações sobre cenários, benefícios, configurações e impactos do recurso de concorrência de instâncias, consulte Configure concorrência de instância.
Referências
Para saber mais sobre conceitos básicos e métodos de faturamento dos modos sob demanda e provisionado, consulte Tipos e modos de uso de instâncias.
Para detalhes sobre como melhorar a utilização de recursos das instâncias provisionadas, veja Configure políticas elásticas para o número mínimo de instâncias.
Por padrão, todas as funções dentro de uma conta Alibaba Cloud na mesma região compartilham os mesmos limites de dimensionamento. Para aprender a limitar o número de instâncias para uma função específica, consulte Configure cotas de função. Quando o número de instâncias em execução excede o máximo especificado, o Function Compute retorna um erro de throttling.