Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I...

24
Ein Performance-Benchmark für Java-Web-Frameworks Diplomarbeit Christophe Sokol Institut für Informatik Freie Universität Berlin 13. Juni 2013

Transcript of Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I...

Page 1: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Ein Performance-Benchmark fürJava-Web-Frameworks

Diplomarbeit

Christophe Sokol

Institut für InformatikFreie Universität Berlin

13. Juni 2013

Page 2: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Kontext

Umsetzung

Verweise

Page 3: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Performance-Benchmarks

I Was ist der Untersuchungsgegenstand?I Was wird gemessen?I Wie wird gemessen?I Womit wird gemessen?

Page 4: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Java-Web-Frameworks

I TapestryI Spring MVC

I JSFI Struts

I Ruby on Rails, Sinatra (Ruby)I Django (Python)I Catalyst (Perl)I Symfony, Zend Framework (PHP)

Page 5: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Features von Web-Frameworks und -Anwendungen

I RoutingI Views / TemplatesI Input ValidationI Session HandlingI ORMI Form HandlingI Authentication

I AuthorizationI I18n / L18nI ScaffoldingI CachingI Asset ManagementI Web servicesI AJAX

Page 6: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Frameworks sind unterschiedlich

I MikroframeworksI Full-Stack-Frameworks

I Einfluss der PlattformI Zielgruppe

Page 7: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Bestehende Benchmarks

I Extremer AnwendungsfallI Kleine Auswahl von FrameworksI Infrastruktur nicht transparentI Sind veraltet

Page 8: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I
Page 9: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I
Page 10: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Ansatz

I Aufteilung in TeilbenchmarksI Quellcode und Konfiguration der Infrastruktur mit git

verwaltenI Automatisierte AuswertungenI Kollaboration per sog. Pull-Request

Page 11: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Teilbenchmarks

I Hallo WeltI RoutingI Zufälliger TextI SeitenwechselI Binäre DatenI Formulare

I SessionsI AuthentifizierungI DatenbankzugriffI TemplatesI GlobalisierungI API

Page 12: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Ein Teilbenchmark

I Implementierung mit Spring MVC und TapestryI Deployment mit PuppetI Konfiguration der Benchmarks mit PuppetI Auswertung mit RI Ergebnis als Webseite

Page 13: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I
Page 14: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I
Page 15: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I
Page 16: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I
Page 17: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I
Page 18: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I
Page 19: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I
Page 20: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I
Page 21: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Probleme

I Viele verschiedene Technologien und SprachenI Automatisierung ist zeitaufwändigI Benchmarks noch nicht 100%ig deterministisch(!)I Was ist eine Web-Anwendung?I Iteratives Vorgehen schwer durchzuhalten

Page 22: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Nächste Schritte

I Ermitteln von optimaler Konfiguration der LaufzeitumgebungI Implementierung weiterer TeilbenchmarksI Erweitern der AuswertungenI Validierung der Ergebnisse auf anderer InfrastrukturI Web-basiertes Anlegen von Benchmarks (Puppet ENC)I Weitere Frameworks einbeziehen

Page 23: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

Literatur

I Casteleyn, Sven, Florian Daniel, Peter Dolog, and Maristella Matera. Engineering Web Applications.Data-Centric Systems and Applications. Berlin, Heidelberg: Springer-Verlag, 2009.

I ———. “Performance Testing.” In Engineering Web Applications, 349. Data-Centric Systems andApplications. Berlin, Heidelberg: Springer-Verlag, 2009.

I F5 Networks, Inc. “Creating a Robust Performance Testing Methodology,” 2007.https://devcentral.f5.com/downloads/f5/creating-performance-test-methodology.pdf.

I Feitelson, Dror G. “Metric and Workload Effects on Computer Systems Evaluation.” Computer 36, no. 9(September 2003): 18–25.

I Fleming, Philip J., and John J. Wallace. “How Not to Lie with Statistics: The Correct Way to SummarizeBenchmark Results.” Communications of the ACM 29, no. 3 (March 1986): 218–221.doi:10.1145/5666.5673.

I Lev Walkin. “Stress-testing Httperf, Siege, Apache Benchmark, and Pronk.” Lionet, January 4, 2012.http://lionet.livejournal.com/99984.html.

I Sohn, Dirk M., and Papick Taboada. OIO Kompass: Java Web-Frameworks. Orientation in ObjectsGmbH, April 2012. http://www.oio.de/public/java/java-web-frameworks-vergleich/jsf-vs-gwt-studie.htm.

Page 24: Ein Performance-Benchmark für Java-Web-Frameworks … · Java-Web-Frameworks I Tapestry I SpringMVC I JSF I Struts I RubyonRails,Sinatra(Ruby) I Django(Python) I Catalyst(Perl) I

BenchmarksI Cecchet, E., V. Udayabhanu, T. Wood, and P. Shenoy. “Benchlab: An Open Testbed for Realistic

Benchmarking of Web Applications.” In 2nd USENIX Conference on Web Application Development, 37,2011. http://static.usenix.org/events/webapps11/tech/final_files/webapps11_proceedings.pdf.

I Davis, Seth. “The Great Web Framework Shootout.” Blog. Curia: Technology Thoughts and Ideas, 2011.http://blog.curiasolutions.com/the-great-web-framework-shootout/.

I JT Dev. “Rails, Wicket, Grails, Play, Tapestry, Lift, JSP, Context.” Blog. About Programming Stuff, May28, 2011. http://www.jtict.com/blog/rails-wicket-grails-play-lift-jsp/.

I Nagpurkar, P., W. Horn, U. Gopalakrishnan, N. Dubey, J. Jann, and P. Pattnaik. “WorkloadCharacterization of Selected JEE-based Web 2.0 Applications.” In IEEE International Symposium onWorkload Characterization, 2008. IISWC 2008, 109–118, 2008.

I Punz, Werner. “Mojarra Vs. MyFaces Performance.” Werners Blog, October 14, 2011.http://werpublogs.blogspot.de/2011/10/mojarra-vs-myfaces-performance.html.

I TechEmpower, Inc. “Framework Benchmarks.” TechEmpower Blog, March 28, 2013.http://www.techempower.com/blog/2013/03/28/framework-benchmarks/.

I Thomas, Peter. “‘Perfbench’ Update: Tapestry 5 and Grails.” Blog. Incremental Operations, September14, 2009. http://ptrthomas.wordpress.com/2009/09/14/perfbench-update-tapestry-5-and-grails/.

I ———. “Seam / JSF Vs Wicket: Performance Comparison.” Blog. Incremental Operations, January 14,2009. http://ptrthomas.wordpress.com/2009/01/14/seam-jsf-vs-wicket-performance-comparison/.

I Uribe, Leonardo. Understanding JSF 2 and Wicket: Performance Comparison, May 18, 2012.https://raw.github.com/lu4242/performance-comparison-java-web-frameworks/master/comparison-2012-APR/Performance%20Comparison-Leonardo%20Uribe-FINAL-Detailed.pdf.

I Van den Enden, Stijn. “WWW: World Wide Wait. A Performance Comparison of Java Web Frameworks.”presented at the Devoxx, Antwerp, Belgium, November 17, 2011.http://prezi.com/dr3on1qcajzw/www-world-wide-wait-devoxx-edition/.