Unterstützt grpc nur die Go-Sprache?

青灯夜游
Freigeben: 2022-12-16 15:51:29
Original
5412 Leute haben es durchsucht

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.

Unterstützt grpc nur die Go-Sprache?

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.

Unterstützt grpc nur die Go-Sprache?

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?

  • Der binäre Datenfluss und der JSON-Datenfluss von Protobuf sind wie unten dargestellt

Unterstützt grpc nur die Go-Sprache?

  • 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

Unterstützt grpc nur die Go-Sprache?

    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

    • Da der Server beim aktiven Pushen von Ressourcen unterstützt wird, können einige Anfragen weggelassen werden. Wenn Sie beispielsweise zwei Dateien benötigen, 1.html und 1.css, müssen Sie sie bei http1.0 zweimal anfordern, und der Server gibt sie zweimal zurück. Aber http2.0 ermöglicht es dem Client, einmal eine Anfrage zu stellen, und dann antwortet der Server direkt zweimal.

    Weitere Programmierkenntnisse finden Sie unter: Einführung in die Programmierung! !

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!