Diese Seite enthält spezifische Details zu Knative Serving für Entwickler, die gRPC zum Herstellen einer Verbindung zwischen einem Knative Serving-Dienst und anderen Diensten verwenden möchten, um beispielsweise eine einfache hohe Leistung zu bieten. Kommunikation zwischen internen Mikrodiensten. Knative Serving unterstützt sowohl unäre als auch Streaming-gRPC-Aufrufe.
gRPC Unary
Bei einem unären RPC-Aufruf sendet der Client eine einzelne Anfrage an den Server und erhält eine einzelne Antwort zurück, ähnlich wie bei einem normalen Funktionsaufruf:rpc SayHello(HelloRequest) returns (HelloResponse);
gRPC-Streaming
Die folgenden Streamingoptionen sind mit gRPC verfügbar. Server-Streaming-RPCs, bei denen der Client eine Anfrage an den Server sendet und einen zu lesenden Stream mit einer Reihe von Nachrichten erhält. Der Client liest den zurückgegebenen Stream, bis keine Nachrichten mehr vorhanden sind.
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
Client-Streaming-RPCs, bei denen der Client eine Reihe von Nachrichten schreibt und sie in einem Stream an den Server sendet. Nachdem der Client mit dem Schreiben von Nachrichten fertig ist, wartet er auf die Antwort des Servers.
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
Bidirektionale Streaming-RPCs, bei denen Client und Server Nachrichten in zwei voneinander unabhängigen Lese-/Schreib-Streams senden.
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);
Mögliche Anwendungsfälle:
- Kommunikation zwischen internen Mikrodiensten.
- Hohe Datenmengen (gRPC verwendet Protokollzwischenspeicher, die bis zu siebenmal schneller sind als REST-Aufrufe).
- Es wird nur eine einfache Dienstdefinition benötigt. Das Schreiben einer vollständigen Clientbibliothek ist nicht erforderlich.
So binden Sie Ihren Dienst in gRPC ein:
- Definieren Sie die Anfragenachrichten und -antworten in einer proto-Datei und kompilieren Sie sie.
- Erstellen Sie einen gRPC-Server, der Anfragen verarbeitet und Antworten zurückgibt. Er sollte die Umgebungsvariable
PORT
beobachten. - Erstellen Sie einen Client, der Anfragen sendet und Antworten vom gRPC-Server verarbeitet.
- Optional können Sie eine Authentifizierung hinzufügen.
- Erstellen Sie Ihren Dienst und stellen Sie ihn bereit.
Nachrichten in einer proto-Datei definieren und kompilieren
Ihren proto-Definitionen müssen keine zusätzlichen oder Knative Serving-spezifischen Elemente hinzugefügt werden. Wie bei jedem anderen Einsatz von gRPC verwenden Sie für Dienstdefinitionen und Datenserialisierung gRPC-Protokollpuffer.
gRPC-Client erstellen
Ihrem Client, der gRPC verwendet, müssen keine zusätzlichen oder Knative Serving-spezifischen Elemente hinzugefügt werden. Folgen Sie der gRPC-Dokumentation zur Verwendung von Dienstdefinitionen im Clientcode und den Beispielclients aus den sprachspezifischen gRPC-Anleitungen.
gRPC-Anfragen in einem Knative Serving-Dienst überwachen
Die einzige spezielle Anforderung an einen in Knative Serving ausgeführten gRPC-Server besteht darin, den in der Umgebungsvariable PORT
angegebenen Port wie im Code dargestellt zu beobachten:
Go
gRPC-Verbindung zu einem Dienst öffnen
Wenn Sie eine gRPC-Verbindung zu einem Dienst öffnen möchten, um gRPC-Nachrichten senden zu können, müssen Sie die Host-Domain angeben. Dies ist die URL des Knative Serving-Dienstes oder die benutzerdefinierte Domain, die diesem Dienst neben Port 443 zugeordnet ist. Port 443 ist der von gRPC erwartete Port.
Go
gRPC-Anfragen ohne Authentifizierung senden
Im folgenden Beispiel wird gezeigt, wie eine Anfrage ohne Authentifizierung über eine gRPC-Verbindung gesendet wird, die wie oben beschrieben konfiguriert ist.