Institut für Architektur von Anwendungssystemen
Universität Stuttgart
Universitätsstraße 38
D–70569 Stuttgart
Diplomarbeit Nr. 3615
Konzepte zur Vorbereitung des
Softwarebetriebs aus
Entwicklersicht
Sebastian Kiesewetter
Studiengang: Informatik
Prüfer/in: Prof. Dr. Frank Leymann
Betreuer/in: Dipl.-Inf. Johannes Wettinger
Beginn am: 1. April 2014
Beendet am: 1. Oktober 2014
CR-Nummer: D.2.1, D.2.9
Kurzfassung
Die Paradigmen Cloud Computing und Infrastructure as Code eröffnen neue Möglichkeiten für die
Entwicklung von Software sowie für das IT-Service Management, die gegenüber den traditionellen
Vorgehensweisen einige Vorteile mit sich bringen. Insbesondere durch fortschreitende Automatisie-
rung von Prozessen wird Zeitersparnis und somit Flexibilität und Reduzierung der Kosten erreicht.
Darüber hinaus wird die Fehleranfälligkeit von zuvor manuell durchgeführten Managementaufga-
ben verringert. Vor allem die enge Verzahnung der Unternehmensbereiche Softwareentwicklung
und Softwarebetrieb spielt für die erfolgreiche Umsetzung der genannten Vorteile eine große Rolle.
Bestrebungen in diese Richtung verfolgt das Paradigma DevOps, indemMethoden der agilen Software-
entwicklung auf die Bereitstellung von virtualisierter IT-Infrastruktur, Middleware und Applikationen
angewendet werden.
Es existiert eine Reihe von zumeist proprietären Werkzeugen, mit deren Hilfe die Verwaltung von
bereitgestellten Diensten in der Cloud standardisiert und automatisiert werden kann. DieseWerkzeuge
haben ihre Wurzeln in der Domäne des Softwarebetriebs und sind daher für Softwareentwickler nicht
ohne ein gewisses Maß an spezifischem Wissen bedienbar.
Die vorliegende Arbeit adressiert dieses Problem und integriert Ansätze für die Automatisierung von
Management und Bereitstellung von IT-Infrastruktur mit Ausdrucksmöglichkeiten aus der Domäne
der Softwareentwickler. Ziel ist es, Softwareentwickler hiermit bei der Erstellung von Spezifikationen
zu unterstützen, die als Eingaben für Infrastructure as Code-Werkzeuge erstellt werden müssen.
3
Inhaltsverzeichnis
1. Einleitung 9
1.1. Problembeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2. Einführendes Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3. Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2. Stand der Technik 13
2.1. Cloud Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2. Infrastructure as Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3. DevOps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4. NoOps und AppOps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.5. Verwandte Arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3. Vorbereitung des Softwarebetriebs aus Entwicklersicht 27
3.1. Forschungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2. Wissensdatenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3. DevOps-Spezifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4. Beispielszenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.5. Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.6. Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4. Design und Implementierung 47
4.1. WS-Policy Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2. Policy Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3. Apache Neethi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.4. Prototyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.5. Kommandozeilenschnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5. Evaluation 63
6. Fazit 73
A. Anhang 75
Literaturverzeichnis 83
5
Abbildungsverzeichnis
1.1. Anforderungen und Einschränkungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1. Ebenen in der Cloud [Ley09] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2. Puppet im Agent/Master-Modus [pupa] . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3. Chef im Client/Server-Modus [che] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4. Funktionsweise von Juju [juja] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5. Änderungen vs. Stabilität [Hü12] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1. Taxonomie der Anbieter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2. Taxonomie der Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3. Taxonomie der Dienstschicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.4. Taxonomie der Infrastruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.5. Taxonomie der Werkzeug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.6. ER-Diagramm einer DevOps-Spezifikation . . . . . . . . . . . . . . . . . . . . . . . . 34
3.7. Topologie des Beipielszenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.8. ER-Diagramm einer DevOps-Spezifikation (erweitert) . . . . . . . . . . . . . . . . . . 40
3.9. Programmablauf der vorgeschlagenen Lösung . . . . . . . . . . . . . . . . . . . . . . 43
4.1. WS-Policy in Normalform [VOH+07b] . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2. WS-Policy Assertion [VOH+07b] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.3. Programmablauf der vorgeschlagenen Implementierung . . . . . . . . . . . . . . . . 54
4.4. Klassendiagramm der vorgeschlagenen Implementierung . . . . . . . . . . . . . . . . 57
4.5. Sequenzdiagramm: Ermitteln und einfügen einer Implementierung . . . . . . . . . . 59
A.1. Aktivitätsdiagramm Anforderungen lesen . . . . . . . . . . . . . . . . . . . . . . . . . 75
A.2. Aktivitätsdiagramm Anforderungen einfügen . . . . . . . . . . . . . . . . . . . . . . . 76
A.3. Aktivitätsdiagramm Anforderungen löschen . . . . . . . . . . . . . . . . . . . . . . . . 77
A.4. Aktivitätsdiagramm Implementierung lesen . . . . . . . . . . . . . . . . . . . . . . . . 78
A.5. Aktivitätsdiagramm Implementierung einfügen . . . . . . . . . . . . . . . . . . . . . . 79
A.6. Aktivitätsdiagramm Implementierung löschen . . . . . . . . . . . . . . . . . . . . . . . 80
A.7. Aktivitätsdiagramm Implementierungen aus Wissensdatenbank ermitteln . . . . . . . . 81
6
Verzeichnis der Listings
2.1. Installation eines Wordpress-Blogs mittels Juju . . . . . . . . . . . . . . . . . . . . . . 20
3.1. Juju Charm für die Installation eines Mediawikis [jujb] . . . . . . . . . . . . . . . . . 28
3.2. DevOps-Spezifikation für das Beispielszenario (Teil 1) . . . . . . . . . . . . . . . . . . 36
3.3. DevOps-Spezifikation für das Beispielszenario (Teil 2) . . . . . . . . . . . . . . . . . . 37
4.1. Beispiel für eine WS-Policy zur Auswahl von Entitäten aus der Wissensdatenbank . . 51
4.2. XML Schema Definitionen für aus den Prädikaten abgeleitete WS-Policy assertions . 52
5.1. WS-Policy für Anforderungen an Szenario 1 . . . . . . . . . . . . . . . . . . . . . . . 63
5.2. WS-Policy für globale Einschränkungen auf 64-Bit-Architekturen für Betriebssysteme
für Szenario 1.3 und 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3. DevOps-Spezifikation für Szenario 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.4. Resultierende DevOps-Spezifikation für Szenario 1.1 . . . . . . . . . . . . . . . . . . . 65
5.5. Resultierende DevOps-Spezifikation für Szenario 1.2 . . . . . . . . . . . . . . . . . . . 66
5.6. WS-Policy für Anforderungen an Szenario 2 (Webserver) . . . . . . . . . . . . . . . . 67
5.7. WS-Policy für Anforderungen an Szenario 2 (Laufzeitumgebung) . . . . . . . . . . . 67
5.8. WS-Policy für Anforderungen an Szenario 2 (Datenbank) . . . . . . . . . . . . . . . . 67
5.9. DevOps-Spezifikation für Szenario 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.10. Resultierende DevOps-Spezifikation für Szenario 2 . . . . . . . . . . . . . . . . . . . . 69
5.11. WS-Policy für Anforderungen an Szenario 3 (Laufzeitumgebung) . . . . . . . . . . . 70
5.12. WS-Policy für Anforderungen an Szenario 3 (Datenbank) . . . . . . . . . . . . . . . . 70
5.13. DevOps-Spezifikation für Szenario 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.14. Resultierende DevOps-Spezifikation für Szenario 3 . . . . . . . . . . . . . . . . . . . . 72
7
1. Einleitung
Der Begriff Cloud Computing bezeichnet ein Paradigma für die Bereitstellung von IT-Ressourcen.
Hervorgegangen aus Cluster Computing und Grid Computing zeichnet sich Cloud Computing vor
allem durch hohe Elastizität sowie einem verbrauchsbasierten Abrechnungsmodell aus. Hierbei wird
insbesondere auf die Technologien Virtualisierung undWeb Services zurückgegriffen. [Ley09]
Eine Vielzahl von Anbietern offeriert eine breite Auswahl an Diensten, die entsprechend der tat-
sächlich stattgefundenen Nutzung in Rechnung gestellt werden. Diese Dienste können sich auf
virtualisierte Komponenten einer Infrastruktur beschränken, wie beispielsweise auf Datenbanken
oder Netzwerkkomponenten (Google Compute Engine [com], Amazon Web Services [awsa]) (In-
frastructure as a Service) oder sie umfassen virtualisierte Umgebungen aus Hardware und Software
(Google App Engine [dev], AWS Elastic Beanstalk [awsb]) (Platform as a Service). Darüber hinaus
werden Dienste angeboten, welche vollständige Softwarelösungen darstellen und somit den höchsten
Abstraktionsgrad bieten (Google Cloud DNS [cloa]) (Software as a Service). Die Bereitstellung von
Infrastruktur- und Plattform-Diensten ist durch lizenzfrei verfügbare, quelloffene Software wie z.B.
OpenStack [opea] möglich, so dass nicht unbedingt auf externe Anbieter zurückgegriffen werden
muss.
Die agile Softwareentwicklung [TS10], mit deren Hilfe Änderungen und neue Anforderungen an
Softwareprojekte flexibel und schnell umgesetzt werden können, ermöglicht die Erfüllung von Kun-
denwünschen innerhalb einer deutlich kürzeren Zeit als bei einer traditionellen Vorgehensweise.
Darüber hinaus bietet sie ein Trackingsystem für den Fortschritt eines Projektes und erleichtert dessen
paralleles Vorantreiben. [PW11]
Als Erweiterung der agilen Softwareentwicklung beginnt man derzeit damit, die Entwicklung und den
Betrieb von Software zu integrieren. Dieses Paradigma ist unter demNamenDevOps (Development and
Operations) bekannt und ist in der Praxis bereits seit einigen Jahren verbreitet [JA09]. Der Fokus von
DevOps liegt auf der Automatisierung von wiederkehrenden Konfigurations- und Deploymentaufga-
ben (Infrastructure as Code) sowie auf der Integration der Unternehmensbereiche Softwareentwicklung
und Softwarebetrieb. Mit Werkzeugen wie Chef [get] , Juju [jujc] oder Puppet [pupb] werden konfi-
gurierbare Infrastruktur und virtualisierte Middleware-Services (z.B. Database-as-a-Service [LS10])
automatisiert bereitgestellt. Insbesondere trifft dies auch auf virtualisierte Infrastruktur im Cloud
Computing zu.
1.1. Problembeschreibung
Der Ansatz aus der DevOps-Community, die Trennung der Organisationseinheiten Softwareentwick-
lung und Softwarebetrieb durch die Einrichtung von interdisziplinären Teams mit Vertretern beider
9
1. Einleitung
Seiten aufzubrechen und somit eine dauerhafte Zusammenarbeit über den gesamten Produktlebens-
zyklus der Software zu etablieren, ermöglicht es, von vielen Vorteilen der agilen Softwareentwicklung
sowie des Cloud Computings zu profitieren [Deb11]. Der Betrieb von Software wird erleichtert und
der Releasezyklus sowie der Integrationsprozess werden beschleunigt. Softwareentwickler, die hinrei-
chende Kenntnisse aus dem Bereich Softwarebetrieb mitbringen, profitieren von der Verwendung
neuer Werkzeuge für die Automatisierung wiederkehrender Prozesse. Beispielsweise kann ohne
großen Aufwand eine Reihe gleich konfigurierter Entwicklungssysteme erstellt werden, die jeweils
unterschiedliche Versionen einer Laufzeitumgebung enthalten und so zum Testen und Debuggen
der zu entwickelnden Anwendung hinsichtlich Kompatibilität mit der jeweiligen Version verwendet
werden können ([vag], [doc]).
Trotz vieler Vorteile, die sowohl Softwareentwicklung als auch Softwarebetrieb aus den Ansätzen
des DevOps-Paradigmas und der Nutzung zugehöriger Werkzeuge ziehen können, besteht nach wie
vor eine Lücke zwischen den beiden Seiten. So stellen die Implementierung der automatisierten
Konfigurations- und Deploymentaufgaben und die Implementierung der Anwendungslogik zwei
völlig unterschiedliche Domänen dar, was dem Ziel der Integration von Entwicklung und Betrieb
widerspricht. [PCS+13], [Sac12]
Um beiden Seiten, Entwicklung und Betrieb, eine gemeinsame Sicht auf den Gesamtprozess der
Erstellung und Bereitstellung von Software zu ermöglichen, wird in dieser Arbeit ein Lösungsansatz
vorgestellt, der eine effizientere Zusammenarbeit durch Automatisierung ermöglicht. Ziel ist die
Unterstützung von Entwicklern mit Mechanismen, die das Bereitstellen von Anwendungen unter Be-
rücksichtigung von Anforderungen an die Umgebung sowie von Einschränkungen für die Anwendung
durchführen. Schematisch ist dies in Abbildung 1.1 dargestellt.
Anforderungen Einschränkungen
DEV OPS
Bereitsstellbare
Anwendungen
Abbildung 1.1.: Anforderungen und Einschränkungen
10
1.2. Einführendes Beispiel
1.2. Einführendes Beispiel
Ein beispielhaftes Szenario stellt eine Webanwendung dar, die auf PHP basiert und einen Webserver
sowie einen Datenbankserver benötigt. Als Benutzerschnittstelle dienen HTML-basierte Webseiten,
die im Internetbrowser des Anwenders dargestellt werden. Die Kommunikation zwischen Anwender
und Webserver erfolgt über HTTP(S). Als beispielhafte Anwendung soll im Folgenden das Issue
Tracking System Mantis [man] dienen, welches unter der GPL2-Lizenz [gnu] frei verfügbar ist.
Für die Bereitstellung dieser konkreten Anwendung werden aus Entwicklersicht einige wenige
grundlegende Anforderungen an die Umgebung gestellt, in welcher diese ausgeführt werden soll. So
muss z.B. ein Webserver mit PHP-Unterstützung zur Verfügung stehen, der die Anwendung ausführt.
Für die Datenhaltung muss eine Datenbank vorhanden sein. Damit die Anwendung erreichbar ist,
muss Port 80 (HTTP) nach außen verfügbar gemacht werden. Die grundlegenden Anforderungen
können optional noch genauer spezifiziert werden. Beispielsweise kann die Notwendigkeit bestehen,
dass die Anforderung PHP-Unterstützung mit einem Attribut Version versehen werden kann.
Aus Sicht des Softwarebetriebs wiederumwerden verschiedene Einschränkungen für die Bereitstellung
der Anwendung gemacht. Hier ist denkbar, dass bereits ein MySQL [mys]-Server betrieben wird und
daher die Anforderung Zugriff auf Datenbankserver eingeschränkt wird auf Zugriff auf MySQL-Server.
Aber auch neue Einschränkungen, die über die vorliegenden Anforderungen hinausgehen, müssen
gemacht werden können. Als Beispiel ist hier zu nennen, dass der Zugriff auf den Webserver nur
innerhalb eines abgegrenzten Netzbereichs (z.B. Intranet einer Firma) erfolgen kann.
1.3. Übersicht
Im Anschluss an das in die Thematik und Problemstellung einleitende Kapitel 1 folgen in Kapitel 2
Informationen zum aktuellen Stand der Technik, wobei die Bereiche Cloud Computing, Infrastructure
as Code, DevOps und NoOps abgedeckt werden. In Kapitel 3 werden die erarbeiteten, abstrakten
Konzepte im Detail erläutert. Kapitel 4 beschreibt eine prototypische Implementierung der Lösung,
die im folgenden Kapitel 5 anhand von drei konkreten Anwendungsfällen evaluiert wird. In Kapitel 6
wird abschließend ein Fazit der vorgestellten Arbeit gezogen.
11
2. Stand der Technik
Dieses Kapitel gibt einen Überblick über den aktuellen Stand der Technik in den Bereichen, die
für die vorliegende Arbeit von Bedeutung sind. In Abschnitt 2.1 wird der Begriff Cloud Computing
erläutert und es wird ein Überblick über die aktuelle Marktsituation gegeben. In Abschnitt 2.2 werden
das Konzept Infrastructure as Code sowie eine Auswahl von Werkzeugen für die Automatisierung
von Betriebsaufgaben vorgestellt. In Abschnitt 2.3 wird das DevOps-Paradigma als konsequente
Fortführung der agilen Softwareentwicklung beschrieben und in Abschnitt 2.4 werden mit NoOps
neueste Entwicklungen in diesem Bereich vorgestellt. In Abschnitt 2.5 werden schließlich einige
verwandte Arbeiten sowie deren Verbindungen zur vorliegenden Arbeit genannt.
2.1. Cloud Computing
Die IT im heutigen unternehmerischen Umfeld wird vor vielfältige Herausforderungen gestellt.
Reaktionsfähigkeit auf sich schnell verändernde und neue Anforderungen sowie die Notwendigkeit
zur Kostenminimierung haben eine hohe Bedeutung für den Erhalt der Konkurrenzfähigkeit. Als
Konsequenz daraus ist insbesondere bei Entscheidungsträgern ein großes Interesse am Thema Cloud
Computing zu erkennen. Verringerung der Bereitstellungszeiten für Server und Anwendungen von
Wochen auf Minuten bei gleichzeitiger Verbesserung der Zuverlässigkeit sind starke Argumente für
eine Hinwendung zum Cloud Computing. Darüber hinaus lassen sich Aufwände für Konfiguration,
Betrieb, Management und Monitoring signifikant reduzieren. [Cor11]
2.1.1. Allgemeines
Nach [MG11] beschreibt der Begriff Cloud Computing ein Modell für die Bereitstellung von Kapa-
zitäten in einem Netzwerk, die mit wenig Aufwand schnell bereitgestellt bzw. wieder freigegeben
werden können und dabei jederzeit sowie einfach zugreifbar sind und unlimitiert zur Verfügung
stehen. Hierfür benötigte Ressourcen werden durch Pooling heterogener Systeme zur Verfügung und
entsprechend der tatsächlich stattgefundenen Nutzung in Rechnung gestellt. Hierbei werden drei
verschiedene Konzepte der Bereitstellung von Kapazitäten als Dienste angegeben, wobei diese jeweils
aufeinander aufbauen. Auf unterster Ebene werden grundlegende, virtualisierte Infrastrukturkompo-
nenten wie z.B. Speicherplatz, Netzwerke oder Rechenleistung angeboten (Infrastructure as a Service
(IaaS)). Auf der nächsthöheren Ebene werden vollständige und konfigurierbare Laufzeitumgebun-
gen für Anwendungen angeboten (Platform as a Service (PaaS)). Auf der obersten Ebene werden
schließlich vollständige Anwendungen angeboten (Software as a Service (SaaS)), wobei der Betrieb
und die Verwaltung von Komponenten aus darunterliegenden Schichten hierbei dem Dienstanbieter
obliegt. Organisatorisch lässt sich das Cloud Computing zusätzlich kategorisieren in Private Clouds
13
2. Stand der Technik
(exklusive Zuordnung zu einer einzelnen Organisation), Community Clouds (exklusive Zuordnung zu
einer bestimmten Gruppe), Public Clouds (offen für alle) und Hybrid Clouds (einer Zusammensetzung
von zwei oder mehr der vorangegangenen Kategorien).
Wie in [AFG+09] dargelegt wird, ergeben sich durch das Cloud Computing für den Benutzer eine
Reihe von neuen Aspekten hinsichtlich der Verwendung in Anspruch genommener Dienste. Aufgrund
der bewusst gemachten Annahme von unbeschränkt zur Verfügung stehenden Ressourcen, die bei
Bedarf verwendet werden können, entfällt der Betrieb eigener Hardware (z.B. Rechenzentren oder
Netzwerkkapazitäten) und damit auch die Notwendigkeit für eine weitreichende und langwierige
diesbezügliche Planung [AFG+10]. So können Unternehmen problemlos mit einer geringen Menge
an in Anspruch genommenen Ressourcen starten und diese Menge flexibel erhöhen, sobald es bei
unternehmerischem Erfolg das Wachstum erfordert. Genauso können Ressourcen kurzfristig auch
wieder freigegeben werden. Bei Anwendungen, die auf großen Datenmengen arbeiten und sich
hinreichend gut parallelisieren lassen, wird ein weiterer großer Vorteil des Cloud Computing deutlich.
So können viel Zeit in Anspruch nehmende Berechnungen durch die Verwendung einer großen Zahl
von Instanzen virtueller Computer, die an dem Problem arbeiten und jeweils entsprechend schneller
ein (Teil-) Ergebnis liefern, ohne Erzeugung von höheren Kosten im Vergleich zu einer sequentiellen
Problemlösung durchgeführt werden. Die Verwendung von 100 Instanzen eines Rechenknotens im
Cloud Computing für jeweils eine Stunde kostet das gleiche wie eine einzelne Instanz für 100 Stunden
zu verwenden. Beim Cloud Computing fallen Kosten entsprechend der tatsächlich stattgefundenen
Nutzung der Ressourcen an, was für den Benutzer wirtschaftliche Flexibilität und Verlagerung
eines Teils des Geschäftsrisikos auf den Anbieter der in Anspruch genommenen Cloud Computing-
Dienste bedeutet. Insbesondere die Risiken der Bereitstellung von zu vielen oder zu wenigen eigenen
Ressourcen (in beiden Fällen resultierend in finanziellen Nachteilen für den Geschäftserfolg) wird aus
Nutzersicht vollständig beseitigt.
In [Ley09] wird das Cloud Computing als nächster Schritt und logische Weiterentwicklung nach
Cluster Computing und Grid Computing angesehen. Auch hier wird das Konzept des Utility Compu-
ting betont, also eine verbrauchsbasierte Abrechnung wie es beispielsweise bei Strom, Gas, Telefon
oder Wasser der Fall ist. Virtualisierung ermöglicht es, Anwendungen zusammen mit der benötigten
Middleware sowie des Betriebssystems innerhalb einer virtuellen Maschine zur Verfügung zu stellen.
Auf einem physikalischen Computer lassen sich dann verschiedene, möglicherweise heterogene,
virtuelle Maschinen betreiben, wodurch dessen Nutzungsgrad enorm gesteigert werden kann. Als
technologische Grundlage für Utility Computing und On Demand Computing dienenWeb Services,
mit denen Software und Hardware virtualisiert zur Verfügung gestellt werden können [Ley04]. Eine
Beschreibung der für eine Anwendung benötigten Umgebung sowie der zugehörigen Ressourcen
wird in eine Abfolge von Interaktionen mit Web Services übersetzt, welche dann entsprechend der Be-
schreibung Hardware zuweisen und auf dieser dann Software installieren und verfügbar machen. Der
gesamte Vorgang der Bereitstellung von Anwendungen wird Provisioning genannt. [Ley09] schlägt
vor, zusätzlich zu den bereits erwähnten Ebenen Infrastructure as a Service, Platform as a Service
und Software as a Service eine neue Ebene Composite as a Service (CaaS) einzuführen, die für die
Orchestrierung der verwendeten Web Services zuständig ist (Abbildung 2.1). So können Abhängig-
keiten modelliert werden und aus einer Menge von Web Services können durch Komposition neue
Web Services geschaffen werden. Dieses Prinzip ist aus der Domäne der Service Oriented Architecture
(SOA) bekannt [WCL+05].
14
2.1. Cloud Computing
CaaS
SaaS
PaaS
IaaS
Abbildung 2.1.: Ebenen in der Cloud [Ley09]
In [OJ11] wird dargelegt, dass sich Standards im Bereich Cloud Computing erst in der Entwicklung
befinden. Derzeit existiert eine unüberschaubare Anzahl von unterschiedlichen Ansätzen, die auf
langfristige Sicht jedoch für den Erfolg des Cloud Computing in wenige grundlegende gemeinsa-
me Definitionen, Standards und Spezifikationen zusammengeführt werden müssen. Eine aktuelle
Übersicht über Standards im Bereich Cloud Computing gibt [clob]. Hier finden sich Informationen zu
und Verweise auf Standards, die von verschiedenen Expertengruppen erarbeitet werden, wie z.B. der
Organization for the Advancement of Structured Information Standards (OASIS) [oas].
[MHT11] beschreibt neben der Definition [MG11] eine Referenzarchitektur sowie Anwendungsfälle
für das Cloud Computing. Der Entwicklungsstand von Standards in den drei Kategorien Interope-
rabilität, Portabilität und Sicherheit wird vorgestellt. Darüber hinaus bietet das National Institute of
Standards and Technology (NIST) [nis] ein fortlaufend aktualisiertes Wiki an, das eine Übersicht über
Standards mit Relevanz für das Cloud Computing gibt. Es beinhaltet im ersten Teil grundlegende
(bestehende) Definitionen und Standards (z.B. HTTP, XML oder WSDL) sowie im zweiten Teil (neue)
Standards mit hohem Abstraktionsgrad für das Cloud Computing sowie für Web Services (z.B. OVF
[DMTF09], OCCI [occ] oder WS-Policy [ws-]).
2.1.2. Marktübersicht
Der Benutzer hat heute eine weitreichende Auswahl an Diensten, die in Public Clouds bereitge-
stellt werden. Nachfolgend werden drei ausgewählte Cloud Computing Provider vorgestellt, wobei
hinsichtlich des Abstraktionsgrades der Umgebung, gegen die der Softwareentwickler bei diesen
Diensten programmiert, und hinsichtlich der Verwaltung der Ressourcen große Unterschiede be-
stehen. Darüber hinaus werden vier Open-Source-Projekte vorgestellt, mit deren Softwarelösungen
Cloud-Umgebungen betrieben werden können.
Seit 2006 ist Amazon EC2 [awsc] als Teil der Amazon Web Services (AWS) [awsa] verfügbar. Eine EC2-
Instanz kann mittels einer schlanken Programmierschnittstelle (API) angefordert und konfiguriert
15
2. Stand der Technik
werden und stellt ein Stück virtualisierte Hardware dar. Der Benutzer hat hierbei nahezu die vollstän-
dige Kontrolle über die betriebene Software bis hinunter zum Betriebssystemkern. [AFG+09]
Ein anderer Weg wird mit Google AppEngine [cloc] beschritten, das seit 2008 auf dem Markt ist.
Diese Lösung bietet die Möglichkeit, Webanwendungen in der Cloud zu hosten und insbesondere
von automatischer Skalierung, hoher Verfügbarkeit und der einfachen Einbindung von proprie-
tären MegaStore-Datenbanken [BBC+11] zu profitieren. Die Anwendungen müssen hierbei nach
dem Request/Reply-Prinzip arbeiten und sich in eine zustandslose Schicht für die Ausführung von
Berechnungen und eine zustandsbehaftete Schicht für die Datenhaltung logisch zerlegen lassen. Goo-
gle AppEngine ist aufgrund dieser Einschränkungen also nicht für General-Purpose-Anwendungen
gedacht. [AFG+09]
Mit Microsoft Azure [azu] können seit 2010 Anwendungen, die entsprechende .NET-Bibliotheken
[msn] verwenden und dann zu einer Common Language Runtime (CLR) [msc] kompiliert werden, in
der Cloud verfügbar gemacht werden. Es werden General-Purpose-Anwendungen unterstützt und der
Benutzer kann aus verschiedenen Programmiersprachen für die Implementierung wählen [AFG+09].
Seit 2012 bietet Microsoft Azure die Möglichkeit, virtuelle Maschinen mit Windows oder Linux als
Betriebssystem zu betreiben [Fab13].
Mit Hilfe vonOpen Source-Lösungenwie Eucalyptus [git],OpenNebula [opeb],OpenStack [opea] sowie
CloudStack [clod] besteht neben der Inanspruchnahme von Diensten eines Public Cloud Providers die
Möglichkeit, eine eigene Cloud-Infrastruktur im Rahmen einer Private Cloud zu betreiben.
Eucalyptus ist eine Open Source Cloud Platform-Software, die sich durch ein stark dezentralisiertes
Design auszeichnet. Hierbei ist zum einen das verteilte SpeichersystemWalrus zu nennen, welches
Amazons S3 [s3] immitiert. Virtuelle Laufwerke für die Instanzen der virtuellen Maschinen hin-
gegen werden in lokalen Speicherbereichen abgelegt. Zusammen mit der Unterstützung von stark
geclusterten Systemen folgt aus den genannten Eigenschaften, dass sich Eucalyptus vor allem für
die Bereitstellung einer Vielzahl von virtuellen Maschinen eignet. Der Zugriff für Anwender auf
das System erfolgt via Web Interface oder mit Front-End-Tools (z.B. Eucalyptus eigene euca2ools).
Bereiche für Anwender und Administratoren sind streng voneinander getrennt und Komplexitäten
des zugrunde liegenden Systems werden mit wenigen Ausnahmen vor dem Anwender versteckt.
Bedingungen für den Betrieb von Eucalyptus sind anhand der vorgestellten Merkmale vornehmlich
im unternehmerischen Umfeld auszumachen. [ST10]
Das im Rahmen eines europäischen Forschungsprojekts entstandene und sich aktiv in der Wei-
terentwicklung befindende Werkzeug OpenNebula dient der Bereitstellung, Orchestrierung und
Konfiguration von virtuellen Maschinen. Das unter der Apache 2.0-Lizenz [apaa] stehende Projekt
wurde ursprünglich für den Einsatz in Rechenzentren konzipiert. Mittlerweile konzentriert man
sich aber ebenfalls auf das Cloud Computing (Private- / Public- / Hybrid Cloud). Hauptziele sind
neben Skalierbarkeit vor allem Performanz und Stabilität, so dass auch ein Einsatz in einem sehr
großen Maßstab kein Problem darstellt. Mit SURFsara [sur] und Telefonica [tel] hat das Projekt zwei
bedeutende Partner aus den Bereichen (Hochleistungs-) Rechenzentren und Telekommunikation.
OpenNebula unterstützt das Open Grid Forum (OGF) [ogf] Open Cloud Computing Interface (OCCI)
[occ], die Amazon EC2-API und die vCloud-API [vcl] von VMware [vmw]. [MLM11]
Bei dem Softwareprojekt OpenStack handelt es sich um eine Cloud Platform, deren Fokus auf massiver
Skalierbarkeit, Kompatibilität und Flexibilität hinsichtlich verschiedener Virtualisierungstechnologien
16
2.2. Infrastructure as Code
sowie auf Offenheit liegt. Viele Firmen unterstützen aktuell das Projekt, darunter AMD [amd], Cano-
nical [can], Dell [del], Intel [int] und HP [hp.]. Es basiert größtenteils auf Code der NASA [nas] und
Rackspace Cloud [rac]. Derzeit unterstützt OpenStack die APIs von Amazon EC2 und Rackspace. Auf-
grund der weiten Unterstützung durch die Partner und der Community ist die zukünftige Entwicklung
von OpenStack vielversprechend. [SAE12]
Apache CloudStack ist eine Open Source Cloud Platform für das Deployment und Management von
großen Mengen virtueller Maschinen als hoch verfügbarer und skalierbarer Infrastructure as a Service.
Insbesondere hinsichtlich der erreichbaren Performanz der virtuellen Maschinen erzielt CloudStack
(z.B. im Vergleich zu Eucalyptus) sehr gute Ergebnisse und ist daher als Alternative zu den zuvor
genannten Anbietern zu nennen. Vor allem für das Hosting von Webanwendungen und als Private
Cloud-Lösung besitzt CloudStack Stärken. [AMM14]
2.2. Infrastructure as Code
Trends wie Continuous Delivery [HF10a], Test-Driven Development [Mad10] und Automatisierung
der Vorgänge Building [HF10b] und Deployment [BBKL14] haben in den letzten Jahren den Markt
durchdrungen. Sie erleichtern die Durchführung und Verwaltung vieler Teile des Produktlebenszyklus
einer Software. Die Infrastruktur, die für den Betrieb einer Anwendung notwendig ist, wird von
den genannten Konzepten jedoch zumeist außen vor gelassen. Sie wird häufig mit manueller Arbeit
oder teilautomatisiert mit individuell angefertigten Skripten verwaltet, was aufwendig und fehler-
anfällig ist. Dieses Problem adressiert das Konzept Infrastructure as Code, mit dessen Hilfe die von
einer Anwendung benötigte Laufzeitumgebung (z.B. Betriebssystem, Netzwerk oder Firewall) mittels
ausführbarer Spezifikationen bereitgestellt und konfiguriert werden kann. Insbesondere schließt das
Konzept auch die verwendete Middleware ein (z.B. Konfiguration eines Webservers durch Konfigu-
rationsdateien, Softwarepakete als Teil des Betriebssystems oder Cron-Jobs). So kann mittels einer
Spezifikation eine Entwicklungs- oder Testumgebung kurzfristig bereitgestellt oder wieder gelöscht
werden. Idealerweise werden die Spezifikationen zentral in einem Repository unter Versionskontrolle
verwaltet, wodurch bei Bedarf eine effiziente und reproduzierbare Bereitstellung von Ressourcen
erreicht wird. [Hü12]
Für die Anwendung von Infrastructure as Code steht eine Reihe von Werkzeugen zur Verfügung.
Zu nennen sind hier die Open Source-Werkzeuge Ansible [ans], BCFG2 [bcf], CFEngine [cfe], Juju
[jujc], Opscode Chef [get], Puppet [pupb] und Salt [sal]. Puppet, Opscode Chef und Juju werden als
Auswahl von Werkzeugen mit unterschiedlichem Funktionsumfang im Folgenden kurz vorgestellt.
[DJV10]
2.2.1. Puppet
Puppet ist ein Open Source Configuration Management-Werkzeug zur zentralen Verwaltung von
IT-Infrastruktur verschiedenster Systemarchitekturen (Linux, Unix und Windows), das unter der
Apache 2.0-Lizenz [apaa] steht. Die Installation und Konfiguration von neuen Ressourcen erfolgt nach
dem Client/Sever-Modell mit einem Master (Server) und einer Menge von Agenten (Clients). Puppet
verarbeitet Code in einer Domain Specific Language (DSL), der sowohl deklarativ als auch imperativ
17
2. Stand der Technik
sein kann. Puppet hat eine sehr große User Community und modelliert das zu konfigurierende System
auf einem hohen Abstraktionslevel [Rah12].
Abbildung 2.2 zeigt, wie ein Puppet-Agent mit Hilfe eines Puppet-Masters in einen definierten
Systemzustand gebracht wird. Der Agent fordert vom Master periodisch die aktuell vorgesehene
Systemkonfiguration an, indem er eine Menge von Daten sowie den Namen des Knotens, auf dem
der Agent ausgeführt wird, an den Master sendet. Der Master ermittelt daraufhin alle benötigten
Informationen und kompiliert einen Catalog, welcher anhand einer Liste von Ressourcen und deren
Abhängigkeiten untereinander den vorgesehenen Zustand für den Agenten definiert. Nachdem
der Agent den Catalog erhalten hat überprüft dieser die aufgelisteten Ressourcen und führt alle
notwendigen Konfigurationsänderungen am System aus, so dass der gewünschte Zustand erreicht
wird. Nachdem der Catalog angewendet worden ist, schickt der Agent abschließend einen Bericht an
den Master. [pupa]
MasterAgent
Apply
Request catalog Classify
Compile
Report
Defined
system state
Query status
Enforced
defined state
Catalog
Class Class Class
Abbildung 2.2.: Puppet im Agent/Master-Modus [pupa]
18
2.2. Infrastructure as Code
2.2.2. Opscode Chef
Ebenso wie Puppet ist auch Chef ein Open Source Configuration Management-Werkzeug unter
der Apache 2.0-Lizenz [apaa], das nach dem Client/Server-Modell arbeitet und Eingaben in einer
Ruby DSL erwartet. Anders als Puppet verhält sich Chef bei der Reihenfolge der Ausführung von
Konfigurationsregeln deterministisch, was vor allem das Debugging erleichtert. Die Philosophie „thick
client and thin server“, bei der soviel Rechenarbeit (Kompilierung und Ausführung von Code) wie
möglich auf die Clients ausgelagert wird, ist für die Skalierbarkeit von Chef von Vorteil. [Pan12]
Abbildung 2.3 zeigt die grundlegenden Komponenten von Chef sowie deren Zusammenspiel. Die zu
administrierenden Knoten (nodes) können unterschiedlicher Natur sein, die einzige Voraussetzung ist,
dass sie die chef-client-Software ausführen können. Cookbooks stellen die wesentlichen Einheiten für
die Konfiguration sowie für die Verteilung von Richtlinien dar. Sie enthalten alle Bestandteile, die für
das Erreichen eines definierten Systemzustands notwendig sind. Der chef-server dient als Knotenpunkt
für die Konfigurationsdaten. Hier werden cookbooks, anzuwendende Richtlinien und Metadaten für
jeden registrierten Knoten gespeichert. Der chef-server wird mittels des Kommandozeilenwerkzeugs
knife verwaltet, welches auf einem Arbeitsplatzrechner ausgeführt wird. Über diesen Rechner ist
darüber hinaus der Zugriff auf ein Repository von cookbooks möglich. [che]
Source control
physical
node
network
node
virtual
node
cloud-
based
node
nodes
settings
cookbooks
workstations
chef-repo
node object
chef-server
cookbooks
policy
knife
chef-client
chef-client
chef-client
chef-client
Abbildung 2.3.: Chef im Client/Server-Modus [che]
19
2. Stand der Technik
2.2.3. Juju
Die Software Juju von Canonical [can] ist ein Werkzeug zur Orchestrierung von Diensten. Mit Juju
lassen sich einfach und schnell Dienste bereitstellen und verwalten. Ähnlich wie eine Programm-
installation über die Paketverwaltung in Ubuntu [ubua] (und anderen linuxbasierten Systemen)
können mit Juju Dienste installiert werden. Die hierfür verwendeten Komponenten werden Charms
genannt. Dies sind Softwarekomponenten bestehend aus einem oder mehreren Diensten sowie allen
Abhängigkeiten und notwendigen Konfigurationen. Juju Charms können auf Cloud Diensten wie
Amazon Web Services, Microsoft Azure, OpenStack, HP Cloud [hpc] oder in Kombination mit Ubuntu
MAAS [maa] bereitgestellt werden. [KB13]
Die Bereitstellung eines lauffähigen Wordpress-Blogs [wor] inklusive einer Datenbank erfolgt bei-
spielsweise mit den in Listing 2.1 gezeigten Befehlen direkt über die Kommandozeile.
Listing 2.1 Installation eines Wordpress-Blogs mittels Juju
juju deploy wordpress
juju deploy mysql
juju add-relation wordpress mysql
juju expose wordpress
Abbildung 2.4 zeigt, wie mit Hilfe von Juju Dienste wie z.B. Wordpress, Apache Tomcat [tom], Apache
Hadoop [had], ceph [cep], Apache HTTP Server [apab], Apache Cassandra [cas] oder MySQL [mys]
auf Gastbetriebssystemen in der Cloud installiert und adminstriert werden können. Die Gastbetriebs-
systeme können sowohl in einer Private Cloud als auch in einer Public Cloud gehosted sein, wobei
z.B. Openstack, Kernel-based Virtual Machines (KVMs) [kvm], LXC - Linux Containers [lxc] oder
Ubuntu Server [ubub] verwendet werden können. Die Juju-Software ist entweder mit einer grafischen
Benutzeroberfläche oder als Kommandozeilenprogramm verwendbar. [juja]
20
2.2. Infrastructure as Code
Private cloud
Openstack
KVM, LXC, etc.
Ubuntu Server
Public cloud
Openstack
KVM, LXC, etc.
Ubuntu Server
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Guest
OS
Charms
Juju
MAAS
Abbildung 2.4.: Funktionsweise von Juju [juja]
21
2. Stand der Technik
2.3. DevOps
Die Prinzipien der agilen Softwareentwicklung wurden im Jahr 2001 im Manifesto For Agile Software
Development [agi] formuliert. Sie zeigen eine Alternative zum traditionellen, schwergewichtigen
Ansatz auf, Software zu entwickeln. Gefordert wird ein Wandel der Unternehmenskultur, der mit
den vier Statements „Menschen und Miteinander sind wichtiger als Prozesse und Werkzeuge“, „Funk-
tionierende Software ist wichtiger als eine verständliche Dokumentation“, „Zusammenarbeit mit
dem Kunden ist wichtiger als Vertragsverhandlungen“ und „Anpassungen an Veränderungen sind
wichtiger als streng einem Plan zu folgen“ beschrieben wird. 12 Prinzipien konkretisieren diese
Forderung, wobei das wichtigste dieser Prinzipien die Zufriedenstellung der Kunden durch eine
frühzeitige und kontinuierliche Lieferung von guter Software ist.
Agile Softwareentwicklung wird heute in einem Großteil der Unternehmen eingesetzt. Vor allem
die Verbesserung der Reaktionsfähigkeit auf sich ändernde Anforderungen und die Erhöhung der
Transparenz im Entwicklungsprozess sorgen dafür, dass agile Softwareentwicklung zumeist auf
positive Resonanz der Beteiligten stößt. Die mit Abstand am häufigsten verwendeten Methoden sind
Scrum [Coh09] bzw. Varianten von Scrum, gefolgt von Kanban [Sha11] bzw. Varianten von Kanban.
[Ver13]
Traditionell hatten Betriebsabteilungen vergleichsweise viel Zeit für das Management von Stabili-
tät, Risiko und Performanz der von ihnen betreuten Anwendungen. Planung und Verwaltung der
benötigten Hardware waren davon losgelöste Prozesse. Der aktuelle Trend Richtung Cloud Com-
puting und Virtualisierung sowie die weitreichende Adaption von agiler Softwareentwicklung und
der damit verbundenen häufigen, schnellen Software-Releases stellt die Betriebsabteilungen vor neue
Herausforderungen. Automatisierung von zuvor manuell ausgeführten Aufgaben bei Deployment und
Betrieb von Software, wie in Abschnitt 2.2 beschrieben, stellt einen technischen Ansatz dar, diesen
Herausforderungen entgegenzutreten. [Azo11]
Die Konzepte der DevOps-Bewegung beziehen sich jedoch nicht nur auf die technischen Aspekte, son-
dern es wird vielmehr eine ganzheitliche Sicht auf die aktuellen Situationen in Softwareentwicklungs-
und Bereitstellungsprozessen angelegt, indem vor allem die Prozesse an die neuen Anforderungen
angepasst werden. Die unterschiedlichen Zielsetzungen der Unternehmensbereiche Softwareent-
wicklung und Softwarebetrieb werden als grundlegendes Problem identifiziert. Hauptaufgabe der
Softwareentwicklung ist es, Änderungen zu planen, zu implementieren und vorzunehmen (z.B. Bug-
Fixes oder neue Features). Im Gegensatz dazu ist der Betrieb darauf bedacht, Konfigurationen von
Soft- und Hardware möglichst unverändert zu lassen sowie Einschränkungen möglichst restriktiv zu
handhaben, so dass eine sichere und zuverlässige Bereitstellung von Anwendungen gewährleistet ist
(Abbildung 2.5). Genauso wie durch die agile Softwareentwicklung die Bereiche Programmieren und
Testen in neue, interdisziplinäre Teams (Entwicklung) mit gemeinsamen Zielen zusammengeführt
worden sind, sollen nun durch DevOps die Bereiche Entwicklung und Betrieb zusammengeführt
werden. [Hü12]
22
2.3. DevOps
Tester
Program-
mierer
Qualitäts-
sicherung
Admini-
stratoren
(System)
Admini-
stratoren
(DBs)
Netzwerk-
techniker
Auslieferung von Bug Fixes,
Änderungen und neuen Features
Zuverlässiger und stabiler
Betrieb der Software
Entwicklung Betrieb
Abbildung 2.5.: Änderungen vs. Stabilität [Hü12]
In [Smi11] wird der Begriff DevOps als ein neuer Ansatz für die Bereitstellung von IT-Dienstleistungen
definiert, dessen Wurzeln in der agilen Softwareentwicklung ausgemacht werden. Zielsetzung ist
eine enge Zusammenarbeit von Entwicklung und Betrieb, um unternehmerische Ziele (z.B. zuverläs-
sige Bereitstellung einer Webseite) zu erreichen. So werden mit Hilfe des Cloud Computings sowie
Automatisierung in Deployment und Management von Anwendungen insbesondere Skalierbarkeit
und hohe Verfügbarkeit von Web-Anwendungen erreicht. Für DevOps existieren (noch) keine kon-
kreten Regeln, Standards oder Frameworks, wie z.B. der IT Infrastructure Library (ITIL) [iti] oder der
Capability Maturity Model Integration (CMMI) [cmm]. Vielmehr handelt es sich um eine Sammlung
von Empfehlungen und grob formulierten Prinzipien. Zwischen Entwicklung und Betrieb soll eine
Kultur des Zusammenarbeitens und Kommunizierens etabliert werden, was in der Praxis vor allem
für Realease Management-Prozesse wichtig ist. Zum anderen sollen Konzepte wie Infrastructure as
Code als Grundlage für verschiedene Möglichkeiten der Automatisierung im Application Lifecycle
Management (ACM) vorangetrieben werden.
In [JH11] werden die Herausforderungen, denen die DevOps-Bewegung entgegenzutreten versucht,
beschrieben. Auf der einen Seite soll auf sich verändernde Marktsituationen und Anforderungen
möglichst flexibel und schnell reagiert werden können. Auf der anderen Seite wird bei gleichzeitig
stetig steigender Komplexität sowie Heterogenität der Softwaresysteme ein zuverlässiger und stö-
rungsfreier Betrieb erwartet. Es wird vorgeschlagen, interdisziplinäre Teams aus Entwicklern, Testern
und Betriebspersonal zu bilden. Diese Teams sind jeweils einem Produkt zugeordnet und betreuen
den gesamten Produktlebenszyklus. Hierbei werden die Vorgänge Building, Testing und Deployment
von Software nach Möglichkeit automatisiert. Vor allem das Deployment wird durch Virtualisierung,
Cloud Computing sowie Configuration Management Tools wie Puppet oder Chef deutlich vereinfacht
23
2. Stand der Technik
im Vergleich zur manuellen Ausführung entsprechender Vorgänge. Die gemeinsame Nutzung über
Abteilungsgrenzen hinweg von Techniken und Werkzeugen aus der Softwareentwicklung sowie von
Technologien zum Management von IT-Umgebungen und -Infrastruktur stellt ein grundlegendes
Konzept von DevOps dar. Ermöglicht werden sollen Deployments auf Abruf (Self-Service Deployments)
bei denen die Anwendung und die benötigte Version der Umgebung automatisch zur Verfügung
gestellt werden.
[Fel13] argumentiert, dass der Einsatz von DevOps für Firmen aus dem IT-Bereich unerlässlich ist,
sowohl für Software-StartUps, deren Erfolg maßgeblich von der Qualität der Entwicklung und des
Betriebs der Software abhängt, als auch für große Unternehmen wie Etsy [ets], Netflix [net], Facebook
[fac], Amazon [awsa], Twitter [twi] oder Google [goo], die trotz einer extremen Anzahl an täglich
stattfindenden Deployments ein hohes Maß an Stabilität, Zuverlässigkeit und Sicherheit der Software
garantieren müssen. DevOps adressiert das Problem, dass Softwareprojekte ständig größer und kom-
plexer werden und dadurch die Störungsanfälligkeit beim Deployment und während des Betriebs
steigen. Eine konkreter Lösungsansatz für dieses Problem wird darin gesehen, die zu entwickelnde
Softwareanwendung von Anfang an in Einheit mit der zugehörigen Umgebung zu entwickeln und
zu testen. Hierfür ist die Bereitstellung von (virtualisierten) Produktumgebungen für den Softwa-
reentwicklungsprozess erforderlich, die außer der zu entwickelnden Anwendung alles enthält, was
benötigt wird (z.B. Datenbanken, Betriebssystem, Netzwerk oder eine Virtualisierungsschicht). Dies
kann vergleichsweise einfach durch Starten einer Instanz einer virtuellen Maschine erfolgen oder
als ein komplexer Prozess mittels eines automatisierten Buildsystems, das die Umgebung von Grund
auf neu erstellt. Somit wird die agile Softwareentwicklung, die als Ausgabe fertigen Code liefert,
dahingehend erweitert, dass nun fertiger Code in Kombination mit einer portablen Umgebung, in
der dieser Code läuft, ausgegeben wird. Neben dem Einsatz von DevOps-Werkzeugen müssen die
Abteilungen Softwareentwicklung und Softwarebetrieb hierfür eng zusammenarbeiten und Fachwis-
sen in beide Richtungen transferieren. Entwickler müssen Fähigkeiten und Verantwortlichkeiten von
Mitarbeitern des Softwarebetriebs übernehmen, Mitarbeiter des Softwarebetriebs müssen Fähigkeiten
und Verantwortlichkeiten von Entwicklern übernehmen.
Die Anwendung von DevOps-Prinzipien setzt weder den Einsatz von Virtualisierung noch den von
Cloud Computing voraus. Jedoch ist festzustellen, dass eine Nutzung dieser Technologien viele
Vorteile mit sich bringt und für ein auf hohe Performanz ausgelegtes Development-, Release- und
Deploymentsystem unverzichtbar ist. [Lou12]
2.4. NoOps und AppOps
Der Begriff NoOps (No Operations) beschreibt die Weiterentwicklung des DevOps-Paradigmas hin zu
einer Situation, in der Betriebsaspekte für Entwickler weitestgehend transparent sind. Deployment,
Skalierung und Verwaltung der Entwicklerartefakte werden mittels Diensten durchgeführt, so dass
ein Entwickler sich auf die Implementierung der Anwendungslogik konzentrieren kann anstatt sich
mit Betriebsspezifika auseinandersetzen zu müssen. Systeme zur Automatisierung (z.B. CloudFoun-
dry [cloe]) stehen für den gesamten Lebenszyklus einer Anwendung zur Verfügung, wodurch eine
manuelle Administration durch Betriebspersonal entfällt. [LC12]
24
2.5. Verwandte Arbeiten
Als Alternative zu dem Begriff NoOps wird häufig gefordert, den Begriff AppOps (Application Opera-
tions) zu verwenden, da dieser besser beschreibe, dass bei PaaS-Lösungen nur noch die Anwendung
selbst verwaltet werden muss und nicht mehr die (virtualisierte) Infrastruktur [Fin14].
[Har12] beschreibt, dass DevOps-Konzepte vor allem auf IaaS-Dienste zugreifen. Es wird also mit
virtualisierter Infrastruktur gearbeitet. Tätigkeiten wie Provisioning, Konfiguration, Änderung oder
Verwaltung der Ressourcen obliegen dem Benutzer. NoOps hingegen setzt eine Abstraktionsschicht
weiter oben an, indem auf PaaS-Dienste zurückgegriffen wird, wie z.B. auf Dienste für die Verwaltung
von Netzwerken und virtueller Hardware oder auf Dienste wie Provisioning, Lastverteilung oder
Sicherheit.
In [Coc12] wird über die aktuelle Anwendung von NoOps bei Netflix [net] berichtet. Eine konsequente
Ausrichtung der Softwarearchitektur auf das Cloud Computing basierend auf NoSQL [Cat11] war der
erste Schritt. Einige wenige Mitarbeiter aus Bereichen des IT-Betriebs wurden in Entwicklerteams
transferiert, die auf Linux basierende Images für virtuelle Maschinen erstellen (z.B. Amazon Machine
Image (AMI) [lin]). Die Integration von Entwicklertools (Perforce [per] als Versionskontrolle, Ivy
[apac] als Build-Management-Werkzeug, Jenkins [jen] als Continuous Integration-Werkzeug und
Artifaktory [art] als Repository für Binärdateien) zu einer durchgehenden Tool-Chain ermöglichen
die automatisierte Erzeugung von vollständigen AMIs für den Betrieb von Diensten. Mittels AWS
Autoscale Groups [amaa] können hierbei identische Instanzen von Services erzeugt werden. Jedes
Entwicklerteam kann über ein Webportal seine Software verteilen und in Echtzeit testen, wobei
mit Hilfe der Tool-Chain dabei ein Großteil der Arbeit automatisiert wird. Die Software bei Netflix
unterliegt keiner zentralen Kontrolle, vielmehr ist jedes Team selbst verantwortlich für die eigene
Software, für deren Abhängigkeiten sowie für die Verwaltung der entsprechenden AWS Security
Groups [AWSd].
Für die folgenden Ausführungen in der vorliegenden Arbeit ist eine Unterscheidung zwischen DevOps
und NoOps nicht notwendig. Vielmehr kann NoOps als Spezialfall von DevOps angesehen werden,
auf die sich die vorgestellten Konzepte gleichermaßen anwenden lassen.
2.5. Verwandte Arbeiten
In der Abhandlung Pattern Based SOA Deployment [AEK+07] wird ein Ansatz vorgestellt, mit dessen
Hilfe die Konfiguration der Hosting-Infrastruktur von Diensten in einer SOA-Umgebung erleichtert
werden soll. Hierbei kommen modellbasierte Deployment-Patterns zum Einsatz, mit denen nicht-
funktionale Eigenschaften von Diensten abstrakt und strukturiert formuliert werden können. Im
Gegensatz zu der häufig üblichen Vorgehensweise, Deployments anhand von informellen Dokumen-
tationen durchzuführen, die diese Vorgänge langsam, teuer und fehleranfällig machen, erlangt man
auf diesem Wege insbesondere die Vorteile, dass Deployment-Patterns wiederverwendbar und zusam-
mensetzbar sind und iterativ verbessert werden können. Zudem wird ein Algorithmus vorgestellt,
mit dem sich diese Deployment-Patterns automatisiert in verschiedenen verteilten Umgebungen
für die Bereitstellung von Diensten instanziieren lassen. Die vorgestellten Konzepte lassen sich mit
der vorliegenden Arbeit verbinden, indem die in Abschnitt 3.2 beschriebene Wissensdatenbank zur
systematischen Organisation von Deployment-Patterns genutzt wird. Eine Auswahl an Patterns aus
25
2. Stand der Technik
der Wissensdatenbank kann dann dazu verwendet werden, Systemkonfigurationen entsprechend der
zu beachtenden Anforderungen und Einschränkungen durchzuführen.
Ein Ansatz, der ebenfalls das Konzept von Patterns verwendet, wird in der Abhandlung Pattern-
based Deployment Service for Next Generation Clouds [LSS+13] vorgestellt. Mittels einer deklarativen,
XML-basierten DSL werden Patterns formuliert, die komplexe Deployment-Szenarien, Entitäten,
Beziehungen und Dienste beschreiben. Patterns solcher Art dienen als Eingabe für einen Dienst, mit
dessen Hilfe das Deployment von Anwendungen in Cloud-Umgebungen durchgeführt wird. Dieser
Ansatz integriert die Konzepte von System Patterns, Multi-Cloud und unterschiedlichen etablierten
Vorgehensweisen aus der Praxis, wie z.B. die Verwendung von RESTful Services und Configuration Ma-
nagement Tools. Genauso wie das Konzept der zuvor genannten Deployment-Patterns aus [AEK+07]
lässt sich auch dieser Ansatz mit der vorliegenden Arbeit verbinden.
Die AbhandlungWS-Policy4MASC - A WS-Policy Extension Used in the MASC Middleware [TEM07]
zeigt mit einer Erweiterung vonWS-Policy in Kombination mit der MiddlewareManageable and Adap-
tive Service Composition (MASC) eine Möglichkeit auf, Web Services zu überwachen und dynamisch an
Änderungen der Laufzeitumgebung anzupassen. Hierfür wird von WS-Policy extension Gebrauch ge-
macht, d.h. es werden durch XML Schemata definierte neue Typen vonWS-Policy assertions eingeführt.
Goal policy assertions spezifizieren hierbei Anforderungen und Garantien, die während der normalen
Systemlaufzeit gelten (z.B. Die Antwortzeit einer bestimmten Komponente soll kleiner sein als 1 Sekunde).
Action policy assertions spezifizieren Aktionen, die unter bestimmten Voraussetzungen ausgeführt
werden (Beispiele hierfür sind das Hinzufügen, Entfernen, Ersetzen, Überspringen und Retrying von
Subprozessen oder Aktivitäten). Für die Spezifizierung von monetären Aspekten werden utility policy
assertions verwendet und mit meta-policy assertions wird spezifiziert, welche action policy assertions
gegenseitige Alternativen sind und welche Strategie beim Auftreten von Konflikten angewendet wird.
Kompositionen aus Web Services können verständlich mittels WSDL [wsd], WS-BPEL [wsb] und
WS-Policy4MASC beschrieben werden, wobei eine Menge von neuen Regeln für das Management
(Monitoring und Steuerung) von Web Services zur Verfügung stehen. Dieser Ansatz setzt jedoch zum
einen die Verwendung von Web Services voraus und ist zum anderen nicht integrierbar mit den in
Abschnitt 2.2 vorgestellten Werkzeugen, so dass bestehende Spezifikationen für diese Werkzeuge
nicht wiederverwendet werden können.
26
3. Vorbereitung des Softwarebetriebs aus
Entwicklersicht
In diesem Kapitel werden die entwickelten Konzepte für die Vorbereitung des Softwarebetriebs aus
Entwicklersicht vorgestellt. Zunächst wird in Abschnitt 3.1 erklärt, an welchen Stellen Software-
entwickler bei der Integration von automatisierten Release-Prozessen und Infrastructure as Code
besser unterstützt werden können. Im Anschluss wird in Abschnitt 3.2 eine Taxonomie für Implemen-
tierungen von Softwarekomponenten vorgestellt. Abschnitt 3.3 stellt eine mögliche Struktur einer
Spezifikation vor, die als Eingabe für ein Werkzeug für die Bereitstellung von Infrastrucure as Code
dient. Sowohl die Taxonomie als auch die Spezifikation werden im weiteren Verlauf dieser Arbeit
verwendet. In Abschnitt 3.4 wird ein beispielhaftes Szenario für den Einsatz der vorgestellten Konzepte
erstellt, bevor in Abschnitt 3.5 alle wichtigen Anforderungen an diese Konzepte aufgeführt werden.
Schließlich wird in Abschnitt 3.6 ein Lösungsansatz präsentiert, der alle gestellten Anforderungen
erfüllt.
3.1. Forschungsaufgaben
Die Entwicklung von Software auf der einen Seite und die automatisierten Release-Prozesse mit-
tels Infrastructure as Code auf der anderen Seiten stellen zwei unterschiedliche Domänen dar, die
jeweils eigene Konzepte, Strukturen, Eigenheiten, Semantiken und Syntaxen besitzen. So erfolgt
die Implementierung der Anwendungslogik mittels Programmiersprachen (C, C++, Java, Go, . . . ),
Skriptsprachen (Javascript, PHP, . . . ) oder Domain Specific Languages (SQL, reguläre Ausdrücke,
. . . ). Dies stellt die Domäne der Softwareentwickler dar, die mit diesen Sprachen arbeiten und deren
Funktionsweise daher oft bis ins kleinste Detail kennen. Im Gegensatz dazu erfolgen die automatisier-
ten Release-Prozesse zumeist über spezielle Werkzeuge, deren Wurzeln in der Administration und
Verwaltung des Softwarebetriebs liegen, über Konfigurationseinstellungen verschiedenster beteiligter
Komponenten sowie über Shell Scripts.
Aktuelle Werkzeuge aus dem DevOps-Bereich (Chef, Puppet, Juju, . . . ), im Folgenden DevOps-
Werkzeuge genannt, erleichtern das Deployment von Anwendungen durch die Verwendung bereits
bestehender, wiederverwendbarer Verwaltungs-Routinen für Softwareimplementierungen. So er-
fordert beispielsweise das Deployment des in Listing 3.1 gezeigten Juju Charms lediglich einige
wenige Shell-Kommandos (vergleichbar zur Installation von lokalen Anwendungen mit Hilfe von
Paketmanagern wie aptitude [apt] in Debian-basierten Linuxsystemen). Zur Veranschaulichung zeigt
Listing 3.1 einen gekürzten Ausschnitt eines Juju-Charms aus dem Juju Charm Store [jujd] für die
Installation eines Mediawikis [med]. Der Juju Charm installiert die beiden Dienste mediawiki und
27
3. Vorbereitung des Softwarebetriebs aus Entwicklersicht
mysql, welche jeweils durch eine Menge von Attributen konfiguriert und miteinander verbunden
werden.
Listing 3.1 Juju Charm für die Installation eines Mediawikis [jujb]
single:
relations:
- mediawiki:db
- mysql:db
series: precise
services:
mediawiki:
charm: cs:precise/mediawiki-10
options:
debug: false
skin: vector
mysql:
charm: cs:precise/mysql-28
num_units: 1
options:
binlog-format: MIXED
block-size: 5
dataset-size: 80%
flavor: distro
Für die Erstellung neuer oder die Überarbeitung bestehender Verwaltungs-Routinen bedarf es neben
der Kenntnis der Funktionsweise des verwendeten DevOps-Werkzeuges insbesondere einem fundier-
ten Wissen aus dem Bereich des Softwarebetriebs. So stellen sich eine Reihe von betriebsspezifischen
Fragestellungen hinsichtlich der Anforderungen, Konfigurationen und Einschränkungen aller ver-
wendeter Komponenten, die von Entwicklern nicht effektiv bearbeitet werden können. Es besteht
also eine Lücke zwischen den beiden Domänen Softwareentwicklung und Softwarebetrieb, die es zu
schließen gilt.
Für Entwickler, die neue Verwaltungsroutinen erstellen möchten, muss eine Möglichkeit geschaffen
werden, dieses durch die Verwendung von Konzepten und Sprachen aus ihrer Domäne zu erreichen.
Hierbei ist eine weitgehende Abstraktion der Mächtigkeit und zugleich auch der Komplexität der
Konzepte und Konfigurationsmöglichkeiten des Softwarebetriebs notwendig.
Darüber hinaus existiert noch keine standardisierte Möglichkeit, während des Betriebs Konfigurati-
onsänderungen durchzuführen bzw. automatisiert DevOps-Spezifikationen flexibel auf veränderte
Anforderungen und Einschränkungen hin anzupassen.
3.2. Wissensdatenbank
Eine Wissensdatenbank dient als Grundlage für die im Folgenden beschriebenen Konzepte. Mittels
einer Taxonomie werden hier Implementierungen klassifiziert, die für Softwarebereitstellungsprozesse
nach dem DevOps-Paradigma wichtig sind.
28
3.2. Wissensdatenbank
Folgende Hauptkategorien sind in der Wissensdatenbank enthalten:
• Anbieter (Provider)
• Anwendung (Application)
• Dienstschicht (Middleware)
• Infrastruktur (Infrastructure)
• Werkzeug (DevOpsware)
Die Sub-Taxonomien der genannten Hauptkategorien werden in den Abbildungen 3.1 bis 3.5 an-
hand von Diagrammen mit Generalisierungen veranschaulicht. Abstrakte Entitäten werden hierbei
durch Ellipsen symbolisiert, konkrete Implementierungen durch Rechtecke. Die Abbildungen zeigen
beispielhaft jeweils nur einen kleinen Ausschnitt der entsprechenden Taxonomie.
Provider
Google Amazon
Abstract Entity Implementation
App Engine
Compute Engine
BigQuery
IBM
EC2
RDS
Cloud Formation
Elastic Beans Talk
OpsWorks
Abbildung 3.1.: Taxonomie der Anbieter
Die Implementierungen können verschiedene Attribute besitzen. Diese Attribute beschreiben zum
einen den Wert einer Eigenschaft (z.B. beinhaltet das Attribut version den Wert der entsprechenden
Softwareversion), zum anderen werden Implementierungen aber auch miteinander in Verbindung
gesetzt (z.B. verbindet das Attribut virtualization eine Implementierung mit einer anderen, welche
29
3. Vorbereitung des Softwarebetriebs aus Entwicklersicht
als Virtualisierungskomponente ausgewählt ist. Folgende Attribute sind zum aktuellen Stand in der
Wissensdatenbank verfügbar:
• virtualisiert durch (virtualization)
• integriert mit (integrated with)
• referenziert (references)
• ist Alternative zu (alternative to)
• Artefakt-Typ (artifact type)
• Version (version)
• gehostet auf (hosted on)
• benötigt (requires)
Application
CRM Blog Issue Tracker
Abstract Entity
WordPressSugarCRM Mantis Redmine
Implementation
WP Charm
WP Cloud
Formation Templ.
WP Chef
Cookbook
Abbildung 3.2.: Taxonomie der Anwendungen
30
3.2. Wissensdatenbank
Middleware
Web Server Database
Abstract Entity Implementation
PHP on Google
AppEngine
PHP on Elastic
Beanstalk
MessagingRuntime
PHPJava
Apache HTTP
Server Graph-basedRelational
LAMP AMI
LAMP Charm
LAMP Dockerfile
Apache/PHP
Dockerfile MySQL Cookbook
MySQL Charm
MySQL on RDS
MySQL
Abbildung 3.3.: Taxonomie der Dienstschicht
31
3. Vorbereitung des Softwarebetriebs aus Entwicklersicht
Infrastructure
Network
Operating
System
Abstract Entity
DNS
Amazon Linux
Implementation
RHEL
Windows Linux
Ubuntu
Ubuntu Server
14.04 64-bit AMI
Ubuntu Server
14.04 64-bit ISO
Ubuntu Server
14.04 32-bit AMI
Abbildung 3.4.: Taxonomie der Infrastruktur
DevOpsWare
Test Integration Operations
Abstract Entity
Java
Build
Monitoring Chef
Implementation
Maven
Gradle
Docker
Juju
Chef Solo
Chef Server
Jenkins
Hudson
Abbildung 3.5.: Taxonomie der Werkzeug
32
3.3. DevOps-Spezifikation
3.3. DevOps-Spezifikation
Eine Eingabedatei für ein DevOps-Werkzeug wird im Folgenden als DevOps-Spezifikation bezeichnet.
Für eine generalisierte Betrachtung solch einer Spezifikation wird an dieser Stelle eine Struktur
vorgestellt, welche in dieser Arbeit verwendet wird. Das ER-Diagramm in Abbildung 3.6 zeigt den
strukturellen Aufbau dieser abstrakten Spezifikation. Jede Spezifikation besitzt die Attribute
• Name
• Version
• Autor und
• Beschreibung
Die Attribute beinhalten Metadaten für die jeweilige Spezifikation, so dass explizit ersichtlich ist, wie
die Spezifikation benannt ist, wozu genau sie dient, wer sie erstellt hat und welcher Versionsstand
vorliegt. Der Name bezeichnet eine Spezifikation eindeutig.
Operationen in einer DevOps-Spezifikation kategorisieren unterschiedliche Schritte, die für eine
Installation von Software durch die Spezifikation notwendig sind. Als Beispiele hierfür sind zu
nennen
• erstellen (build)
• testen (test)
• starten (start)
• stoppen (stop)
• verteilen (deploy)
• verteilen beenden (undeploy)
Jede Operation enthält beliebig viele Aktionen sowie beliebig viele Abhängigkeiten. Aktionen sind
Teiloperationen, durch dessen Ausführungen insgesamt die gewünschten Änderungen am System
vorgenommen werden. Dies können z.B. einfache Shell-Kommandos oder Skripte sein, die ausgeführt
werden. Genauso können aber auch fertige Puppet Manifests, Chef Cookbooks oder beliebige andere
Operationen aus der vorliegenden DevOps-Spezifikation ausgeführt werden. Eine Aktion besitzt
die Attribute runner, config und comment. Das Attribut runner ist erforderlich und bezeichnet die
Technologie, mit der die Aktion ausgeführt wird. Das Attribut config beinhaltet die Nutzdaten der
entsprechenden Aktion, also z.B. die tatsächlichen Shell-Kommandos, das Skript, Manifest oder
Cookbook. Das optionale Attribut comment beinhaltet zusätzliche Kommentare. [Tiw00]
33
3. Vorbereitung des Softwarebetriebs aus Entwicklersicht
DevOps-
Spezifikation
enthält
Operation
1
*
enthältenthält
1 1
AktionAbhängigkeit
* *
VersionName Autor Beschreibung
„comment“
(optional)
„runner“
„config“
(optional)
zeigt auf
1 1
►
Abbildung 3.6.: ER-Diagramm einer DevOps-Spezifikation
34
3.4. Beispielszenario
3.4. Beispielszenario
Für eine konsistente Betrachtung wird an dieser Stelle ein Szenario eingeführt, welches im Folgenden
als Beispiel dienen soll. Kern des Szenarios ist eine Installation des Bugtracking Systems Mantis [man].
Hierbei handelt es sich um eine Webanwendung, veröffentlicht unter der GNU General Public License
[gpl], die für die Verwaltung von Fehlern oder als Ticketing System verwendet werden kann. Mantis
basiert auf PHP [php] und benötigt neben einem Webserver auch eine Datenbank. Als Datenbank
wird später eine MySQL-Datenbank gewählt und als Webserver ein Apache Webserver [apad]. Der
Webserver und die Datenbank werden in (möglicherweise unterschiedlichen) Betriebssystemen
ausgeführt, welche wiederum in virtuellen Maschinen laufen. Abbildung 3.7 veranschaulicht die
Topologie des beispielhaft ausgewählten Szenarios.
PHP Modul
Mantis -
Anwendung
Datenbankbenötigt verbindet
Webserver
gehostet auf gehosted auf
Betriebssystem
Virtuelle
Maschine
gehosted auf
gehosted auf
Datenbank-
server
Betriebssystem
Virtuelle
Maschine
gehosted auf
gehosted auf
gehosted auf
Abbildung 3.7.: Topologie des Beipielszenarios
Listings 3.2 und 3.3 zeigen eine unvollständige DevOps-Spezifikation entsprechend der in Abschnitt 3.3
vorgestellten Struktur, mit dem ein Deployment des Beispielszenarios durchgeführt werden kann.
Die Spezifikation mit dem Namen mantis enthält die Operationen build, start und deploy. Die build-
Operation wird mittels eines Shell-Kommandos ausgeführt, das über den Befehl git clone und einer
URL auf ein Git-Repository für Mantis die Anwendung auf das Zielsystem kopiert. Die start-Operation
enthält die beiden Teiloperationen mantis (Starten der Mantis-Anwendung) und mysql (Starten des
MySQL-Service). Zudem ist unter dependencies (Abhängigkeiten) durch ein Tupel angegeben, dass
35
3. Vorbereitung des Softwarebetriebs aus Entwicklersicht
Listing 3.2 DevOps-Spezifikation für das Beispielszenario (Teil 1)
{
"name": "mantis",
"version": "...",
"author": "...",
"description": "...",
"operations": {
"build": {
"artifacts": {
"get-app": {
"runner": "command-runner",
"comment": "git must be installed",
"config": {
"command": "git clone https://github.com/mantisbt/mantisbt.git"
}
},
},
},
"start": {
"artifacts": {
"mantis": {
"runner": "command-runner",
"config": {
"command": "sudo apt-get install mantis",
"cwd": "./mantis"
}
},
"mysql": {
"runner": "command-runner",
"config": {
"command": "service mysql start"
}
}
},
"dependencies": [
[ "mantis", "mysql" ]
]
},
"deploy": {
"artifacts": {
"deploy-git": {
"runner": "chef-solo-runner",
"config": {
"files": { "git.tar.gz":
"http://s3.amazonaws.com/community-files.opscode.com/
cookbook_versions/tarballs/6224/original/
git20140318-2456-184qsad.?1395184516" },
"runlist": [ "recipe[git::default]" ]
}
},
36
3.5. Anforderungen
Listing 3.3 DevOps-Spezifikation für das Beispielszenario (Teil 2)
"deploy-mysql": {
"runner": "Chef Cookbook Deployer",
"config": {
"name": "MySQL Server 5.x Chef Cookbook",
"hosted_on_one_of": "Infrastructure/OS/Linux/Ubuntu",
"version": "5.0"
},
"mergeconfig": false
},
"build-app": {
"runner": "operation-runner",
"config": {
"operation": "build"
}
},
"start-app": {
"runner": "operation-runner",
"config": {
"operation": "start"
}
}
},
"sequence": [
"deploy-git",
"deploy-mysql",
"build-app",
"start-app"
]
}
}
}
die Teiloperation mantis von der Teiloperation mysql abhängt. Die deploy-Operation enthält die
Teiloperationen deploy-git (Installation von Git mit Hilfe eines Chef Cookbooks und dem chef-solo-
runner), deploy-mysql (Installation von MySQL), build-app (ruft die build-Operation auf) und start-app
(ruft die start-app-Operation auf). Für die deploy-Operation ist eine Sequenz (sequence) angegeben,
in der die einzelnen Teiloperationen abzuarbeiten sind. Die Teiloperation build-app erfordert z.B.,
dass auf dem Zielsystem eine MySQL-Datenbank installiert ist, und ist daher in der Sequenz nach der
Teiloperation deploy-mysql angegeben.
3.5. Anforderungen
Die vorliegende Arbeit stellt Konzepte vor, die das Erstellen von DevOps-Spezifikationen für Softwa-
reentwickler vereinfachen. Im Idealfall sollen Entwickler in die Lage versetzt werden, selbstständig
und ohne direkte Unterstützung von Personal des Softwarebetriebs DevOps-Spezifikationen für
die von ihnen entwickelte Software zu erstellen. Hierbei müssen neben den Anforderungen, die
37
3. Vorbereitung des Softwarebetriebs aus Entwicklersicht
seitens der Entwickler an die Anwendung und deren Umgebung gestellt werden, insbesondere glo-
bale Einschränkungen berücksichtigt werden, die seitens des Betriebs vorliegen. Einschränkungen
können hierbei zum Beispiel spezielle Typen von Datenbankservern, Softwareversionen oder Kon-
figurationen der Betriebssysteme, auf denen die Anwendungen gehostet werden, sein. Bei diesen
Einschränkungen handelt es sich um Fachwissen aus Abteilungen, die für den Softwarebetrieb zu-
ständig sind. Entwickler haben dieses Fachwissen a priori nicht, so dass ohne weitere konzeptionelle
Unterstützung eine manuelle und zeitaufwendige gemeinsame Erarbeitung bzw. ein Abgleich der
Anforderungen und Einschränkungen notwendig ist. Ohne explizite Zusammenarbeit mit dem Betrieb
sind Entwickler bei einem traditionellen Vorgehen also nicht in der Lage, selbstständig und kurzfris-
tig DevOps-Spezifikationen zu erstellen. Dieses Problem soll im Folgenden durch die vorgestellten
Konzepte adressiert werden. Ohne bei Entwicklern weitreichende Kenntnisse aus den Bereichen
IT-Verwaltung und des IT-Betriebs vorauszusetzen, soll es für sie erleichtert werden, vollständige
Deployment-Szenarien für Anwendungen eigenständig zu erstellen. Das Verfahren soll durch Au-
tomatisierung die Vorbereitung verschiedener Phasen des Softwarebetriebs verkürzen und Fehler
eliminieren, die bei einer manuellen Ausführung leicht entstehen können. Hierfür müssen zum einen
globale Einschränkungen (z.B. betriebliche Vorgaben für den Softwarebetrieb wie z.B. not hosted
on Amazon Web Services) definiert werden und zum anderen Anforderungen, die eine Aktion einer
DevOps-Spezifikation an die Umgebung stellt, formuliert werden können. Die Formulierung von
Anforderungen und Einschränkungen muss hierbei auf einem hohen Abstraktionslevel erfolgen, so
dass keine IT-Detailkenntnisse erforderlich sind. Ebenso muss die Formulierung strukturiert erfolgen
können, damit eine automatisierte Auswertung ermöglicht wird. Eine Wissensdatenbank, wie in
Abschnitt 3.2 vorgestellt, und eine DevOps-Spezifikation, wie in Abschnitt 3.3 definiert, stehen als
Hilfsmittel zur Verfügung.
An die in Abschnitt 3.6 vorgestellten Konzepte für die Vorbereitung des Softwarebetriebs aus Ent-
wicklersicht werden folgende Anforderungen gestellt:
A1 Entwickler sollen bei der Erstellung von DevOps-Spezifikationen unterstützt werden. (Aktuelle
Situation: Entwickler müssen DevOps-Spezifikationen manuell erstellen.)
A2 Zu einer DevOps-Spezifikation sollen Anforderungen definiert werden können. (Aktuelle Situati-
on: In einer DevOps-Spezifikation können Anforderungen nicht allgemein definiert werden. Z.B.
ist es nicht möglich festzulegen, dass eine verwendete Software einen bestimmten Versionsstand
hat.)
A3 Es soll eine Datenbasis mit globalen Einschränkungen genutzt werden können. (Aktuelle Situation:
Es existiert keine Datenbasis mit globalen Einschränkungen.)
A4 Anforderungen und Einschränkungen sollen anhand einer vorgegebenen Struktur systematisch
formuliert werden können. (Aktuelle Situation: Anforderungen und Einschränkungen werden
informell ausgedrückt, z.B. durch betriebliche Anweisungen, Dokumentationen oder Standard-
vorgehensweisen und sind insbesondere nicht automatisiert auswertbar.)
A5 Anforderungen und Einschränkungen sollen auf hohem Abstraktionslevel und in der Domäne
der Entwickler formuliert und automatisiert ausgewertet werden können. (Aktuelle Situation:
Vorliegende Anforderungen und Einschränkungen werden durch entsprechende manuelle
Auswahl und Konfiguration von Implementierungen aus der Wissensdatenbank umgesetzt.)
38
3.6. Architektur
A6 Insbesondere auch Verbindungen von Implementierungen untereinander sollen beschrieben wer-
den können. (Aktuelle Situation: Es lassen sich keine Abhängigkeiten zwischen verschiedenen
Implementierungen ausdrücken.)
A7 Die Ermittlung von passenden Implementierungen aus der Wissensdatenbank soll automatisiert
erfolgen. (Aktuelle Situation: Die Ermittlung passender Implementierungen erfolgt manuell.)
A8 Die Übernahme einer Implementierung aus der Taxonomie in der DevOps-Spezifikation soll
automatisiert (bzw. halbautomatisiert) erfolgen können. (Aktuelle Situation: Die Übernahme
einer Implementierung erfolgt manuell.)
3.6. Architektur
In diesem Abschnitt werden Konzepte vorgestellt, mit denen unter Beachtung der im vorangegan-
genen Abschnitt definierten Anforderungen der Softwarebetrieb aus Entwicklersicht vorbereitet
werden kann. Zunächst wird in Unterabschnitt 3.6.1 gezeigt, wie Aktionen aus der in Abschnitt 3.3
vorgestellten DevOps-Spezifikation um zwei Attribute erweitert werden, um diese mit zusätzlichen
Informationen anreichern zu können. Im Anschluss wird in Unterabschnitt 3.6.2 eine Menge von
Prädikaten definiert, mit deren Hilfe Anforderungen, Einschränkungen und Abhängigkeiten von
Implementierungen, die in der Wissensdatenbank (siehe Abschnitt 3.2) topologisch abgelegt sind,
beschrieben werden können. In Unterabschnitt 3.6.3 wird sodann der Programmablauf erläutert und
in Unterabschnitt 3.6.4 wird erklärt, wie der Algorithmus für die Auswahl von Implementierungen
aus der Wissensdatenbank arbeitet. Abschließend wird in Unterabschnitt 3.6.5 beschrieben, wie die
in Abschnitt 3.5 aufgestellten Anforderungen erfüllt werden.
3.6.1. Modifikation der DevOps-Spezifikation
Für die Formulierung von Anforderungen und Einschränkungen für das automatisierte Deployment
von Anwendungen wird die DevOps-Spezifikation auf Aktionsebene um das Attribut requirements er-
weitert. Hier werden alle zu beachtenden Anforderungen hinterlegt, wobei diese so formuliert werden,
dass im weiteren Verlauf eine automatisierte Auswertung möglich ist. Zusätzlich wird das weitere
Attribut resolver eingeführt, welches beschreibt, von welchem Typ das Attribut Anforderung ist. Da-
durch wird Flexibilität dahingehend erreicht, dass innerhalb einer DevOps-Spezifikation verschiedene
Sprachen für die Beschreibung der Anforderungen verwendet werden können. Abbildung 3.8 zeigt
das ER-Diagramm der erweiterten DevOps-Spezifikation.
39
3. Vorbereitung des Softwarebetriebs aus Entwicklersicht
DevOps-
Spezifikation
enthält
Operation
1
*
enthältenthält
1 1
AktionAbhängigkeit
* *
VersionName Autor Beschreibung
„comment“
(optional)
„runner“
„config“
(optional)
zeigt auf
1 1
► „requirements“
„resolver“
Abbildung 3.8.: ER-Diagramm einer DevOps-Spezifikation (erweitert)
3.6.2. Prädikate
Anforderungen und Einschränkungen lassen sich in der Aussagenlogik als Aussagen auffassen, denen
jeweils genau ein Wahrheitswert (TRUE oder FALSE) zugeordnet wird. Atomare Aussagen lassen sich
hierbei durch Junktoren (z.B. Konjunktion, Disjunktion oder Negation) miteinander verknüpfen. Eine
Erweiterung der Aussagenlogik stellt die Prädikatenlogik dar, die zusätzlich Quantoren, Funktions-
40
3.6. Architektur
symbole und Prädikatssymbole verwendet. Mit Hilfe der Prädikatenlogik lassen sich Sachverhalte
beschreiben, die durch die Aussagenlogik alleine nicht beschreibbar sind. So lassen sich durch geeig-
nete Prädikate z.B. bestimmte Beziehungen von Objekten untereinander ausdrücken oder es lässt
sich feststellen, ob ein Objekt mit einer gewissen Eigenschaft existiert. [Sch00]
Im Folgenden wird eine Menge von Prädikaten eingeführt, um Anforderungen und Einschränkungen
auszudrücken. Es wird zwischen vier Typen von Prädikaten unterschieden:
1. Prädikate, die Entitäten referenzieren und einen Parameter besitzen
2. Prädikate, die die Existenz von Eigenschaften prüfen und zwei Parameter besitzen
3. Prädikate, die den Wert einer Eigenschaft von einer Entität beschreiben und drei Parameter
besitzen
4. Zusammengesetzte Prädikate
E wird als die Menge aller Entitäten der Taxonomie der Wissensdatenbank (abstrakte Entitäten und
Implementierungen) definiert, P als die Menge aller Eigenschaften und V als die Menge aller Werte,
die die Eigenschaften annehmen können.
Die Namenskonvention für Prädikate wird wie folgt anhand des Beispiels PfooBar definiert: foo gibt
an, ob das Prädikat eine Entität (entity) oder eine Eigenschaft (property) einer Entität beschreibt und
Bar bezeichnet die Relation, die das Prädikat beschreibt (Eq (equals), Gr (greater), Le (less), Ne (not
equal), Req (required), Exc (excluded) und Ex (exists)).
Ein Prädikat, das eine Entität beschreibt, besitzt immer einen Parameter (nämlich die Entität selbst).
PentityReq : E → {TRUE,FALSE} weist jedem Element aus E hierbei einen booleschen Wert zu.
So wird das Prädikat zu TRUE ausgewertet, wenn es sich bei einer Entität um eine Implementierung
handelt oder wenn von einer abstrakten Entität mindestens eine Implementierung abgeleitet wird.
Für alle anderen Entitäten wird PentityReq zu FALSE ausgewertet. Das Prädikat PentityExc stellt die
Negation von PentityReq dar.
Ein Prädikat, das die Existenz einer Eigenschaft von einer Entität prüft, erfordert die zwei Parameter
entity und property. PpropertyEx : E × P → {TRUE,FALSE} weist jedem Element aus E den
Wert TRUE zu, bei dem die ausgewählte Eigenschaft vorhanden ist. Für alle anderen Elemente wird
das Prädikat zu FALSE ausgewertet.
Ein Prädikat, das den Wert einer Eigenschaft von einer Entität beschreibt, erfordert die drei Parameter
entity, property und value. PvalueBar : E × P × V → {TRUE,FALSE} weist jeder Kombination
eines Elementes aus E mit einer Eigenschaft und einem Wert einen booleschen Wert zu. Für alle
Entitäten, welche die Eigenschaft besitzen und die angegebene Relation (Bar) erfüllen wird das
Prädikat zu TRUE ausgewertet. Andererseits findet eine Auswertung zu FALSE statt.
Folgende Prädikate werden definiert:
• PentityReq (Entität notwendig)
• PentityExc = not PentityReq (Entität nicht erlaubt)
• PpropertyEx (Entität besitzt die angegebene Eigenschaft)
41
3. Vorbereitung des Softwarebetriebs aus Entwicklersicht
• PvalueEq (Wert einer Eigenschaft von einer Entität ist gleich dem angegebenen Wert)
• PvalueNe (Wert einer Eigenschaft von einer Entität ist nicht gleich dem angegebenem Wert)
• PvalueGr (Wert einer Eigenschaft von einer Entität ist größer als der angegebene Wert)
• PvalueLe (Wert einer Eigenschaft von einer Entität ist kleiner als der angegebene Wert)
Darüber hinaus werden zwei weitere, zusammengesetzte Prädikate definiert, um eine übersichtlichere
Darstellung zu ermöglichen:
• PvalueEqGr = PvalueEq ∨ PvalueGr (größer oder gleich)
• PvalueEqLe = PvalueEq ∨ PvalueLe (kleiner oder gleich)
Mit Hilfe von Prädikaten lassen sich nun Eigenschaften ausdrücken, die für eine DevOps-Spezifikation
gelten sollen. So könnte z.B. für das Deployment einer Mantis-Installation folgender Ausdruck ver-
wendet werden:
Mantis = PvalueEqGr(′Middleware/Database/Relational/MySQL′,′ versions′,′ 5.0′)
∧ PvalueEqGr(′Middleware/Runtime/PHP ′,′ versions′,′ 5.2.4′)
∧ PentityReq(′Middleware/WebServer′)
Die hier vorgestellten Prädikate verstehen sich als eine erste, initiale Auswahl. Je nach Anforderungen
können weitere Prädikate hinzugefügt oder bestehende entfernt werden.
3.6.3. Programmablauf
Abbildung 3.9 veranschaulicht den vorgeschlagenen Ablauf des Programms. Eine neue DevOps-
Spezifikation dient als Haupteingabe des Verfahrens. Diese enthält entweder noch keine Implementie-
rungen, oder die enthaltene Menge der Implementierungen ist noch unvollständig. Darüber hinaus
enthält die Spezifikation auf Ebene der Aktionen Anforderungen, die erfüllt werden müssen. Sowohl
Implementierungen als auch Anforderungen in der Spezifikation können bearbeitet werden, insbeson-
dere das Löschen von vorhandenen Implementierungen und das Einfügen von neuen Anforderungen
ist möglich. Neben einer Wissensdatenbank für Implementierungen, in der diese in Form einer Taxo-
nomie strukturiert hinterlegt sind, existiert eine zweite Datenbasis mit globalen Einschränkungen.
Anforderungen und Einschränkungen werden, damit eine automatisierte Auswertung erfolgen kann,
mit Hilfe von Prädikaten ausgedrückt. In einem ersten Schritt werden die Anforderungen aus der
Spezifikation mit den globalen Einschränkungen vereinigt. Anhand der resultierenden Prädikate aus
dieser Vereinigung wird nun in einem nächsten Schritt nach einer Menge von Implementierungen in
der Wissensdatenbank gesucht, die alle vorliegenden Prädikate erfüllen. Die Ergebnisse werden dem
Benutzer präsentiert und es muss zwischen zwei Optionen entschieden werden:
1. eine gefundene Implementierung wird in die Spezifikation übernommen
2. eine neue Iteration wird gestartet (mit veränderten Parametern)
42
3.6. Architektur
Menge passender Implementierungenenge passender I ple entierungen
Globale Einschränkungen
Vereinigung der
Anforderungen und
Einschränkungen
Implementierungen
Anforderungen
Wissensdatenbank
Suche nach passenden
Implementierungen
Implementierung
auswählen
Implementierung
einfügen
Neue Iteration
Implementierungen
bearbeiten
Anforderungen
bearbeiten
DevOps-
Spezifikation
Abbildung 3.9.: Programmablauf der vorgeschlagenen Lösung
3.6.4. Auswahlalgorithmus
Anhand der WS-Policy, die als Eingabe für den Algorithmus dient, wird eine Menge von Implementie-
rungen aus der Wissensdatenbank ermittelt, die für eine Übernahme in die DevOps-Spezifikation in
Frage kommen. Hierbei wird für jede policy alternative aus der normalisierten WS-Policy eine Liste
erstellt, die alle Referenzen auf Implementierungen enthält, die den in der Alternative enthaltenen
Zusicherungen entsprechen. Dieses Vorgehen ist notwendig, da sich Zusicherungen in verschiedenen
Alternativen einer WS-Policy widersprechen können und sich somit keine konsistente Menge von Im-
plementierungen erzeugen lassen würde. Die nachfolgenden Schritte werden also in ihrer Gesamtheit
separat für jede vorkommende Alternative der WS-Policy ausgeführt.
1. Ermittlung einer Menge aller Referenzen auf Implementierungen, für die die vorliegenden
Zusicherungen entityReq in der entsprechenden Alternative zu TRUE ausgewertet werden
2. Hinzufügen aller Referenzen auf Implementierungen, die implizit in allen vorliegenden Zusi-
cherungen gefordert werden (Ausnahme: entityExc)
3. Entfernen aller Referenzen auf Implementierungen, für die die Zusicherungen entityExc in der
entsprechenden Alternative zu TRUE ausgewertet werden
43
3. Vorbereitung des Softwarebetriebs aus Entwicklersicht
4. Entfernen aller Referenzen auf Implementierungen, für die die Zusicherungen propertyEx in
der entsprechenden Alternative zu FALSE ausgewertet werden
5. Entfernen aller Referenzen auf Implementierungen, für die die Zusicherungen valueEq, valueNe,
valueGr, valueLe, valueEqGr und valueEqLe in der entsprechenden Alternative zu FALSE ausge-
wertet werden
Die ermittelten i Mengen von Referenzen auf Implementierungen der vorliegenden i Alternativen
der WS-Policy werden nun zu einer resultierenden Menge vereinigt. Sodann kann aus dieser Men-
ge eine Auswahl getroffen werden. Die ausgewählte Implementierung wird nachfolgend aus der
Wissensdatenbank geholt und in die DevOps-Spezifikation übernommen.
3.6.5. Erfüllung der Anforderungen
Die in Abschnitt 3.5 definierten Anforderungen für die Vorbereitung des Softwarebetriebs aus Ent-
wicklersicht werden durch die vorgeschlagenen Konzepte wie folgt erfüllt:
A1 : Der Anwender wird bei der Erstellung von DevOps-Spezifikationen dahingehend unterstützt,
dass die Erstellung der Spezifikation anhand von angegebenen Anforderungen automatisiert
erfolgt. Somit wird die Erstellung von Spezifikationen erleichtert sowie beschleunigt.
A2 : Zu einer DevOps-Spezifikation können durch die Erweiterung von Aktionen durch die beiden
genannten Attribute Anforderungen definiert und ausgewertet werden. Diese können entweder
direkt (inline) in der Spezifikation angegeben werden oder es kann eine Referenz auf ein externes
Dokument hinterlegt werden.
A3 : Wie in Abbildung 3.9 zu sehen ist, wird eine Datenbank eingeführt, in der eine Menge von
globalen Einschränkungen abgelegt werden kann.
A4 : Durch die Definition von Prädikaten (vgl. Unterabschnitt 3.6.2) können sowohl die Anfor-
derungen als auch die Einschränkungen in einer strukturierten Art und Weise formuliert
werden. Darüber hinaus ist eine automatisierte Auswertung dieser Prädikate in boolescher
Logik möglich.
A5 : Das für die Prädikate verwendete Abstraktionslevel ist frei wählbar. Vorgeschlagen werden
Prädikate in Anlehnung an die in der Wissensdatenbank vorhandenen Attribute der Entitäten.
Hierbei kann zum einen auf Existenz von Entitäten und / oder Attributen überprüft werden,
zum anderen können Werte von Attributen ins Verhältnis zu einem übergebenen Referenzwert
gesetzt werden. Die boolesche Auswertung der Prädikate und damit auch die entsprechend
darauf ausgerichtete Formulierung derselben ist hierbei in der Domäne der Softwareentwicklung
auszumachen.
A6 : Durch die Verwendung von Prädikaten, die Werte von Eigenschaften von Entität beschreiben,
können Verbindungen von verschiedenen Entitäten untereinander modelliert werden. So kann
z.B. eine Entität als Alternative zu einer anderen definiert werden oder es kann beschrieben
werden, dass eine Entität eine weitere Entität benötigt um zu funktionieren (wie in dem
vorgestellten Beispielszenario, in dem eine Mantis-Installation das Vorhandensein einer MySQL-
Installation voraussetzt).
44
3.6. Architektur
A7 : Die Ermittlung von passenden Implementierungen aus der Taxonomie erfolgt automatisiert.
Hierfür ist imweiteren Verlauf eine Softwarekomponente zu entwerfen, welche die übergebenen
Prädikate auswertet und entsprechend der Ergebnisse Implementierungen aus der Taxonomie
in der Wissensdatenbank ermittelt und zurückgibt.
A8 : Die Übernahme einer Implementierung aus der Wissensdatenbank in eine DevOps-Spezifikation
erfolgt automatisiert (bzw. halbautomatisiert). Hierfür ist eine Softwarekomponente zu ent-
werfen, welche dem Benutzer passende Implementierungen anzeigt und auf Wunsch an den
entsprechenden Stellen in der DevOps-Spezifikation einfügt.
45
4. Design und Implementierung
In diesem Kapitel wird eine prototypische Implementierung der im vorangegangenen Kapitel 3 vorge-
schlagenen Konzepte entwickelt. Zunächst wird hierfür in Abschnitt 4.1 dasWS-Policy Framework
[VOH+07a] vorgestellt. In Abschnitt 4.2 werden Zusicherungen, die Teil des Frameworks sind, näher
beschrieben. Für die automatisierte Verarbeitung solcher Zusicherungen wird in Abschnitt 4.3 die
Software Apache Neethi [ws.] eingeführt. Danach wird in Abschnitt 4.4 das Design für die prototypi-
sche Implementierung der vorgeschlagenen Konzepte erarbeitet, bevor in Abschnitt 4.5 abschließend
die Funktionsweise der Kommandozeilenschnittstelle erläutert wird.
Implementiert wird die Anwendung als Java-Projekt. Für die Unterstützung beim Build-Prozess
wird auf das Build-Management-Tool [bmt] Apache Maven [mava] zurückgegriffen, mit dessen Hilfe
folgende Abhängigkeiten aufgelöst und automatisch in das Projekt integriert werden:
• Apache Neethi für das Handling von Zusicherungen (siehe Abschnitt 4.3)
• JDOM [jdo] für das Handling von XML-Dokumenten
• JSON.simple [jsoa] für das Handling von JSON-Dokumenten [jsob]
• Maven Artifact [mavb] für das Vergleichen von Versionsnummern
• GSON [gso] für die Formatierung von JSON-Dokumenten
4.1. WS-Policy Framework
Die Verwendung des WS-Policy Frameworks [VOH+07a] als Ausdrucksmittel für die in Kapitel 3
eingeführten Prädikate ermöglicht eine standardisierte und interoperable Spezifizierung von nicht-
funktionalen Eigenschaften und Anforderungen in Form von Richtlinien, die mit Web Services assozi-
iert werden können. Diese Richtlinien sind insbesondere zusammensetzbar und wiederverwendbar,
so dass anstelle einer einzigen, monolithischen Beschreibung des Systems viele Teilbeschreibungen
verwendet werden können. Diese Teilbeschreibungen sind nicht auf die Verwendung in Kombination
mit Web Service Endpoints [wsd] beschränkt, sondern sie können ebenso auch mit XML-Dokumenten
oder beliebigen zustandsbehafteten Ressourcen assoziiert werden. WS-Policy ist explizit darauf ausge-
legt, erweiterbar zu sein und Richtlinien für unterschiedlichste Disziplinen und Domänen ausdrücken
zu können. MitWS-Policy Attachment [wsp] besteht zudem die Möglichkeit, Mengen von assoziierten
WS-Policies flexibel zu verändern (Hinzufügen oder Entfernen von WS-Policies). [WCL+05]
Das WS-Policy Framework definiert ein Framework und Modell, mit dessen Hilfe sich Richtlinien
(policies) für domänenspezifische Fähigkeiten, Anforderungen und Charakteristika für Systeme, die aus
Web Services bestehen, ausdrücken lassen. Servicenutzer und Serviceanbieter haben so die Möglichkeit,
47
4. Design und Implementierung
verschiedene Eigenschaften der entsprechenden Dienste in XML zu formulieren bzw. (automatisiert)
auszuwerten und somit gewisse Richtlinien für den entsprechenden Dienst sicherzustellen. Eine
policy besteht hierbei aus einer Menge von Alternativen (policy alternatives), welche wiederum aus
Mengen von Zusicherungen (policy assertions) und geschachtelten policies bestehen. Eine Zusicherung
beschreibt eine Fähigkeit, eine Anforderung oder eine andere Verhaltenseigenschaft. Sie bezieht sich
entweder auf die zwischen Web Services ausgetauschten Nachrichten (wire manifestation) oder auf
die Auswahl und die Verwendung der Web Services selbst (no wire manifestation). Die Darstellung
einer policy als XML Infoset wird policy expression genannt.
WS-Policy definiert eine einfache Sprache bestehend aus den vier Elementen wsp:Policy, wsp:All,
wsp:ExactlyOne und wsp:PolicyReference sowie den zwei Attributen wsp:Optional und wsp:Ignorable.
Mit wsp:Policy wird eine policy ausgezeichnet. wsp:All zeichnet eine Menge von Zusicherungen aus,
die alle gelten müssen, wohingegen wsp:ExactlyOne eine Menge von Zusicherungen auszeichnet, von
denen genau eine gelten muss. Mit Hilfe von wsp:PolicyReference wird eine policy expression referen-
ziert. wsp:Optional bedeutet, dass die entsprechende Zusicherung nur optional ist und wsp:Ignorable
bedeutet, dass sie ignoriert werden darf. Mit Hilfe von WS-Policy lassen sich also über Mengen
von Zusicherungen Richtlinien erstellen, in denen die Zusicherungen aussagenlogisch miteinander
verknüpft sind. Die einzige Ausnahme hiervon ist die Negation von Ausdrücken, welche mit Sprach-
mitteln von WS-Policy nicht erreicht werden kann. Zu diesem Zweck wurden in der vorliegenden
Arbeit für Prädikate (aus denen die Zusicherungen abgeleitet werden), die negierbar sein müssen,
weitere Prädikate eingeführt, die jeweils die Negation darstellen (z.B. ist entityExc die Negation von
entityReq).
Policies können in Kompaktform oder Normalform vorliegen. In der Kompaktform können alle genann-
ten Elemente und Attribute der Sprache verwendet werden. Sie ist übersichtlicher als die Normalform,
jedoch aufgrund der Unbestimmtheit des strukturellen Aufbaus schlecht für eine automatisierte
Auswertung geeignet. Die Normalform hingegen besitzt einen festgelegten strukturellen Aufbau.
Hier umschließt genau ein ExactlyOne-Operator einen oder mehrere All-Operatoren. Die Attribute
wsp:Optional und wsp:Ignorable kommen nicht vor. Eine policy in Normalform ist im Vergleich zu
einer äquivalenten policy in Kompaktform umfangreicher und unübersichtlicher, jedoch lässt sie
sich gut automatisiert auswerten. Eine policy in Kompaktform kann algorithmisch in Normalform
umgeformt werden. [VOH+07a]
Zur Veranschaulichung des Aufbaus einer policy in Normalform dient Abbildung 4.1. Dargestellt ist
eine policy, die zwei Alternativen beinhaltet. Die erste Alternative besteht aus den Zusicherungen
AssertionA und AssertionB, welche bei Auswahl dieser Alternative beide erfüllt sein müssen. Die
zweite Alternative beinhaltet die Zusicherungen AssertionA und AssertionC, welche bei Auswahl
dieser Alternative beide erfüllt sein müssen. [VOH+07b]
Policy discovery, policy scope, policy subjects und Mechanismen für policy attachment sind nicht
Bestandteil des WS-Policy Frameworks. [VOH+07a]
Das in Abschnitt 4.4 vorgeschlagene Design nutzt nur einen Teil der Funktionalität des WS-Policy
Frameworks. Hierbei findet kein Matching von Serviceanbieter und Servicenutzer anhand der als
WS-Policies formulierten Richtlinien statt, wodurch die Notwendigkeit entfällt, policy intersection
durchzuführen. Stattdessen wird die durch policy model und policy expression definierte Sprache
verwendet, um Anforderungen und Einschränkungen auszudrücken und diese mit Entitäten zu
48
4.2. Policy Assertions
assoziieren. Insbesondere die Verwendung der Kompaktform ermöglicht hierbei eine komfortable
Formulierung von Richtlinien. Diese werden nun mittels Vereinigung zu einer resultierenden Richt-
linie zusammengeführt und anschließend in die leichter automatisiert auswertbare Normalform
überführt.
Policy
Policy
AlternativePolicy
AlternativePolicy
Alternative
Policy Alternative
Policy
AlternativePolicy
AlternativePolicy
AlternativeAssertion
…
…
…
…
…
…
Policy Assertion
QName
Nested Policy
Policy Assertion
Parameters
Abbildung 4.1.:WS-Policy in Normalform [VOH+07b]
4.2. Policy Assertions
Entsprechend der in Kapitel 3 eingeführten Prädikate werden im Folgenden drei verschiedene Arten
von WS-Policy assertions definiert.
Abbildung 4.2 zeigt den schematischen Aufbau einer assertion. Neben einem erforderlichen QNa-
me [xml] kann eine Zusicherung optional geschachtelte policies sowie eine Menge von Pa-
rametern enthalten. Zur Veranschaulichung ist eine policy expression dargestellt, welche die
sp:IssuedToked Policy Assertion verwendet. Diese hat die drei Parameter@sp:IncludeToken, sp:Issuer und
sp:RequestSecurityTokenTemplate. Die Parameter sind bei der Verarbeitung von policies transparent
und werden insbesondere durch die Operationen Normalisieren (normalize), Vereinigen (merge) und
Schneiden (intersect) erhalten. [VOH+07b]
Listing 4.2 am Ende dieses Abschnitts zeigt die XML Schema Definitionen für WS-Policy assertions,
die von den vorliegenden Prädikaten abgeleitet wurden. Die beiden assertions entityReq und enti-
tyExc referenzieren Entitäten und besitzen einen Parameter. Mit Hilfe der assertion entityReq wird
sichergestellt, dass die im Attribut entity angegebene Entität vorhanden ist. Mit Hilfe der assertion
entityExc wird sichergestellt, dass die im Attribut entity angegebene Entität nicht vorhanden ist (Ne-
gation von entityReq). Die assertion propertyEx prüft die Existenz einer Eigenschaft einer Entität und
besitzt zwei Parameter. Mit Hilfe von propertyEx wird geprüft, ob die im Attribut entity angegebene
Entität den im Attribut property angegebene Eigenschaft besitzt. Die vier assertions valueEq, valueNe,
49
4. Design und Implementierung
valueGr und valueLe beschreiben den Wert einer Eigenschaft von einer Entität und besitzten drei
Parameter. Mit valueEq wird für die in Attribut entity übergebene Entität geprüft, ob die im Attribut
property angegebene Eigenschaft dem im Attribut value übergebenen Wert entspricht. valueNe stellt
die Negation von valueEq dar. valueGr prüft für die in Attribut entity übergebene Entität, ob die im
Attribut property angegebene Eigenschaft größer ist als der im Attribut value übergebenen Wert.
valueLe prüft für die in Attribut entity übergebene Entität, ob die im Attribut property angegebene
Eigenschaft kleiner ist als der im Attribut value übergebenen Wert. Die beiden assertions valueEqGr
und valueEqLe prüfen, ob der Wert einer Eigenschaft einer Entität größer gleich bzw. kleiner gleich ist
als der Attribut value übergebene Wert. Mit Ausnahme der Äquivalenz werden die Vergleichsope-
ratoren mittels Maven Artifact ausgewertet. So können neben einfachen Ganzzahlausdrücken auch
Versionsnummern, die entsprechend der Semantic Versioning Specification (SemVer) [sem] aufgebaut
sind, miteinander verglichen werden.
Policy Assertion
QName
Nested Policy
Policy Assertion
Parameters
http://sts.example.com/
urn:oasis:names:tc:SAML:1.0:assertion
http://schemas.xmlsoap.org/ws/2005/02/trust/SymmetricKey
256
Abbildung 4.2.:WS-Policy Assertion [VOH+07b]
Mit Hilfe der definierten assertions lassen sich nun policies erstellen, die für Implementierungen gelten
sollen, die aus der Wissensdatenbank ermittelt werden. Die policies können hierbei eine Vielzahl
50
4.2. Policy Assertions
von assertions enthalten, die ggf. mit Sprachmitteln von WS-Policy aussagenlogisch miteinander
verknüpft sind. Für die automatisierte Auswertung der policies wird, wie im folgenden Abschnitt 4.3
ausgeführt wird, Apache Neethi verwendet, wobei sowohl policies in Normalform als auch policies in
Kompaktform verarbeitet werden können. Listing 4.1 zeigt ein Beispiel für eine policy in Normalform
zur Auswahl von Entitäten aus der Wissensdatenbank. Anhand dieser policy wird die Menge aller
Linux-Implementierungen in x86-Architektur zurückgegeben, ausgenommen jedoch Amazon Linux
AMIs [amab] (Alternative 1) oder es wird ein bestimmtes Ubuntu-Server Amazon Linux AMI in
x64-Architektur zurückgeben (Alternative 2).
Listing 4.1 Beispiel für eine WS-Policy zur Auswahl von Entitäten aus der Wissensdatenbank
51
4. Design und Implementierung
Listing 4.2 XML Schema Definitionen für aus den Prädikaten abgeleitete WS-Policy assertions
52
4.3. Apache Neethi
4.3. Apache Neethi
Apache Neethi ist ein WS-Policy Framework, veröffentlicht unter der Apache 2.0-Lizenz, welches die
aktuellste WS-Policy Framework-Spezifikation aus dem Jahr 2006 implementiert. Anforderungen und
Fähigkeiten von Web Services können mit Hilfe einer komfortablen API formuliert und zur Laufzeit
ausgewertet werden, wodurch die Verwendung von WS-Policy erleichtert wird. Domänenspezifische
Typen können als assertions erweitert werden und assertions können benutzerdefiniert serialisiert
bzw- deserialisiert werden. [ws.]
Mit Hilfe von Apache Neethi kann ein komfortables Handling von policies ausgeführt werden. Für
Objekte vom Typ Policy stehen u.a. die Methoden intersect(), merge(), normalize() und serialize()
zur Verfügung. Objekte, die das Interface Assertion implementieren, bieten ebenfalls Methoden
für Normalisierung und Serialisierung sowie die beiden Attribute optional und ignorable an. Die
OperatorenAll und ExactlyOne stehen in Form von Klassen zur Verfügung und können für den Aufbau
von policy-Alternativen verwendet werden. Darüber hinaus werden Klassen für die Konvertierung
von Streaming API for XML (StAX) [sta] zu Document Object Model (DOM) [dom] und vice versa
angeboten.
Im Folgenden wird nur ein Teil der Funktionalität, die das Apache Neethi Framework zur Ver-
fügung stellt, verwendet. Anforderungen (formuliert als WS-Policy), die für eine Aktion einer
DevOps-Spezifikation gelten, und vorliegende globale Einschränkungen (ebenfalls formuliert als
WS-Policies) sollen gemeinsam und in strukturierter Art und Weise ausgewertet werden können.
Hierfür werden zunächst alle policies zu einer äquivalenten resultierenden policy vereinigt (ver-
wendete Funktion: Policy.merge(Policy policy)), so dass sich die weitere Auswertung auf ein
einzelnes Dokument beschränkt. Da die einzelnen eingegebenen policies sowie die resultierende
policy in Kompaktform vorliegen können, wird die resultierende policy normalisiert (verwendete
Funktion: normalize(PolicyRegistry reg, boolean deep). Somit liegen alle assertions struk-
turiert in Form einer Konjunktion von Disjunktionen vor (Normalform), die im weiteren Verlauf
automatisiert verarbeitet werden können.
Von der Möglichkeit assertions, policy alternatives und policies softwareunterstützt zu erstellen bzw.
zu bearbeiten wird nicht Gebrauch gemacht, da dies nicht Teil der vorliegenden Arbeit ist. Hier wäre
eine weitere Integration von Apache Neethi mit der vorliegenden Arbeit zu einem späteren Zeitpunkt
denkbar. Die Funktionen für policy intersection werden ebenfalls nicht verwendet, da diese aufgrund
des vorgestellten Programmablaufs im folgenden Abschnitt 4.4 nicht benötigt werden.
4.4. Prototyp
In diesem Absatz wird das Design für eine prototypische Implementierung der vorgeschlagenen Kon-
zepte für die Vorbereitung des Softwarebetriebs aus Entwicklersicht vorgestellt. Zunächst wird der in
Unterabschnitt 3.6.3 vorgeschlagene Programmablauf um einige implementierungsspezifische Details
erweitert. Im Anschluss werden Aktivitäten identifiziert, die bei Interaktionen mit dem Programm
stattfinden. Die gewonnenen Erkenntnisse werden sodann genutzt, um ein UML-Klassendiagramm
53
4. Design und Implementierung
der zu implementierenden Anwendung zu erstellen. Abschließend wird die Kommunikation der
instanziierten Klassen untereinander mit Hilfe eines UML-Sequenzdiagramms modelliert.
4.4.1. Programmablauf
Globale Einschränkungen
(WS-Policies)
MergeAndNormalize:
Vereinigung und Normalisierung
(mit Hilfe von Apache Neethi)
Wissensdatenbank
(Topologie in XML)
KB-Integrator:
Ermittlung von DevOps-
Entitäten aus Wissensdatenbank
policyli
policiesli i
policyli
Referenzen auf passende Implementierungeneferenzen auf passende I ple entierungen
Implementierungen
Anforderungen
(WS-Policies)
Implementierungen
bearbeiten
Anforderungen
bearbeiten
DevOps-
Spezifikation
(.json)
Implementierung
auswählen
Implementierung
einfügen
Neue Iteration
Abbildung 4.3.: Programmablauf der vorgeschlagenen Implementierung
Abbildung 4.3 zeigt, wie die unterschiedlichen Komponenten des Systems zusammenhängen. Ein-
und Ausgabe der Anwendung ist eine DevOps-Spezifikation in der JavaScript Object Notation (JSON)
[jsob] mit den zwei je Aktion enthaltenen Feldern Anforderungen, die als WS-Policies formuliert
werden, sowie Implementierung. Der Zugriff auf die Spezifikation erfolgt über die Komponente De-
vOpsSpecHandling, welche Implementierungen und Anforderungen aus der Spezifikation auslesen
sowie einfügen (und löschen) kann. Es existiert eine Datenbasis, in der eine Menge von global defi-
nierten Einschränkungen gespeichert ist. Die Einschränkungen sind, genauso wie die Anforderungen,
als WS-Policies formuliert, so dass mit Hilfe der Komponente MergeAndNormalize durch Vereinigung
und Normalisierung aller vorliegenden Anforderungen und Einschränkungen, eine resultierende
54
4.4. Prototyp
WS-Policy generiert werden kann. In einer weiteren Datenbank steht eine mittels XML strukturierte
Topologie von Implementierungen zur Verfügung. Die Komponente KnowledgeBaseIntegrator er-
mittelt anhand der im vorangegangenen Schritt erstellten WS-Policy passende DevOps-Entitäten
aus der Datenbank. Hierbei entsteht eine Mengen von Referenzen auf Implementierungen, da die
Erfüllung aller Anforderungen und Einschränkungen i.A. durch viele verschiedene Kombinationen
von Implementierungen erreicht werden kann. Anhand der Ergebnisse kann nun entschieden werden,
ob eine Implementierung in die Spezifikation übernommen wird oder ob eine neue Iteration mit
veränderten Anforderungen gestartet wird.
4.4.2. Aktivitäten
Anhand des in Unterabschnitt 4.4.1 vorgestellten Programmablaufs lassen sich Aktivitäten festlegen,
die die grundlegenden Funktionalitäten der zu implementierenden Anwendung bilden. Sie beste-
hen jeweils aus verschiedenen Mengen von elementaren Aktionen, die miteinander vernetzt sind
(Datenfluss oder Kontrollfluss). Die sieben definierten Aktivitäten sind:
• Lesen von Anforderungen aus einer Spezifikation
• Einfügen von Anforderungen in eine Spezifikation (vorhandene Anforderungen werden über-
schrieben)
• Löschen von Anforderungen aus einer Spezifikation
• Lesen einer Implementierung aus einer Spezifikation
• Einfügen einer Implementierung in eine Spezifikation (vorhandene Implementierung wird
überschrieben)
• Löschen einer Implementierung aus einer Spezifikation
• Ermitteln von Implementierungen aus der Wissensdatenbank
Die Aktivitäten Anforderungen / Implementierung Bearbeiten (bzw. Aktualisieren) werden an dieser
Stelle nicht spezifiziert, da sie durch die beiden Aktivitäten Lesen von Anforderungen / einer Imple-
mentierung aus einer Spezifikation und Einfügen von Anforderungen / einer Implementierung in eine
Spezifikation und einer manuellen Bearbeitung bzw. Aktualisierung zwischen den beiden Aktivitäten
bereits abgedeckt sind.
Das Lesen von Anforderungen aus einer Spezifikation besteht aus den Aktionen DevOps-Spezifikation
wählen, Operation und Aktion wählen und Anforderungen aus Spezifikation auslesen.
Das Einfügen von Anforderungen in eine Spezifikation umfasst die Aktionen DevOps-Spezifikation wäh-
len, Einzufügende Anforderungen wählen (WS-Policy), Operation und Aktion wählen und Anforderungen
in Spezifikation einfügen in der angegebenen Reihenfolge. Anforderungen, die an der entsprechenden
Stelle in der Spezifikation enthalten sind, werden überschrieben. Beim Einfügen von Anforderungen
in eine Spezifikation wird auch der zugehörige resolver festgelegt und in die DevOps-Spezifikation
eingefügt.
55
4. Design und Implementierung
Das Löschen von Anforderungen aus einer Spezifikation umfasst die Aktionen DevOps-Spezifikation
wählen, Operation und Aktion wählen und Anforderungen aus Spezifikation löschen in der angegebenen
Reihenfolge. Hierbei wird auch der zugehörige resolver gelöscht.
Das Lesen einer Implementierung aus einer Spezifikation besteht aus den Aktionen DevOps-Spezifikation
wählen, Operation und Aktion wählen und Implementierung aus Spezifikation auslesen.
Das Einfügen einer Implementierung in eine Spezifikation umfasst die Aktionen DevOps-Spezifikation
wählen, Einzufügende Implementierung wählen, Operation und Aktion wählen und Implementierung in
Spezifikation einfügen in der angegebenen Reihenfolge. Eine Implementierung, die an der entspre-
chenden Stelle in der Spezifikation enthalten ist, wird überschrieben. Beim Einfügen einer Implemen-
tierung in eine Spezifikation wird auch der zugehörige runner sowie ein comment festgelegt und in
die DevOps-Spezifikation eingefügt.
Das Löschen einer Implementierung aus einer Spezifikation umfasst die Aktionen DevOps-Spezifikation
wählen, Operation und Aktion wählen und Implementierung aus Spezifikation entfernen in der angege-
benen Reihenfolge.
Das Ermitteln von Implementierungen aus der Wissensdatenbank umfasst die AktionenWissensdaten-
bank wählen, Anforderungen aus Spezifikation extrahieren (WS-Policy) und parallel dazu Einschrän-
kungen aus Datenbasis holen (WS-Policies), Vereinigung und Normalisierung der vorliegenden policies,
Passende Implementierungen aus der Wissensdatenbank ermitteln und Implementierung auswählen
in der angegebenen Reihenfolge. Diese Aktivität stellt die Kernfunktionalität der Anwendung dar
und ist im Vergleich zu den anderen drei Aktivitäten aufwendiger zu implementieren. Insbesondere
auf die Aktion Passende Implementierungen aus der Wissensdatenbank ermitteln wurde bereits in
Abschnitt 3.6.4 näher eingegangen.
Zur Veranschaulichung finden sich imAnhang für die genanntenAktivitäten UML-Aktivitätsdiagramme
in den Abbildungen A.1 bis A.7.
4.4.3. Klassendiagramm
Abbildung 4.4 zeigt das Klassendiagramm für die prototypische Implementierung entsprechend dem
vorgestellten Design.
Master Die KlasseMaster dient als Einstiegspunkt für das Programm und stellt die komplette Funktio-
nalität an der Kommandozeilenschnittstelle zur Verfügung (siehe Abschnitt 4.5). Hierfür werden in der
einzigen enthaltenen Methodemain() die beim Programmstart übergebenen Argumente angenommen
und ausgewertet. Je nach Bedarf wird ein Objekt der Klasse DevOpsSpecHandling oder der Klasse
KnowledgeBaseHandling mittels Aggregation eingebunden und verwendet.
DevOpsSpecHandling
Die Klasse DevOpsSpecHandling stellt alle Funktionen zur Verfügung, die für die Bearbeitung einer
Aktion in einer DevOps-Spezifikation notwendig sind. Hierfür werden die Klassen KnowledgeBa-
seHandling, GSON und json.simple mittels Aggregation eingebunden. Die Methode getRequirements-
FromSpec() ermittelt alle vorliegenden Anforderungen für die entsprechende Aktion und gibt diese als
WS-Policy in Form eines Strings in XML-Format zurück. Über die Methode addRequirementsToSpec()
56
4.4. Prototyp
werden neue Anforderungen in die entsprechende Aktion eingetragen. Mittels deleteRequirements-
FromSpec() werden die Attribute requirements und resolver aus der entsprechenden Aktion entfernt.
Die Methode getImplementationFromSpec() ermittelt die vorliegende Implementierung der Aktion
und gibt diese in Form eines Strings in XML-Format zurück. Die Methode addImplementationToSpec()
fügt der Aktion eine Implementierung hinzu. An dieser Stelle wird dann im Programmablauf die
tatsächliche Implementierung aus der Wissensdatenbank ermittelt und in die Spezifikation eingefügt
(mit Hilfe der Methode getImplementationByName() der Klasse KnowledgeBaseHandling). Die Metho-
de deleteImplementationFromSpec() löscht die in der Spezifikation hinterlegte Implementierung der
Aktion.
Abbildung 4.4.: Klassendiagramm der vorgeschlagenen Implementierung
MergeAndNormalize
Die Klasse MergeAndNormalize stellt alle Funktionen zur Verfügung, die für die Vereinigung der
57
4. Design und Implementierung
Anforderungen und Einschränkungen wichtig sind. Hierfür wird die Klasse Apache Neethi mittels
Aggregation eingebunden. Die Methode merge() vereinigt eine als Parameter übergebene WS-Policy
(Anforderungen aus der Spezifikation) mit den globalen Einschränkungen , die als Menge von WS-
Policies in Form von XML-Dateien in einem Ordner vorliegen. Alle WS-Policies, die sich in dem
angegebenen Ordner befinden, werden als Einschränkungen in die resultierende WS-Policy übernom-
men. Die Methode normalize() normalisiert eine WS-Policy.
KnowledgeBaseHandling
Die Klasse KnowledgeBaseHandling stellt alle Funktionen zur Verfügung, die für die Handhabung
der Wissensdatenbank wichtig sind. Hierfür werden die Klassen Apache Neethi, Maven Artifact
und JDOM mittels Aggregation eingebunden. Die Methode getImplementationsByPolicy() ermittelt
eine Menge von möglichen Implementierungen, die die zuvor ermittelte WS-Policy erfüllen. Die
Methode getImplementationByName() hingegen ermittelt eine Implementierung, welche anhand des
eindeutigen Namens in der Topologie identifiziert wird. Beide Methoden erwarten als erstes Argument
(knowledgeBase) eine Referenz auf die zu verwendende Wissensdatenbank, die als XML-Dokument
vorliegen muss.
4.4.4. Sequenzdiagramm
Das UML-Sequenzdiagramm in Abbildung 4.5 zeigt die Interaktionen der Instanzen der zuvor be-
schriebenen Klassen für die Ermittlung von passenden Implementierungen aus der Wissensdatenbank
sowie des anschließenden Einfügens einer Implementierung in eine DevOps-Spezifikation. Das Objekt
Master dient der Integration der weiteren Objekte und stellt die Programmfunktionalität in Form
eines Kommandozeilenprogramms bereit. Zu Beginn werden die gewählten Anforderungen aus der
Spezifikation ermittelt (DevOpsSpecHandling.getRequirementsFromSpec()), welche in Form einer WS-
Policy zurückgegeben werden und im nächsten Schritt mit den WS-Policies aus der Datenbasis für
die globalen Einschränkungen im Objekt MergeAndNormalize vereinigt werden. Das Ergebnis dieses
Schrittes wird dann mittels MergeAndNormalize.normalize() in die Normalform gebracht, so dass an-
schließend mittels der Methode KnowledgeBaseHandling.getImplementationsByPolicy() eine Liste von
(Referenzen auf) Implementierungen ermittelt werden kann, die allen vorliegenden Anforderungen
und Einschränkungen genügen. Die Auswahl einer dieser Implementierungen wird schließlich mittels
der Methode DevOpsSpecHandling.addImplementationToSpec() in die Spezifikation eingefügt.
An den mit den Ziffern 1 und 2 gekennzeichneten Stellen findet jeweils eine Benutzerinteraktion
statt. An der Stelle 1 wird die Aktivität Ermitteln von Implementierungen aus der Wissensdatenbank
ausgeführt. An der Stelle 2 wird schließlich eine der zuvor ermittelten Implementierungen ausgewählt,
die im Anschluss in die Spezifikation eingefügt wird (Aktivität Einfügen einer Implementierung in eine
Spezifikation.
58
4.4. Prototyp
Master DevOpsSpecHandling MergeAndNormalize
getRequirementsFromSpec()
WS-Policy
merge()
WS-Policy
normalize()
WS-Policy
KnowledgeBaseHandling
getImplementationsByPolicy()
Implementations
addImplementationToSpec()
1
2
Abbildung 4.5.: Sequenzdiagramm: Ermitteln und einfügen einer Implementierung
59
4. Design und Implementierung
4.5. Kommandozeilenschnittstelle
Für den Benutzer der Anwendung wird ein ausführbares, zustandsloses Java Archive File [jar]
bereitgestellt, das die angebotenen Funktionen für den Benutzer an einer Kommandozeile ver-
wendbar macht. Ein Aufruf der Anwendung an einer Unix-Shell findet mit dem Befehl java -jar
applicationName.jar [FUNKTION] [ARGUMENT]... statt.
Die übergebenen Argumente bestehen aus dem Namen der Programmfunktion ([FUNKTION]), die
verwendet werden soll, sowie einer Menge von weiteren Argumenten ([ARGUMENT]...), die an
die angegebene Funktion übergeben werden. Die Rückgabewerte aller Funktionen werden an die
Kommandozeile zurück geleitet.
Die folgenden Funktionen stehen dem Benutzer zur Verfügung (entsprechend den in Unterab-
schnitt 4.4.2 definierten Aktivitäten).
getRequirementsFromSpec
Auslesen von Anforderungen aus einer Spezifikation
Argument 0: Spezifikation, die bearbeitet wird (absoluter oder relativer
Dateipfad zu einer Spezifikationsdatei in JSON-Format)
Argument 1: Operation, die bearbeitet wird
Argument 2: Aktion, die bearbeitet wird
Beispiel: java -jar applicationName.jar getRequirementsFromSpec
/home/user1/spec.json build mantis
insertRequirementsIntoSpec
Einfügen von Anforderungen in eine Spezifikation
Argument 0: Spezifikation, die bearbeitet wird (absoluter oder relativer
Dateipfad zu einer Spezifikationsdatei in JSON-Format)
Argument 1: Operation, die bearbeitet wird
Argument 2: Aktion, die bearbeitet wird
Argument 3: Einzufügende Anforderungen (absoluter oder relativer Dateipfad
zu einer WS-Policy-Datei in XML-Format)
Beispiel: java -jar applicationName.jar insertRequirementsIntoSpec
/home/user1/spec.json build mantis /home/user1/requirements.xml
deleteRequirementFromSpec
Entfernen von Anforderungen aus einer Spezifikation
Argument 0: Spezifikation, die bearbeitet wird (absoluter oder relativer
Dateipfad zu einer Spezifikationsdatei in JSON-Format)
Argument 1: Operation, die bearbeitet wird
Argument 2: Aktion, die bearbeitet wird
Beispiel: java -jar applicationName.jar deleteRequirementFromSpec
/home/user1/spec.json build mantis
(macht die Ausführung des vorangegangenen Beispiels rückgängig)
60
4.5. Kommandozeilenschnittstelle
getImplementationFromSpec
Auslesen einer Implementierung aus einer Spezifikation
Argument 0: Spezifikation, die bearbeitet wird (absoluter oder relativer
Dateipfad zu einer Spezifikationsdatei in JSON-Format)
Argument 1: Operation, die bearbeitet wird
Argument 2: Aktion, die bearbeitet wird
Beispiel: java -jar applicationName.jar getImplementationFromSpec
/home/user1/spec.json deploy deploy-linux
insertImplementationIntoSpec
Einfügen einer Anforderung in eine Spezifikation
Argument 0: Spezifikation, die bearbeitet wird (absoluter oder relativer
Dateipfad zu einer Spezifikationsdatei in JSON-Format)
Argument 1: Operation, die bearbeitet wird
Argument 2: Aktion, die bearbeitet wird
Argument 3: Name der einzufügenden Implementierung
Beispiel: java -jar applicationName.jar insertImplementationIntoSpec
/home/user1/spec.json deploy deploy-linux
”Infrastructure/Operating System/Linux/RedHat/Red Hat Enterprise
Linux 7.0 AMI HVM 64-bit US East”
deleteImplementationFromSpec
Entfernen einer Implementierung aus einer Spezifikation
Argument 0: Spezifikation, die bearbeitet wird (absoluter oder relativer
Dateipfad zu einer Spezifikationsdatei in JSON-Format)
Argument 1: Operation, die bearbeitet wird
Argument 2: Aktion, die bearbeitet wird
Beispiel: java -jar applicationName.jar deleteImplementationFromSpec
/home/user1/spec.json deploy deploy-linux
(macht die Ausführung des vorangegangenen Beispiels rückgängig)
61
4. Design und Implementierung
getImplementationsFromKB
Ermittlung von Implementierungen aus der Wissensdatenbank entsprechend den gegebenen Anfor-
derungen und Einschränkungen
Argument 0: Spezifikation, die bearbeitet wird (absoluter oder relativer
Dateipfad zu einer Spezifikationsdatei in JSON-Format)
Argument 1: Operation, die bearbeitet wird
Argument 2: Aktion, die bearbeitet wird
Argument 3: Maximalwert für Anzahl der ermittelten Implementierungen (Integer)
Argument 4: Wissensdatenbank, in der Implementierungen in Form einer Topologie
hinterlegt sind (absoluter oder relativer Dateipfad zu einer
Wissensdatenbank in XML-Format)
Argument 5: Globale Einschränkungen (absoluter oder relativer Dateipfad
zu einem Dateiordner, der eine Menge von WS-Policy-Dateien
in XML-Format enthält)
Beispiel: java -jar applicationName.jar getImplementationsFromKB
/home/user1/spec.json deploy deploy-linux
3 /home/user1/kb.xml /home/user1/constraints
Ein beispielhafter Ablauf könnte wie folgt aussehen: Zunächst wird festgelegt, welche Operation
und Aktion einer DevOps-Spezifikation bearbeitet wird (diese Angaben werden unverändert allen
aufgerufenen Funktionen als Argument 0 bis 2 übergeben). Mittels getRequirementsFromSpec kann
nun inspiziert werden, welche Anforderungen für die entsprechende Aktion hinterlegt sind. Mit der
Funktion insertRequirementsIntoSpec werden der Aktion neue Anforderungen hinzugefügt, die als
WS-Policy in Form einer XML-Datei vorliegen und als Argument 3 übergeben werden. Nun wird über
getImplementationsFromKB eine Menge von passenden Implementierungen, die den vorliegenden
Anforderungen und Einschränkungen entsprechen, aus der Wissensdatenbank ermittelt. Hierbei wird
mit Argument 3 die Anzahl der zurückgegebenen Implementierungen begrenzt. Mit den Argumenten 4
und 5 werden die zu verwendendeWissensdatenbank (XML-Datei) und die globalen Einschränkungen
(Menge von XML-Dateien) festgelegt. Die Ergebnisse der Funktion werden an der Kommandozeile als
Referenzen auf Implementierungen in der Wissensdatenbank angezeigt. Im einem abschließenden
Schritt kann nun mit Hilfe der Funktion insertImplementationIntoSpec eine der zuvor ermittelten
Implementierungen in die aktuell bearbeitete Aktion eingefügt werden.
62
5. Evaluation
In diesem Abschnitt wird die vorgestellte prototypische Implementierung anhand von drei Einsatz-
szenarien evaluiert. Als Eingaben werden drei verschiedene DevOps-Spezifikationen zur Verfügung
gestellt (specificationLinux.json, specificationMantis.json und specificationRedmine.json), welche jeweils
ausschließlich die Operation deploy beinhalten. Diese Operation wiederum beinhaltet unterschiedli-
che Aktionen, für die im weiteren Verlauf entsprechende Implementierungen aus der vorliegenden
Wissensdatenbank ermittelt werden. Für jede dieser Aktionen stehen zudem Anforderungen und
globale Einschränkungen (in den Szenarien 1.3 und 1.4) bereit.
In einem ersten Schritt werden pro Szenario die Anforderungen an die entsprechenden Stellen in die
Spezifikation eingefügt. Im Anschluss werden diese automatisiert ausgewertet und mit den vorliegen-
den globalen Einschränkungen abgeglichen, so dass eine Auswahl von passenden Implementierungen
aus der Wissensdatenbank ermöglicht wird. Abschließend wird jeweils eine der in Frage kommenden
Implementierungen in die aktuell bearbeitete Aktion eingefügt.
Szenario 1 (Linux)
In Szenario 1 wird eine Linux-Implementierung (Ubuntu) aus der Wissensdatenbank ermittelt. Hierbei
wird die Anforderung gestellt, dass das Betriebssystem eine 64-Bit-Prozessorarchitektur unterstützt,
sofern eine entsprechende Implementierung in der Wissensdatenbank vorhanden ist (wsp:Ignorable).
Anhand der WS-Policy in Listing 5.1 wird diese Anforderung definiert.
Listing 5.1WS-Policy für Anforderungen an Szenario 1
Um zu zeigen, dass die Auswahl der Implementierung korrekt funktioniert, werden die verwendete
Wissensdatenbank sowie die verwendeten globalen Einschränkungen schrittweise verändert, wodurch
vier verschiedene Subszenarien simuliert werden:
1. 64-Bit-Architektur in Wissensdatenbank vorhanden + keine globale Einschränkungen
2. 64-Bit-Architektur nicht in Wissensdatenbank vorhanden + keine globale Einschränkungen
63
5. Evaluation
3. 64-Bit-Architektur in Wissensdatenbank vorhanden + globale Einschränkung auf 64-Bit-
Architekturen für Betriebssysteme
4. 64-Bit-Architektur nicht in Wissensdatenbank vorhanden + globale Einschränkung auf 64-Bit-
Architekturen für Betriebssysteme
Listing 5.2 zeigt die WS-Policy für globalen Einschränkung auf 64-Bit-Architekturen für Betriebssys-
teme.
Listing 5.2WS-Policy für globale Einschränkungen auf 64-Bit-Architekturen für Betriebssysteme für
Szenario 1.3 und 1.4
Als Eingabe für Szenario 1 dient die in Listing 5.3 gezeigte Spezifikation. Die Operation deploy enthält
die Aktion deploy-linux, welche weder Anforderungen noch eine Implementierung enthält.
Listing 5.3 DevOps-Spezifikation für Szenario 1
[{
"author": "Sebastian Kiesewetter",
"description": "Evaluation Szenario 1 (Linux)",
"name": "linux",
"operations": {
"deploy": {
"artifacts": {
"deploy-linux": {}
}
}
}
}]
In der Wissensdatenbank liegen unterschiedliche Linux-Implementierungen mit einer 64-Bit-
Architektur vor. Die (manuelle) Auswahl einer Alternative aus den ermittelten passenden Imple-
mentierungen wird an dieser Stelle auf Ubuntu Server 14.04 AMI PV 64-bit US East festegelegt. Die
resultierende Spezifikation für Szenario 1.1 ist in Listing 5.4 dargestellt (die requirements sind aus
Gründen der Übersichtlichkeit gekürzt dargestellt).
64
Listing 5.4 Resultierende DevOps-Spezifikation für Szenario 1.1
[{
"author": "Sebastian Kiesewetter",
"description": "Evaluation Szenario 1 (Linux)",
"name": "linux",
"operations": {
"deploy": {
"artifacts": {
"deploy-linux": {
"runner": "AMI_Provisioner",
"config": {
"name": "Ubuntu Server 14.04 AMI PV 64-bit US East",
"ami_id": "ami-018c9568",
"version": "14.04",
"aws_region": "us-east-1"
},
"comment": "auto-resolved at 2014-09-01 using WS-Policy",
"resolver": "WS-Policy",
"requirements": ""
}
}
}
}
}]
Für Szenario 1.2 kann keine Implementierung mit einer 64-Bit-Architektur aus der Wissensdatenbank
ermittelt werden, so dass ersatzweise Implementierungen mit einer 32-Bit-Architektur ermittelt
werden (manuelle Auswahl einer Alternative: Ubuntu Server 14.04 AMI PV 32-bit US East). Die resultie-
rende Spezifikation für Szenario 1.2 ist in Listing 5.10 dargestellt (die requirements sind aus Gründen
der Übersichtlichkeit gekürzt dargestellt).
65
5. Evaluation
Listing 5.5 Resultierende DevOps-Spezifikation für Szenario 1.2
[{
"author": "Sebastian Kiesewetter",
"description": "Evaluation Szenario 1 (Linux)",
"name": "linux",
"operations": {
"deploy": {
"artifacts": {
"deploy-linux": {
"runner": "AMI_Provisioner",
"config": {
"name": "Ubuntu Server 14.04 AMI PV 32-bit US East",
"ami_id": "ami-358c955c",
"version": "14.04",
"aws_region": "us-east-1"
},
"comment": "auto-resolved at 2014-09-01 using WS-Policy-Resolver",
"resolver": "WS-Policy",
"requirements": ""
}
}
}
}
}]
Die resultierende Spezifikation für Szenario 1.3 entspricht der resultierenden Spezifikation von
Szenario 1.1 und wird daher an dieser Stelle nicht noch einmal dargestellt.
Für Szenario 1.4 lässt sich keine passende Implementierung aus der Wissensdatenbank ermitteln, da
die globalen Anforderungen eine 64-Bit-Architektur erforderlich machen, die jedoch in der Wissens-
datenbank nicht vorhanden ist.
Szenario 2 (Mantis)
In Szenario 2werden Implementierungen vonMiddlewarekomponenten für eine DevOps-Spezifikation
aus der Wissensdatenbank ermittelt, die für die Installation des Bugtracking Systems Mantis notwen-
dig sind. Ausgewählt wird ein Webserver, eine Laufzeitumgebung sowie eine Datenbank (siehe
Abbildung 3.7). Globale Einschränkungen liegen in diesem Szenario nicht vor.
Listing 5.6 zeigt die WS-Policy für die Anforderung, dass ein Webserver vorhanden ist. Hierfür wird
der Apache HTTP Server explizit ausgewählt.
66
Listing 5.6WS-Policy für Anforderungen an Szenario 2 (Webserver)
Listing 5.7 zeigt die WS-Policy für die Anforderung, dass eine PHP-Laufzeitumgebung vorhanden ist.
Im weiteren Verlauf wird hierzu die Implementierung PHP Application Chef Cookbook ausgewählt.
Listing 5.7WS-Policy für Anforderungen an Szenario 2 (Laufzeitumgebung)
Listing 5.8 zeigt die WS-Policy für die Anforderung, dass eine Datenbank vorhanden ist. Laut Doku-
mentation arbeitet Mantis unter anderem mit einer MySQL-Datenbank ab Version 5.0 oder mit einer
PostgreSQL-Datenbank ab Version 8.0 zusammen. Die beiden genannten Möglichkeiten werden in der
WS-Policy in zwei separaten Alternativen ausgedrückt. Da mit der vorliegenden Wissensdatenbank
beide Alternativen bedient werden können, wird eine Liste mit passenden Implementierungen für
beide Alternativen zurückgegeben, aus denen dann im weiteren Programmablauf die AuswahlMySQL
Server 5.x Chef Cookbook getroffen wird.
Listing 5.8WS-Policy für Anforderungen an Szenario 2 (Datenbank)
67
5. Evaluation
Als Eingabe für Szenario 2 dient die in Listing 5.9 gezeigte Spezifikation. Die Operation deploy enthält
die Aktionen deploy-webserver, deploy-runtime und deploy-database, welche weder Anforderungen
noch Implementierungen enthalten.
Listing 5.9 DevOps-Spezifikation für Szenario 2
[{
"author": "Sebastian Kiesewetter",
"description": "Evaluation Szenario 2 (Mantis)",
"name": "mantis",
"operations": {
"deploy": {
"artifacts": {
"deploy-webserver": {},
"deploy-runtime": {},
"deploy-database": {}
}
}
}
}]
Eine resultierende Spezifikation für Szenario 2, abhängig von den ausgewählten Implementierungen,
ist in Listing 5.10 dargestellt (requirements und resolver sind aus Gründen der Übersichtlichkeit nicht
dargestellt). Die Aktion deploy-os-for-webserver wurde automatisch aufgrund der Eigenschaft hos-
ted_on_one_of mit dem Wert Infrastructure/OS/Linux/Ubuntu des eingefügten Apache Chef Cookbooks
erstellt.
68
Listing 5.10 Resultierende DevOps-Spezifikation für Szenario 2
[{
"author": "Sebastian Kiesewetter",
"description": "Evaluation Szenario 2 (Mantis)",
"name": "mantis",
"operations": {
"deploy": {
"artifacts": {
"deploy-webserver": {
"runner": "Chef Cookbook Deployer",
"config": {
"name": "Apache Chef Cookbook",
"hosted_on_one_of": "Infrastructure/OS/Linux/Ubuntu",
},
"comment": "auto-resolved at 2014-09-01 using WS-Policy"
},
"deploy-os-for-webserver": {
"runner": "AMI_Provisioner",
"config": {
"name": "Ubuntu Server 14.04 AMI PV 64-bit US East",
"ami_id": "ami-018c9568",
"version": "14.04",
"aws_region": "us-east-1"
},
"comment": "auto-resolved at 2014-09-01 using WS-Policy"
}
"deploy-runtime": {
"runner": "Chef Cookbook Deployer",
"config": {
"name": "PHP Application Chef Cookbook",
"hosted_on_one_of": "Infrastructure/OS/Linux/Ubuntu",
},
"comment": "auto-resolved at 2014-09-01 using WS-Policy"
},
"deploy-database": {
"runner": "Chef Cookbook Deployer",
"config": {
"name": "MySQL Server 5.x Chef Cookbook",
"hosted_on_one_of": "Infrastructure/OS/Linux/Ubuntu",
"repository_url": "https://github.com/opscode-cookbooks/mysql.git",
"repository_type": "git",
"package_url": "http://s3.amazonaws.com/community-files.opscode.com/
cookbook_versions/tarballs/6758/original/
mysql20140519-29446-71fpvg.?1400550644",
"version": "5.0"
},
"comment": "auto-resolved at 2014-09-01 using WS-Policy"
}
}
}
}
}]
69
5. Evaluation
Szenario 3 (Redmine)
In Szenario 3werden Implementierungen vonMiddlewarekomponenten für eine DevOps-Spezifikation
aus der Wissensdatenbank ermittelt, die für die Installation des Project Management-Werkzeugs
Redmine notwendig sind. Ausgewählt wird eine Laufzeitumgebung sowie eine Datenbank. Globale
Einschränkungen liegen in diesem Szenario nicht vor.
Listing 5.11 zeigt die WS-Policy für die Anforderung, dass eine Ruby-Laufzeitumgebung vorhanden
ist.
Listing 5.11WS-Policy für Anforderungen an Szenario 3 (Laufzeitumgebung)
Listing 5.12 zeigt die WS-Policy für die Anforderung, dass eine Datenbank vorhanden ist. Laut Doku-
mentation arbeitet Redmine unter anderem mit einer MySQL-Datenbank ab Version 5.0 oder mit einer
PostgreSQL-Datenbank ab Version 8.2 zusammen. Die genannten beiden Möglichkeiten werden in der
WS-Policy in zwei separaten Alternativen ausgedrückt. Da mit der vorliegenden Wissensdatenbank
beide Alternativen bedient werden können, wird eine Liste mit passenden Implementierungen für
beide Alternativen zurückgegeben, aus denen dann im weiteren Programmablauf die Auswahl Postgres
Juju Charm getroffen wird.
Listing 5.12WS-Policy für Anforderungen an Szenario 3 (Datenbank)
Als Eingabe für Szenario 3 dient die in Listing 5.13 gezeigte Spezifikation. Die Operation deploy enthält
die Aktionen deploy-runtime und deploy-database, welche weder Anforderungen noch Implementie-
rungen enthalten.
70
Listing 5.13 DevOps-Spezifikation für Szenario 3
[{
"author": "Sebastian Kiesewetter",
"description": "Evaluation Szenario 3 (Redmine)",
"name": "redmine",
"operations": {
"deploy": {
"artifacts": {
"deploy-runtime": {},
"deploy-database": {}
}
}
}
}]
Eine resultierende Spezifikation für Szenario 3, abhängig von den ausgewählten Implementierungen
bei jeweils mehreren Alternativen, ist in Listing 5.14 dargestellt (die requirements sind aus Gründen
der Übersichtlichkeit gekürzt dargestellt).
71
5. Evaluation
Listing 5.14 Resultierende DevOps-Spezifikation für Szenario 3
[{
"author": "Sebastian Kiesewetter",
"description": "Evaluation Szenario 3 (Redmine)",
"name": "redmine",
"operations": {
"deploy": {
"artifacts": {
"deploy-runtime": {
"runner": "Chef Cookbook Deployer",
"config": {
"name": "Ruby Application Chef Cookbook",
"hosted_on_one_of": "Infrastructure/OS/Linux/Ubuntu",
},
"comment": "auto-resolved at 2014-09-01 using WS-Policy",
"resolver": "WS-Policy",
"requirements": ""
},
"deploy-database": {
"runner": "Juju Charm Deployer",
"config": {
"name": "Postgres Juju Charm",
"hosted_on_one_of": "Infrastructure/OS/Linux/Ubuntu"
},
"comment": "auto-resolved at 2014-09-01 using WS-Policy",
"resolver": "WS-Policy",
"requirements": ""
}
}
}
}
}]
Ergebnis
Wie anhand der vorgestellten drei praxisnahen Szenarien gezeigt worden ist, funktioniert die automa-
tisierte Auswahl von Implementierungen aus der Wissensdatenbank zuverlässig. Insbesondere die
Auswertung der Anforderungen und Einschränkungen, formuliert als WS-Policies, führt zu korrekten
Ergebnissen. Liegen für das Einfügen in eine Spezifikation mehrere Implementierungen vor, werden
diese angezeigt und es kann (manuell) eine Auswahl getroffen werden. Die Anzahl der ermittelten
möglichen Implementierungen kann begrenzt werden um bei einer umfangreichen Wissensdatenbank
die Laufzeit zu begrenzen.
Für Entwickler ist somit eine neue Möglichkeit geschaffen worden, die Ansprüche an auszuliefernde
Software in einer Domäne aus ihrem Fachbereich auszudrücken.
72
6. Fazit
Die vorliegende Arbeit hat Konzepte vorgestellt, mit denen der Softwarebetrieb aus Entwicklersicht
vorbereitet werden kann. Es wurde gezeigt, wie sich Ansätze für die Automatisierung von Manage-
ment und Bereitstellung von IT-Infrastruktur und Anwendungen mit Ausdrucksmöglichkeiten aus
der Domäne der Softwareentwickler integrieren lassen. Das Ziel hierbei ist die Unterstützung von
Softwareentwicklern bei der Erstellung von Spezifikationen, die als Eingabe für Infrastructure as
Code-Werkzeuge dienen.
Zunächst wurde in Kapitel 2 der aktuelle Stand der Technik vorgestellt, wobei der Fokus auf den drei
Paradigmen Cloud Computing, Infrastructure as Code und DevOps lag. Hierbei ist gezeigt worden, wie
das Cloud Computing als Voraussetzung für die Bereitstellung von virtualisierter IT-Infrastruktur im
Rahmen von Infrastructure as Code angesehen werden kann und wie dieses wiederum die Grundlage
für die von DevOps empfohlenen Vorgehensweisen darstellt. Eine Auswahl von Infrastructure as
Code-Werkzeugen (Chef, Juju und Puppet) für die Automatisierung von Betriebsaufgaben wurde
näher untersucht und es wurde die Weiterentwicklung NoOps des DevOps-Paradigmas erläutert.
Die maßgeblichen Beiträge dieser Arbeit sind die in Kapitel 3 erarbeiteten Konzepte zur Vorbereitung
des Softwarebetriebs aus Entwicklersicht. Nach einer Erläuterung, wie eine bessere Unterstützung für
Softwareentwickler bei der Integration von automatisierten Release-Prozessenmittels Infrastructure as
Code-Werkzeugen aussehen kann, wurde zunächst eine Taxonomie für Softwarekomponenten sowie
der Aufbau von DevOps-Spezifikationen vorgestellt. Als zusätzliche Motivation wurde nachfolgend
ein Beispielszenario für die Anwendung der genannten Konzepte angegeben. Die hierfür notwendigen
Anpassungen der zuvor beschriebenen DevOps-Spezifikationen wurden erläutert. Sodann wurde
eine Menge von Prädikaten zum Ausdrücken von Anforderungen und Einschränkungen definiert,
die für die Auswahl von Implementierungen aus der Taxonomie herangezogen werden können. Der
Programmablauf der vorgeschlagenen Softwarelösung im Allgemeinen, sowie der Algorithmus für die
Auswahl von Implementierungen aus der Taxonomie anhand von Prädikaten im Speziellen, wurden
ausführlich erläutert.
Die Umsetzung der vorgeschlagenen Konzepte erfolgte anhand einer prototypischen Implementierung
in Kapitel 4. Für die Umsetzung wurde auf das WS-Policy Framework und dessen Implementierung
Apache Neethi zurückgegriffen. Es wurde gezeigt, wie die Formulierung von Anforderungen und Ein-
schränkungen an Softwarekomponenten mittels Zusicherungen in Form von WS-Policies stattfinden
kann, wodurch eine automatisierte Auswertung ermöglicht wird. Es wurde argumentiert, dass die
Verwendung von WS-Policy als Sprache aus der Domäne der Softwareentwickler die Auswahl, die
Installation sowie die Verwaltung von Softwarekomponenten für Softwareentwickler erleichtert.
73
A. Anhang
Mit Hilfe von Aktivitätsdiagrammen der UML 2 werden die notwendigen elementaren Aktionen
und deren Verbindungen (Kontrollfluss) innerhalb einer Aktivität veranschaulicht. Die folgenden
Abbildungen A.1 bis A.7 zeigen für die in Abschnitt 4.4 ermittelten Aktivitäten jeweils das zugehörige
Aktivitätsdiagramm.
DevOps-Spezifikation wählen
Operation und Aktion wählen
Anforderungen aus
Spezifikation auslesen
Abbildung A.1.: Aktivitätsdiagramm Anforderungen lesen
75
A. Anhang
DevOps-Spezifikation wählen
Einzufügende Anforderungen
wählen (WS-Policy)
Anforderungen in
Spezifikation einfügen
Operation und Aktion wählen
Abbildung A.2.: Aktivitätsdiagramm Anforderungen einfügen
76
DevOps-Spezifikation wählen
Operation und Aktion wählen
Anforderungen aus
Spezifikation löschen
Abbildung A.3.: Aktivitätsdiagramm Anforderungen löschen
77
A. Anhang
DevOps-Spezifikation wählen
Operation und Aktion wählen
Implementierung aus
Spezifikation auslesen
Abbildung A.4.: Aktivitätsdiagramm Implementierung lesen
78
DevOps-Spezifikation wählen
Implementierung in DevOps-
Spezifikation einfügen
Operation und Aktion wählen
Einzufügende Implementierung
auswählen
Abbildung A.5.: Aktivitätsdiagramm Implementierung einfügen
79
A. Anhang
DevOps-Spezifikation wählen
Operation und Aktion wählen
Implementierung löschen
Abbildung A.6.: Aktivitätsdiagramm Implementierung löschen
80
Wissensdatenbank wählen
Anforderungen extrahieren
(WS-Policy)
Einschränkungen holen
(WS-Policies)
Vereinigung und Normalisierung
(mit Apache Neethi)
Passende Implementierungen
aus der Wissensdatenbank
ermitteln
Implementierung auswählen
Abbildung A.7.: Aktivitätsdiagramm Implementierungen aus Wissensdatenbank ermitteln
81
Literaturverzeichnis
[AEK+07] W. Arnold, T. Eilam, M. H. Kalantar, A. V. Konstantinou, A. Totok. Pattern Based SOA
Deployment. In B. J. Krämer, K.-J. Lin, P. Narasimhan, Herausgeber, ICSOC, Band 4749 von
Lecture Notes in Computer Science, S. 1–12. Springer, 2007. URL http://dblp.uni-trier.
de/db/conf/icsoc/icsoc2007.html#ArnoldEKKT07. (Zitiert auf den Seiten 25 und 26)
[AFG+09] M. Armbrust, A. Fox, R. Griffith, A. D. Joseph, R. H. Katz, A. Konwinski, G. Lee, D. A.
Patterson, A. Rabkin, I. Stoica, M. Zaharia. Above the Clouds: A Berkeley View of Cloud
Computing. Technischer Bericht UCB/EECS-2009-28, EECS Department, University
of California, Berkeley, 2009. URL http://www.eecs.berkeley.edu/Pubs/TechRpts/
2009/EECS-2009-28.html. (Zitiert auf den Seiten 14 und 16)
[AFG+10] M. Armbrust, A. Fox, R. Griffith, A. D. Joseph, R. Katz, A. Konwinski, G. Lee, D. Patterson,
A. Rabkin, I. Stoica, M. Zaharia. A View of Cloud Computing. Commun. ACM, 53(4):50–
58, 2010. doi:10.1145/1721654.1721672. URL http://doi.acm.org/10.1145/1721654.
1721672. (Zitiert auf Seite 14)
[agi] URL http://agilemanifesto.org. (Zitiert auf Seite 22)
[amaa] URL http://aws.amazon.com/de/autoscaling. (Zitiert auf Seite 25)
[amab] URL http://aws.amazon.com/de/amazon-linux-ami/. (Zitiert auf Seite 51)
[amd] URL http://www.amd.com. (Zitiert auf Seite 17)
[AMM14] M. M. AL-Mukhtar, A. A. A. Mardan. Performance Evaluation of Private Clouds Eu-
calyptus versus CloudStack. International Journal of Advanced Computer Science and
Applications, 5:108–117, 2014. (Zitiert auf Seite 17)
[ans] URL http://www.ansible.com. (Zitiert auf Seite 17)
[apaa] URL http://www.apache.org/licenses. (Zitiert auf den Seiten 16, 17 und 19)
[apab] URL http://httpd.apache.org/. (Zitiert auf Seite 20)
[apac] URL http://ant.apache.org/ivy. (Zitiert auf Seite 25)
[apad] URL http://httpd.apache.org/. (Zitiert auf Seite 35)
[apt] URL http://aptitude.alioth.debian.org/doc/en/. (Zitiert auf Seite 27)
[art] URL http://www.jfrog.com/home/v_artifactory_opensource_overview. (Zitiert
auf Seite 25)
[awsa] URL http://aws.amazon.com. (Zitiert auf den Seiten 9, 15 und 24)
83
Literaturverzeichnis
[awsb] URL http://aws.amazon.com/elasticbeanstalk. (Zitiert auf Seite 9)
[awsc] URL http://aws.amazon.com/ec2/. (Zitiert auf Seite 15)
[AWSd] URL http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/
using-network-security.html. (Zitiert auf Seite 25)
[Azo11] M. Azoff. DevOps: Advances in Release Management and Automation, 2011. (Zitiert auf
Seite 22)
[azu] URL http://azure.microsoft.com. (Zitiert auf Seite 16)
[BBC+11] J. Baker, C. Bond, J. C. Corbett, J. Furman, A. Khorlin, J. Larson, J.-M. Leon, Y. Li, A. Lloyd,
V. Yushprakh. Megastore: Providing Scalable, Highly Available Storage for Interactive
Services. In Proceedings of the Conference on Innovative Data system Research (CIDR),
S. 223–234. 2011. URL http://www.cidrdb.org/cidr2011/Papers/CIDR11_Paper32.
pdf. (Zitiert auf Seite 16)
[BBKL14] T. Binz, U. Breitenbücher, O. Kopp, F. Leymann. TOSCA: Portable Automated Deployment
and Management of Cloud Applications. Springer New York, 2014. (Zitiert auf Seite 17)
[bcf] URL http://bcfg2.org. (Zitiert auf Seite 17)
[bmt] URL http://en.wikipedia.org/wiki/List_of_build_automation_software. (Zi-
tiert auf Seite 47)
[can] URL http://www.canonical.com. (Zitiert auf den Seiten 17 und 20)
[cas] URL http://cassandra.apache.org/. (Zitiert auf Seite 20)
[Cat11] R. Cattell. Scalable SQL and NoSQL Data Stores. SIGMOD Rec., 39(4):12–27, 2011.
doi:10.1145/1978915.1978919. URL http://doi.acm.org/10.1145/1978915.1978919.
(Zitiert auf Seite 25)
[cep] URL http://ceph.com/. (Zitiert auf Seite 20)
[cfe] URL https://cfengine.com. (Zitiert auf Seite 17)
[che] URL http://docs.getchef.com/chef_quick_overview.html. (Zitiert auf den Sei-
ten 6 und 19)
[cloa] URL https://cloud.google.com/products/cloud-dns. (Zitiert auf Seite 9)
[clob] URL http://cloud-standards.org. (Zitiert auf Seite 15)
[cloc] URL https://cloud.google.com/products/app-engine/. (Zitiert auf Seite 16)
[clod] URL http://cloudstack.apache.org/. (Zitiert auf Seite 16)
[cloe] URL http://cloudfoundry.org. (Zitiert auf Seite 24)
[cmm] URL http://cmmiinstitute.com. (Zitiert auf Seite 23)
84
Literaturverzeichnis
[Coc12] A. Cockcroft. Ops, DevOps and PaaS (NoOps) at Netflix. Webblog, 2012. URL http:
//perfcap.blogspot.de/2012/03/ops-devops-and-noops-at-netflix.html. (Zi-
tiert auf Seite 25)
[Coh09] M. Cohn. Succeeding with Agile: Software Development Using Scrum. Addison-Wesley
Professional, 2009. ISBN 978-0321579362. (Zitiert auf Seite 22)
[com] URL https://cloud.google.com/products/compute-engine. (Zitiert auf Seite 9)
[Cor11] I. Corporation. Getting Cloud Computing Right, 2011. (Zitiert auf Seite 13)
[Deb11] P. Debois. Devops: A Software Revolution in the Making, OpeOpen Statement. Cutter
IT Journal, 24:3–5, 2011. (Zitiert auf Seite 10)
[del] URL http://www.dell.com. (Zitiert auf Seite 17)
[dev] URL https://developers.google.com/appengine/?csw=1. (Zitiert auf Seite 9)
[DJV10] T. Delaet, W. Joosen, B. Vanbrabant. A Survey of System Configuration Tools. In
Proceedings of the 24th International Conference on Large Installation System Adminis-
tration, LISA’10, S. 1–8. USENIX Association, Berkeley, CA, USA, 2010. URL http:
//dl.acm.org/citation.cfm?id=1924976.1924977. (Zitiert auf Seite 17)
[DMTF09] I. D. Distributed Management Task Force. Open Virtualization Format Specification.
Specification, 2009. (Zitiert auf Seite 15)
[doc] URL https://www.docker.com/. (Zitiert auf Seite 10)
[dom] URL http://www.w3.org/DOM/. (Zitiert auf Seite 53)
[ets] URL https://www.etsy.com. (Zitiert auf Seite 24)
[Fab13] A. Fabbro. Linux on Azure-a Strange Place to Find a Penguin. Linux J., 2013(226), 2013.
URL http://dl.acm.org/citation.cfm?id=2457428.2457430. (Zitiert auf Seite 16)
[fac] URL https://www.facebook.com. (Zitiert auf Seite 24)
[Fel13] B. Feld. Why Every Company Need A DevOps Team Now, 2013. (Zitiert auf Seite 24)
[Fin14] K. Finley. NoOps, AppOps and DevOps and your Business. How do They Apply
for You? Webblog, 2014. URL http://siliconangle.com/blog/2012/03/29/
noops-appops-and-devops-and-your-business-how-do-they-apply-for-you/.
(Zitiert auf Seite 25)
[get] URL http://www.getchef.com/chef. (Zitiert auf den Seiten 9 und 17)
[git] URL https://github.com/eucalyptus/eucalyptus/wiki. (Zitiert auf Seite 16)
[gnu] URL http://www.gnu.org/licenses/gpl-2.0.html. (Zitiert auf Seite 11)
[goo] URL https://www.google.com. (Zitiert auf Seite 24)
[gpl] URL http://www.gnu.org/copyleft/gpl.html. (Zitiert auf Seite 35)
[gso] URL https://code.google.com/p/google-gson/. (Zitiert auf Seite 47)
85
Literaturverzeichnis
[Hü12] M. Hüttermann. DevOps For Developers. Apress, 2012. (Zitiert auf den Seiten 6, 17, 22
und 23)
[had] URL http://hadoop.apache.org/. (Zitiert auf Seite 20)
[Har12] D. Harris. Why 2013 is the year of ’NoOps’ for programmers [In-
fographic]. Webseite, 2012. URL http://gigaom.com/2012/01/31/
why-2013-is-the-year-of-noops-for-programmers-infographic/. (Zitiert
auf Seite 25)
[HF10a] J. Humble, D. Farley. Continuous Delivery: Reliable Software Releases Through Build, Test,
and Deployment Automation. Addison-Wesley Professional, 1st Auflage, 2010. (Zitiert
auf Seite 17)
[HF10b] J. Humble, D. Farley. Continuous Delivery: Reliable Software Releases Through Build, Test,
and Deployment Automation. Addison Wesley, 2010. (Zitiert auf Seite 17)
[hp.] URL http://www.hp.com. (Zitiert auf Seite 17)
[hpc] URL http://www.hpcloud.com. (Zitiert auf Seite 20)
[int] URL http://www.intel.com. (Zitiert auf Seite 17)
[iti] URL http://www.itil-officialsite.com. (Zitiert auf Seite 23)
[JA09] P. H. John Allspaw. 10 deploys per day Dev and ops cooperation at Flickr. In Velocity
Presentation. 2009. (Zitiert auf Seite 9)
[jar] URL http://docs.oracle.com/javase/6/docs/technotes/guides/jar/index.
html. (Zitiert auf Seite 60)
[jdo] URL http://www.jdom.org/. (Zitiert auf Seite 47)
[jen] URL http://jenkins-ci.org. (Zitiert auf Seite 25)
[JH11] J. M. Jez Humble. Why Enterprises Must Adopt Devops to Enable Continuous Delivery.
CUTTER IT JOURNAL, 2011. (Zitiert auf Seite 23)
[jsoa] URL https://code.google.com/p/json-simple/. (Zitiert auf Seite 47)
[jsob] URL http://json.org/. (Zitiert auf den Seiten 47 und 54)
[juja] URL https://juju.ubuntu.com/deployment/. (Zitiert auf den Seiten 6, 20 und 21)
[jujb] URL http://jujucharms.com/bundle/mediawiki. (Zitiert auf den Seiten 7 und 28)
[jujc] URL https://juju.ubuntu.com. (Zitiert auf den Seiten 9 und 17)
[jujd] URL https://jujucharms.com. (Zitiert auf Seite 27)
[KB13] J. D. l. R. Kent Baxley. DepDeploy workloads with Juju and MAAS in Ubuntu 13.04, 2013.
(Zitiert auf Seite 20)
[kvm] URL http://www.linux-kvm.org/page/Management_Tools. (Zitiert auf Seite 20)
86
Literaturverzeichnis
[LC12] A. C. Lucas Carlson. What is NoOps anyhow? Webblog, 2012. URL http://blog.
appfog.com/what-is-noops-anyhow/. (Zitiert auf Seite 24)
[Ley04] F. Leymann. The Influence of Web Services on Software: Potentials and Tasks. In
P. Dadam, M. Reichert, Herausgeber, INFORMATIK 2004 - Informatik verbindet, Band
1, Beiträge der 34. Jahrestagung der Gesellschaft für Informatik e.V. (GI), Band 50 von
LNI, S. 14–25. GI, 2004. URL http://www2.informatik.uni-stuttgart.de/cgi-bin/
NCSTRL/NCSTRL_view.pl?id=INPROC-2004-84&engl=0. (Zitiert auf Seite 14)
[Ley09] F. Leymann. Cloud Computing: The Next Revolution in IT. In Proc.
52th Photogrammetric Week, S. 3–12. Wichmann Verlag, 2009. URL http:
//www2.informatik.uni-stuttgart.de/cgi-bin/NCSTRL/NCSTRL_view.pl?
id=INPROC-2009-65&engl=0. (Zitiert auf den Seiten 6, 9, 14 und 15)
[lin] URL http://aws.amazon.com/amazon-linux-ami. (Zitiert auf Seite 25)
[Lou12] M. Loukides. What is DevOps? Technischer Bericht, O’Reilly Media,
2012. URL http://shop.oreilly.com/product/0636920026822.do?intcmp=
il-velocity-books-what-is-devops-radar-edition. (Zitiert auf Seite 24)
[LS10] W. Lehner, K.-U. Sattler. Database as a service (DBaaS). In F. Li, M. M. Moro, S. Ghan-
deharizadeh, J. R. Haritsa, G. Weikum, M. J. Carey, F. Casati, E. Y. Chang, I. Manolescu,
S. Mehrotra, U. Dayal, V. J. Tsotras, Herausgeber, ICDE, S. 1216–1217. IEEE, 2010. (Zitiert
auf Seite 9)
[LSS+13] H. Lu, M. Shtern, B. Simmons, M. Smit, M. Litoiu. Pattern-based Deployment Service
for Next Generation Clouds. In IEEE 9th World Congress on Services, Cloud Cup. 2013.
(Zitiert auf Seite 26)
[lxc] URL https://linuxcontainers.org/. (Zitiert auf Seite 20)
[maa] URL https://maas.ubuntu.com. (Zitiert auf Seite 20)
[Mad10] L. Madeyski. Test-Driven Development - An Empirical Evaluation of Agile Practice. Springer
Berlin Heidelberg, 2010. (Zitiert auf Seite 17)
[man] URL http://www.mantisbt.org. (Zitiert auf den Seiten 11 und 35)
[mava] URL http://maven.apache.org/. (Zitiert auf Seite 47)
[mavb] URL http://maven.apache.org/ref/3.2.3/maven-artifact/. (Zitiert auf Seite 47)
[med] URL https://www.mediawiki.org. (Zitiert auf Seite 27)
[MG11] P. Mell, T. Grance. The NIST Definition of Cloud Computing. Technischer Bericht
800-145, National Institute of Standards and Technology (NIST), Gaithersburg, MD,
2011. URL http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.
pdf. (Zitiert auf den Seiten 13 und 15)
[MHT11] A. S. Michael Hogan, Fang Liu, J. Tong. NIST Cloud Computing Standards Roadmap,
2011. (Zitiert auf Seite 15)
87
Literaturverzeichnis
[MLM11] D. Milojicic, I. M. Llorente, R. S. Montero. OpenNebula: A Cloud Management Tool. IEEE
Internet Computing, 15(2):11–14, 2011. doi:http://doi.ieeecomputersociety.org/10.1109/
MIC.2011.44. (Zitiert auf Seite 16)
[msc] URL http://msdn.microsoft.com/de-de/library/8bs2ecf4(v=vs.110).aspx. (Zi-
tiert auf Seite 16)
[msn] URL http://www.microsoft.com/net. (Zitiert auf Seite 16)
[mys] URL http://www.mysql.com. (Zitiert auf den Seiten 11 und 20)
[nas] URL http://www.nasa.gov. (Zitiert auf Seite 17)
[net] URL https://www.netflix.com. (Zitiert auf den Seiten 24 und 25)
[nis] URL http://www.nist.gov. (Zitiert auf Seite 15)
[oas] URL https://www.oasis-open.org/. (Zitiert auf Seite 15)
[occ] URL http://occi-wg.org. (Zitiert auf den Seiten 15 und 16)
[ogf] URL https://www.ogf.org. (Zitiert auf Seite 16)
[OJ11] S. Ortiz Jr. The Problem with Cloud-Computing Standardization. Computer, 44(7):13–
16, 2011. doi:10.1109/MC.2011.220. URL http://dx.doi.org/10.1109/MC.2011.220.
(Zitiert auf Seite 15)
[opea] URL https://www.openstack.org. (Zitiert auf den Seiten 9 und 16)
[opeb] URL http://opennebula.org. (Zitiert auf Seite 16)
[Pan12] S. Pandey. Investigating Community, Reliability and Usability of CFEngine, Chef and
Puppet, 2012. (Zitiert auf Seite 19)
[PCS+13] R. Pooley, J. Coady, C. Schneider, H. Linger, C. Barry, M. Lang. Information Systems
Development - Reflections, Challenges and New Directions. Springer, 2013. (Zitiert auf
Seite 10)
[per] URL http://www.perforce.com. (Zitiert auf Seite 25)
[php] URL http://www.php.net. (Zitiert auf Seite 35)
[pupa] URL https://docs.puppetlabs.com/learning/agent_master_basic.html. (Zitiert
auf den Seiten 6 und 18)
[pupb] URL http://puppetlabs.com. (Zitiert auf den Seiten 9 und 17)
[PW11] K. Petersen, C. Wohlin. Measuring the Flow in Lean Software Development. Softw. Pract.
Exper., 41(9):975–996, 2011. doi:10.1002/spe.975. URL http://dx.doi.org/10.1002/
spe.975. (Zitiert auf Seite 9)
[rac] URL http://www.rackspace.com. (Zitiert auf Seite 17)
[Rah12] M. J. Rahman. Investigating Configuration Management Tools Usage in Large Infra-
structure, 2012. (Zitiert auf Seite 18)
88
Literaturverzeichnis
[s3] URL http://aws.amazon.com/de/s3/. (Zitiert auf Seite 16)
[Sac12] M. Sacks. Pro Website Development and Operations: Streamlining DevOps for large-scale
websites. Apress, 2012. (Zitiert auf Seite 10)
[SAE12] O. Sefraoui, M. Aissaoui, M. Eleuldj. Article: OpenStack: Toward an Open-source Solution
for Cloud Computing. International Journal of Computer Applications, 55(3):38–42, 2012.
Published by Foundation of Computer Science, New York, USA. (Zitiert auf Seite 17)
[sal] URL http://www.saltstack.com. (Zitiert auf Seite 17)
[Sch00] U. Schöning. Logik für Informatiker. Spektrum Akademischer Verlag, 2000. (Zitiert auf
Seite 41)
[sem] URL http://semver.org/. (Zitiert auf Seite 50)
[Sha11] A. Shalloway. Demystifying Kanban, 2011. (Zitiert auf Seite 22)
[Smi11] D. M. Smith. Hype Cycle for Cloud Computing, 2011, 2011. (Zitiert auf Seite 23)
[ST10] P. Sempolinski, D. Thain. A Comparison and Critique of Eucalyptus, OpenNebula
and Nimbus. In Proceedings of the 2010 IEEE Second International Conference on Cloud
Computing Technology and Science, CLOUDCOM ’10, S. 417–426. IEEE Computer Society,
Washington, DC, USA, 2010. doi:10.1109/CloudCom.2010.42. URL http://dx.doi.org/
10.1109/CloudCom.2010.42. (Zitiert auf Seite 16)
[sta] URL https://jcp.org/en/jsr/detail?id=173. (Zitiert auf Seite 53)
[sur] URL https://www.surfsara.nl. (Zitiert auf Seite 16)
[tel] URL http://www.telefonica.com. (Zitiert auf Seite 16)
[TEM07] V. Tosic, A. Erradi, P. Maheshwari. WS-Policy4MASC - A WS-Policy Extension Used in
the MASC Middleware. In IEEE SCC, S. 458–465. 2007. (Zitiert auf Seite 26)
[Tiw00] A. Tiwana. The Knowledge Management Toolkit: Practical Techniques for Building a
Knowledge Management System. Prentice Hall PTR, Upper Saddle River, NJ, USA, 2000.
(Zitiert auf Seite 33)
[tom] URL http://tomcat.apache.org/. (Zitiert auf Seite 20)
[TS10] U. H. Thomas Stober. Agile Software Development. Springer Berlin Heidelberg, 2010.
(Zitiert auf Seite 9)
[twi] URL https://twitter.com. (Zitiert auf Seite 24)
[ubua] URL http://www.ubuntu.com. (Zitiert auf Seite 20)
[ubub] URL http://www.ubuntu.com/server. (Zitiert auf Seite 20)
[vag] URL http://www.vagrantup.com. (Zitiert auf Seite 10)
[vcl] URL https://www.vmware.com/products/vcloud-suite/. (Zitiert auf Seite 16)
89
Literaturverzeichnis
[Ver13] VersionOne. 7th Annual State of Agile Development Survey, 2013. URL http://www.
versionone.com/pdf/7th-Annual-State-of-Agile-Development-Survey.pdf.
(Zitiert auf Seite 22)
[vmw] URL http://www.vmware.com. (Zitiert auf Seite 16)
[VOH+07a] A. S. Vedamuthu, D. Orchard, F. Hirsch, M. Hondo, P. Yendluri, T. Boubez, U. Yalçınalp.
Web Services Policy 1.5 — Framework. World Wide Web Consortium, Recommendation
REC-ws-policy-20070904, 2007. (Zitiert auf den Seiten 47 und 48)
[VOH+07b] A. S. Vedamuthu, D. Orchard, F. Hirsch, M. Hondo, P. Yendluri, T. Boubez, U. Yalçınalp.
Web Services Policy 1.5 — Primer. World Wide Web Consortium, Note NOTE-ws-policy-
primer-20071112, 2007. (Zitiert auf den Seiten 6, 48, 49 und 50)
[WCL+05] S. Weerawarana, F. Curbera, F. Leymann, T. Storey, D. F. Ferguson. Web Services Platform
Architecture: SOAP, WSDL, WS-Policy, WS-Addressing, WS-BPEL, WS-Reliable Messaging
and More. Prentice Hall PTR, Upper Saddle River, NJ, USA, 2005. (Zitiert auf den Seiten 14
und 47)
[wor] URL http://wordpress.org. (Zitiert auf Seite 20)
[ws.] URL http://ws.apache.org/neethi/. (Zitiert auf den Seiten 47 und 53)
[ws-] URL http://www.w3.org/TR/ws-policy. (Zitiert auf Seite 15)
[wsb] URL http://docs.oasis-open.org/wsbpel/2.0/OS/wsbpel-v2.0-OS.html. (Zi-
tiert auf Seite 26)
[wsd] URL http://www.w3.org/TR/wsdl20. (Zitiert auf den Seiten 26 und 47)
[wsp] URL http://www.w3.org/TR/ws-policy-attach/. (Zitiert auf Seite 47)
[xml] URL http://www.w3.org/TR/REC-xml-names/. (Zitiert auf Seite 49)
Alle URLs wurden zuletzt am 20. 09. 2014 geprüft.
90
Erklärung
Ich versichere, diese Arbeit selbstständig verfasst zu haben. Ich
habe keine anderen als die angegebenen Quellen benutzt und
alle wörtlich oder sinngemäß aus anderen Werken übernommene
Aussagen als solche gekennzeichnet. Weder diese Arbeit noch
wesentliche Teile daraus waren bisher Gegenstand eines anderen
Prüfungsverfahrens. Ich habe diese Arbeit bisher weder teilwei-
se noch vollständig veröffentlicht. Das elektronische Exemplar
stimmt mit allen eingereichten Exemplaren überein.
Ort, Datum, Unterschrift