Performanter, hochskalierbarer
    Web 2.0-Dienst in Ruby
      Realisierbar oder nur ein nettes Märchen?


           Tob...
Referent:


Tobias Joch, ComBOTS

Titel des Vortrags:
Performanter, hochskalierbarer Web2.0-Dienst in Ruby –
Realisierbar ...
Abstract
 Ein neues Zeitalter ist angebrochen: Web2.0. Investoren geben viel Geld aus für
 Web2.0- Dienste. Ein rasanter W...
Agenda
•   Was ist Web 2.0
•   Was ist Ruby
•   Web-Server / Infrastruktur
•   Performance Probleme von …
    • Ruby als S...
Was ist Web 2.0
Kurze Definition




   "Design Patterns and Business Models
   for the Next Generation of Software" 1)


...
Was ist Web 2.0
• Zerplatzen der .com-Blase (Herbst 2001)
• Brainstorming (O'Reilly und MediaLive International, 2003)
   ...
Was ist Web 2.0
• Keine neue Version von Web-Standards
   • URI, HTTP, HTML, …
• Ansammlung von Prinzipien und Praktiken
 ...
Web 2.0-ness




               Web
Enorme Geschwindigkeit / Andauernder Beta-Phase




                                            Quelle: http://www.go2web2...
Wo stehen wir?
Performanter, hochskalierbarer
   Web 2.0-Dienst in Ruby
      Realisierbar oder nur ein nettes Märchen?


           Tobi...
Was ist Ruby?




                Quelle: http://www.ruby-lang.org/en/
•   Japan 1995
•   100% OO
•   Perl, Smalltalk, Eiffel, Ada, and Lisp
•   Exceptions, GC, Threads,
    CrossPlattform...
•...
• Simple Syntax
• Offene Klassen
• Closures / Blocks
• Closures / Blocks
•   Ruby Gem
•   Ruby Doc
•   Interactive Ruby (IRB)
•   Test::Unit
Wo stehen wir nun?
Performanter, hochskalierbarer
  Web 2.0-Dienst in Ruby
      Realisierbar oder nur ein nettes Märchen?


           Tobia...
Was ist Ruby on Rails?
• David Heinemeier Hansson
  • 12 Core Entwickler
  • >100 aktiv Mitwirkende aus der Community
• Fu...
Philosophie
• „…optimized for programmer happiness“
• Convention over Configuration!
  • Keine Komplexe Konfiguration
  • ...
Features
•   Scaffolding
•   Rapid Prototyping
•   Model-View-Controller Architektur
•   OR-Mapper
•   DB-Schema Managemen...
MVC-Architektur
Webserver-Unterstützung
• Betrieb von Rails-Applikationen via
  • WEBrick
  • mongrel
  • Apache
     • CGI, FCGI, SCGI,
 ...
Performance Probleme
• Ruby als Sprache
  •   Interpretierte Skriptsprache
  •   ~ 15x langsamer als Java?!
  •   kein Byt...
Probleme und Lösungen
• step by step …
Ineffizienter DB-Zugriff
• ActiveRecord wurde entwickelt für MySQL
• Oracle Adapter suboptimal
  • keine prepared Statemen...
ActiveRecord
• Verwendung von findern
  • nur das laden, was auch wirklich benötigt wird!
     • :select, :limit, :offset
...
ActiveRecord
• Klassisches Database Engineering nicht
  vergessen! ;)
  •   Indexe
  •   Query-Analyse
  •   Views
  •   …
ActionView
• Werden jedes mal neu interpretiert
  • Vergleich zu JSPs
  • Caching, caching, caching
