Diese Seite enthält spezifische Details zu Cloud Run für Entwickler, die gRPC zum Herstellen einer Verbindung zwischen einem Cloud Run-Dienst und anderen Diensten verwenden möchten, um beispielsweise eine einfache Hochleistungskommunikation zwischen internen Mikrodiensten zu ermöglichen. Sie können alle gRPC-Typen, Streaming oder Unäre, mit Cloud Run verwenden.
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.
- Verwenden Sie Streaming-gRPC auf Ihrem gRPC-Server, um responsive Anwendungen und APIs zu erstellen.
So binden Sie Ihren Dienst in gRPC ein:
- Konfigurieren Sie Ihren Dienst für die Verwendung von HTTP/2, wenn Sie gRPC verwenden. HTTP/2 ist die Transportmethode für das gRPC-Streaming.
- 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.
Dienst für die Verwendung von HTTP/2 konfigurieren
Google empfiehlt, den Dienst für die Verwendung von HTTP/2 zu konfigurieren, wenn Sie gRPC mit Cloud Run verwenden. Einige einfache gRPC-Funktionen funktionieren auch ohne HTTP/2. Viele gRPC-Funktionen wie Streaming und Metadaten erfordern HTTP/2.
Nachrichten in einer proto-Datei definieren und kompilieren
Ihren proto-Definitionen müssen keine zusätzlichen oder Cloud Run-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 Cloud Run-spezifischen Elemente hinzugefügt werden. Folgen Sie der gRPC-Dokumentation zur Verwendung von Dienstdefinitionen im Clientcode und den Beispielclients aus den sprachspezifischen gRPC-Anleitungen.
Autoscaling und Load Balancing
Cloud Run verwendet von Google verwaltete Load Balancer, die separate Verbindungen zwischen Clients und Ihren Cloud Run-Instanzen aufrechterhalten. Bei gRPC verhält sich das Autoscaling so:
- gRPC-Verbindungen von Clients enden am Edge-Load Balancer. Die Anpassung der
KeepAlive
-Einstellungen wirkt sich nur auf die Verbindung zum Load Balancer aus, nicht auf die Cloud Run-Instanzen. Der Client erkennt nicht, wenn eine Instanz gelöscht wird. - Beim Scale-In schließt der Load Balancer Verbindungen, indem er beim Herunterfahren der Back-End-Instanzen GOAWAY-Nachrichten sendet.
- Beim Skalieren erstellt der Load Balancer neue Verbindungen zu den Back-End-Instanzen. Alle diese Vorgänge sind für Clients transparent.
- Während des Autoscalings können viele Instanzen gestartet und zu einer einzigen Verbindung zwischen dem Client und dem Proxy-Load-Balancer multipliziert werden.
- Die Gleichzeitigkeit wird durch die maximale Anzahl gleichzeitiger Anfragen pro Instanz für Nachrichten bestimmt. Beim Streaming wird jeder Stream einmal auf die maximale Anzahl gleichzeitiger Anfragen angerechnet.
gRPC-Anfragen in einem Cloud Run-Dienst überwachen
Die einzige spezielle Anforderung an einen in Cloud Run ausgeführten gRPC-Server besteht darin, den in der Umgebungsvariable PORT
angegebenen Port wie im folgenden 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 Cloud Run-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.
Go
gRPC-Anfragen mit Authentifizierung senden
Im folgenden Beispiel wird gezeigt, wie die Authentifizierung zwischen Diensten verwendet wird, wenn der aufrufende Dienst die Berechtigung als Aufrufer für den empfangenden Dienst hat. Beachten Sie, dass mit diesem Code ein Autorisierungsheader mit dem richtigen Identitätstoken erstellt wird. Dies ist erforderlich. Die erforderlichen Berechtigungen und der Autorisierungsheader werden unter Dienst-zu-Dienst-Authentifizierung ausführlich beschrieben.
Go
Beispielcode für gRPC-Streaming
Einen Beispielcode finden Sie in der RouteGuide
-Implementierung in der gRPC in einer Sprache Ihrer Wahl. Beispiele zu Go finden Sie im Implementierungsleitfaden.