O Function Compute dimensiona instâncias automaticamente para lidar com o tráfego recebido. Há dois modos disponíveis: sob demanda e provisionado, cada um com comportamento e limites de dimensionamento específicos. Para instâncias provisionadas, configure também o dimensionamento agendado e o dimensionamento baseado em limiar para ajustar a capacidade conforme os padrões de tráfego.
Como funciona o dimensionamento de instâncias
O Function Compute sempre encaminha as solicitações recebidas primeiro para as instâncias ociosas existentes. Quando todas as instâncias estão ocupadas, ele cria novas. O dimensionamento continua até que a carga de solicitações seja absorvida ou a contagem de instâncias atinja o limite regional.
Duas restrições regem a velocidade de dimensionamento:
Máximo de instâncias com burst: número máximo de novas instâncias criáveis em um único burst.
Taxa máxima de crescimento de instâncias: velocidade de adição de instâncias ao longo do tempo, medida em instâncias por minuto.
Ambos os limites se aplicam igualmente a instâncias sob demanda e provisionadas na mesma região.
Dimensionamento de instâncias sob demanda
Quando a velocidade de dimensionamento ou a contagem de instâncias excede o limite regional, o Function Compute retorna HTTP 429 para indicar limitação (throttling). A figura a seguir mostra as três fases durante um pico de tráfego.
Fase 1: as instâncias são iniciadas imediatamente para absorver o pico. Ocorrem cold starts, mas não há limitação, pois o limite de burst ainda não foi atingido.
Fase 2: o limite de burst é atingido. A criação de novas instâncias passa a ser restrita pela taxa de crescimento. Algumas solicitações sofrem limitação.
Fase 3: a contagem total de instâncias atinge o teto regional. A limitação continua para as solicitações que não podem ser atendidas.
Dimensionamento de instâncias provisionadas
As instâncias provisionadas são pré-inicializadas e mantidas em reserva antes da chegada de qualquer invocação. Isso elimina cold starts para a capacidade reservada e reduz a probabilidade de limitação durante picos de tráfego.
A figura a seguir mostra o mesmo cenário de pico com instâncias provisionadas em uso.
Fase 1: todas as solicitações recebidas são encaminhadas para instâncias provisionadas. Não ocorrem cold starts nem limitação até que a capacidade provisionada esteja cheia.
Fase 2: as instâncias provisionadas ficam saturadas. O Function Compute começa a criar instâncias sob demanda para lidar com o excesso. Ocorrem cold starts, mas a limitação ainda é evitada até que o limite de burst seja atingido.
Limites de velocidade de dimensionamento por região
|
Região |
Máximo de instâncias com burst |
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 |
Os limites são compartilhados entre todas as funções da mesma conta em uma região. Instâncias sob demanda e provisionadas são contadas juntas.
Instâncias aceleradas por GPU têm dimensionamento mais lento que instâncias de CPU. Use o modo provisionado para pré-alocar instâncias aceleradas por GPU e evitar atrasos de dimensionamento.
Para solicitar velocidades de dimensionamento mais rápidas, entre no grupo do DingTalk (ID do grupo: 64970014484 ) para obter suporte técnico.
Auto Scaling para instâncias provisionadas
Além de uma contagem fixa de instâncias provisionadas, configure ajustes automáticos com dimensionamento agendado e dimensionamento baseado em limiar. Essas políticas ajudam a alinhar a capacidade ao tráfego real e melhoram a utilização das instâncias.
Enquanto uma política elástica estiver ativa, ela substitui o valor inicial de Minimum Instances configurado para a função. Nos períodos sem política elástica em vigor, o sistema reverte para o valor de Minimum Instances configurado inicialmente.
Se houver várias políticas elásticas configuradas, o sistema calcula o valor de Minimum Instances que cada política acionaria e usa o maior valor entre as políticas atualmente em vigor como o valor efetivo de Minimum Instances.
Para mais informações, consulte How is the current minimum number of instances calculated?.
Dimensionamento agendado
Utilize o dimensionamento agendado quando o tráfego seguir um padrão previsível, como horários de pico durante o expediente comercial ou aumentos de tráfego ligados a eventos específicos. Quando as invocações simultâneas excederem a capacidade agendada, o excesso será encaminhado para instâncias sob demanda.
Configurar dimensionamento agendado
A figura a seguir mostra um ciclo típico de scale-out/scale-in em torno de um pico de tráfego.
O trecho a seguir configura duas políticas agendadas por meio da api PutProvisionConfig para uma função chamada function_1. O fuso horário é Asia/Shanghai (UTC+8). De 1º a 30 de agosto de 2024, a contagem de instâncias provisionadas aumenta para 50 às 20:00 e volta para 10 às 22:00 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"
}
]
Formatos de expressão de agendamento
Dois formatos são suportados:
Expressão At:
at(yyyy-mm-ddThh:mm:ss). Executa uma única vez na data e hora especificadas. Por exemplo,at(2024-04-01T20:00:00)comtimeZone: Asia/Shanghaidispara às 20:00 de 1º de abril de 2024 (UTC+8).Expressão Cron:
cron(0 0 4 * * *). Executa em um cronograma recorrente no formato crontab padrão. Por exemplo,cron(0 0 20 * * *)comtimeZone: Asia/Shanghaidispara às 20:00 diariamente (UTC+8).
Dimensionamento baseado em limiar
Utilize o dimensionamento baseado em limiar quando o tráfego for mais difícil de prever. O Function Compute coleta periodicamente métricas de concorrência ou utilização de recursos das instâncias provisionadas e ajusta a contagem de instâncias para permanecer dentro do intervalo minCapacity–maxCapacity definido.
O dimensionamento baseado em limiar exige que a coleta de métricas no nível da instância esteja ativada previamente. Sem isso, você receberá um erro 400 InstanceMetricsRequired . Consulte Ative collection of instance-level metrics .
A métrica ProvisionedConcurrencyUtilization rastreia apenas instâncias provisionadas. A concorrência de instâncias sob demanda é excluída.
A utilização de concorrência é a razão entre o número de solicitações simultâneas atualmente tratadas pelas Minimum Instances e o número máximo de solicitações simultâneas que as Minimum Instances podem suportar. O valor varia de 0 a 1.
Configurar dimensionamento baseado em limiar
A figura a seguir ilustra como o Function Compute faz scale-out quando o limiar de utilização de concorrência é excedido e scale-in quando a utilização cai.
O trecho a seguir configura uma política de dimensionamento baseado em limiar por meio da api PutProvisionConfig para function_1. O fuso horário é Asia/Shanghai (UTC+8) e a política está ativa de 1º a 30 de agosto de 2024. A política rastreia a métrica Provisioned concurrency utilization ProvisionedConcurrencyUtilization, com um valor alvo de 60% para a Provisioned concurrency utilization. Quando a utilização excede 60%, o scale-out é iniciado, até um máximo de 100 instâncias. Quando a utilização cai abaixo de 60%, o scale-in é iniciado, até um mínimo de 10 instâncias.
"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"
}
]
Cálculos de dimensionamento
O Function Compute faz scale-out de forma agressiva e scale-in gradualmente. A contagem alvo de instâncias é o menor número inteiro maior ou igual ao resultado calculado.
Alvo de scale-out = Instâncias atuais × (Valor atual da métrica /
metricTarget)Alvo de scale-in = Instâncias atuais × Coeficiente de scale-in × (1 − Valor atual da métrica /
metricTarget)
O coeficiente de scale-in é um parâmetro do sistema entre 0 (exclusivo) e 1 que desacelera o scale-in para evitar oscilações. Não requer configuração manual.
Exemplo: Se o valor atual da métrica for 80%, o alvo configurado de Provisioned concurrency utilization for 40% e o número mínimo atual de instâncias for 100:
Alvo de scale-out = 100 × (80% / 40%) = 200 instâncias
O Function Compute aumenta a contagem para 200 (limitado a maxCapacity) para trazer a utilização de volta ao alvo de 40%.
Como é calculado o número mínimo atual de instâncias?
O exemplo a seguir mostra como o número mínimo atual de instâncias é determinado conjuntamente pelo número mínimo de instâncias configurado inicialmente e pelos valores alvo definidos nas políticas de dimensionamento agendado.
Configuração:
defaultTarget: 5-
Duas políticas agendadas, fuso horário
Asia/Shanghai(UTC+8), ativas de 9 a 11 de janeiro de 2025Scale-out para 20 às 10:00 diariamente
Scale-in para 10 às 22:00 diariamente
{
"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 mostra como a contagem de instâncias provisionadas muda ao longo do tempo sob esta configuração.
Concorrência máxima
A concorrência máxima é o número total de solicitações simultâneas que todas as instâncias provisionadas podem tratar de uma só vez. Ela depende da configuração de concorrência de instância da sua função.
Instâncias de solicitação única (cada instância trata uma solicitação por vez): Concorrência máxima = Número de instâncias
Instâncias de múltiplas solicitações (cada instância trata várias solicitações simultaneamente): Concorrência máxima = Número de instâncias × Concorrência da instância
Para detalhes sobre como configurar a concorrência de instância e seu impacto no comportamento de dimensionamento, consulte Configure instance concurrency.
Próximos passos
Para conceitos básicos e detalhes de faturamento de instâncias sob demanda e provisionadas, consulte Tipos de instância e modos de uso.
Para limitar o número máximo de instâncias de uma função, consulte Configure function quotas. Após a configuração, quando o número total de instâncias em execução da função exceder o limite, o Function Compute retornará um erro de limitação.
Para detalhes sobre o cálculo do número mínimo atual de instâncias, consulte How is the current minimum number of instances calculated?.