Auf dieser Seite finden Sie einen Überblick über die Integration von Plug-ins in Application Load Balancer von Cloud Load Balancing und Media CDN.
Dieses Feature befindet sich im Vorschaumodus für Media CDN.
Plug-ins werden im WebAssembly-Format (Wasm) erstellt und verwenden Proxy-Wasm-APIs.
Wasm ist ein offenes und standardisiertes binäres Anweisungsformat, mit dem ein Host Wasm-Module mit kundenseitigem Code laden und ausführen kann. Wasm bietet eine Reihe von Vorteilen für die Ausführung von Kundencode, darunter Sandboxing für Sicherheit, Unterstützung für mehrere Sprachen, Portabilität, breite und wachsende Unterstützung in der Branche sowie eine verbesserte Leistung im Vergleich zu anderen VM-basierten Optionen wie JavaScript.
Proxy-Wasm ist ein Open-Source-Projekt, das von Google ins Leben gerufen wurde. Sie definiert APIs, mit denen Sie das Verhalten von Netzwerkproxys anpassen können, indem Sie Callbacks implementieren, die während der Verarbeitung von HTTP-Anfragen und ‑Antworten ausgeführt werden.
Funktionsweise von Plug-ins
Sie können Diensterweiterungen mit Application Load Balancern und Media CDN so verwenden:
Erstellen Sie ein Plug‑in, das den hochgeladenen Plug‑in-Code enthält.
Konfigurieren Sie das Plug-in in Cloud Load Balancing-Erweiterungen oder Media CDN-Erweiterungen.
Plug‑in-Ressourcen
Mit Service Extensions können Sie die folgenden wichtigen Ressourcen erstellen, mit denen Sie benutzerdefinierten Code in den Verarbeitungspfad einfügen können:
Plug-ins, die den benutzerdefinierten Code enthalten, den Sie bereitstellen möchten.
Plug-in-Versionen, die Versionen Ihres Wasm-Moduls sind. Sie können angeben, welche Version Ihres Wasm-Moduls ein Plug-in als Hauptversion (aktiv) verwenden soll.
Beschränkungen
In diesem Abschnitt werden einige Einschränkungen bei der Verwendung von Plug-ins aufgeführt.
Einschränkungen bei Ressourcen
Die Nutzung von Ressourcen durch Plugins ist streng begrenzt:
Ein Plug-in kann pro Aufruf bis zu 1 Millisekunde normalisierter vCPU verwenden. Eine CPU-Millisekunde ist plattformabhängig. Die normalisierte Plattform entspricht jedoch ungefähr einem Prozessor mit einer Taktfrequenz von 4 GHz. Ein Aufruf ist eine unabhängig abgerechnete Ausführungsphase, die aus Anfrageheadern, Anfragetext, Antwortheadern oder Antworttext bestehen kann.
Ein Plug-in kann bis zu 16 MiB Arbeitsspeicher pro VM-Instanz verwenden. Eine Instanz muss bis zu 1.000 gleichzeitige Anfragen verarbeiten können. Das bedeutet, dass ein Plug-in bis zu 16 KiB Speicher pro Stream belegen kann. Beachten Sie, dass die gesamte Speichernutzung globale Status- und Stapelzuweisungen umfasst.
Verwenden Sie den Plugin-Tester, um die CPU- und Arbeitsspeicher-Eigenschaften eines Plugins zu testen.
Einschränkungen für APIs
Plug-ins können eine Teilmenge der Proxy-Wasm-ABI verwenden. Plug-ins unterstützen keine Timer, benutzerdefinierten Messwerte, freigegebenen Daten, freigegebenen Warteschlangen oder ausgehenden Netzwerkaufrufe.
HTTP-Trailer-Ereignisse werden nicht unterstützt.
Einschränkungen bei der Header-Bearbeitung
Die maximale Größe einer Mutation (Header- oder Textblöcke) beträgt 128 KiB.
Plug-ins können den Verarbeitungsmodus des
ext_proc-Streams nicht überschreiben.Die Bearbeitung von Headern über Plug-ins wird für einige Header nicht unterstützt. Der Prozessor ignoriert alle Änderungen an diesen Headern und verarbeitet die Anfrage weiter.
Für Media CDN-Plug-ins werden die folgenden Funktionen nicht unterstützt:
- Header:
CDN-Loop,connection,keep-alive,proxy-authenticate,proxy-authorization,proxy-connection,te,trailers,transfer-encoding,upgradeoderX-user-IP. - Header, die mit
x-forwarded,x-goog-,x-google,x-gfeoderx-amz-beginnen.
Für Cloud Load Balancing-Plug-ins werden die folgenden Elemente nicht unterstützt:
Header:
connection,keep-alive,proxy-authenticate,proxy-authorization,proxy-connection,sec-user-ip,te,trailer,transfer-encoding,upgrade,x-dont-count-ads,x-dont-show-ads,x-gr,x-proxyuser-ipoderx-user-ip.Außerdem werden für
LbTrafficExtensiondie folgenden Header nicht unterstützt:method,authority,schemeoder Host-Header.Header, die mit
sec-gfe-,sec-google-,x-amz-,x-forwarded-,x-gfe-,x-goog-,x-google-oderx-gproxy-beginnen.
- Header:
Einschränkungen bei HTTP/1.1-Clients und ‑Back-Ends
Wenn Sie entweder REQUEST_BODY oder RESPONSE_BODY für eine Erweiterung konfigurieren und der Load Balancer eine entsprechende Anfrage erhält, entfernt er den Content-Length-Header aus der Antwort und wechselt zur Chunked-Body-Codierung.