Expertenwissen

gRPC HTTP/3 - Wichtige Vorteile und Überlegungen zur Implementierung

Stellen Sie sich eine Welt vor, in der Webanwendungen mit der Effizienz eines gut konfigurierten Rechners arbeiten und Daten frei und ohne Engpässe zwischen Clients und Servern fließen. Obwohl dies in der Praxis schwer zu erreichen ist, bringt uns die Einführung von gRPC und HTTP/3 einen Schritt näher. 

gRPC ist ein modernes, quelloffenes RPC-Framework (Remote Procedure Call), das überall ausgeführt werden kann. gRPC ist nicht einfach nur ein weiteres Framework, sondern ein Ansatz für den Aufbau verteilter Systeme, der sich auf die hochleistungsfähige Kommunikation zwischen Diensten konzentriert. Es ermöglicht die transparente Kommunikation zwischen Client- und Serveranwendungen, so dass Sie vernetzte Systeme einfacher aufbauen können. 

HTTP/3 ist die nächste große Erweiterung des Hypertext-Transfer-Protokolls (HTTP), der zugrunde liegenden Technologie für die Netzwerkkommunikation. Der HTTP/3-Standard wird eingeführt, um den Anforderungen der modernen Internetnutzung gerecht zu werden, die durch Hochgeschwindigkeitsverbindungen und die Nutzung mobiler Geräte gekennzeichnet ist.

gRPC und HTTP/3 sind dabei, die digitale Kommunikation neu zu gestalten und bieten mehr Geschwindigkeit, Zuverlässigkeit und Flexibilität als je zuvor. Dieser Artikel befasst sich mit den technischen Verbesserungen und Vorteilen, die diese beiden Technologien für Ihre Anwendungen mit sich bringen. 

Zusammenfassung der wichtigsten gRPC-HTTP3-Verbesserungen

Konzept Zusammenfassung
Serialisierung und Komprimierung gRPC verwendet Protokollpuffer zur effizienten Serialisierung, wodurch die Größe der Nutzdaten für eine schnellere Übertragung über das Netz erheblich reduziert wird. HTTP/3 steigert diese Effizienz durch verbesserte Datenkompressionsmechanismen.
Multiplexing und Streams gRPC und HTTP/3 führen Multiplexing ein, so dass mehrere Anfragen und Antworten über eine einzige Verbindung gesendet werden können, ohne dass auf die Fertigstellung jeder einzelnen gewartet werden muss.
Resilienz Die Integration von gRPC mit HTTP/3 bietet Ausfallsicherheitsfunktionen wie Verbindungsmigration und verbesserte Fehlerbehebungsmechanismen. Sie können eine stabile Kommunikation sicherstellen, auch wenn sich die Netzwerkbedingungen ändern.
Automatische Codegenerierung gRPC steigert die Produktivität von Entwicklern durch Funktionen wie automatische Codegenerierung in mehreren Programmiersprachen, stark typisierte APIs und umfassende RPC-Unterstützung.
Globale Zugänglichkeit HTTP/3 verbessert die globale Zugänglichkeit von Anwendungen durch die Optimierung der Leistung unter verschiedenen Netzwerkbedingungen, einschließlich der effektiveren Handhabung von Paketverlusten und Latenzzeiten.
Adaptives Streaming gRPC-Unterstützung für bidirektionales Streaming und HTTP/3 mit reduzierter Latenz und verbesserten Durchsatzfunktionen bilden eine solide Grundlage für adaptive Streaming-Anwendungen.
Sicherheit gRPC unterstützt sichere Kommunikation durch TLS-Verschlüsselung, und HTTP/3 führt mit TLS 1.3 zusätzliche Sicherheitsverbesserungen ein, darunter verschlüsselte Header zur Verbesserung des Datenschutzes.

Warum sind gRPC und HTTP/3 wichtig? 

Vor gRPC wurden häufig Protokolle wie REST, SOAP und TCP für die Kommunikation zwischen Diensten verwendet. Sie waren jedoch ineffizient bei der Handhabung des gleichzeitigen bidirektionalen Datenflusses, der für moderne Anwendungen erforderlich ist. Sie waren beispielsweise nicht für das Datenstreaming in Echtzeit optimiert, verwendeten ineffiziente Nachrichtenformate und erforderten Client-Bibliotheken für unterschiedliche Programmierumgebungen. Die Entwickler hatten Schwierigkeiten, sprachübergreifende Dienste zu implementieren, da ihnen ein universelles Protokoll fehlte. 

