IT & Engineering

Wie Connection Pooling uns half, die Zustellzeit zu halbieren und opportunistisches TLS anzubieten

Dieser Beitrag wurde von Russell Jones verfasst, einem Softwareentwickler bei Mailgun, der für die Open-Source-Bereitstellung unserer Mime-Parsing-Bibliothek Flanker zuständig ist. Heute berichtet er in unserem Blog darüber, wie wir ausgehende Verbindungen optimiert und die Versanddauer reduziert haben, während wir opportunistisches TLS implementierten. Dieselbe Technik lässt sich zur Optimierung von allem nutzen, vom Web-Crawling bis hin zu externen APIs mit hohem Durchsatz, aber wir werden hier SMTP als Beispiel heranziehen.
Bild für Wie Connection Pooling uns half, die Zustellzeit zu halbieren und opportunistisches TLS anzubieten

Dieser Beitrag wurde von Russell Jones verfasst, einem Softwareentwickler bei Mailgun, zuständig für die Open-Source-Bereitstellung unserer Mime-Parsing-Bibliothek Flanker. Heute berichtet er in unserem Blog darüber, wie wir ausgehende Verbindungen optimiert und die Versanddauer reduziert haben, während wir opportunistisches TLS implementierten. Dieselbe Technik lässt sich zur Optimierung von allem nutzen, vom Web-Crawling bis hin zu externen APIs mit hohem Durchsatz, aber wir werden hier SMTP als Beispiel heranziehen.

Im Januar 2014

Wir beschlossen, uns wieder auf unsere zentrale Pipeline für den Versand zu konzentrieren, um Ausfallzeiten zu reduzieren und die Leistung zu steigern. Das bedeutet, Teile von Mailgun zu skalieren und zu überarbeiten, um unsere Ziele zu erreichen. Ich habe mich auf den Teil der E-Mail-Zustellung in der Versand-Pipeline konzentriert – den letzten Schritt, den eine E-Mail in der Mailgun-Versand-Pipeline durchläuft. Hierbei übermitteln wir die eigentliche Nachricht an den vorgesehenen Empfänger. Genau darüber werde ich heute sprechen.

Unsere Ziele waren einfach. Unserem Wachstum einen Schritt voraus sein, damit unsere Kunden keine Ausfallzeiten oder Verzögerungen bei der Zustellung erfahren, während wir weiterhin neue Kunden gewinnen und mehr E-Mails versenden.

Wir hatten einige konkrete Ziele:

  • Die Dauer für die Zustellung einer E-Mail reduzieren.
  • Die Drosselung reduzieren, die wir durch E-Mail-Service-Provider (ESPs) der Empfänger erfahren.
  • Die Sicherheit verbessern, indem die E-Mail-Zustellung wann immer möglich verschlüsselt wird (opportunistisches TLS).
  • Monitoring nutzen, um Einblicke in die neue SMTP-Engine zu erhalten, sodass wir die Dauer der Zustellung und die Drosselung besser nachverfolgen können.

Lösung

Unsere ursprüngliche SMTP-Engine war unkompliziert. Für jede E-Mail, die wir aus unserer Warteschlange für die Zustellung abriefen, öffneten wir eine Verbindung zu dem entsprechenden Server, sendeten die Nachricht und schlossen die Verbindung wieder.

Diese Technik war zwar unglaublich simpel und effektiv, aber in der Größenordnung, in der Mailgun heute agiert, war sie ineffizient. Bei jeder versendeten Nachricht hatten wir den Mehraufwand eines TCP- und eines SMTP-Handshakes, und bei einer Zustellung über TLS zusätzlich den TLS-Handshake. Um Ihnen einige Daten zu nennen: Es dauerte oft über anderthalb Minuten, eine Nachricht zuzustellen, wenn wir dies über TLS versuchten. Das ist einer der Gründe, warum wir opportunistisches TLS nicht schon früher eingeführt hatten – es war einfach zu kostspielig.

Als wir uns der Verbesserung der Zustellung widmeten, wollten wir sowohl die für den Versand einer Nachricht benötigte Zeit reduzieren als auch unseren Kunden opportunistisches TLS anbieten. Unsere Lösung bestand darin, mehrere Nachrichten pro Verbindung zu senden und Connection Pooling zu nutzen, um bereits bestehende Verbindungen wiederzuverwenden. Da Mailgun so viele E-Mails versendet, war es kein Problem, eine bereits offene Verbindung zu finden. Dadurch konnten wir den Mehraufwand für den Verbindungsaufbau beseitigen.

Was ermöglicht uns das?

Dadurch können wir die Kosten für den TCP- und TLS-Handshake über mehrere Nachrichten amortisieren, was die Kosten senkt und gleichzeitig die Geschwindigkeit der Zustellung erhöht. Die Zustellung von Nachrichten, die früher anderthalb Minuten oder länger dauern konnte, nimmt jetzt weniger als etwa 600 ms in Anspruch. Zudem können wir so die Versandraten von IP zu Empfänger-ESP feinabstimmen. Diese sind bei der E-Mail-Zustellung von entscheidender Bedeutung. So steigern wir die Gesamtzustellung und senken gleichzeitig die Kosten für uns und die ESPs. Ein besseres Mitglied der E-Mail-Welt zu sein, führt zu geringerer Drosselung, weniger Ressourcennutzung und einer besseren Zustellung für Kunden

Wir überwachen außerdem alles, von der Zustellrate über die Speichernutzung bis hin zur Zeit für die Zustellung. Dadurch konnten wir dem Zustand der SMTP-Engine stets einen Schritt voraus bleiben. Wir können Probleme nun erkennen, bevor sie auftreten, sodass Kunden nicht beeinträchtigt werden. Diese neuen Daten helfen uns auch bei der Bekämpfung von Spammern – ein endloser Kampf – und dabei, genauer einzugrenzen, wo Drosselungen auftreten. So können wir Mailgun in anderen Bereichen verbessern, um die Drosselung zu reduzieren und die Zeit für die Zustellung zu verringern.

Wie es von hier aus weitergeht

Der nächste logische Schritt ist die Überarbeitung unserer Algorithmen für die Versandrate. Jetzt, da wir über eine bessere Zustellung und Überwachung verfügen, können wir sehen, wann und wo Drosselungen auftreten und welche Änderungen sich auf die Drosselung auswirken. Doch keine noch so großen algorithmischen Änderungen unsererseits können guten Traffic übertreffen. Qualitativ hochwertiger Traffic übertrifft alles, wenn es um die E-Mail-Zustellung geht. Deshalb besteht unsere andere große Investition im Jahr 2014 darin, unser System für die Reputation zu verbessern, um es präziser zu machen und unseren Kunden mehr Daten zur Verfügung zu stellen.

Dazu wird in Zukunft noch mehr kommen. Bis dahin …

Viel Spaß beim Versenden.