• ViewHelper (=Taglibs...
ActionController
• Filter sind mächtig, aber auch langsam
• Instanzvariablen
  • Pro Request eigene View- und Controller-I...
Logging
Was kommt jetzt?
Performanter, hochskalierbarer
    Web 2.0-Dienst in Ruby
       Realisierbar oder nur ein nettes Märchen?


            T...
Skalierungsmöglichkeiten
•   Sessionhandling
•   Loadbalancing
•   Caching
•   AJAX / Comet
Sessionhandling
• Memory
• File-System
• Datenbank
  • ActiveRecordStore
  • SQLSessionStore
• Memcached
• DrbStore
Loadbalancing
• Lokal per
  • mod_proxy, mongrel_cluster, fcgi, …
• Mehrstufig
  •   Abhängig vom Sessionhandling
  •   Ro...
Loadbalancing
                 1



               Web-Server
                            mod_fcgi
                2




 ...
Loadbalancing (stickiness)
Loadbalancing (round-robin)
                                  Loadbalancer




          Web-Server                       ...
Loadbalancing (round-robin)
Caching
•   Page
     •   Schnell, nur für komplett unpersonalisierte Seiten
•   Action
     •   Zweitschnellste Option
  ...
Caching-Optimierungen
• Module für Apache
  • mod_expires
     • LastModified
  • mod_cache
• memcached
Fazit
  „Performanter, hochskalierbarer Web 2.0-Dienst in Ruby“


• Realisierbar oder nur ein nettes Märchen?
  • Und es g...
Fragen ?!

Tobias Joch, 11. Mai 2007
Ausblick
• Grails
• JRuby
Nächste SlideShare
Wird geladen in …5
×

Performanter, hochskalierbarer Web 2.0-Dienst in Ruby

1.039 Aufrufe

Veröffentlicht am

Ein neues Zeitalter ist angebrochen: Web2.0. Investoren geben viel Geld aus für Web2.0-Dienste. Ein rasanter Wettlauf um User-Generated Content hat begonnen und es ist kein Ende in Sicht. MySpace, Flickr, YouTube, Wikipedia, unzählige Blogs oder etwa Podcasting ist heute von jung bis alt vielen ein Begriff und wird oft auch im Alltag genutzt. Zeit spielt eine große Rolle bei der Planung und Konzeption eines neuen Web2.0-Dienstes. Deshalb findet man neben den üblichen nicht funktionalen Anforderungen wie Hochskalierbarkeit und Ausfallsicherheit auch Forderungen hinsichtlich immer kürzerer Implementierungszeiten. Neue Frameworks entstehen wie Sand am Meer und jedes verspricht dem Interessenten beim Faktor Time to Market das Beste zu sein. Eines der populärsten Frameworks dieser Art ist sicherlich Ruby on Rails.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.039
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
4
Aktionen
Geteilt
0
Downloads
3
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Performanter, hochskalierbarer Web 2.0-Dienst in Ruby

  1. 1. Performanter, hochskalierbarer Web 2.0-Dienst in Ruby Realisierbar oder nur ein nettes Märchen? Tobias Joch, 11. Mai 2007
  2. 2. Referent: Tobias Joch, ComBOTS Titel des Vortrags: Performanter, hochskalierbarer Web2.0-Dienst in Ruby – Realisierbar oder nur ein nettes Märchen Stichworte: Ruby on Rails,RoR,Ruby,Web2.0, ComBOTS Vorstellung des Referenten: Tobias Joch ist der Informatik wegen 1998 aus dem schönen Odenwald nach Karlsruhe gezogen. Während seinem Studium an der Hochschule Karlsruhe arbeitete er beim Steinbeis Transferzentrum und T-Systems International GmbH bevor er im Sommer 2004 zur WEB.DE AG wechselte. Zurzeit verantwortet Tobias Joch bei ComBOTS die Softwareentwicklung der Geschäftssysteme. URLs: http://www.ruby-lang.org http://www.rubyonrails.org http://www.flickr.com http://www.myspace.com http://www.youtube.com https://shop.combots.com http://de.wikipedia.org/wiki/Web_2 Zielgruppen: 1. Entwickler 2. Systemarchitekten 3. Projektmanager
  3. 3. Abstract Ein neues Zeitalter ist angebrochen: Web2.0. Investoren geben viel Geld aus für Web2.0- Dienste. Ein rasanter Wettlauf um User-Generated Content hat begonnen und es ist kein Ende in Sicht. MySpace, Flickr, YouTube, Wikipedia, unzählige Blogs oder etwa Podcasting ist heute von jung bis alt vielen ein Begriff und wird oft auch im Alttag genutzt. Zeit spielt eine große Rolle bei der Planung und Konzeption eines neuen Web2.0- Dienstes. Deshalb findet man neben den üblichen nicht funktionalen Anforderungen wie Hochskalierbarkeit und Ausfallsicherheit auch Forderungen hinsichtlich immer kürzerer Implementierungszeiten. Neue Frameworks entstehen wie Sand am Meer und jedes verspricht dem Interessenten beim Faktor Time to Market das Beste zu sein. Eines der populärsten Frameworks dieser Art ist sicherlich Ruby on Rails. Im Verlauf des Vortrages werden einige Erfahrungsberichte beim Einsatz von Ruby on Rails bei ComBOTS hinsichtlich Performance, Skalierbarkeit und Ausfallsicherheit präsentiert. Am Ende bleibt nur noch die Frage: „Performanter, Hochskalierbarer Web2.0-Dienst in Ruby – Realisierbar oder nur ein nettes Märchen“
  4. 4. Agenda • Was ist Web 2.0 • Was ist Ruby • Web-Server / Infrastruktur • Performance Probleme von … • Ruby als Sprache • Ruby on Rails als Web-Framework • Skalierung • Sessionhandling • Loadbalancing • Caching • Fazit • Ausblick
  5. 5. Was ist Web 2.0 Kurze Definition "Design Patterns and Business Models for the Next Generation of Software" 1) [Tim O'Reilly]
  6. 6. Was ist Web 2.0 • Zerplatzen der .com-Blase (Herbst 2001) • Brainstorming (O'Reilly und MediaLive International, 2003) • Dale Dougherty (O'Reilly Media VP) • Konzept: • „Web 2.0“ als Wendepunkte im Web • Geburt der 1. "Web 2.0 Konferenz"
  7. 7. Was ist Web 2.0 • Keine neue Version von Web-Standards • URI, HTTP, HTML, … • Ansammlung von Prinzipien und Praktiken • Das Web als Plattform • Die Nutzung kollektiver Intelligenz • Wikipedia, • Folksonomy (kollaborativer Kategorisierung) • Verbesserte Nutzungsmöglichkeiten • Podcasts, • RSS-Feeds, • Social Software (IM, Blogs, Wikis, Bookmarking, Network Services, …) • User generated content • Web APIs, Web Services, Mashups
  8. 8. Web 2.0-ness Web
  9. 9. Enorme Geschwindigkeit / Andauernder Beta-Phase Quelle: http://www.go2web20.net
  10. 10. Wo stehen wir?
  11. 11. Performanter, hochskalierbarer Web 2.0-Dienst in Ruby Realisierbar oder nur ein nettes Märchen? Tobias Joch, 11. Mai 2007
  12. 12. Was ist Ruby? Quelle: http://www.ruby-lang.org/en/
  13. 13. • Japan 1995 • 100% OO • Perl, Smalltalk, Eiffel, Ada, and Lisp • Exceptions, GC, Threads, CrossPlattform... • dynamisch typisiert • Introspection • Module • OSS, GPL oder eigene
  14. 14. • Simple Syntax
  15. 15. • Offene Klassen
  16. 16. • Closures / Blocks
  17. 17. • Closures / Blocks
  18. 18. • Ruby Gem • Ruby Doc • Interactive Ruby (IRB) • Test::Unit
  19. 19. Wo stehen wir nun?
  20. 20. Performanter, hochskalierbarer Web 2.0-Dienst in Ruby Realisierbar oder nur ein nettes Märchen? Tobias Joch, 11. Mai 2007
  21. 21. Was ist Ruby on Rails? • David Heinemeier Hansson • 12 Core Entwickler • >100 aktiv Mitwirkende aus der Community • Fullstack OSS Web-Framework • Aus bestehender Anwendung extrahiert (37signals) • Implementiert in Ruby
  22. 22. Philosophie • „…optimized for programmer happiness“ • Convention over Configuration! • Keine Komplexe Konfiguration • Kein XML für OR-Mapping • Anpassbar bei Bedarf • Don´t repeat yourself! (DRY) • Testing on all Layers!
  23. 23. Features • Scaffolding • Rapid Prototyping • Model-View-Controller Architektur • OR-Mapper • DB-Schema Management • Configuration Management • Ajax Integration • Plugins
  24. 24. MVC-Architektur
  25. 25. Webserver-Unterstützung • Betrieb von Rails-Applikationen via • WEBrick • mongrel • Apache • CGI, FCGI, SCGI, • mod_ruby • mod_proxy (Apache 2.2) • lighttpd • CGI, FCGI • …
  26. 26. Performance Probleme • Ruby als Sprache • Interpretierte Skriptsprache • ~ 15x langsamer als Java?! • kein Byte-Code, kein JIT, AST wird direkt interpretiert • keine Optimierungen zur Übersetzungszeit • RoR als Framework • Routing • ineffiziente Rails Helper-Methoden • Assoziationen • Ineffizienter DB-Zugriff • Langsamer Session Container
  27. 27. Probleme und Lösungen • step by step …
  28. 28. Ineffizienter DB-Zugriff • ActiveRecord wurde entwickelt für MySQL • Oracle Adapter suboptimal • keine prepared Statements • Spezielles tuning / workaround für Oracle • prefetch_rows • cursor_sharing • Model.find_by_sql • ggf. auch ActiveRecord umgehen • direkt per OCI8.new(…)
  29. 29. ActiveRecord • Verwendung von findern • nur das laden, was auch wirklich benötigt wird! • :select, :limit, :offset • Association Proxies nicht sehr effizient • Benötigte Assoziationen gleich mit laden! • :include (eager join) • dynamische finder • mächtig aber auch langsamer • MyModel.find_by_sql für • Transaktions Block verwenden
  30. 30. ActiveRecord • Klassisches Database Engineering nicht vergessen! ;) • Indexe • Query-Analyse • Views • …
  31. 31. ActionView • Werden jedes mal neu interpretiert • Vergleich zu JSPs • Caching, caching, caching • ViewHelper (=Taglibs) • HTML verwenden anstelle von <% form_end %> • Plugin verwenden für pre-rendering • AssetPacker • Merged und komprimiert JS und CSS
  32. 32. ActionController • Filter sind mächtig, aber auch langsam • Instanzvariablen • Pro Request eigene View- und Controller-Instanz • Instanzvariabeln werden in die View kopiert • Eigener Request-Zyklus für Komponenten • Besser Partials
  33. 33. Logging
  34. 34. Was kommt jetzt?
  35. 35. Performanter, hochskalierbarer Web 2.0-Dienst in Ruby Realisierbar oder nur ein nettes Märchen? Tobias Joch, 11. Mai 2007
  36. 36. Skalierungsmöglichkeiten • Sessionhandling • Loadbalancing • Caching • AJAX / Comet
  37. 37. Sessionhandling • Memory • File-System • Datenbank • ActiveRecordStore • SQLSessionStore • Memcached • DrbStore
  38. 38. Loadbalancing • Lokal per • mod_proxy, mongrel_cluster, fcgi, … • Mehrstufig • Abhängig vom Sessionhandling • Round-robin • Fastest • Stickiness
  39. 39. Loadbalancing 1 Web-Server mod_fcgi 2 FastCGI FastCGI FastCGI + Ruby + Ruby + Ruby 3a 3b DB memcached
  40. 40. Loadbalancing (stickiness)
  41. 41. Loadbalancing (round-robin) Loadbalancer Web-Server Web-Server mod_fcgi mod_fcgi FastCGI FastCGI FastCGI FastCGI FastCGI FastCGI + Ruby + Ruby + Ruby + Ruby + Ruby + Ruby DB memcached
  42. 42. Loadbalancing (round-robin)
  43. 43. Caching • Page • Schnell, nur für komplett unpersonalisierte Seiten • Action • Zweitschnellste Option • Komplette Rendering-Phase fällt weg • Prozess intensive Berechnungenintensive computations • Fragement • Wenn oben Page und Action nicht funktioniert • Extended Fragment Cache Plugin • Content Interpolation • Model • acts_as_cached (Plugin) • CachedModel (Plugin) • find(), update()
  44. 44. Caching-Optimierungen • Module für Apache • mod_expires • LastModified • mod_cache • memcached
  45. 45. Fazit „Performanter, hochskalierbarer Web 2.0-Dienst in Ruby“ • Realisierbar oder nur ein nettes Märchen? • Und es geht doch?! • Sicherlich nicht für alle Einsatzgebiete • „Rails is great but still needs a lot of optimization“ • Entwicklungsgeschwindigkeit vs. Hardware- und Betriebskosten • Entwickler… (jobs@combots.com)
  46. 46. Fragen ?! Tobias Joch, 11. Mai 2007
  47. 47. Ausblick • Grails • JRuby

×