2010-10-04 6 views
5

Wir haben eine Flex/Java-Anwendung mit BlazeDS und untersuchen, wie wir die Größe der Payloads reduzieren, die zwischen unserem Server und dem Client ausgetauscht werden.GZip-Komprimierung lohnt sich mit AMF

Da AMF ein binäres Format ist und ziemlich kompakt sein soll, hat es einen Vorteil, die GZip-Komprimierung einzuschalten? Hat jemand anderes dies schon einmal getan, und haben Sie durch die Verwendung von Komprimierung signifikante Vorteile festgestellt?

UPDATE

Ich führte nur einen einfachen Test, um zu bestimmen, welche Art von Kompressionsverhältnisse könnten wir erwarten, wenn wir Gzipping aktivieren waren. Ich habe gerade die AMF-Nutzdaten in einigen Dateien erfasst und sie einfach mit der Linux-Befehlszeilenversion gezippt. Ich habe nicht die Komprimierungsstufe angegeben, sondern nur die Standardeinstellung, d. H. "Normal". Es scheint, dass die Payload-Größe im Durchschnitt um 9% reduziert wird, wobei einige Payloads sogar 61% erreichen. Kann jemand einen Fehler in dieser Methode sehen und welche Komprimierungsstufe kann beim HTTP-Gziping verwendet werden?

+0

Vielleicht ist dies eine lächerliche Frage - nutzen Sie die Optionen, die von Ihrem Servlet-Container (dh tomcat) zur Verfügung gestellt werden, um die Komprimierung einzuschalten? Oder verwenden Sie dazu einen benutzerdefinierten Anforderungsfilter? Ich habe gesehen, dass Code herumschwebt, der darauf hindeutet, einen eigenen Filter zu erstellen, aber ich sehe nicht, warum man nicht einfach die Kompression am Tomcat-Connector aktivieren kann. Vielen Dank! – tyler

Antwort

5

Wir haben kürzlich einige Client-Server-Kommunikation von SOAP zu AMF gewechselt, und wir haben auch Auswirkungen der Komprimierung verglichen. Wir haben uns auf einen bestimmten Dienst konzentriert, der einige große Antworten liefert. Diese waren unsere Ergebnisse, die gleichen Daten zurückkehrt (serialisiert mit xfire + aegis für SOAP und BlazeDS für AMF):

  • soap: unkomprimierte: 1000KB gzipped: 100 KB (90% reduziert)
  • AMF: unkomprimierte: 200KB gezippt: 30KB (85% reduziert)

Unsere Schlussfolgerung ist Gzipping ist es definitiv wert. Die binäre AMF kann fast so gut wie XML (SOAP) komprimiert werden. Natürlich kann Ihr Kilometerstand abhängig von der Art der Daten, die Sie zurückgeben, variieren.

+0

Auf welcher Größe wiegt die Leistungseinbuße der Komprimierung/Dekomprimierung den reduzierten Netzwerkverkehr auf? – splash

+3

@splash: Ich glaube nicht, dass es auf die Größe abhängt. Bei größeren Anfragen skalieren der Nachteil (mehr CPU-Zeit) und der Vorteil (kleinere Antworten) zusammen. Es hängt davon ab, wie viel CPU und Bandbreite Ihr Server und Ihre Clients * zur Verfügung haben müssen * (hängt also davon ab, wie viel Sie zur Verfügung haben und wie CPU und bandbreitenintensiv die Anwendung ist). –

+0

Es wäre auch hilfreich, die AMF-Spezifikation zu lesen, um zu verstehen, wo es funktioniert und wo nicht. Zum Beispiel sind die Strings in AMF überhaupt nicht komprimiert, wenn Sie andererseits eine Menge Integer haben, werden Sie keine signifikante Verbesserung sehen. –

4

Es hängt von den Daten ab. Wenn Sie viele hochstrukturierte Daten haben, wird normalerweise nur ein Bruchteil der tatsächlichen Informationen verwendet. Dann wird Kompression Sinn machen.

z.B. Ein Datensatz mit einem Kategoriefeld, das eine von 6 Möglichkeiten ist, könnte 32 Bit benötigen, wenn es als GUID codiert ist, aber Sie können es mit 3 Bit darstellen. Die Komprimierung wird diese Muster sehr häufig sehen und sie reduzieren.

Ähnlich für nicht wiederholende Strings.

AMF hat einige Optimierungen für kleine ganze Zahlen und wiederholte Strings, aber nicht wirklich Kompression. Siehe this discusion.

Machen Sie einige Benchmarks und entscheiden Sie.

2

Sie können experimentieren mit, wie GZIP ein- und ausschalten Übertragungsgrößen mit meiner Census RIA Benchmark ändert. Aber wie andere darauf hingewiesen haben, hängen die Ergebnisse stark von den Daten ab. Ihre eigenen Tests mit eigenen Daten durchzuführen, ist daher die beste Entscheidung.

Denken Sie auch daran, dass es auf beiden Seiten Overhead zu GZIP gibt, so dass manchmal Overhead es wert ist (langsamere Verbindungen) und manchmal ist es nicht.