Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Softwareentwicklung in der industriellen Praxis
Cloud-Systeme: Besonderheiten bei Programmierung und Betrieb
Steffen Gemkow / Paul Fritsche - ObjectFab GmbH
26.11.2012
Montag, 26. November 12
• Simple is beautiful
• Don’t repeat yourself (DRY)
• Scalability >> Performance
• Design for scalability
Montag, 26. November 12
Überblick
• Aufgabe
• Architektur
• Deployment und Betrieb
• Programmierung
• Fazit
Montag, 26. November 12
Aufgabe
• Webanwendung
• Agile Entwicklung
• hohe zu erwartende Last
• viel dynamischer Inhalt
• geringe laufende Kosten
Montag, 26. November 12
Webanwendung
• Integrationsplattform
• Login und Rollensystem
• Anbindung vieler externer Dienste und Datenquellen
Montag, 26. November 12
Dynamischer Inhalt
• Webseite läd asynchron Daten nach (AJAX)
• viele kurze Requests anstatt weniger langer
• Requests an unterschiedliche Ziele
• Chat (Websockets/Longpolling)
Montag, 26. November 12
Agile Entwicklung
• viele Details liegen noch im Dunkeln
• konkretes Layout
• Usability
• Features
• Prototyp, schnelles Feedback, kurze Iterationen
Montag, 26. November 12
Lastverhalten
Montag, 26. November 12
Cloud
• dynamisches Hinzufügen/Entfernen von Serverkapazitäten
• virtuelle Hardware
Montag, 26. November 12
Cloud Anbieter
• Amazon Elastic Compute Cloud (EC2)
• JiffyBox
• Scalarium
• Heroku
Montag, 26. November 12
Festlegungen
Technologie Ruby on Rails, Websockets, SSL
Vorgehensmodell kurze Iterationen (1-2 Wochen)KanBan / Scrum
Lastverhalten tageszeitabhängigca. 1000 parallele Nutzer
Cloudanbieter JiffyBox von DomainFactory
Montag, 26. November 12
ArchitekturLB
WEB WEB APP APP APP CHAT
CACHE
DB
Montag, 26. November 12
WebserverLB
WEB WEB APP APP APP CHAT
CACHE
DB
Montag, 26. November 12
Webserver
• liefert statischen Inhalt
• Bilder, CSS, JS
• führt kein Applicationcode aus
• braucht wenig CPU, wenig Speicher
• Apache, nginx
Montag, 26. November 12
Application ServerLB
WEB WEB APP APP APP CHAT
CACHE
DB
Montag, 26. November 12
Application Server
• führt die Rails Umgebung inkl. der Anwendung aus
• jeder Request benötigt eine Rails Umgebung (= Prozess)
• Phusion Passenger:
• startet mehrere Rails Prozesse
• verteilt Requests
Montag, 26. November 12
Chat ServerLB
WEB WEB APP APP APP CHAT
CACHE
DB
Montag, 26. November 12
Chat Server
• Chat benötigt Rückkanal für Nachrichten vom Server zum Client
• Websockets / Longpolling
• würde viele (teure) Rails Prozesse blockieren
• event-driven, non-blocking IO
• viele Requests in einem Prozess
• node.js, Evented Ruby
Montag, 26. November 12
CacheLB
WEB WEB APP APP APP CHAT
CACHE
DB
Montag, 26. November 12
Cache
• korrekt eingesetzt bringt Caching sehr hohen Performancegewinn
• Session
• Datenbankabfragen
• komplette HTML Seite
• Teile einer HTML Seite
• memcached
Montag, 26. November 12
Load BalancerLB
WEB WEB APP APP APP CHAT
CACHE
DB
Montag, 26. November 12
Load Balancer
Regel Aktion
Port 80 Redirect auf Port 443
wss://* chat
https://static* web0..webX (load balanced)
* app0..appY (load balanced)
Montag, 26. November 12
Eingesetzte Software
Ruby RVM mit Ruby 1.9.2
LB haproxy mit SSL
WEB Apache 2
APP Phusion Passenger
CHAT Node.JS
CACHE memcached
DB mysql
Montag, 26. November 12
Deployment
• Wer betreibt den Cluster?
• Wie wird die notwendige Software installiert?
• Updates?
• Wie wird die Anwendung ausgerollt?
• Neues Release?
Montag, 26. November 12
Dokumentation
• Auflistung sämtlicher zu installierender Software, inkl. Version
• Konfigurationsdateien
• Im Idealfall 2 Dokumente:
• Installationsanweisungen für “frisches” System
• Änderungen zur Vorversion
Montag, 26. November 12
Script
• Ausführbare Dokumentation
• Installiert Software parallel auf mehreren Servern
• Erstellt Konfigurationsdateien
• Startet/Stoppt alle Dienste
• wiederholbar, parameterisierbar
Montag, 26. November 12
Capistrano• Führt SSH Befehle auf mehreren Rechnern parallel aus
• Rezepte:
• Ausführung vor oder nach einem anderen Rezept
• parallel auf mehreren Rechnern
• Rollen:
• Jeder Rechner hat eine oder mehrere Rollen
• Jedes Rezept gehört zu einer Rolle
Montag, 26. November 12
Capistrano
• bietet fertige Rezepte zum Deployment einer Rails Anwendung
• zusätzliche Rezepte zum Installieren der Software
• Anbindung an JiffyBox-API
Montag, 26. November 12
Programmierung
• Kenntnisse in vielen Programmiersprachen/Frameworks notwendig
• Ruby/Rails
• Javascript/Coffeescript, HTML/CSS
• Linux, Bash
Montag, 26. November 12
Programmierung
• viele kurze Requests >> wenige lang laufende Requests
• Rails Prozesse sind “teuer”
• effektivere Auslastung der gesamten Cloud
• Trend zu non-blocking IO
Montag, 26. November 12
Programmierung
• Requests werden von verschiedenen Prozessen verarbeitet
• keine Singletons im Programmcode
• DB / Cache zum Synchronisieren (z.B. Sessions)
Montag, 26. November 12
Programmierung
• Am längsten dauert das Erzeugen des HTML in einem Request
• soviel wie möglich cachen
• Daten und Inhalte asynchron laden
Montag, 26. November 12
Programmierung
• Externe Daten in einem Request
• asynchrone Aufrufe (non-blocking IO)
• im Hintergrund laden und zwischenspeichern (Cache oder DB)
Montag, 26. November 12
Fazit
• komplexe Architektur
• wiederholbares Installieren/Konfigurieren aller beteiligter Systeme
• wiederholbares Deployment der eigentlichen Anwendung
• einfacher Aufbau verschiedener Test- und Stagingsysteme
• Grundlage zur dynamischen Steuerung der Cloud
• Integration in CI möglich
Montag, 26. November 12
Fazit
0
2000
4000
6000
8000
100 200 500 1000
Ant
wor
tzei
t in
ms
Anzahl Nutzer
5x Level 1 (4P) 10x Level 1 (4P) 5x Level 2 (16P) 5x Level 3 (16P)
Montag, 26. November 12
Vielen Dank
• http://www.objectfab.de/download/121126_vortrag.pdf
• Kontakt:
• http://www.objectfab.de
• [email protected], @ObjectFab
• [email protected], @synopia
• http://www.ruby-dresden.de, 6.12.2012 nächstes Treffen
Montag, 26. November 12