Skip to content
Yannick PÉROUX edited this page Aug 11, 2013 · 3 revisions

Les différents composants d'Onitu (drivers, referee…) doivent communiquer entre eux via des envois de messages , qui passent par ZeroMQ.

Ces messages sont très importants, car ils peuvent contenir de grosses quantités de données, notamment une partie d'un fichier.

Afin d'optimiser la réactivité et l'empreinte mémoire d'Onitu, ces messages doivent être choisi avec précaution. Étant donné que changer de protocole nécessite très peu de changement dans le code, des benchmarks devraient être réalisables simplement.

Existant

Pour le Proof of Concept, les messages seront envoyé en JSON, via les methodes send_json et recv_json de PyZMQ.

Liste des protocoles potentiels

Il existe de nombreuses manières de sérialiser un message. Il nous faut donc les identifier afin de choisir la plus pratique.

Protocoles peu adaptés

  • À l'arrache -> Créer un protocole très bête. Demande un peu de travail, n'est pas forcément optimum. Des gens plus intelligents ont déjà fait des protocoles mieux.
  • JSON -> Très facile, et flexible, supportée nativement par PyZMQ, mail les messages ne sont pas du tout optimum, ni les temps de sérialisation/dé-sérialisation.
  • pickle -> Natif python, peut entraîner de grosses failles de sécurité. À éviter.

Protocoles intéressants

  • Protobuf -> Messages optimisés, temps très bons, mais besoin de définir un protocole manuellement et de générer du code boilerplate. Pas de support de Python 3 pour le moment.
  • Thift -> Même chose que Protobuf, mais par Facebook, supporté par Apache.
  • MessagePack -> Semble très intéressant. Du JSON, mais avec des messages beaucoup plus optimisés.
  • Blosc -> Un système ultra-rapide, sensé être plus rapide qu'un memcpy. Très intéressant, à regarder.
  • JSON + compression -> Peut-être la meilleure solution, il faudrait faire des benchs.

Ressources

Beaucoup de gens ont comparé différentes méthodes.

Clone this wiki locally