Versandperformance
Aus Melin DokuWiki
Ein wichtiges Thema beim E-Mail Marketing ist die Versandgeschwindigkeit des Mailsystems. Bei Melin erfolgt der Versand der Mailings über ein oder mehrere MMDB Emailsender.
Die Versandgeschwindigkeit hängt dabei von vielerlei Faktoren ab, zum Beispiel der Komplexität des Mailings, der verfügbaren Bandbreite, der Reaktionsgeschwindigkeit des DNS-Service, der Datenbank, der verfügbaren Rechenleistung und der Festplattengeschwindigkeit.
Für die folgenden Messungen wurde Melin auf einem Root-Server der Firma 1&1 installiert (3Ghz, 1 GB Hauptspeicher) der ansonsten nicht modifiziert wurde. Als Mailer wird Postfix verwendet, als Datenbank die MySQL-Datenbank auf demselben Server.
Inhaltsverzeichnis |
[bearbeiten] Messung unter Idealbedingungen
Um eine erste Abschätzung der Versandperformance von Melin zu erreichen wurde das System so konfiguriert daß statt nicht über SMTP ausgelifert wird, sondern die Mails als Datei generiert werden und in direkt in die Mailqueue des SMTP-Servers geschrieben werden (MAILDROP). Dadurch ist das System unabhängig von der verfügbaren Bandbreite. Die Nutzerdaten werden aus der Filesystem-Datenbank ausgelesen und nicht aus der MySQL (ein Tool um automatisiert die Melin-Datenbank ins Filesystem zu übertragen ist mmdb2fs).
Das Testmailing verwendet eine Personalisierung (Anrede mit Name, Vorname) und ein Zusatzfeld aus der Userdatenbank (Kundennummer). Ansonsten ist die Vorlage BurstMail-Tauglich, verwendet also keine IF-Abfragen, Themenkanäle, Attachements oder Inline-Images die mit ausgeliefert werden müssen.
Ein 20KB-Mailing kann unter Idealbedingungen vom System mit einer Rate von ca 1.1 Mio Mails/Stunde erzeugt werden. Da diesess Mailing eine Datenmenge von 24 Gigabyte hat ist verständlich, daß die dahinterliegenden Systeme wie Mailserver und Leitung die Auslieferung nicht in dieser Zeit bewerkstelligen können, Melin liefert hier schneller an als eine Auslieferung erfolgen kann.
[bearbeiten] Messung mit SMTP-Versand
Im nächsten Schritt wird auf einem kleineren Testsystem (1.8 Ghz Intel DualCore, 1 GB Hauptspeicher) nicht mehr in die Mailqueue geschrieben, sondern die Mail per SMTP ausgeliefert. Beim direkten Vergleich sieht man den drastischen Unterschied zwischen beiden Varianten.
Bei der obigen Messung wurde dasselbe Mailing einmail über direktes Schreiben mit einem PlugIn ausgeliefert, dann wurde der Versand auf SMTP umgestellt. Dabei zeigt sich, daß die maximale Geschwindigkeit mit der Mails an den SMTP-Server übergeben werden können bei etwa 430 Mails/Minute pro SMTP-Verbindung liegt. Daraufhin wurde die Zahl der Versandplugins im Melin-Workflow auf 7 erhöht, und die Versandrate ist fast linear angestiegen. Die Erfahrung hat gezeigt daß bei 12-16 PlugIns und der gelichen Zahl an SMTP-Verbindungen eine Sättigungsgrenze erreicht ist und kein weiterer Anstieg der Versandrate via SMTP erreicht werden kann. Begrenzt
[bearbeiten] Messung Datenbank vs. Filesystem
Als nächstes wird wieder über MAILDROP verschickt, damit kein Einfluß duch die Netzwerkverbindung besteht. Dasselbe Mailing wird verschickt, jedoch werden einmal die Benutzerdaten aus der SQL-Datenbank gezogen, und einmal aus dem Filesystem.
In diesem Fall ist das Filesystem etwa um den Faktor vier schneller als die Datenbank. Dieses Ergebnis muss jedoch für den realen Betrieb relativiert werden: beim Test steht die Festplatte exklusiv zur Verfügung und ist durch keinen anderen Prozess belastet, und die Datenbank befindet sich ebenfalls auf dem Testsystem. Wenn die Datenbank extern gehostst wird und die interne Festplatte durch andere Systeme gestört wird kann sich das Verältnis angleichen. Die optimale Performance errreicht man sicher dadurch für die Userdatenbank im Filesystem eine eigene Festplatte bereitzustellen (die Datenbank befindet sich in msite/demon/userdata).
[bearbeiten] Messung Schnellparser vs. Komplettparser
Bei der nächsten Messung werden die Userdaten aus dem Filesystem gezogen um eine Konstanz der Datenrate sicherzustellen. Dasselbe Mailing wurde verschickt, einmal nur mit der Schnellpersonalisierung
[Hallo Herr FIRST_NAME LAST_NAME|Hallo Frau FIRST_NAME LAST_NAME|Liebe Leserin, lieber Leser]
ein andermal mit einer zusätzlichen IF-Abfrage:
#IF ("1" EQ "1") eins gleich ein #ENDIF
im Code. Diese Erweiterung führt dazu daß nicht mehr als BurstMail verschickt werden kann, sondern der TemplateScanner verwendet wird, der mehr Zeit verbraucht und dessen Verarbeitungszeit linear ansteigt.
Der Schnellparser ist etwa um den Faktor fünf schneller als der Vollparser, kann jedoch nur die einfache Personalisierung einfügen und Userdaten einfügen. Für IF-Abfragen, Themenkanäle oder Clicktracking Typ I wird immer der Vollparser benötigt.
[bearbeiten] Zusammenfassung
Der Mailversand über Melin kann je nach Mailing zwischen 200 und 20.000 Mails pro Minute schwanken, je nachdem welche Funktionen des MMDB Emailsender verwendet werden.
Den größten Einfluss auf die Performance haben dabei
- Mailinggröße (Verdoppelung der Größe einer Einzelmail halbiert die Versandrate)
- DNS- und SMTP-Server (ein SMTP-Thread kann nur 400 Mails verarbeiten)
- Komplexität des Mailings (IF-Abfragen, Ersetzungen durch Link-Tracking, Themenkanäle - Versandrate kann um den Faktor 5-10 sinken)
- Datenbank-Server
Keinen Einfluss auf die Versandgeschwindigkeit haben Operationen die VOR dem eigentlichen Versand durchgeführt werden können:
- Robinson-Sperrliste
- Ersetzungen von Hashdaten (z.B. %MAILING_ID%)
[bearbeiten] Optimierung über Flags
Wenn bekannt ist, daß ein Mailing die folgenden Elemente nicht enthält, sollen die in Klammern angegeben Hashfelder auf den Wert "1" gesetzt werden um den Parser zu entlasten:
- Keine Attachements (M_SKIP_ATTACHEMENTS)
- Keine Inline-Images, Bilder die mit der Mail mitgeschickt werden (M_SKIP_INLINEIMAGES)
- Keine MS Word Sonderzeichen wie bedingter Trennstrich (M_IS_CHARSAFE)
- Keine Einzelversandprotokollierung in der Datenbank notwendig (M_SKIP_LOG_SENDMAIL)
- Keine Protokollierung der Aktivität in rotierenden Logs (M_SKIP_LOG4J)
Das MMDB Emailsender-Plugin scannt das Mailing vor dem Start um zu ermitteln ob der Schnellparser verwendet werden kann oder ob das Mailing Elemente enthält die die Verwendung des Vollparsers notwendig machen. Wenn immer der Schnellparser verwendet werden soll, kann das folgende Hashfeld gesetzt werden:
- M_EMAILSENDER_SKIP_PROCESSOR
Wenn alle diese Bedingungen zutreffen, und zudem die Abonentendatenbank im Filesystem vorliegt sowie M_MAILDROP_DIR gesetzt ist, wechselt das Versandplugin vor dem Versand in den BurstMail-Modus um einen maximal schnellen Versand durchführen zu können. Im Logfile wird der folgende Eintrag vermerkt:
Switching to burst mode (template is compliant for rapid sending)
