Configuração da multi-corrência de instância única
Este recurso é suportado apenas pelo FunctionGraph v2.
Visão geral
A multi-concorrência de instância única permite que uma instância processe um número especificado de solicitações simultaneamente. Esse recurso tem as seguintes vantagens:
- Melhora a eficiência da execução da função e reduz a duração da execução.
- Reduz a probabilidade de partidas a frio.
- Reduz o número total de instâncias e economiza recursos.
Cenários de aplicação
Se as solicitações de função levarem muito tempo para aguardar a resposta dos serviços downstream, você poderá configurar a multi-concorrência de instância única para que as solicitações possam ser processadas simultaneamente.
Comparação
Se uma função demorar 5s para ser executada a cada vez e você definir o número de solicitações que podem ser processadas simultaneamente por uma instância como 1, três solicitações precisam ser processadas em três instâncias, respectivamente. Portanto, a duração total da execução é de 15s.
Quando você definir Max. Requests per Instance a 5, se três solicitações forem enviadas, elas serão processadas simultaneamente por uma instância. O tempo total de execução é de 5s.
Quando Max. Requests per Instance por Instância for maior que 1, a concorrência de recursos e a segurança de simultaneidade devem ser consideradas.
Solicitações excessivas precisam esperar um pouco antes de serem processadas. Por exemplo, se o número de solicitações simultâneas de uma única instância for definido como 10, o sistema não retornará um erro imediatamente quando o número de solicitações exceder a capacidade de processamento. Os pedidos excessivos serão processados após um período de tempo.
Item de comparação |
Concorrência única de instância única |
Multi-concorrência de instância única |
---|---|---|
Impressão de registração |
- |
Para imprimir registrações, o Runtime do Node.js usa a função console.info(), o Runtime do Python usa a função print() e o Java Runtime usa a função System.out.println(). Nesse modo, os ID de solicitação atuais são incluídos no conteúdo do registração. No entanto, quando várias solicitações são processadas simultaneamente por uma instância, os ID de solicitação estão incorretas se você continuar a usar as funções anteriores para imprimir registrações. Para resolver esse problema, use a função context.getLogger().registração(). Esse método retém os ID da solicitação separadamente. |
Variáveis compartilhadas |
Não envolvido. |
Modificar variáveis compartilhadas causará erros. A proteção de exclusão mútua é necessária quando você modifica variáveis non-thread-safe durante a gravação da função. |
Métricas de monitoramento |
Realizar monitoramento com base na situação real. |
Sob a mesma carga, o número de instâncias de função diminui significativamente. |
Erro de controle de fluxo |
Não envolvido. |
Quando há muitas solicitações, o código de erro no corpo é FSS.0429, o status no cabeçalho da resposta é 429, e a mensagem de erro é Your request has been controlled by overload sdk, please retry later. |
Configurando a Multicorrência de Instância Única
- Efetue log-in no Console do FunctionGraph. No painel de navegação, escolha Functions > Function List.
- Clique na função a ser configurada para ir para a página de detalhes da função.
- Escolha Configuration > Concurrency.
Defina os parâmetros referindo-se a Tabela 2 e clique em Save.Figura 1 Configuração de simultaneidade
Tabela 2 Descrição Parâmetro
Descrição
Max. Requests per Instance
Número de solicitações simultâneas suportadas por uma única instância. Intervalo do valor: 1–100. Para mais detalhes, veja Configuração da multi-corrência de instância única.
Max. Instances per Function
Número máximo de instâncias nas quais uma função pode ser executada. –1 (predefinição): A função pode ser executada em qualquer número de instâncias. 0: A função está desativada.
NOTA:As solicitações que excederem a capacidade de processamento das instâncias serão descartadas.
Erros causados por solicitações excessivas não serão exibidos nos registrações de função. Você pode obter detalhes do erro consultando Configuração da notificação de execução assíncrona.
Restrições de configuração
- Para funções Java, a multi-concorrência de instância única tem as seguintes restrições:
- 128 MB de memória: até 25 solicitações simultâneas
- 256 MB de memória: até 50 solicitações simultâneas
- 512 MB ou mais de memória: até 100 solicitações simultâneas
- Para funções Python, os threads em uma instância são vinculados a um núcleo devido ao bloqueio GIL (Global Interpreter Lock) do Python. Como resultado, as solicitações simultâneas só podem ser processadas usando o núcleo único, não vários núcleos. O desempenho de processamento de função não pode ser melhorado mesmo que especificações de recursos maiores estejam configuradas.
- Para funções Node.js, o processamento de thread único do mecanismo V8 resulta no processamento de solicitações simultâneas usando apenas um único núcleo, não vários núcleos. O desempenho de processamento de função não pode ser melhorado mesmo que especificações de recursos maiores estejam configuradas.