Redução da Latência Inicial Usando Simultaneidade Provisionada
Descubra como usar a simultaneidade provisionada para minimizar atrasos iniciais ao chamar funções no OCI Functions.
Quando uma função é chamada pela primeira vez (conhecida como "início frio"), o OCI Functions provisiona a chamada de função com a infraestrutura de execução necessária. A infraestrutura de execução inclui os recursos de computação e rede necessários para chamar a função com sucesso. O provisionamento inicial e, portanto, a resposta à primeira chamada podem levar algum tempo variável (potencialmente vários segundos ou mais). A infraestrutura de execução da chamada de função inicial é mantida por um período de tempo (referido como "tempo ocioso"), para uso por chamadas subsequentes da mesma função. Quando uma chamada de função subsequente é capaz de fazer uso da infraestrutura existente (referida como um "início quente"), geralmente há um tempo de resposta de subsegundo para a chamada de função.
É comum que você queira respostas consistentes, de subsegundo, para chamadas de função. Para minimizar qualquer latência associada ao provisionamento inicial e garantir inicializações quentes, você pode ativar a concorrência provisionada para uma função. A simultaneidade provisionada é a capacidade do OCI Functions de sempre ter disponível a infraestrutura de execução para pelo menos um determinado número mínimo de chamadas de função simultâneas. A simultaneidade provisionada é medida em 'unidades de simultaneidade provisionada' (PCUs). O número total de PCUs disponíveis depende do tamanho da função, do limite da tenancy e se a simultaneidade provisionada foi ativada para outras funções na tenancy.
Para usar a simultaneidade provisionada, especifique o número de PCUs necessárias para a função. Normalmente, você vai querer especificar um número semelhante de PCUs para o número de chamadas de função simultânea que você espera. A memória disponível que você especifica para uma função determina o menor número de PCUs que você pode especificar para essa função e os incrementos pelos quais você pode aumentar o número de PCUs, da seguinte forma:
Memória | Número mínimo de PCUs: | Aumente as PCUs em incrementos de: | Exemplo |
---|---|---|---|
128 MB | 40 | 40 | 80 |
256 MB | 20 | 20 | 60 |
512 MB | 10 | 10 | 50 |
1024 MB | 10 | 10 | 40 |
2048 MB | 10 | 10 | 30 |
3072 MB | 10 | 10 | 30 |
Como você pode ver, o valor de PCUs sempre deve ser um múltiplo de 10. Se a memória disponível for de 256 MB, o valor de PCUs deverá ser um múltiplo de 20. Se a memória disponível for de 128 MB, o valor de PCUs deverá ser um múltiplo de 40.
Você pode especificar PCUs para uma função de diferentes maneiras:
- Usando a Console ao criar uma nova função com base em uma imagem existente do Docker que já foi enviada para o registro do Docker (consulte Criando Funções com Base em Imagens Existentes do Docker).
- Usando a CLI do Oracle Cloud Infrastructure para criar ou atualizar uma função e especificando a opção
--provisioned-concurrency
opcional, no formato:--provisioned-concurrency "{\"strategy\": \"<CONSTANT|NONE>\", \"count\": <value>}"
em que:
\"strategy\": \"<CONSTANT|NONE>\"
indica se deve usar a simultaneidade provisionada (nesse caso, especifiqueCONSTANT
) ou não usar a simultaneidade provisionada (nesse caso, especifiqueNONE
)\"count\": <value>
indica o número mínimo de chamadas de função simultâneas, quando\"strategy\": \"CONSTANT\"
Por exemplo:
oci fn function create --application-id ocid1.fnapp.oc1.phx.aaaaaaaaaf______r3ca --display-name helloworld-func --image phx.ocir.io/ansh81vru1zp/helloworld/helloworld-func:0.0.1 --memory-in-mbs 128 --provisioned-concurrency "{\"strategy\": \"CONSTANT\", \"count\": 40}"
oci fn function update --function-id ocid1.fnfunc.oc1.phx.aaaa____uxoa --provisioned-concurrency "{\"strategy\": \"CONSTANT\", \"count\": 40}"
Observe que os parâmetros
--provisioned-concurrency
devem estar no formato JSON válido, que depende da plataforma que você está usando (consulte Gerenciando Entrada e Saída da CLI). Você pode fornecer os parâmetros como uma string na linha de comando, como um arquivo ou como uma string de linha de comando e como um arquivo. - Usando a API (consulte CreateFunction e UpdateFunction).