chef: Vergleich weiter fortgeschritten
This commit is contained in:
parent
953f4c4312
commit
62a90a347a
@ -8,7 +8,7 @@
|
|||||||
\usepackage{courier}
|
\usepackage{courier}
|
||||||
\usepackage{microtype}
|
\usepackage{microtype}
|
||||||
\usepackage{pgfplots}
|
\usepackage{pgfplots}
|
||||||
\pgfplotsset{compat=1.3}
|
\pgfplotsset{compat=newest}
|
||||||
|
|
||||||
\usepackage{epigraph}
|
\usepackage{epigraph}
|
||||||
\setlength\epigraphwidth{8cm}
|
\setlength\epigraphwidth{8cm}
|
||||||
|
@ -142,8 +142,7 @@ findet. Hier nochmal die einzelnen Verzeichnisse im Überblick:
|
|||||||
Cookbooks angegeben werden.
|
Cookbooks angegeben werden.
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
Beispiel ERB-Template:
|
\begin{lstlisting}[caption={Beispiel ERB-Template:}]
|
||||||
\begin{lstlisting}
|
|
||||||
Diese Zeile wird beim Rendern ohne Aenderung uebernommen
|
Diese Zeile wird beim Rendern ohne Aenderung uebernommen
|
||||||
<%# Ein Kommentar%>
|
<%# Ein Kommentar%>
|
||||||
|
|
||||||
@ -228,21 +227,184 @@ Mechanismus genutzt um Tests auszuführen.
|
|||||||
\subsubsection{Vergleich mit puppet}
|
\subsubsection{Vergleich mit puppet}
|
||||||
\label{vergleich_mit_puppet}
|
\label{vergleich_mit_puppet}
|
||||||
Ein anderes weiteres verbreitetes Konfigurationsmanagmentsystem ist Puppet. Es
|
Ein anderes weiteres verbreitetes Konfigurationsmanagmentsystem ist Puppet. Es
|
||||||
ist das ältere der beiden Projekte. Während die erste Puppetrelease bereits im
|
ist das Ältere der beiden Projekte. Während das erste Puppetrelease bereits im
|
||||||
Jahr 2005 von den Puppet Labs veröffentlicht wurde, erschien Chef erst 4 Jahre
|
Jahr 2005 von den Puppet Labs veröffentlicht wurde, erschien Chef erst 4 Jahre
|
||||||
später im Jahre 2009. Chef wurde stark beeinflusst von Puppet. Der Erfinder von
|
später im Jahre 2009. Chef wurde stark beeinflusst von Puppet. Der Erfinder von
|
||||||
Chef Adam Jacob war selbst langjähriger Puppetnutzer bevor er Chef oder wie es
|
Chef Adam Jacob war selbst langjähriger Puppetnutzer, bevor er Chef schrieb.
|
||||||
in den 1. Versionen hieß <TODO>, schrieb.
|
Seine damalige Konsultantfirma betreute mehrere Firmen bei der Provisionierung
|
||||||
- Konsultantfirma: Infrastruktur bis zum Deployment
|
der Infrastruktur bis hin zum Deployment der Anwendung. Dabei kam Puppet zum
|
||||||
- mangelnde Abstraktionsmöglichkeiten
|
Einsatz. Mit steigender Anzahl der Kunden, stieg nach Aussagen von Adam Jacob
|
||||||
\cite{chefhistory}.
|
der Aufwand bei der Verwaltung der Puppet-Konfiguration. Diese mussten häufig
|
||||||
|
für jeden Kunden stark angepasst oder neugeschrieben werden. Aus diesem Grund
|
||||||
|
began er an ein neues Deploymentsystem zu schreiben, damals unter dem Namen
|
||||||
|
\emph{Marionette}. Dabei verwendete ebenfalls wie schon bei Puppet die
|
||||||
|
Programmiersprache Ruby zur Implementierung des Clients. Ein wichtiges
|
||||||
|
Designziel seines neues System war es, bessere Abstraktionsmöglichkeiten zu
|
||||||
|
schaffen, um so die Wiederverwendbarkeit zu erhöhen (Quelle:
|
||||||
|
\cite{chefhistory}). Anzumerken ist, das seit der damals veröffentlichten
|
||||||
|
Puppetversion
|
||||||
|
(\href{https://github.com/puppetlabs/puppet/commit/ce964ecb6d6a38cb7fb9f0b13a7e6b2eb4c381c3}{0.24.5})
|
||||||
|
neue Funktionen und Spracherweiterungen zu Puppet hinzugefügt wurden um dieses
|
||||||
|
Problem zu adressieren.
|
||||||
|
(\cite{puppetlanguagechangelog})
|
||||||
|
|
||||||
|
Während bei Chef die Konfiguration in Ruby geschrieben wird, besitzt Puppet
|
||||||
|
seine eigene Konfigurationssprache. Puppets Sprache ist im Gegensatz zu
|
||||||
|
General-Purpose-Languages wie Ruby, Java oder C/C++ eine
|
||||||
|
Domain-Specific-Language (DSL). Eine DSL ist eine eigens für den Anwendungszweck
|
||||||
|
geschriebene und optimierte Sprache. Sie enthält häufig Elemente und Ausdrücke,
|
||||||
|
welche es erlauben Probleme der Anwendungsdomain effizient zu lösen. Auf der
|
||||||
|
anderen Seite wird verzichtet auf umfangreiche Standardbibliotheken und
|
||||||
|
Sprachkonstrukte verzichtet, die in General-Purpose-Language üblich sind.
|
||||||
|
Puppets Sprache wurde an das Konfigurationsformat von Nagios angelehnt
|
||||||
|
(\cite{puppetlanguage}). Sie ist deklarativ gehalten und soll möglichst einfach
|
||||||
|
erlernbar für Administratoren, auch ohne programmiertechnischen Hintergrund,
|
||||||
|
sein. Der Schwerpunkt liegt auf der Beschreibung von \emph{Resources}. Die
|
||||||
|
Sprache besitzt Kontrollstrukturen wie Case- und If-Statements. Es gibt
|
||||||
|
Datentypen wie \emph{Strings}, \emph{Booleans}, \emph{Arrays}, \emph{Reguläre
|
||||||
|
Ausdrücke} und \emph{Hashes}, welche Variablen zugewiesen werden können. Die
|
||||||
|
\href{https://forge.puppetlabs.com/puppetlabs/stdlib}{Standartbibliothek} von
|
||||||
|
Puppet stellt Funktionen, um auf diesen Datentypen einfache Operationen
|
||||||
|
auszuführen. Allerdings ist es nicht möglich Schleifen auszuführen. (Diese
|
||||||
|
\href{http://docs.puppetlabs.com/puppet/latest/reference/experiments_lambdas.html}{Funktion}
|
||||||
|
ist momentan als experimental markiert). Funktionen können nicht direkt in
|
||||||
|
Puppets Sprache definiert werden. Stattdessen werden diese als Erweiterung des
|
||||||
|
Parsers in Ruby implementiert, was wiederum den den Nachteil hat, dass dafür
|
||||||
|
eine weitere Sprachen erlernt werden muss. Manche Unternehmen und Organisationen
|
||||||
|
greifen bevorzugt auf Puppet zurück, weil es einfacher ist neue Mitarbeiter ohne
|
||||||
|
Rubykenntnisse in diesem Framework zu schulen (TODO - Beleg). Andere wie
|
||||||
|
bevorzugen die Flexibilität von Ruby. Facebook gab dies als Einen der Gründe an,
|
||||||
|
warum sie im Jahre 2013 von \emph{CFEngine2} (TODO - Link) auf \emph{Chef 11}
|
||||||
|
umgestiegen sind.
|
||||||
|
|
||||||
|
Das strukturelle Äquivalent zu \emph{Cookbooks} in Chef ist in Puppet das
|
||||||
|
Puppet-Module. Diese werden in der Community ausgetauscht und entwickelt. Da
|
||||||
|
Puppet älter ist, ist zu erwarten das hierfür mehr Puppet-Module zu Verfügung
|
||||||
|
stehen als für Cookbooks für Chef. Die primäre Distributionsquelle ist
|
||||||
|
\href{https://forge.puppetlabs.com/}{Puppet Forge} in dem \textbf{2206}
|
||||||
|
\href{https://forge.puppetlabs.com/modules?supported=yes}{Module} zu Verfügung
|
||||||
|
stehen (Stand: 31.03.2014). Für Chef gibt es eine ähnliche
|
||||||
|
\href{http://community.opscode.com/}{Community-Seite} mit \textbf{1368}
|
||||||
|
Modulen, (Stand: 31.03.2014 - ermittelt über die
|
||||||
|
\href{https://cookbooks.opscode.com/api/v1/cookbooks?start}{API}). Zu einer
|
||||||
|
weiteren wichtigen Quelle hat sich die Plattform
|
||||||
|
\href{https://github.com}{Github} für beide Projekte entwickelt. Für einen
|
||||||
|
Vergleich wurde die Anzahl der Suchtreffer für Projekte, die die Suchbegriffe
|
||||||
|
"Chef" und "Puppet" in der Suchmaschine auf Github herangezogen. Github filtert
|
||||||
|
Forks (Abspaltungen) von Projekten aus den Suchergebnissen heraus und
|
||||||
|
schlüsselt die Ergebnisse nach Programmiersprache auf. Es werden alle
|
||||||
|
Programmiersprachen in beide Projekte mit weniger als 100 Suchtreffer aus
|
||||||
|
Übersichtlichkeitsgründen nicht in das in Diagramm übernommen (siehe Tabelle). Kurze
|
||||||
|
Stichproben der Suchergebnisse, dass die Suchtreffer sich überwiegend mit den
|
||||||
|
eigentlichen Projekten Chef und Puppet beschäftigen. Anzumerken ist, das
|
||||||
|
Zielgruppe von Puppet eher Systemadminstratoren sind, während Chef auch von
|
||||||
|
vielen Entwicklern genutzt wird, wobei Letztere bevorzugt Github verwenden.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
|
||||||
|
\pgfplotstableread{
|
||||||
|
%Gesamt Puppet Ruby Shell Python Javascript Perl
|
||||||
|
12661 0 9902 321 148 124 42
|
||||||
|
14325 7315 3108 751 207 157 137
|
||||||
|
}\dataset
|
||||||
|
\definecolor{bblue}{HTML}{4F81BD}
|
||||||
|
\definecolor{rred}{HTML}{C0504D}
|
||||||
|
\definecolor{ggreen}{HTML}{9BBB59}
|
||||||
|
\definecolor{ppurple}{HTML}{9F4C7C}
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\begin{axis}[ybar,
|
||||||
|
width=\textwidth,
|
||||||
|
enlarge x limits=0.5,
|
||||||
|
height=15cm,
|
||||||
|
ymin=0,
|
||||||
|
ymax=17000,
|
||||||
|
scaled x ticks = false,
|
||||||
|
scaled y ticks = false,
|
||||||
|
ylabel={Anzahl der Suchtreffer},
|
||||||
|
xtick=data,
|
||||||
|
xticklabels = {
|
||||||
|
\strut Chef,
|
||||||
|
\strut Puppet
|
||||||
|
},
|
||||||
|
%xticklabel style={yshift=-10ex},
|
||||||
|
major x tick style = {opacity=0},
|
||||||
|
every node near coord/.append style={
|
||||||
|
anchor=west,
|
||||||
|
rotate=90
|
||||||
|
},
|
||||||
|
legend entries={Gesamt, Puppet, Ruby, Shell, Python, Javascript, Perl},
|
||||||
|
legend columns=13,
|
||||||
|
legend style={ anchor=north west,at={(axis description cs:0,-0.1)}}
|
||||||
|
%legend style={draw=none,nodes={inner sep=10pt}},
|
||||||
|
]
|
||||||
|
|
||||||
|
\addplot[draw=black,fill=rred, nodes near coords] table[x index=0,y index=0] \dataset;
|
||||||
|
\addplot[draw=black,fill=ggreen, nodes near coords] table[x index=0,y index=1] \dataset;
|
||||||
|
\addplot[draw=black,fill=bblue, nodes near coords] table[x index=0,y index=2] \dataset;
|
||||||
|
\addplot[draw=black,fill=ppurple, nodes near coords] table[x index=0,y index=3] \dataset;
|
||||||
|
\addplot[draw=black,fill=magenta, nodes near coords] table[x index=0,y index=4] \dataset;
|
||||||
|
\addplot[draw=black,fill=yellow, nodes near coords] table[x index=0,y index=5] \dataset;
|
||||||
|
\addplot[draw=black,fill=black, nodes near coords] table[x index=0,y index=6] \dataset;
|
||||||
|
\end{axis}
|
||||||
|
\end{tikzpicture}
|
||||||
|
\caption{Anzahl der Suchtreffer auf Github aufgeschlüsselt nach
|
||||||
|
Programmiersprache für die Begriffe ``Chef'' und ``Puppet''}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Rohdaten für das Diagramm
|
||||||
|
|
||||||
|
\begin{tabular}{l|c|c|c|c|c|c|c|c|c|c|c|c}
|
||||||
|
Sprache & Ruby & Puppet & Shell & Python & Javascript & Perl & PHP & Java & VimL & CSS & C & C++ \\\hline
|
||||||
|
Chef & 9,902& - & 321 & 148 & 124 & 42 & 56 & 88 & - & 31 & 48& 37 \\\hline
|
||||||
|
Puppet & 3,108& 7,315 & 751 & 207 & 157 & 137 & 82 & 42 & 64 & 23 & - & - \\
|
||||||
|
\end{tabular}
|
||||||
|
|
||||||
|
\vspace{0.5cm}
|
||||||
|
|
||||||
|
Eine andere wichtige Statistik für Opensourceprojekte ist die Subscriber auf den jeweiligen
|
||||||
|
Mailinglisten.
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[chef@lists.opscode.com] Community-Mailingliste, 1620 Leser, \href{http://lists.opscode.com/sympa/info/chef}{Quelle}, Stand: 31.03.2014
|
||||||
|
\item[chef-dev@lists.opscode.com] Entwickler-Mailingliste, 652 Leser, \href{http://lists.opscode.com/sympa/info/chef-dev}{Quelle}, Stand: 31.03.2014
|
||||||
|
\item[puppet-users@googlegroups.com] Community-Mailingliste, \textasciitilde{}7000 Leser, Quelle: \href{https://twitter.com/puppetlabs/status/450760644329881600}{Anfrage per Twitter}, Stand: 01.04.2014
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
Mailinglisten eigenen sich um qualitiv die aktive Nutzer beider Projekte zu
|
||||||
|
vergleichen. Sie ist neben dem Bugtracker ein wichtiges Mittel der
|
||||||
|
Kommmunikation.
|
||||||
|
|
||||||
|
Die Zahlen weisen darauf hin, dass Puppet nach wie vor eine größere Community
|
||||||
|
hat.
|
||||||
|
|
||||||
|
Anstelle von Recipes werden in Puppet Manifests geschrieben. Das sind Dateien,
|
||||||
|
die auf Endung .pp enden und sich in dem Ordner \emph{manifests} im
|
||||||
|
Puppet-Module befinden. Jedes Manifest definiert eine \emph{Class}. Der Namen
|
||||||
|
dieser Klasse wird aus dem Module-Namen und Manifest-Namen gebildet. Wenn Module
|
||||||
|
``foo'' das Manifest ``bar'' enthält, ist der Name der Class ``foo::bar''.
|
||||||
|
Außnahme bildet das Manifest \emph{init.pp}, bei dem die Class nur ``bar''
|
||||||
|
lauten würde. Diese Benennungskonvention wurde in Chef übernommen, um Recipes zu
|
||||||
|
referenzieren (anstelle von \emph{init.rb} lautet die Datei \emph{default.rb}).
|
||||||
|
Allerdings werden in Recipes keine seperaten Objekt definiert und der ganze
|
||||||
|
Inhalt der Datei bildet das Recipe. Eine Class in Puppet kann über Parameter
|
||||||
|
konfiguriert werden. Chef besitzt mit Attributes ein vergleichbares Konzept.
|
||||||
|
(TODO) Resources heissen in Puppet Types. Puppet liefert wie Chef eine Reihe von
|
||||||
|
Resources/Types, die Core-Types. Wie auch in Chef können Types in Puppet mehrere
|
||||||
|
plattformspezifische Provider besitzen. Es ist möglich eigene Types zu
|
||||||
|
definieren, auch Custom-Types genannt (Ähnlich LRWP in Chef). Die
|
||||||
|
Implementierung der Types/Provider erfolgt in Ruby im Verzeichnis
|
||||||
|
\emph{lib/puppet}. Die Zustände eine Resources können in Puppet über das
|
||||||
|
Schlüsselwort \emph{ensure} festgelegt werden (vergleichbar mit \emph{action}
|
||||||
|
Chef).
|
||||||
|
|
||||||
|
%- Definition
|
||||||
|
%- Parameters
|
||||||
|
%- Trennung von Daten/Code
|
||||||
|
%- Chef-Server/Puppetd-Master (masterless-Mode, Erlang)
|
||||||
|
%- Templates
|
||||||
|
%- Plattform-Unterstützung
|
||||||
|
|
||||||
|
|
||||||
%- bei beiden Projekte ist Clientkomponente in Ruby geschrieben.
|
|
||||||
%- Chef: Konfigurations in Ruby
|
|
||||||
%- Puppet: eine auf Puppet optimierte, vereinfachte Sprache
|
|
||||||
% -> einfacher für Einsteiger und Nicht-Programmieren
|
|
||||||
% -> Grund für manche Firmen -> wird um Umschulung zu sparen
|
|
||||||
% -> weniger flexible als Ruby (Grund bei Facebook, TODO youtube-Link, mehre Cluster mit mehr als 10.000 Nodes mit Chef provisionier)
|
|
||||||
%- Während die Regeln und Beschreibung in Chef standartmäßig in der Reihenfolge abgearbeitet
|
%- Während die Regeln und Beschreibung in Chef standartmäßig in der Reihenfolge abgearbeitet
|
||||||
% wird in der sie geladen werden, sortiert Puppet diese um. In beiden kann die
|
% wird in der sie geladen werden, sortiert Puppet diese um. In beiden kann die
|
||||||
% Reihenfolge durch Spezifikation von Abhängigkeiten umsortiert werden (Später
|
% Reihenfolge durch Spezifikation von Abhängigkeiten umsortiert werden (Später
|
||||||
@ -250,8 +412,6 @@ in den 1. Versionen hieß <TODO>, schrieb.
|
|||||||
%
|
%
|
||||||
%Note:
|
%Note:
|
||||||
%- Puppet: eigene Sprache -> komplexere Codebasis
|
%- Puppet: eigene Sprache -> komplexere Codebasis
|
||||||
%- Um die Größe der Community abzuschätzen (schwierig): Suchtreffer für Repositories bei Github
|
|
||||||
%- Alter(Puppet) > Alter(Chef)
|
|
||||||
%- Chef Enterprise vs Puppet Enterprise: Hinter beiden Projekten stehen Firmen, Weiterentwicklung des Produkt, bieten Support und Hosting an
|
%- Chef Enterprise vs Puppet Enterprise: Hinter beiden Projekten stehen Firmen, Weiterentwicklung des Produkt, bieten Support und Hosting an
|
||||||
%- Resume: Ähnliche Projekte, lösen das gleiche Problem auf unterschiedliche
|
%- Resume: Ähnliche Projekte, lösen das gleiche Problem auf unterschiedliche
|
||||||
% Weise
|
% Weise
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@misc{chefrun,
|
@misc{chefrun,
|
||||||
author = {chefrun},
|
author = {chef},
|
||||||
title = {About the chef-client Run},
|
title = {About the chef-client Run},
|
||||||
url = {http://docs.opscode.com/essentials_nodes_chef_run.html},
|
url = {http://docs.opscode.com/essentials_nodes_chef_run.html},
|
||||||
year = {2014},
|
year = {2014},
|
||||||
@ -29,3 +29,11 @@
|
|||||||
year = {2014},
|
year = {2014},
|
||||||
month = {März}
|
month = {März}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@misc{puppetlanguagechangelog,
|
||||||
|
author = {puppetlabs},
|
||||||
|
title = {Docs: History of Puppet Language Features},
|
||||||
|
url = {http://docs.puppetlabs.com/guides/language_history.html#puppet-language-features-by-release},
|
||||||
|
year = {2014},
|
||||||
|
month = {März}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user