Kompakte Video-Metadaten mit Protobuf

Unser Ingest-Worker ruft alle zwei Stunden Tausende von Trend-Videos ab. Wir senden diese Daten an drei Dienste: einen Ranking-Service, einen Cache-Warmer und einen Analytics-Job.

Lange Zeit haben wir JSON verwendet, um diese Daten zu übertragen. Es funktionierte so lange, bis es scheiterte.

Ein einzelner Video-Datensatz war in JSON 2,4 KB groß. Das Übertragen von 40.000 Datensätzen an drei verschiedene Dienste bedeutete, alle zwei Stunden 280 MB redundanter Text zu übertragen. Dies verschwendete Bandbreite und verlangsamte unsere PHP-Worker.

Wir sind auf Protocol Buffers (Protobuf) umgestiegen. Hier ist der Grund und wie es unser System verändert hat.

Die drei Hauptprobleme mit JSON:

Wie Protobuf dies gelöst hat:

Protobuf verwendet Feldnummern anstelle von Namen. Es nutzt eine .proto-Datei als Single Source of Truth. Diese Datei generiert Code für PHP, Python und Go. Wenn Sie das Schema ändern, schlägt die Kompilierung fehl. Dies verwandelt Laufzeitfehler in Kompilierfehler.

Die Ergebnisse:

Wir haben diese Änderungen über eine Woche lang gemessen:

Wann man Protobuf verwenden sollte:

Verwenden Sie es nicht für alles. Wenn Ihre Payloads klein sind oder Menschen sie leicht lesen können sollen, bleiben Sie bei JSON. Nutzen Sie Protobuf für internen Hochvolumen-Traffic, bei dem Geschwindigkeit und strikte Verträge am wichtigsten sind.

Unsere öffentlichen APIs verwenden weiterhin JSON. Unsere internen Dienste nutzen Protobuf.

Quelle: https://dev.to/ahmet_gedik778845/compact-video-metadata-serialization-with-protobuf-across-php-services-19lk