Anfängliche Latenz mit Provisioned Concurrency reduzieren

Erfahren Sie, wie Sie durch Provisioning bereitgestellten gleichzeitigen Zugriff verwenden, um anfängliche Verzögerungen beim Aufrufen von Funktionen in OCI Functions zu minimieren.

Wenn eine Funktion zum ersten Mal aufgerufen wird (als "Kaltstart" bezeichnet), stellt OCI Functions den Funktionsaufruf mit der erforderlichen Ausführungsinfrastruktur bereit. Die Ausführungsinfrastruktur umfasst die Compute- und Netzwerkressourcen, die für den erfolgreichen Aufruf der Funktion erforderlich sind. Das anfängliche Provisioning und damit die Antwort auf den ersten Aufruf kann einige variable Zeit in Anspruch nehmen (möglicherweise mehrere Sekunden oder länger). Die Ausführungsinfrastruktur des anfänglichen Funktionsaufrufs wird für einen Zeitraum (als Leerlaufzeit bezeichnet) aufbewahrt, der von nachfolgenden Aufrufen derselben Funktion verwendet wird. Wenn ein nachfolgender Funktionsaufruf vorhandene Infrastruktur (als "Hot Start" bezeichnet) nutzen kann, gibt es normalerweise eine Antwortzeit von unter einer Sekunde auf den Funktionsaufruf.

Es ist üblich, dass Sie konsistente Antworten auf Funktionsaufrufe unter einer Sekunde wünschen. Um Latenzzeiten im Zusammenhang mit dem anfänglichen Provisioning zu minimieren und Hot Starts sicherzustellen, können Sie bereitgestellte Nebenläufigkeit für eine Funktion aktivieren. Durch Provisioning ist die Möglichkeit von OCI Functions, die Ausführungsinfrastruktur für mindestens eine bestimmte Mindestanzahl gleichzeitiger Funktionsaufrufe immer verfügbar zu haben. Provisioned Concurrency wird in "Provisioned Concurrency Units" (PCUs) gemessen. Die Gesamtanzahl der verfügbaren PCUs hängt von der Größe der Funktion, dem Mandantenlimit und davon ab, ob der bereitgestellte gleichzeitige Zugriff für andere Funktionen im Mandanten aktiviert wurde.

Um die bereitgestellte Nebenläufigkeit zu verwenden, geben Sie die Anzahl der für die Funktion erforderlichen PCUs an. In der Regel möchten Sie eine ähnliche Anzahl von PCUs wie die Anzahl der erwarteten gleichzeitigen Funktionsaufrufe angeben. Der verfügbare Speicher, den Sie für eine Funktion angeben, bestimmt sowohl die kleinste Anzahl von PCUs, die Sie für diese Funktion angeben können, als auch die Inkremente, um die Sie die Anzahl der PCUs erhöhen können, wie folgt:

Speicher Mindestanzahl PCUs: PCUs in Schritten von: Beispiel
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

Wie Sie sehen können, muss der PCUs-Wert immer ein Vielfaches von 10 sein. Wenn der verfügbare Arbeitsspeicher 256 MB beträgt, muss der PCUs-Wert ein Vielfaches von 20 sein. Wenn der verfügbare Arbeitsspeicher 128 MB beträgt, muss der PCUs-Wert ein Vielfaches von 40 sein.

Sie können PCUs für eine Funktion auf verschiedene Arten angeben:

  • Verwenden Sie die Konsole, wenn Sie eine neue Funktion basierend auf einem vorhandenen Docker-Image erstellen, das bereits in die Docker-Registry übertragen wurde (siehe Funktionen aus vorhandenen Docker-Images erstellen).
  • Mit der Oracle Cloud Infrastructure-CLI eine Funktion erstellen oder aktualisieren und die optionale Option --provisioned-concurrency im folgenden Format angeben:
    --provisioned-concurrency "{\"strategy\": \"<CONSTANT|NONE>\", \"count\": <value>}"

    Hierbei gilt:

    • \"strategy\": \"<CONSTANT|NONE>\" gibt an, ob die bereitgestellte Nebenläufigkeit verwendet werden soll (in diesem Fall geben Sie CONSTANT an) oder ob die bereitgestellte Nebenläufigkeit nicht verwendet werden soll (in diesem Fall geben Sie NONE an).
    • \"count\": <value> gibt die Mindestanzahl gleichzeitiger Funktionsaufrufe an, wenn \"strategy\": \"CONSTANT\"

    Beispiel:

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

    Beachten Sie, dass die --provisioned-concurrency-Parameter das gültige JSON-Format aufweisen müssen. Dies hängt von der verwendeten Plattform ab (siehe CLI-Eingabe und -Ausgabe verwalten). Sie können die Parameter als Zeichenfolge in der Befehlszeile, als Datei oder als Befehlszeilenzeichenfolge und als Datei angeben.

  • Verwenden Sie die API (siehe CreateFunction und UpdateFunction).