Riduzione della latenza iniziale mediante accesso concorrente con provisioning eseguito

Scopri come utilizzare la concorrenza con provisioning eseguito per ridurre al minimo i ritardi iniziali quando si richiamano funzioni in OCI Functions.

Quando una funzione viene richiamata per la prima volta (definita come "avvio a freddo"), OCI Functions esegue il provisioning della funzione con l'infrastruttura di esecuzione richiesta. L'infrastruttura di esecuzione include le risorse di calcolo e di rete necessarie per richiamare correttamente la funzione. Il provisioning iniziale, e quindi la risposta al primo richiamo, potrebbe richiedere un periodo di tempo variabile (potenzialmente alcuni secondi o più). L'infrastruttura di esecuzione del richiamo della funzione iniziale viene conservata per un periodo di tempo (definito 'tempo di inattività'), per l'uso da richiami successivi della stessa funzione. Quando un successivo richiamo di funzione è in grado di utilizzare l'infrastruttura esistente (definita "hot start"), di solito c'è un tempo di risposta inferiore al secondo per il richiamo della funzione.

È comune che tu voglia risposte coerenti, inferiori al secondo, ai richiami delle funzioni. Per ridurre al minimo qualsiasi latenza associata al provisioning iniziale e garantire l'avvio a caldo, è possibile abilitare la concorrenza con provisioning eseguito per una funzione. La concorrenza con provisioning eseguito consente alle funzioni OCI di disporre sempre dell'infrastruttura di esecuzione per almeno un determinato numero minimo di richiami di funzioni concorrenti. L'accesso concorrente di cui è stato eseguito il provisioning viene misurato in 'unità ad accesso concorrente con provisioning eseguito' (PCU). Il numero totale di PCU disponibili dipende dalla dimensione della funzione, dal limite della tenancy e dal fatto che la concorrenza di cui è stato eseguito il provisioning sia stata abilitata per altre funzioni nella tenancy.

Per utilizzare la concorrenza con provisioning eseguito, è necessario specificare il numero di PCU necessarie per la funzione. In genere, si desidera specificare un numero di PCU simile al numero di richiami di funzioni concorrenti previsto. La memoria disponibile specificata per una funzione determina sia il numero più piccolo di PCU che è possibile specificare per tale funzione, sia gli incrementi in base ai quali è possibile aumentare il numero di PCU, come indicato di seguito.

Memoria Numero minimo di PCU: Aumentare le PCU con incrementi di: Esempio
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

Come si può vedere, il valore delle PCU deve essere sempre un multiplo di 10. Se la memoria disponibile è 256 MB, il valore delle PCU deve essere un multiplo di 20. Se la memoria disponibile è 128 MB, il valore delle PCU deve essere un multiplo di 40.

È possibile specificare le PCU per una funzione in diversi modi:

  • Usare la console quando si crea una nuova funzione basata su un'immagine Docker esistente che è già stata sottoposta a PUSH nel registro Docker (vedere Creazione di funzioni da immagini Docker esistenti).
  • Utilizzare l'interfaccia CLI di Oracle Cloud Infrastructure per creare o aggiornare una funzione e specificare l'opzione --provisioned-concurrency facoltativa nel formato seguente:
    --provisioned-concurrency "{\"strategy\": \"<CONSTANT|NONE>\", \"count\": <value>}"

    Dove:

    • \"strategy\": \"<CONSTANT|NONE>\" indica se utilizzare la concorrenza con provisioning eseguito (nel qual caso, specificare CONSTANT) oppure non utilizzare la concorrenza con provisioning eseguito (nel qual caso, specificare NONE)
    • \"count\": <value> indica il numero minimo di richiami di funzioni concorrenti, quando \"strategy\": \"CONSTANT\"

    Ad esempio:

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

    Tenere presente che i parametri --provisioned-concurrency devono essere in formato JSON valido, che dipende dalla piattaforma in uso (vedere Gestione dell'input e dell'output CLI). È possibile fornire i parametri come stringa nella riga di comando, come file o come stringa della riga di comando e come file.

  • Utilizzo dell'interfaccia API (vedere CreateFunction e UpdateFunction).