Google hat gRPC entwickelt, um ein einheitliches, effizientes und sprachunabhängiges Framework zu schaffen. Es wurde speziell für moderne Softwarearchitekturen wie Microservices und Cloud-basierte Umgebungen entwickelt, in denen eine effiziente Kommunikation zwischen den Diensten innerhalb derselben Anwendungsarchitektur entscheidend ist. 

HTTP/3 ist auch ein Ergebnis von Googles Innovation zur Verbesserung traditioneller Protokolle. Einige Jahre vor gRPC entwickelte Google Quick UDP Internet Connections (QUIC), ein Transportschicht-Netzwerkprotokoll, um die mit TCP verbundenen Latenzprobleme im Zusammenhang mit HTTP/2-Verbindungen zu lösen. HTTP/3 nutzt QUIC, um einen neuen Kommunikationsstandard für das Internet einzuführen.

Sowohl gRPC als auch HTTP/3 zielen darauf ab, die Datenübertragung im Web und zwischen Diensten schneller und effizienter zu gestalten. Da sich HTTP/3 jedoch in seiner Definition und Implementierung nach gRPC entwickelt hat, verwendet gRPC seit seiner ersten Veröffentlichung hauptsächlich HTTP/2. Die Anpassung von gRPC an die neuen und unterschiedlichen Möglichkeiten von HTTP/3 ist mit erheblichem Entwicklungsaufwand verbunden.

Obwohl gRPC über HTTP/3 noch nicht standardisiert ist, sind diese beiden Technologien die Zukunft des Internets. Es ist wichtig, dass Entwickler verstehen, wie sie funktionieren. 

Als Nächstes wollen wir uns einige technische gRPC HTTP3-Verbesserungen und zukünftige Vorteile ansehen.

{{banner-9="/design/banners"}}

Serialisierung und Komprimierung

Serialisierung ist ein Kommunikationsprozess, der Daten so strukturiert, dass verschiedene Systeme sie leicht übertragen und verstehen können. Komprimierung bezeichnet die Verringerung der Datengröße, um schnellere Übertragungsgeschwindigkeiten und geringere Speicheranforderungen zu ermöglichen. 

Zu den traditionellen Serialisierungsformaten gehören JSON und XML. Bei beiden handelt es sich um textbasierte Formate, die dafür bekannt sind, dass sie für den Menschen lesbar, aber sehr groß und langsam zu parsen sind. Die größeren Datenmengen führen zu einem höheren Kommunikationsaufwand.

Stattdessen verwendet gRPC standardmäßig Protokollpuffer (protobuf). Dabei handelt es sich um ein Binärformat, das zwar nicht für Menschen lesbar ist, aber wesentlich kleiner und schneller zu kodieren und dekodieren ist. Die kompakte binäre Darstellung beinhaltet sowohl Serialisierung als auch Komprimierung, um den Daten-Overhead zu reduzieren.

Um die Auswirkungen zu verstehen, betrachten Sie eine einfache Nachricht, die in einer .proto-Datei definiert ist:

message User {
  string name = 1;
  int32 id = 2;
  bool isActive = 3;
}

Bei der Serialisierung wird diese Nachricht in ein Binärformat komprimiert, das von Natur aus kleiner ist als seine JSON- oder XML-Gegenstücke, was zu schnelleren Übertragungs- und Verarbeitungszeiten führt. Das Schema wird außerdem über protoc, den protobuf-Compiler, automatisch in Code für verschiedene Sprachen kompiliert, was den Entwicklungsprozess vereinfacht.

Bei der Dateneffizienz geht es nicht nur darum, wie Daten serialisiert werden, sondern auch darum, wie sie übertragen werden. Hier kommt QUIC im Rahmen des HTTP/3-Protokolls ins Spiel. QUIC bringt erhebliche Verbesserungen gegenüber TCP, die in der nachstehenden Tabelle zusammengefasst sind.

Kennzahl Profitieren Sie von
Verbindungsaufbau QUIC kombiniert den Transport und den kryptografischen Handshake, wodurch sich die Anzahl der Hin- und Rückwege verringert.
Kopfzeilen-Komprimierung QUIC komprimiert Header-Informationen, wodurch die für Anfragen benötigte Bandbreite verringert wird
Latenzzeit Die Zeit bis zum ersten Byte verbessert sich mit QUIC durch einen schnelleren Verbindungsaufbau und weniger Head-of-Line-Blocking

