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.
ShareConf 2014: 10 Gründe warum der SharePoint langsam ist
Performanter, hochskalierbarer Web 2.0-Dienst in Ruby
1. Performanter, hochskalierbarer
Web 2.0-Dienst in Ruby
Realisierbar oder nur ein nettes Märchen?
Tobias Joch, 11. Mai 2007
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. 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. 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. Was ist Web 2.0
Kurze Definition
"Design Patterns and Business Models
for the Next Generation of Software" 1)
[Tim O'Reilly]
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. 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
20. Performanter, hochskalierbarer
Web 2.0-Dienst in Ruby
Realisierbar oder nur ein nettes Märchen?
Tobias Joch, 11. Mai 2007
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. 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!
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. 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
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. 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
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. 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
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)