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, especifique CONSTANT) ou não usar a simultaneidade provisionada (nesse caso, especifique NONE)
    • \"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).