Wenn gRPC das Protobuf-Protokoll mit dem HTTP/3 QUIC-Protokoll kombiniert, entsteht ein hocheffizientes, robustes Kommunikationssystem. Das kompakte, binäre Serialisierungsformat von Protobuf reduziert die Größe der gesendeten Daten, während die Stream-Komprimierung und der schnelle Verbindungsaufbau von QUIC die Datenübertragung weiter beschleunigen. 

Beispielsweise verwenden verteilte Spieleplattformen gRPC für die Client-Server-Kommunikation und protobuf für den schnellen, kompakten Nachrichtenaustausch. Mit HTTP/3 wird das Spielerlebnis auch unter schlechten Netzwerkbedingungen reibungsloser sein

{{banner-15="/design/banners"}}

Multiplexing und Streams 

Webanwendungen müssen mehrere Anfragen und Antworten gleichzeitig verarbeiten, um eine hohe Leistung zu erzielen und die Benutzerfreundlichkeit zu verbessern. An dieser Stelle werden die Konzepte des Multiplexing und der Streams entscheidend. 

Multiplexing ist eine Technik, die es ermöglicht, mehrere Nachrichten über eine einzige Verbindung zu senden, ohne auf den Abschluss einer Nachricht zu warten, bevor die nächste gestartet wird. HTTP/3 implementiert Multiplexing durch QUIC, das mehrere Datenströme gleichzeitig über eine einzige Verbindung verwaltet. Dieser Ansatz entschärft das als Head-of-Line-Blocking bekannte Problem, das bei herkömmlichen Ansätzen häufig auftritt. Der Verlust eines einzigen Pakets blockiert die gesamte TCP-Verbindung, selbst wenn die blockierten Daten in keinem Zusammenhang mit den meisten der laufenden Anfragen stehen.

Die Vorteile von gRPC HTTP/3 beim Multiplexing werden im Folgenden zusammengefasst.

Kennzahl Profitieren Sie von
Reduzierung der Latenzzeit Da mehrere Anfragen und Antworten parallel verarbeitet werden können, verkürzt sich die Gesamtzeit bis zum Abschluss von Vorgängen erheblich.
Wirkungsgrad Bessere Ausnutzung der verfügbaren Netzkapazität, da die Verbindung mit der Übertragung der tatsächlichen Daten beschäftigt ist, anstatt auf die Fertigstellung eines einzelnen Streams zu warten.
Widerstandsfähigkeit Die Auswirkungen von Paketverlusten werden auf den betroffenen Stream beschränkt, so dass ein einzelner Ausfall nicht die gesamte Verbindung beeinträchtigt.

Nehmen wir zum Beispiel eine Microservices-Architektur, bei der eine einzige Benutzeraktion mehrere Backend-Dienste auslöst. Mit gRPC und HTTP/3 können diese Aufrufe parallel über dieselbe Verbindung erfolgen, was die Antwortzeit drastisch verkürzt und die Benutzerfreundlichkeit verbessert. HTTP/3 ermöglicht die Priorisierung von Streams, d. h. Clients können angeben, welche Streams wichtiger sind als andere. Dadurch wird sichergestellt, dass kritische Anfragen zuerst bearbeitet und beantwortet werden, was die Leistung von Webanwendungen weiter optimiert.

Resilienz

Die Ausfallsicherheit stellt sicher, dass Dienste auch bei veränderten Netzwerkbedingungen oder Störungen der Infrastruktur verfügbar, zuverlässig und konsistent bleiben. Sowohl gRPC als auch HTTP/3 bieten Funktionen, die die Ausfallsicherheit der Webkommunikation erheblich verbessern.

HTTP/3 führt das Konzept der Verbindungsmigration ein, das für die Aufrechterhaltung stabiler Verbindungen unerlässlich ist, selbst wenn sich die Netzumgebung eines Kunden ändert. Nehmen wir an, ein Kunde wechselt das Netz. Ohne HTTP/3 wird die Verbindung beim Wechsel unterbrochen und muss komplett neu aufgebaut werden. Mit HTTP/3 bleibt die Verbindung bestehen, und es sind nur minimale Anpassungen an den neuen Netzwerkpfad erforderlich, da QUIC eine eindeutige Verbindungs-ID verwendet.

