Ziel ist es, ein Transport- und Anwendungsschichtprotokoll einzuführen, das hinsichtlich Latenz und Netzwerkdurchsatz besser ist . Derzeit verwendet die Anwendung REST mit HTTP / 1.1 und es tritt eine hohe Latenz auf. Ich muss dieses Latenzproblem lösen und bin offen für die Verwendung von gRPC (HTTP / 2) oder REST / HTTP2 .
HTTP / 2:
- Multiplexed
- Einzelne TCP-Verbindung
- Binär statt textuell
- Header-Komprimierung
- Server Push
Mir sind alle oben genannten Vorteile bekannt. Frage Nr. 1: Wenn ich REST mit HTTP / 2 verwende , kann ich sicher eine signifikante Leistungsverbesserung im Vergleich zu REST mit HTTP / 1.1 erzielen. Wie ist dies im Vergleich zu gRPC (HTTP / 2) ?
Mir ist auch bekannt, dass gRPC Protopuffer verwendet, die beste binäre Serialisierungstechnik für die Übertragung strukturierter Daten auf dem Draht. Protopuffer hilft auch bei der Entwicklung eines sprachunabhängigen Ansatzes. Ich bin damit einverstanden und kann dieselbe Funktion in REST mithilfe von graphQL implementieren. Mein Anliegen ist jedoch die Serialisierung: Frage Nr. 2: Wenn HTTP / 2 diese Binärfunktion implementiert , bietet die Verwendung von Protopuffer zusätzlich zu HTTP / 2 einen zusätzlichen Vorteil?
Frage Nr. 3: Wie ist gRPC (HTTP / 2) in Bezug auf Streaming und bidirektionale Anwendungsfälle mit (REST und HTTP / 2) zu vergleichen?
Es gibt so viele Blogs / Videos aus im Internet , die gRPC (HTTP / 2) mit (REST und HTTP / 1.1) wie vergleicht diese . Wie bereits erwähnt, möchte ich die Unterschiede und Vorteile beim Vergleich von GRPC (HTTP / 2) und (REST mit HTTP / 2) kennenlernen.
Antworten:
gRPC ist standardmäßig nicht schneller als REST über HTTP / 2, bietet Ihnen jedoch die Tools, um es schneller zu machen. Es gibt einige Dinge, die mit REST schwierig oder unmöglich zu tun wären.
Wie Nfirvine sagte, werden Sie den größten Teil Ihrer Leistungsverbesserung nur durch die Verwendung von Protobuf sehen. Während Sie könnten Proto mit REST verwenden, ist es sehr schön mit gRPC integriert. Technisch gesehen könnten Sie JSON mit gRPC verwenden, aber die meisten Leute möchten die Leistungskosten nicht bezahlen, nachdem sie sich an Protos gewöhnt haben.
quelle
library
Link zum Lastenausgleich anIch bin in keiner Weise ein Experte in diesem Bereich und ich habe keine Daten, um dies zu belegen.
Die "Binärfunktion", von der Sie sprechen, ist die binäre Darstellung von HTTP / 2-Frames. Der Inhalt selbst (eine JSON-Nutzlast) ist weiterhin UTF-8. Sie können diesen JSON komprimieren und festlegen
Content-Encoding: gzip
, genau wie HTTP / 1.Aber gRPC komprimiert auch gzip. Wir sprechen also wirklich über den Unterschied zwischen gzip-komprimiertem JSON und gzip-komprimiertem Protobufs.
Wie Sie sich vorstellen können, sollten komprimierte Protobufs komprimiertes JSON in jeder Hinsicht schlagen, sonst haben Protobufs ihr Ziel verfehlt.
Neben der Allgegenwart von JSON gegenüber Protobufs ist der einzige Nachteil, den ich bei der Verwendung von Protobufs sehen kann, dass Sie die .proto-Datei benötigen, um sie zu dekodieren, beispielsweise in einer tcpdump-Situation.
quelle