Heute: Babiel

In unserem Presseformat Blog geben wir unseren Sponsoren die Gelegenheit, ihre Arbeit im Open-Source-Bereich selbst vorzustellen.

Ü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:8080
Mit 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_proxy
Dann 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 ;)