70 votes

Comparaison des performances de Thrift, Protocol Buffers, JSON, EJB, autres?

Nous sommes à la recherche dans le secteur des transports et du protocole de solutions et étaient sur le point de faire différents tests de performance, alors j'ai pensé que je voudrais vérifier avec la communauté si elles l'ont déjà fait:

Quelqu'un a fait de serveur de tests de performance pour le simple écho de services ainsi que la sérialisation/désérialisation pour les différents messages tailles comparant EJB3, l'économie et le Protocole de Tampons sur Linux?

Principalement langues seront Java, C/C++, Python et PHP.

Mise à jour: je suis toujours très intéressé par ce, si quelqu'un a fait tout plus de repères s'il vous plaît laissez-moi savoir. Aussi, très intéressant de référence montrant comprimé JSON effectuer similaires ou meilleurs que d'Aubaines / Protocol Buffers, je vais donc me lancer JSON dans cette question.

56voto

Eishay Smith Points 712

Dernière comparaison disponible ici sur le wiki du projet thrift-protobuf-compare . Il comprend de nombreuses autres bibliothèques de sérialisation.

16voto

eishay Points 678

Je suis en train d'écrire un peu de code dans un projet open source nommé épargne-protobuf-comparer les comparant entre protobuf et l'épargne. Pour l'instant, il couvre quelques aspects de la sérialisation, mais j'ai l'intention de couvrir de plus en plus. Les résultats (pour l'Épargne et Protobuf) sont discutés dans mon blog, je vais ajouter plus quand je vais l'obtenir. Vous pouvez regarder le code de comparer les API, la description de la langue et le code généré. Je serai heureux d'avoir contribuer à la réalisation d'une plus arrondie comparaison.

8voto

user38123 Points 637

Cette question pourrait vous intéresser: "Les plus grandes différences entre Thrift et Protocol Buffers?"

8voto

StaxMan Points 34626

J'ai fait le test de performance de PB avec nombre d'autres formats de données (xml, json, par défaut sérialisation d'un objet, de hesse, un propriétaire) et les bibliothèques (jaxb, rapide infoset, écrite à la main) pour la liaison de données de la tâche (à la fois en lecture et en écriture), mais épargne format(s) n'a pas été inclus. Performance pour les formats avec de multiples convertisseurs (comme xml) à très haute variance, du très lent au joli-sacré-rapide. La corrélation entre les revendications des auteurs et la perception de la performance a été plutôt faible. En particulier pour les paquets qui ont fait les plus folles prétentions.

Pour ce qu'il vaut, j'ai trouvé le PB de la performance peu plus de hype (généralement pas par ses auteurs, mais d'autres qui ne sais qui l'a écrit). Avec les paramètres par défaut, il n'a pas battu le plus rapide xml textuel alternatif. Avec le mode optimisé (pourquoi ce n'est pas par défaut?), il était un peu plus rapide, comparables à celles de la manière la plus rapide JSON paquet. Hesse a été plutôt rapide, textuelles json aussi. Properietary format binaire (pas de nom ici, il a été interne de l'entreprise) a été le plus lent. Java sérialisation d'un objet a été rapide pour les messages les plus grands, l'est moins pour les petits objets (c'est à dire de haut fixe par opération noverhead). Avec PB de taille de message est compact, mais compte tenu de tous les compromis que vous avez à faire (les données ne sont pas auto-descriptif: si vous perdez le schéma, vous perdez des données; il y a des indices de cours, et les types de valeur, mais de ce que vous avez désosser retour à des noms de champ si vous voulez), personnellement, je ne choisissez pour des cas d'utilisation spécifiques -- taille-sensible, étroitement couplé système où l'interface/le format n'a jamais (ou très très rarement) des changements.

Mon avis, c'est que (a) la mise en œuvre souvent plus important que la spécification de format de données), (b) de bout en bout, les différences entre les best-of-breed (différents formats) ne sont généralement pas assez grand pour dicter le choix. Qui est, vous pourriez être mieux fait de choisir le format+API/lib/cadre que vous aimez à l'aide de la plupart (ou a le meilleur outil de soutien), de trouver la meilleure mise en œuvre, et de voir si cela fonctionne assez rapide. Si (et seulement si!) pas, envisager la meilleure alternative suivante.

ps. Pas sûr de ce que EJB3 ici. Peut-être tout simplement de la sérialisation Java?

4voto

Jon Skeet Points 692016

Une des choses les plus en tête de ma liste de choses à faire pour les PB est de porter le test de performance interne du tampon de protocole interne de Google. Il s’agit principalement de prendre des formats de message confidentiels et de les transformer en formats totalement fades, puis de faire de même pour les données.

Cela fait, j'imagine que vous pouvez créer les mêmes messages dans Thrift, puis comparer les performances.

En d'autres termes, je n'ai pas encore les données pour vous - mais j'espère dans les prochaines semaines ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X