Die wachsende Komplexität von Geschäfts- und Internetanwendungen und gestiegenen Erwartungen an die Agilität der Entwicklung verlangen einen neuen, effizienteren Ansatz zur Systementwicklung im Team.
Automatisierung in hochskalierenden Umgebungen werden vom üblichen Push-Deployment-Ansatz ausgebremst.
Das z2-Environment addressiert beide Problembereiche.
5. Bzw. wäre es nicht schön…
wenn große Projekte so einfach zu ändern wären wie kleine?
wenn Hotfixes ohne Build & Deployment gingen?
keinen lokalen Build haben zu müssen?
wenn Integration auf Knopfdruck ginge?
keinen Appserver installieren zu müssen?
nicht mehr deployen zu müssen?
wenn Java mit den Roundtripzeiten von Skripten ginge?
5
9. Vorteile
■
Kein build engineering
Keine lokale build config, schnelles setup
Keine Build-Infrastruktur!
■
Kleine Checkouts, kein Deployment
Weniger re-compiling, schnelle roundtrips
■
System-zentrisch
Immer aktuell, immer integriert
■
Pull-Ansatz
Einfacher Scale-out
9
10. Einsparungen*
Pro Entwickler:
Kleines Entwicklungsteam
<=10
Grosses Entwicklungsteam
> 10
Lokale Buildkonfiguration
2%
1%
Integration mit Änderungen (sync,. build, re-deployment)
5%
10%
Kommunikation mit Build-Engineer, Anpassen von zentralem
Build
2%
4%
Summe
9%
15%
* geschätzt
10
11. Weitere Zutaten
■
Add-On Repositories erweitern Fähigkeiten
Spring, Hadoop, Vaadin, …
■
Klares, einfaches Modularisierungskonzept
Trennung von API und Implementierung
■
Erprobte Architektur
Für z. B. modularisierte Spring/Hibernate Anwendungen
11
18. Zuviele Daten?
Problem ist hierbei in der Regel nicht primär die
Ablage, sondern die effiziente Analyse.
Hier gilt:
■
■
Parallelisierung ausnutzen, um O(1) zu bleiben
Lokales streamen > verteilter Query
=> Der Klassiker: Map/Reduce
18
20. Alternativen:
■
Nativ: Map/Reduce API, jar bauen, deploy
Sehr bare-metal. Kein Container-support
■
Vielleich andere Sprache benutzen - Z. B. Pig
oder JavaScript M/R?
Gut weil einfacher – aber eingeschränkt!
20
21. Mit z2@hadoop
Hadoop wird natürlicher Teil der Lösung:
■
Ausführung von Z2 in embedded mode als Hadoop task
■
M/R Job „lebt“ im gleichen Modulraum wie der Rest der Lösung
■
Einfachstes Job scheduling: Ohne build und programmatisch
21
24. Cloud-Provisionierungs-Rezept
■
Knotentypen definieren
Frontend, Datenknoten, Masterknoten, RDBMS,…
Diese müssen vollautomatisch am Leben gehalten werden
■
Welche sind Skalierungsrelevant?
Frontend, Datenknoten
Diese müssen vollautomatisch installierbar sein
■
Konfiguration mit Policies:
■
■
Alle Konfiguration zentral im SCM
Alle paar Minuten überprüfung der Knotenpolicy
24
29. Abstract
Die wachsende Komplexität von Geschäfts- und Internetanwendungen und gestiegenen Erwartungen an die Agilität der Entwicklung haben
in den letzten Jahren zu einer beeindruckenden Entwicklung im Bereich der Build- und Integrationswerkzeuge geführt.
Mit Ansätzen wie Continuous Delivery über eine Tool Chain aus Continuous Integration Servern, Artefact Repositories und Build-Werkzeugen
wie Maven gelingt es, vollständige Build- und Testautomatisierung für Java-basierte Software-Lösungen zu erreichen.
Mit den Anforderungen an massive und flexible Skalierung in Cloud und Big Data Szenarien hat sich ein weiteres Problemfeld aufgetan:
Automatische Verteilung und Konfiguration von Software im Großen. Hier finden Configuration Management Werkzeuge wie Apache Puppet
und CFEngine ihre Anwendung.
Die Automatisierung hat allerdings ihren Preis: Je mehr Komplexität in die Werkzeuge wandert, desto Fehleranfälliger wird der Prozess,
desto schwieriger wird es, strukturelle Änderungen der Software vorzunehmen.
Dies trifft insbesondere auf den traditionellen „Push“-Deploymentansatz in der Java Entwicklung zu. Ändert sich die Menge der Deployables,
so ergeben sich häufig auch nicht-triviale Änderungen entlang der gesamten Prozesskette – vom Entwickler bis zur Konfiguration der
Produktivsysteme. Kann die Laufzeitumgebung sich aber selber an Änderungen von Quellen und Konfiguration seiner Systemdefinition
anpassen, so entfällt nicht nur ein Großteil der Produktionsinfrastruktur, es werden auch Entwicklungszyklen beschleunigt und frühe
Integration gefördert.
Die Open-Source Umgebung z2-Environment implementiert einen solchen “Systemzentrischen” Ansatz, der keine Build-Infrastruktur
benötigt, Entwicklersetup minimiert und gleichzeitig Deployment-Updates dramatisch vereinfacht und beschleunigt.
Ein solcher Pull-Deployment Ansatz bewährt sich auch bei der Entwicklung und Ausführung von verteilten Map-Reduce Algorithmen, da kein
gesondertes Deployment mehr vonnöten ist und JobImplementierungen mit anderen Anwendungskomponenten gleichgestellt sind. Da
keine Applikationskomponenten zu verteilen sind wird auch die automatische Konfiguration mit Hilfe von Configuration Management
Werkzeugen einfacher und robuster.
Der Vortrag enthält eine Live-Demonstration auf Basis von CFEngine, Z2 und Apache Hadoop.