chef: Vergleich weiter fortgeschritten
This commit is contained in:
parent
953f4c4312
commit
62a90a347a
@ -8,7 +8,7 @@
|
||||
\usepackage{courier}
|
||||
\usepackage{microtype}
|
||||
\usepackage{pgfplots}
|
||||
\pgfplotsset{compat=1.3}
|
||||
\pgfplotsset{compat=newest}
|
||||
|
||||
\usepackage{epigraph}
|
||||
\setlength\epigraphwidth{8cm}
|
||||
|
@ -142,8 +142,7 @@ findet. Hier nochmal die einzelnen Verzeichnisse im Überblick:
|
||||
Cookbooks angegeben werden.
|
||||
\end{description}
|
||||
|
||||
Beispiel ERB-Template:
|
||||
\begin{lstlisting}
|
||||
\begin{lstlisting}[caption={Beispiel ERB-Template:}]
|
||||
Diese Zeile wird beim Rendern ohne Aenderung uebernommen
|
||||
<%# Ein Kommentar%>
|
||||
|
||||
@ -228,21 +227,184 @@ Mechanismus genutzt um Tests auszuführen.
|
||||
\subsubsection{Vergleich mit puppet}
|
||||
\label{vergleich_mit_puppet}
|
||||
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
|
||||
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
|
||||
in den 1. Versionen hieß <TODO>, schrieb.
|
||||
- Konsultantfirma: Infrastruktur bis zum Deployment
|
||||
- mangelnde Abstraktionsmöglichkeiten
|
||||
\cite{chefhistory}.
|
||||
Chef Adam Jacob war selbst langjähriger Puppetnutzer, bevor er Chef schrieb.
|
||||
Seine damalige Konsultantfirma betreute mehrere Firmen bei der Provisionierung
|
||||
der Infrastruktur bis hin zum Deployment der Anwendung. Dabei kam Puppet zum
|
||||
Einsatz. Mit steigender Anzahl der Kunden, stieg nach Aussagen von Adam Jacob
|
||||
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
|
||||
% wird in der sie geladen werden, sortiert Puppet diese um. In beiden kann die
|
||||
% Reihenfolge durch Spezifikation von Abhängigkeiten umsortiert werden (Später
|
||||
@ -250,8 +412,6 @@ in den 1. Versionen hieß <TODO>, schrieb.
|
||||
%
|
||||
%Note:
|
||||
%- 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
|
||||
%- Resume: Ähnliche Projekte, lösen das gleiche Problem auf unterschiedliche
|
||||
% Weise
|
||||
|
@ -7,7 +7,7 @@
|
||||
}
|
||||
|
||||
@misc{chefrun,
|
||||
author = {chefrun},
|
||||
author = {chef},
|
||||
title = {About the chef-client Run},
|
||||
url = {http://docs.opscode.com/essentials_nodes_chef_run.html},
|
||||
year = {2014},
|
||||
@ -29,3 +29,11 @@
|
||||
year = {2014},
|
||||
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