Frage

Wir suchen in Transport / Protokoll-Lösungen und waren über die verschiedenen Leistungstests zu tun, so dass ich dachte, dass ich mit der Gemeinschaft überprüfen würde, wenn sie dies bereits getan haben:

Hat jemand getan Server-Performance-Tests für einfaches Echo Dienste sowie Serialisierung / Deserialisierung für verschiedene Nachrichten Größen zu vergleichen EJB3, Thrift, und Protocol Buffers auf Linux?

In erster Linie Sprachen sind Java, C / C ++, Python und PHP.

Update: Ich bin immer noch sehr interessiert an diesem, wenn jemand irgendwelche weiteren Benchmarks getan hat lass es mich wissen. Auch sehr interessant Benchmark zeigt komprimiert JSON, die ähnliche / besser als Thrift / Protocol Buffers , so dass ich sind auch JSON in diese Frage zu werfen.

War es hilfreich?

Lösung

Aktuelle Vergleich finden Sie hier auf der thrift-protobuf-Vergleich Projekt-Wiki. Es enthält viele andere Serialisierung Bibliotheken.

Andere Tipps

Ich bin in dem Prozess einige Codes in einem -protobuf-Vergleich Vergleich zwischen protobuf und Sparsamkeit. Vorerst deckt es einige Serialisierung Aspekte, aber ich beabsichtige, mehr zu decken. Die Ergebnisse (für Thrift und protobuf ) sind in meinem Blog besprochen, werde ich mehr hinzufügen, wenn ich es bekommen werde. Sie können den Code anschauen API, Beschreibungssprache und generierten Code zu vergleichen. Ich werde gerne Beiträge haben eine rundere Vergleich zu erzielen.

Sie können in dieser Frage interessieren: "größten Unterschiede von Thrift vs Protocol Puffer? "

Ich habe Testleistung von PB mit einigen anderen Datenformaten (XML, JSON, default Objektserialisierung, Hessische, ein proprietär) und Bibliotheken (jaxb, schnell infoset, handgeschriebene) für die Datenbindung Aufgabe (sowohl Lese- und Schreiben), aber thrift das Format (n) nicht inbegriffen. Performance für Formate mit mehreren Wandlern (wie xml) hatte sehr hohe Varianz, von sehr langsam bis pretty-darn-schnell. Die Korrelation zwischen Ansprüchen von Autoren und wahrgenommene Leistung war eher schwach. Gerade so für Pakete, die wildesten Behauptungen.

Für was es wert ist, ich PB Leistung fand etwas über gehypten zu sein (in der Regel nicht von den Autoren, sondern andere, die nur wissen, wer es geschrieben haben). Mit Standardeinstellung hat es nicht schnellste Text xml Alternative zu schlagen. Mit optimierten Modus (warum ist dies nicht Standard?), War es etwas schneller, vergleichbar mit dem schnellsten JSON-Paket. Hessisches war ziemlich schnell, textlicher json auch. Properietary Binärformat (kein Name hier war es Unternehmen intern) war die langsamste. Java Objektserialisierung war schnell für größere Nachrichten, weniger für kleine Objekte (d.h. hohe Fest per-Betrieb noverhead). Mit der Größe PB Nachricht war kompakt, aber da alle Abwägungen Sie zu tun haben (Daten sind nicht selbsterklärend: Wenn Sie das Schema verlieren, verlieren Sie Daten, es gibt Indizes natürlich und Werttypen, sondern von dem, was Sie haben Reverse-Engineering zurück Namen zu Feld, wenn Sie möchten), würde ich persönlich nur wählen, um es für bestimmte Anwendungsfälle -. Größe empfindlich, eng gekoppelt System, in dem Interface / Format nie (oder nur sehr sehr selten) Änderungen

Meine Meinung in dieser ist, dass (a) die Umsetzung oft mehr zählt als Spezifikation (Datenformat), (b) End-to-End-Unterschiede zwischen dem Best-of-Breed (für verschiedene Formate) sind in der Regel nicht groß genug die Wahl zu diktieren. Das heißt, können Sie besser dran sein Format wählen + API / lib / Rahmen Sie wie die meisten (oder hat beste Tool-Unterstützung), finden beste Umsetzung, und sehen, ob das schnell genug funktioniert. Wenn (und nur dann!) Nicht, sollte nächstbeste Alternative.

ps. Nicht sicher, was EJB3 hier sein würde. Vielleicht einfach nur von Java Serialisierung?

