Heute: Babiel
Über Babiel
Babiel ist seit über 30 Jahren erfolgreich in den Bereichen Onlinekommunikation, E-Commerce, Hosting und Customer Communication Management tätig.
Dabei haben wir uns von den Anfängen des Internets bis heute unsere bodenständige, agile und innovative Art erhalten.
Unser Team von über 180 Mitarbeitenden berät, entwickelt, realisiert und betreibt Kundenlösungen von Düsseldorf, Berlin und Wien sowie auch Remote.
Wir bieten als Full Service Provider unseren Kunden ein Managed Hosting unter anderem von Webanwendungen, Datenbanksystemen oder Containern in Kubernetes mit unseren eigenen Netzwerk- und Infrastrukturkomponenten an.
Einsatz von Open Source
Bei Entwicklung und Betrieb von Services für unsere Kunden oder internen Tools setzen wir stark auf Open Source wie Linux, OpenVox (ehem. Puppet), HAProxy, Prometheus, Rundeck oder PostgreSQL.
Unseren internen Tool Stack entwickeln wir stetig weiter, um einen hohen Automatisierungsgrad zu erreichen.
Neben der Mitwirkung an Open Source Projekten unterstützen wir auch diverse Projekte finanziell, darunter Debian, Apache, OpenSSL, Letsencrypt, Renovate oder die OpenVox/Puppet Community Vox Pupuli.
Ein Beispiel
Wir benutzen HAProxy für alle unsere eingehenden HTTP- und sonstigen TCP-Verbindungen.
Die Konfiguration ist die komplexeste, die wir haben. Daher wird die Konfiguration nicht von Hand erstellt, sondern aus Metadaten und Includes generiert. Ein solcher Generator vereinfacht die Konfiguration aber kann es erschweren zu sehen, was man nun wirklich ändert.
Für solche Fälle mögen wir Tooling, dass uns einen Diff der generierten Konfiguration anzeigen kann. Da die HAProxy-Konfiguration eine einzelne Textdatei ist, könnten wir das diff-Programm nutzen um zwei Versionen zu vergleichen.
Das Problem mit einem rein textuellen Diff ist, dass dort auch Unterschiede auftauchen, die gar keine Auswirkung auf HAProxy haben, z.B. wenn sich nur die Reihenfolge oder Kommentare ändern.
Wenn wir zum Beispiel folgende Datei:
global log stdout format raw local0 info defaults timeout connect 5s timeout server 10s timeout client 20s # Beispielconfig frontend fe_proxy bind 0.0.0.0:80 default_backend be_proxy backend be_proxy server localhost 127.0.0.1:8080Mit einer neuen Version vergleichen, in der Timeout-Settings und die Reihenfolge der weiteren Konfigurationsabschnitte geändert wurde:
global log stdout format raw local0 info defaults timeout client 10s timeout server 10s timeout connect 5s backend be_proxy server localhost 127.0.0.1:8080 # Beispielconfig mit anderem Kommentar frontend fe_proxy bind 0.0.0.0:80 default_backend be_proxyDann bekommen wir von diff diese Ausgabe:
$ diff -u examples/old.cfg examples/new.cfg --- examples/old.cfg 2024-02-19 15:53:45 +++ examples/new.cfg 2024-02-19 15:54:09 @@ -2,15 +2,17 @@ log stdout format raw local0 info defaults - timeout connect 5s + timeout client 10s timeout server 10s - timeout client 20s + timeout connect 5s -# Beispielconfig + +backend be_proxy + server localhost 127.0.0.1:8080 + + +# Beispielconfig mit anderem Kommentar frontend fe_proxy bind 0.0.0.0:80 default_backend be_proxy - -backend be_proxy - server localhost 127.0.0.1:8080
Wir haben eine inhaltliche Änderung – aber diese geht unter in diversen strukturellen Änderungen, die keinen Effekt auf HAProxy haben. Deswegen haben wir ein kleines Go-Programm erstellt, welches HAProxy-Konfigurationsdateien grob in Datenstrukturen überträgt, und dann einen Diff erzeugt:
$ go run . examples/old.cfg examples/new.cfg &main.config{ "backend": {"be_proxy": {"server": {"localhost 127.0.0.1:8080"}}}, "defaults": { "": { "timeout": { - "client 20s", + "client 10s", "connect 5s", "server 10s", }, }, }, "frontend": {"fe_proxy": {"bind": {"0.0.0.0:80"}, "default_backend": {"be_proxy"}}}, "global": {"": {"log": {"stdout format raw local0 info"}}}, }
Jetzt können wir deutlich sehen, was sich tatsächlich geändert hat.
Dieses Beispiel ist natürlich konstruiert – normalerweise würde man diese mehreren im Diff angezeigten Änderungen in separaten Commits machen und nicht vermischen. Aber auch dann ist das Tool hilfreich um sicherzustellen, dass man beim reinen Umräumen einer Config keine inhaltlichen Änderungen gemacht hat.
Das Programm ist auf unserem GitHub-Account zu finden. Bitte beachte, dass das Programm nur als Beispiel dienen soll.
Auf den Chemnitzer Linuxtagen 2025 zeigen wir an unserem Ausstellerstand auch ein Demo-Setup mit HAProxy. Schau gerne vorbei und komm mit uns ins Gespräch – wir freuen uns auf Dich.
Weitere spannende Geschichten sowie Konzepte und Lösungen die bei uns gut funktionieren, findest Du in unserem Tech-Blog.
Falls Du auch Interesse hast solche Lösungen zu finden und an diesen zu arbeiten, bewerb Dich doch bei uns ;)