Wenn man per Mail nicht nur mit einer kleinen Zahl an Personen kommunizieren, sondern einen möglichst großen Adressatenkreis erreichen will, bietet sich der Einsatz von
Mailinglisten an (wer keine Ahnung hat, was eine ML ist, der möge das jetzt bitte in dem Wikipedia-Link nachlesen). Die Software der Wahl ist in meinem Fall
GNU Mailman - vor allem, weil das Tool über eine auch für unerfahrene Endnutzer geeignete Weboberfläche verfügt, über welche man sich z.B. an der Liste an- und abmelden, seine Daten ändern oder die Archive einsehen kann.
Aus administrativer Sicht hat die Software drei Vorteile:
- Sie ist extrem schnell und einfach einzurichten und erfordert kaum Wartung.
- Die Integration mit dem Mailserver (also eigentlich MTA) Postfix ist extrem komfortabel.
- Die Software erkennt automatisch und sehr, sehr zuverlässig, wenn Mailadressen mit der Zeit ungültig werden und entfernt diese dann von den Verteilern.
Um den Punkt Nummer drei noch effektiver zu gestalten, kann Mailman eine Technik anwenden, die als
VERP bezeichnet wird. Dabei wird, vereinfach gesagt, die Zieladresse in der Absenderadresse kodiert. Sendet die Mailingliste z.B. mit dem Absender
CODE:
<mailingliste-bounces@lists.incertum.net>
eine Mail an die Adresse „post@largefeed.incertum.net”, so wird nach VERP aus dem Absender ein:
CODE:
<mailingliste-bounces+post=largefeed.incertum.net@lists.incertum.net>
Der Vorteil liegt auf der Hand: Kommt es beim Versenden der Mail zu einem Fehler, so kann man aus der kodierten Adresse sehr schnell, also mit wenig CPU-Belastung, herauslesen, welche Adresse fehlerhaft war. Die Art und Weise, wie Mailman das VERP-Protokoll umsetzt, ist tadellos, hat aber einen enscheidenden Nachteil: Für jeden Empfänger wird eine eigene Mail generiert. Und da MTAs wie Postfix für jede Mail, die sie bearbeiten, eine temporäre Datei auf der Festplatte ablegen, das so genannte Queue-File, entsteht bei vielen Empfängern ein ganz schöner Überhang an Ein-/Ausgabe-Operationen.
Es geht aber auch eleganter: Postfix
unterstützt VERP nämlich von Haus aus - und für Mailman existiert ein
Patch, der die Benutzung dieses Features erlaubt. Und damit wird dann pro Nachricht auch nur noch EIN Queue-File erzeugt.
Also habe ich mir Sonntagabend mal zwei Stunden Zeit genommen und dann über Nacht einen Test laufen lassen. Das Test-Setup mit zwei virtuellen Maschinen sah folgendermaßen aus:

Die Komponente „MailGen” hat dabei die Mails der letzten paar Tage vorliegen, welche ich aus den Archiven der Listen extrahiert habe. Sie liefert alle 1000ms genau zwei Nachrichten an „Postfix” aus. Letzteres nimmt diese Mails, schickt sie durch einen VIren- und Spamfilter und benutzt danach die Mailman-Integration via „postfix-to-mailman.py”, um die Mails an „Mailman” weiterzuleiten. Dieses hat die Empfängerlisten und verteilt die Mails dann entsprechend, wobei es die Mails lokal (also via Loopback-Networking) an „Postfix” zurückliefert (und nicht nochmal durch den Spam- und Virenfilter jagt). Jenes versucht dann ganz normal, die Mails zuzustellen, allerdings werden die ausgehenden TCP-Verbindungen gekapert und auf die Komponente „MsgSink” umgebogen. Letzteres loggt die Absenderadressen und verwirft die Nachrichten. Ich habe vor dem Test sichergestellt, daß die DNS-Caches des Testnetzes gefüllt sind und mich auch vergewissert, daß die Testkomponenten „MailGen” und „MsgSink” keine meßbare Last erzeugen.
Insgesamt sind bei „MsgSink” bei jedem der sechs Testläufe (dreimal mit Standard-VERP und dreimal mit Postfix-XVERP) je exakt 140009 Nachrichten eingegangen. In keinem der Fälle kam es dabei zu abweichenden Absenderadressen, wenn der XVERP-Patch benutzt wurde - in dieser Hinsicht funktioniert der Patch also wie er soll, und das ist auch wichtig, denn wenn andere Adressen generiert würde, könnte Mailman evt. durcheinander kommen.
Kommen wir aber zum interessanten Teil, nämlich den (gemittelten) Zeiten:
| VERP-Modus | Zeit (hh:mm:ss) | Zeit (Sekunden) | Nachrichten/Sekunde |
|---|
| Standard-Mailman | 01:59:01 | 7141s | 19.60 |
| Postfix-XVERP | 01:11:44 | 4304 | 32.52 |
Wie man sieht, benötigt die XVERP-Lösung über 47 Minuten weniger Zeit, womit sich der Durchsatz von Nachrichten/Sekunde um zwei Drittel erhöht.
Ich habe mal diverse belesene und erfahrene Leute im Netz befragt, was von diesen Ergebnissen zu halten ist, ich glaube aber fest, daß der Patch zumindest mal nichts schadet - da halte ich Euch auf dem Laufenden.
Schönen Pfingstmontag wünsche ich Euch - meiner hat mit der Matthäus-Passion begonnen

Frisch, heißt und fettig - und jetzt im Repository.
Aufgenommen: Mai 14, 12:35