grpc unterstützt nicht nur die Go-Sprache. grpc ist ein Kommunikationsprotokoll, das auf HTTP/2 basiert und das mehrsprachige RPC-Framework unterstützt; derzeit werden C-, Java- und Go-Sprachversionen bereitgestellt, nämlich grpc, grpc-java, grpc-go; , Python, Ruby, Objective-C, PHP und C# werden unterstützt.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO Version 1.18, Dell G3-Computer.
Was ist grpc?
gRPC ist ein Kommunikationsprotokoll, das auf HTTP/2 basiert, das mehrsprachige RPC-Framework unterstützt und für Mobilgeräte und HTTP/2 konzipiert ist. gRPC basiert auf dem HTTP/2-Standard und bietet Funktionen wie bidirektionales Streaming, Flusskontrolle, Header-Komprimierung und Multiplexing-Anfragen über eine einzige TCP-Verbindung. Diese Funktionen sorgen für eine bessere Leistung auf Mobilgeräten und sparen Strom und Platz.
RPC: Die Abkürzung für Remote Procedure Call, übersetzt als Remote Procedure Call (auch als Remote Method Call oder Remote Call übersetzt), ist ein Computerkommunikationsprotokoll. Dieses Protokoll kann das Aufrufen von Remote-Diensten so einfach machen wie das Aufrufen lokaler Dienste, ohne dass Sie sich um netzwerk-, plattform-, sprachübergreifende und andere Probleme kümmern müssen.
Die gRPC-Nachrichtenserialisierungsmethode verwendet normalerweise Protobuf, ein Binärformat mit geringer Größe, schneller Netzwerkübertragung, weniger Bandbreite und Datenverkehr sowie einer höheren Anrufleistung.
Funktionen von gRPC
-
IDL
gRPC verwendet ProtoBuf, um Dienste zu definieren. ProtoBuf ist ein von Google entwickeltes Datenserialisierungsprotokoll (ähnlich XML, JSON). ProtoBuf kann Daten serialisieren und wird häufig in der Datenspeicherung, Kommunikationsprotokollen usw. verwendet.
-
Mehrsprachige Unterstützung
gRPC unterstützt mehrere Sprachen und kann automatisch Client- und Server-Funktionsbibliotheken basierend auf Sprachen generieren. Derzeit werden die C-Version grpc, die Java-Version grpc-java und die Go-Version grpc-go bereitgestellt. Darunter unterstützt grpc C, C++, Node.js, Python, Ruby, Objective-C, PHP und C# und andere Sprachen .grpc-java unterstützt die Android-Entwicklung.
-
HTTP2
gRPC basiert auf dem HTTP2-Standard und bietet leistungsfähigere Funktionen wie bidirektionales Streaming, Header-Komprimierung, Multiplexing-Anfragen usw. Diese Funktionen bieten erhebliche Vorteile wie Bandbreiteneinsparungen, kürzere TCP-Verbindungszeiten, Einsparungen bei der CPU-Auslastung und eine längere Batterielebensdauer. Gleichzeitig kann gRPC auch die Leistung von Cloud-Diensten und Webanwendungen verbessern. gRPC kann sowohl auf dem Client als auch auf dem Server angewendet werden, wodurch eine transparente Client-Server-Kommunikation erreicht und der Aufbau von Kommunikationssystemen vereinfacht wird.
Warum verwenden wir grpc?
Gute Ökologie: Unterstützt von Google. Nginx bietet beispielsweise auch Unterstützung für grpc, Referenzlink
Sprachübergreifend: sprachübergreifend und generiert automatisch SDK
Hohe Leistung: Beispielsweise ist die Leistung von Protobuf höher als die von JSON, beispielsweise http2. 0-Leistung ist höher als http1. 1
Starke Eingabe: Der Compiler löst viele Probleme für Sie
Streaming-Verarbeitung (basierend auf http2.0): Unterstützt Client-Streaming, Server-Streaming und bidirektionales Streaming
So erkennen Sie die Vorteile von grpc
1 Hohe Leistung von grpc: Warum ist Protobuf besser als JSON?
1) Was ist Protobuf?
- Protobuf ist ein von Google entwickeltes Binärformat zur Serialisierung von Daten zwischen verschiedenen Diensten. Es ist eine IDL-Sprache (Schnittstellenbeschreibungssprache)
2) Wie viel schneller ist sie als JSON?
3) Warum ist Protobuf schneller als JSON?
- Beim Vergleich der JSON-Daten- und Protobuf-Datenformate können wir feststellen, dass
-
Geringe Größe – keine Trennzeichen erforderlich: Die TLV-Speichermethode erfordert keine Trennzeichen (Komma, doppelte Anführungszeichen usw.) zum Trennen von Feldern, wodurch die Größe reduziert wird Verwendung von Trennzeichen
-
Kleine Größe – leere Felder weggelassen: Wenn für das Feld kein Feldwert festgelegt ist, sind die Daten bei der Serialisierung des Feldes überhaupt nicht vorhanden, d. h. es ist keine Codierung erforderlich, und JSON übergibt die Schlüssel und der Wert des leeren Werts
- Kleine Größe - Tag-Binärdarstellung: Es verwendet den numerischen Wert des Felds und wandelt ihn dann zur Darstellung in einen Binärwert um. Dies ist platzsparender als die Zeichenfolgendarstellung des JSON-Schlüssels.
- Schnelle Codierung und Decodierung: Der Typ des Felds wird im Tag gespeichert. Sie können die Länge des Werts direkt ermitteln. Wenn der Wert eine Zeichenfolge ist, können Sie die Länge direkt verwenden Bytes nach der Länge, um den Wert von value zu erhalten, müssen wir einen String-Abgleich durchführen
Um mehr über die Protobuf-Codierung zu erfahren, können Sie zu - gehen: Varint- und Zickzack-Codierungsmethoden
2. Hohe Leistung von grpc: Warum ist http2.0 leistungsstärker als http1.1?
1) Multiplexing
http2.0 und http 1.* und Vergleich von http1.1pipling-
Schematisches Diagramm
http/1. - *: Eine Anfrage, eine Antwort, eine Verbindung wird hergestellt und nach der Verwendung geschlossen. Jede Anfrage muss eine Verbindung herstellen die Rückkehr der vorherigen Anfrage, um die Möglichkeit zur Ausführung zu erhalten. Sobald eine Anfrage abgelaufen ist, können nachfolgende Anfragen nur blockiert werden, und es gibt keine Möglichkeit, dies als Head-of-Line-Blockierung zu bezeichnen
http2- : Mehrere Anfragen können gleichzeitig bearbeitet werden. Sie werden parallel auf einer Verbindung ausgeführt. Eine bestimmte Anforderungsaufgabe ist sehr zeitaufwändig und hat keinen Einfluss auf die normale Ausführung anderer Verbindungen. Welche weiteren Vorteile hat das GRPC-Multiplexing? Es reduziert die Anzahl der TCP-Verbindungen und reduziert den Speicher- und CPU-Anforderungen des Servers und des Clients. Der Druck des Wartens reduziert die TCP-Verbindung und stellt sicher, dass die TCP-Wiederherstellung nicht häufig ausgelöst wird, sodass es nicht häufig zu langsamen Starts kommt
- reduziert die TCP-Verbindung und verbessert die Netzwerküberlastung
- Warum http/1.1-Multiplexing nicht möglich ist erreicht werden, aber http2.0 kann?
Weil http/1.1 Text für die Übertragung verwendet, während http2.0 eine binäre Frame-Übertragung verwendet-
-
- 2) Header-Komprimierung
-
Feste Feldkomprimierung
: http kann mit http gepaart werden. Der Körper ist gzip komprimiert, wodurch Bandbreite gespart werden kann. Es gibt jedoch auch viele Felder im Header der Nachricht, die nicht komprimiert sind, z. B. Cookies und Benutzeragenten. Diese müssen komprimiert werden
- , um Duplikate zu vermeiden: Es gibt viele Viele Feldwerte werden in der Nachricht wiederholt, daher ist es notwendig, Duplikate zu vermeiden
Kodierungsverbesserung: Die Felder sind ASCII-kodiert, was ineffizient ist implementiert durch den HPACK-Algorithmus
Der Algorithmus besteht hauptsächlich aus drei Teilen: Statisches Wörterbuch: Organisieren Sie häufig verwendete Header-Felder in einem Wörterbuch, z. B. {":method": "GET"}, das durch eine einzelne Zahl dargestellt werden kann 2
- Dynamisches Wörterbuch: Einige Header, die nicht im Feld des statischen Wörterbuchs enthalten sind, verwenden dynamisches Wörterbuch Huffman-Kodierung: Komprimierungskodierung
3) Binäres Framing Auf der binären Framing-Ebene wird HTTP 2.0 aufgeteilt Alle übertragenen Informationen werden in kleinere Nachrichten und Frames aufgeteilt und im Binärformat codiert, wobei die Header-Informationen von HTTP1.x in den Header-Frame und unser Anforderungstext in den Daten-Frame eingekapselt werden. - Nachdem diese Frames auf diese Weise gerahmt wurden, können sie in der falschen Reihenfolge gesendet und dann entsprechend der Stream-ID im Header jedes Frames zusammengestellt werden.
Vergleiche http/1.1- Da es auf Text basiert und Zeilenumbrüche verwendet die einzelnen Schlüssel:Werte zu trennen. Die folgenden Probleme:
- Es kann jeweils nur eine Anfrage oder Antwort verarbeitet werden, da die Analyse dieser Art von Daten, die Nachrichten durch Trennzeichen trennt, nicht beendet werden kann, bevor sie abgeschlossen ist
- Es ist unmöglich vorherzusagen Wie viel Speicher wird benötigt, um diese Art von Daten zu analysieren, was dem Server große Probleme bereiten wird? Großer Druck
4) Der Server pusht aktiv Ressourcen
Das obige ist der detaillierte Inhalt vonUnterstützt grpc nur die Go-Sprache?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!