L'utilisation de Protobuf se démocratise de plus en plus pour remplacer le JSON en tant que format d'échange de données.
Cela devrait être le choix par défaut pour toute communication inter-serveur.
Attention néanmoins dans les environnements JS la différence de performances n'est pas assurée donc pensez à benchmarker ;-)
L'histoire de l'adoption de Kafka chez Cloudflare en tant que message bus inter-services.
Ils l'ont déployé pour optimiser le développement de leur architecture micro-service (découplage) mais aussi:
- réduire les silos de données
- rendre les communications inter-services plus claires
- avoir un format de communication auto-documenté
Pour cela, ils ont notamment développé un client Kafka interne qui abstrait la plupart de la configuration et de la logique compliqué.
Le schéma de communication n'est pas JSON ou Avro (ouf!) mais l'excellent Protobuf qui en plus d'avoir une taille réduite, assure le typage fort de chaque champ afin d'identifier les breakings changes.
Niveau observabilité, le plus important pour eux est le "lag", qui est le temps entre le dernier message produit et le dernier message lu.
Cette seule métrique permet d'identifier de nombreux problèmes:
- le consumer est down
- le consumer n'arrive pas à ingérer tous les messages
- un nombre inhabituel de messages est produit
- le consumer n'acquitte plus les messages
Bref, un super retour d'expérience et pleins de bons conseils pour construire son infrastructure applicative avec Kafka.
Un exemple d'utilisation des Protocol Buffers en Node.js.
L'exemple utilise l'excellente lib Protobuf.js qu'on utilise aussi dans le coeur de Kuzzle pour la communication entre les noeuds du cluster ;-)
J'en parlait ici aussi https://links.aschen.tech/shaare/R6dzhw
Très bonne explication du fonctionnement et des usages de Protocol Buffer, le standard pour encoder et partager des données binaires.
C'est un pseudo langage pour représenter de la données, des nombres, des strings, etc
message Event {
fixed32 count = 42;
string user = 'aschen' ;
}
Des librairies sont disponibles dans tous les langages pour encoder / décoder des messages protobuf.
On peut s'en servir pour envoyer des messages sur le réseau de manière performante (par rapport au traditionnel JSON) mais aussi pour stocker des objets dans des fichiers.
Dans Kuzzle on s'en sert pour une communication efficace entre les nœuds du cluster par exemple