Wir implementieren zum Beispiel eine einfache Wiederholungslogik in gRPC.

import json
import grpc

json_config = json.dumps(
    {
        "methodConfig": [
            {
                "name": [{"service": "<package>.<service>"}],
                "retryPolicy": {
                    "maxAttempts": 5,
                    "initialBackoff": "0.1s",
                    "maxBackoff": "10s",
                    "backoffMultiplier": 2,
                    "retryableStatusCodes": ["UNAVAILABLE"],
                },
            }
        ]
    }
)

address = 'localhost:50051'

channel = grpc.insecure_channel(address, options=[("grpc.service_config", json_config)])

Sie können Überwachungswerkzeuge wie Catchpoint können Sie die Wiederholungsversuche, Antwortzeiten und Gesamtfehlerraten von gRPC-Aufrufen analysieren. Durch die Bereitstellung von Echtzeitdaten und historischen Analysen hilft Ihnen Catchpoint , Muster zu erkennen, die auf zugrunde liegende Netzwerkprobleme oder die Notwendigkeit von Anpassungen der Wiederholungsstrategie hinweisen könnten.

Automatische Codegenerierung

Eine der besten Funktionen von gRPC ist die Unterstützung für die automatische Codegenerierung in mehreren Programmiersprachen. Entwickler können ihre Servicemethoden und Nachrichtentypen einmal in einer .proto-Datei definieren und automatisch Client- und Servercode generieren. Dies spart nicht nur Zeit, sondern gewährleistet auch Konsistenz und Typsicherheit in verschiedenen Teilen einer Anwendung.

Definieren eines gRPC-Dienstes:

syntax = "proto3";

package unary;

service Unary{
rpc GetServerResponse(Message) returns (MessageResponse) {}
}

message Message{
string message = 1;
}

message MessageResponse{
string message = 1;
bool received = 2;
}

Mithilfe des protoc-Compilers generiert diese Dienstdefinition Client- und Server-Code-Stubs, die die zugrundeliegenden Kommunikationsdetails behandeln, so dass sich die Entwickler auf die Implementierung der Geschäftslogik konzentrieren können. Detaillierten Code finden Sie in der offiziellen gRPC-Dokumentation.

Nehmen wir zum Beispiel eine globale E-Commerce-Plattform, die gRPC für ihre Microservices-Architektur und HTTP/3 für ihr Kommunikationsprotokoll verwendet. Das über mehrere Kontinente verteilte Entwicklungsteam muss den Produktkatalogdienst häufig aktualisieren, um neue Produkteinführungen und Aktualisierungen zu verarbeiten. Vor gRPC schrieben die Entwickler manuell Client- und Servercode für jeden Dienst, ein zeitaufwändiger und fehleranfälliger Prozess. 

Wenn das Team auf gRPC HTTP/3 umstellt, müssen die Entwickler nur noch die .proto-Dateien aktualisieren und den Client- und Servercode neu generieren, was die Entwicklungszeit und die Fehleranfälligkeit erheblich reduziert. Der Übergang zu HTTP/3 wird auch die Reaktionsfähigkeit der Plattform verbessern, insbesondere für Benutzer in Regionen mit weniger zuverlässigen Internetverbindungen. Die E-Commerce-Plattform wird kürzere Seitenladezeiten, eine höhere Benutzeraktivität und geringere Abbruchquoten bei Einkaufswagen verzeichnen.

{{banner-2="/design/banners"}}

Adaptives Streaming

Die Nachfrage nach hochwertigen Streaming-Diensten, von Videokonferenzen bis zu Live-Übertragungen, steigt. Die Nutzer erwarten High-Definition-Erlebnisse unabhängig von ihren Netzbedingungen oder geografischen Standorten. Adaptives Streaming passt die Qualität von Video- oder Audioinhalten in Echtzeit an die aktuellen Netzwerkbedingungen des Benutzers an. Ihre Anwendung kann bei Bandbreitenschwankungen dynamisch zwischen Streams unterschiedlicher Qualität wechseln.

 gRPC und HTTP/3 unterstützen adaptives Streaming. HTTP/3 verkürzt die Zeit, die für den Aufbau von Verbindungen und die Bereitstellung von Daten benötigt wird, was für Echtzeit-Interaktionen in Anwendungen wie Videokonferenzen entscheidend ist. gRPC in Kombination mit den HTTP/3-Multiplexing-Funktionen ermöglichen einen kontinuierlichen Datenfluss ohne Blockierung. Die Effizienz von gRPC bei der Datenserialisierung und der geringere Overhead von HTTP/3 ermöglichen einen höheren Datendurchsatz und damit Video- und Audioströme in besserer Qualität.

