Diminution de la latence initiale à l'aide de la concurrence provisionnée

Découvrez comment utiliser la concurrence provisionnée pour réduire les délais initiaux lors de l'appel de fonctions dans le service des fonctions pour OCI.

Lorsqu'une fonction est appelée pour la première fois (appelée " démarrage à froid "), le service des fonctions pour OCI provisionne l'appel de fonction avec l'infrastructure d'exécution requise. L'infrastructure d'exécution comprend les ressources de calcul et de réseau nécessaires pour appeler la fonction. Le provisionnement initial, et donc la réponse au premier appel, peut prendre un certain temps variable (éventuellement plusieurs secondes ou plus). L'infrastructure d'exécution de l'appel de fonction initiale est conservée pendant une période (appelée "temps d'inactivité"), pour être utilisée par les appels suivants de la même fonction. Lorsqu'un appel de fonction ultérieur est en mesure d'utiliser l'infrastructure existante (appelée " démarrage à chaud "), il y a généralement un temps de réponse inférieur à la seconde à l'appel de fonction.

Il est courant de vouloir des réponses cohérentes, inférieures à la seconde, aux appels de fonction. Pour réduire la latence associée au provisionnement initial et garantir des démarrages à chaud, vous pouvez activer l'accès simultané provisionné pour une fonction. La concurrence provisionnée permet au service des fonctions pour OCI de toujours disposer de l'infrastructure d'exécution pour au moins un certain nombre minimal d'appels de fonction simultanée. La concurrence provisionnée est mesurée en unités de concurrence provisionnées. Le nombre total d'UC disponibles dépend de la taille de la fonction, de la limite de la location et de l'activation ou non de l'accès simultané provisionné pour d'autres fonctions de la location.

Pour utiliser l'accès simultané provisionné, vous spécifiez le nombre d'UC requises pour la fonction. En général, vous voulez spécifier un nombre similaire d'UC au nombre d'appels de fonction simultanée que vous attendez. La mémoire disponible que vous spécifiez pour une fonction détermine à la fois le plus petit nombre d'UC que vous pouvez spécifier pour cette fonction et les incréments par lesquels vous pouvez augmenter le nombre d'UC, comme suit :

Mémoire Nombre minimal d'UC : Augmenter les unités centrales par incréments de : Exemple
128 MO 40 40 80
256 MO 20 20 60
512 MO 10 10 50
1024 MO 10 10 40
2048 MO 10 10 30
3072 MO 10 10 30

Comme vous pouvez le voir, la valeur PCU doit toujours être un multiple de 10. Si la mémoire disponible est de 256 Mo, la valeur PCU doit être un multiple de 20. Si la mémoire disponible est de 128 Mo, la valeur PCU doit être un multiple de 40.

Vous pouvez spécifier des unités centrales pour une fonction de différentes manières :

  • À l'aide de la console lors de la création d'une fonction basée sur une image Docker existante qui a déjà été poussée vers le registre Docker (voir Création de fonctions à partir d'images Docker existantes).
  • À l'aide de l'interface de ligne de commande d'Oracle Cloud Infrastructure pour créer ou mettre à jour une fonction, et en spécifiant l'option facultative --provisioned-concurrency, dans le format suivant :
    --provisioned-concurrency "{\"strategy\": \"<CONSTANT|NONE>\", \"count\": <value>}"

    où :

    • \"strategy\": \"<CONSTANT|NONE>\" indique s'il faut utiliser la concurrence provisionnée (dans ce cas, spécifiez CONSTANT) ou non l'accès simultané provisionné (dans ce cas, spécifiez NONE)
    • \"count\": <value> indique le nombre minimal d'appels de fonction simultanée, lorsque \"strategy\": \"CONSTANT\"

    Par exemple :

    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}"

    Notez que les paramètres --provisioned-concurrency doivent être dans un format JSON valide, qui dépend de la plate-forme que vous utilisez (voir Gestion des entrées et des sorties de l'interface de ligne de commande). Vous pouvez fournir les paramètres en tant que chaîne à la ligne de commande, en tant que fichier, ou en tant que chaîne de ligne de commande et en tant que fichier.

  • À l'aide de l'API (voir CreateFunction et UpdateFunction).