dimanche 13 octobre 2013

Quelques mots sur Protobuf

Protobuf c'est quoi

     Pour un projet c'est tout d'abord une technologie qui doit être partagée entre le fournisseur et le consommateur de data.

     La technologie définie un format d'échange au travers un fichier décrivant le (les) objet(s) échangé(s). A partir de ce fichier un compilateur génère des classes (Java, C#, ... fonction du besoin). Producteur et consommateur du flux de données s'échangent un flux de bytes que les classes générées sont à même de produire (output de méthode) et consommer (input d'une méthode retournant une instance de l'objet).

Avantages :
  • La réduction du volume échangé, les données étant réduites à un flux de byte minimaliste.
  • La solution permet d'avoir producers et consummers dans des technologies différentes (Java, C#, ...).
Les inconvénients :
  • La lisibilité des messages échangés tant que ces bytes arrays n'ont pas été désérialisées.
  • Sensibilité aux changements de formats (normal on est sur un contrat d'échange donc sur des conventions).
  • Sensibilité à la version protobuf utilisée de part et d'autres pour générer les classes (à vérifier).

En terme d'artefacts il faut donc :
  • un fichier .proto définissant le format du message (contrat d'interface).
  • en tooling un compilateur (exe, so, ...) dépendant de la plateforme, générant les classes java à partir du .proto.
  • idéalement un plugin maven pour intégrer cette phase de génération de classes dans le cycle de build du projet .

     Au niveau intégration, le plugin maven doit pouvoir accéder au compilateur proto. De même si l'on veut (via M2e) intégrer le cycle de build dans Eclipse, il faut définir une variable eclipse pointant l'exe.

     Le plugin intégrant eclipse et Maven (M2e) ne gère pas toujours bien les étapes de génération de classes proto (cycle de build sans fin, ...). Une manière simple est de regrouper toutes ses classes à générer (proto, wsdl, xsd, ...) dans un projet avec son pom spécifique. Une fois le jar généré ne l'utiliser qu'en dépendance (et pas projet ouvert) sous Eclipse.

Quelques urls

Protobuf :

Plugin Maven pour protobuf :

Les solutions proposant un service équivalent :
Un benchmark de différentes librairies de Serialization :
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

Un comparatif Protobuf vs Thrift :
http://blog.octo.com/serialisation-thrift-et-protocol-buffers/

Aucun commentaire:

Enregistrer un commentaire