Schritte zur Umsetzung:

  1. Teilen Sie Medieninhalte in kleine, herunterladbare Stücke auf, die jeweils in verschiedenen Qualitätsstufen verfügbar sind.
  2. Überwachen Sie die Netzwerkleistung und wählen Sie die geeignete Qualitätsstufe für den nächsten Chunk, wobei Sie die höchste Qualität ohne Pufferung anstreben.

Codebeispiel unten.

def select_stream_chunk(available_qualities, network_speed):
    sorted_qualities = sort_qualities(available_qualities)
    for quality in sorted_qualities:
        if quality.bandwidth <= network_speed:
            return quality.chunk_url
    return sorted_qualities[0].chunk_url

Überwachen Sie Metriken wie Bandbreitennutzung, Pufferereignisse und Wiedergabeunterbrechungen, um zu prüfen, ob die adaptive Streaming-Logik wie erwartet funktioniert. So können Sie Probleme, die das Nutzererlebnis beeinträchtigen, erkennen und beheben. Die Überwachung der Leistung über verschiedene Regionen hinweg zeigt auch Bereiche auf, in denen zusätzliche Optimierungen erforderlich sind, z. B. die Bereitstellung weiterer CDN-Knoten.

Catchpointermöglicht es IT- und Network-Operations-Experten, sicherzustellen, dass Benutzer jederzeit durch die digitale Service-Bereitstellungskette navigieren können und gleichzeitig vor kritischen Ereignissen geschützt sind, unabhängig davon, ob diese lokal oder verteilt auftreten. Mit der Lösung können Sie ganz einfach eine proaktive Beobachtung der wichtigsten Internetdienste einrichten, einschließlich BGP und Drittanbieterdienste wie CDN und DNS.

Sicherheit

Die Integration von gRPC- und HTTP/3-Technologien bietet einen Rahmen für die Sicherung von Daten bei der Übertragung durch erweiterte Verschlüsselung und Authentifizierung. HTTP/3 verwendet standardmäßig Transport Layer Security für die Verschlüsselung von Daten bei der Übertragung und bietet so einen sicheren Kanal für die Client-Server-Kommunikation. gRPC unterstützt auch gegenseitiges TLS für die Client- und Server-Authentifizierung, wodurch sichergestellt wird, dass beide Parteien überprüft werden.

HTTP/3 verschlüsselt die Nutzdaten und die Kopfzeilen der Pakete und bietet damit eine zusätzliche Ebene des Datenschutzes und der Sicherheit. Durch die Kombination von Transport- und kryptographischen Handshakes verkürzt HTTP/3 die für den Aufbau sicherer Verbindungen erforderliche Zeit. Die Verschlüsselung der Paket-Header schützt vor Fingerprinting und Tracking, da die Informationen der Transportschicht verschleiert werden.

Sicherheit in HTTP/3

Fazit

HTTP/2 hat zwar Multiplexing, Header-Komprimierung und Server-Push eingeführt und damit die Leistung gegenüber HTTP/1 verbessert, ist aber für moderne Anwendungsfälle nur bedingt geeignet. gRPC und HTTP/3 bieten Lösungen, die die globale Reichweite und Reaktionsfähigkeit von Webanwendungen verbessern.

Die Integration von gRPC und HTTP/3 in Streaming-Architekturen entspricht nicht nur den aktuellen Anforderungen, sondern schafft die Voraussetzungen für die nächste Generation interaktiver Echtzeitanwendungen. Von Virtual-Reality-Erlebnissen bis hin zu Live-Events können Entwickler Anwendungen erstellen, die hochwertige Inhalte für ein globales Publikum bereitstellen und sich in Echtzeit an die Netzwerkbedingungen der einzelnen Benutzer anpassen.

Überwachungslösungen sind unerlässlich, um sicherzustellen, dass diese Technologien halten, was sie versprechen. Tools wie Catchpoint bieten detaillierte Einblicke in die Anwendungsleistung in verschiedenen Regionen und ermöglichen es den Teams, regionalspezifische Herausforderungen zu erkennen und zu bewältigen.

Weitere Fachbeiträge