Eines der Dinge, in der Nähe der Spitze meines „to-do“ -Liste für PBs ist in dem Hafen von Google interner Protokollen Buffer Performance-Benchmark - es ist vor allem ein Fall unter vertraulichen Nachrichtenformaten und sie in völlig fad diejenigen drehen, und dann tun das gleiche gilt für die Daten.

Wenn das erledigt war, ich kann ich vorstellen, Sie die gleichen Nachrichten in Thrift bauen könnten und dann die Leistung vergleichen.

Mit anderen Worten, ich habe nicht die Daten für Sie noch - aber hoffentlich in den nächsten paar Wochen ...

Wenn die rohe Nettoleistung das Ziel ist, dann geht nichts über IIOP (siehe RMI / IIOP). Kleinster Raum - nur binäre Daten, kein Markup überhaupt. Serialisierung / Deserialisierung ist sehr schnell zu.

Da es IIOP (dh CORBA), fast alle Sprachen haben Bindungen.

Aber ich nehme an der Leistung ist nicht die nur Anforderung, nicht wahr?

Um Wladimirs Punkt über IIOP zu sichern, ist hier ein interessanter Performance-Test, dass einige zusätzliche Informationen über das Google-Benchmarks geben sollte, da es Thrift und CORBA vergleicht. (Performance_TIDorb_vs_Thrift_morfeo.pdf // Link nicht mehr gültig) Ein Zitat aus der Studie:

  
      
  • Thrift ist sehr effizient mit kleinen   Daten (Grundtypen als Betrieb   Argumente)
  •   
  • Thrifts Transporte sind nicht so effizient wie CORBA mit mittleren und   große Daten (struct und> Komplex   Typen> 1 Kilobyte).
  •   

Eine andere ungerade Einschränkung, nicht mit Leistung zu tun hat, ist, dass Thrift begrenzt ist nur mehrere Werte als eine Struktur auf die Rückkehr - obwohl dies, wie Leistung, kann sicherlich vielleicht verbessert werden.

Es ist interessant, dass die Thrift IDL eng an der CORBA IDL entspricht, schön. Ich habe nicht verwendet Thrift, es vor allem für kleinere Nachrichten und eine der Design-Ziele war für ein weniger umständlich installieren, so dass diese andere Vorteile von Thrift interessant aussieht. Das heißt, CORBA hat einen schlechten Ruf, es gibt viele gute Implementierungen da draußen wie omniORB zum Beispiel, die Bindungen hat für Python, die sind einfach zu installieren und zu verwenden.

Editiert: Die Thrift und CORBA-Link ist nicht mehr gültig, aber ich habe ein weiteres nützliches Papier von CERN finden. Sie werteten Ersatz für ihr CORBA-System und, während sie ausgewertet Thrift , gingen sie schließlich mit ZeroMQ. Während Thrift die schnellsten in ihren Performance-Tests durchgeführt, bei 9000 msg / s vs. 8000 (ZeroMQ) und 7000+ RDA (CORBA-basierte) wählten sie nicht Thrift weiter vor allem wegen anderer Probleme zu testen:

  

Es ist noch ein unreifes Produkt mit einer Buggy Umsetzung

Ich habe eine Studie für die Frühjahr-Boot gemacht, Mapper (manuell, Dozer und MapStruct), Thrift, REST, SOAP und Protocol Buffers Integration für meinen Job.

Die Server-Seite: https://github.com/vlachenal/webservices-bench

Die Client-Seite: https://github.com/vlachenal/webservices-bench-client

Es ist nicht fertig und hat auf meinen persönlichen Computern ausgeführt worden (ich habe für Server zu fragen, um die Tests zu vervollständigen) ... aber die Ergebnisse können auf zu Rate gezogen werden:

Als Schlussfolgerung:

  • Thrift bietet die beste Leistung und ist einfach zu bedienen
  • RESTful Webservice mit Inhaltstyp JSON ist ziemlich nah an Thrift Leistung ist "Browser ready to use" und ist sehr elegant (aus meiner Sicht)
  • SOAP hat eine sehr schlechte Leistung, sondern bietet die beste Datenkontrolle
  • Protocol Buffers hat eine gute Leistung ... bis 3 gleichzeitige Anrufe ... und ich weiß nicht, warum. Es ist sehr schwierig zu bedienen. Ich gebe auf (bis jetzt), die für sie mit MapStruct machen arbeiten, und ich versuche nicht, mit Dozer

Die Projekte können durch Pull-Anforderungen (entweder für Korrekturen oder andere Ergebnisse) abgeschlossen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top