IT & Engineering
Comment le pool de connexions nous a aidés à réduire le temps de livraison de moitié et à proposer le TLS opportuniste
Cet article a été écrit par Russell Jones, développeur logiciel chez Mailgun, responsable de la mise en open source de notre bibliothèque d’analyse MIME flanker. Aujourd’hui, il explique sur le blog comment nous avons optimisé les connexions sortantes et réduit le temps d’envoi tout en implémentant le TLS opportuniste. La même technique peut être utilisée pour tout optimiser, de l’exploration web aux API externes à haut débit, mais nous prendrons le SMTP comme exemple.
En janvier 2014
Nous avons décidé de nous recentrer sur notre pipeline d’envoi principal afin de réduire les temps d’arrêt et d’augmenter les performances. Cela implique de faire évoluer et de remanier certaines parties de Mailgun pour atteindre nos objectifs. Je me suis concentré sur la partie livraison d’emails du pipeline d’envoi. Il s’agit de la dernière étape du parcours d’un email dans le pipeline d’envoi de Mailgun, au cours de laquelle nous transmettons le message au destinataire prévu, et c’est ce dont je vais vous parler aujourd’hui.
Nos objectifs étaient simples. Anticiper notre croissance pour qu’à mesure que nous développons notre clientèle et envoyons plus d’emails, celle-ci ne subisse aucune interruption ni aucun ralentissement de la vitesse de livraison.
Nous avions plusieurs objectifs concrets :
- Réduire le temps de livraison d’un email.
- Réduire la limitation imposée par les services d’emailing (ESP) des destinataires.
- Améliorer la sécurité en chiffrant la livraison d’emails dès que possible (TLS opportuniste).
- Utiliser la surveillance pour mieux comprendre le nouveau moteur SMTP afin de suivre plus précisément le temps de livraison et la limitation.
Solution
Notre moteur SMTP d’origine était simple : pour chaque email que nous retirions de notre file d’attente de livraison, nous ouvrions une connexion avec le serveur cible, envoyions le message, puis fermions la connexion.
Bien qu’incroyablement simple et efficace, cette technique entraînait un gaspillage à l’échelle à laquelle Mailgun opère aujourd’hui. Pour chaque message envoyé, nous subissions la charge d’un handshake TCP, d’un handshake SMTP et, en cas de livraison via TLS, d’un handshake TLS. Pour vous donner un ordre d’idée, il nous fallait souvent plus d’une minute et demie pour livrer un message si nous passions par le TLS. C’est l’une des raisons pour lesquelles nous n’avions pas déployé le TLS opportuniste plus tôt : son coût était tout simplement trop élevé.
Lorsque nous avons commencé à réfléchir à l’amélioration de la livraison, nous souhaitions réduire le temps d’envoi des messages tout en offrant le TLS opportuniste à notre clientèle. Notre solution a consisté à envoyer plusieurs messages par connexion et à utiliser le pool de connexions pour réutiliser les connexions existantes. Comme Mailgun envoie énormément d’emails, trouver une connexion déjà ouverte ne posait aucun problème, ce qui nous a permis d’éliminer la charge liée à l’établissement des connexions.
Qu’est-ce que cela nous permet de faire ?
Cela nous permet d’amortir le coût des handshakes TCP et TLS sur plusieurs messages, réduisant ainsi leur coût tout en augmentant la vitesse de livraison. Les messages dont la livraison pouvait prendre une minute et demie ou plus mettent désormais moins de 600 ms environ pour être livrés. Cela nous permet également d’ajuster finement les taux d’envoi IP vers les services d’emailing (ESP) destinataires, ce qui est d’une importance cruciale pour la livraison d’emails, tout en augmentant la livraison globale et en réduisant les coûts pour nous comme pour les ESP. Être de meilleurs acteurs dans le monde de l’email entraîne une limitation moindre, une plus faible utilisation des ressources et une meilleure livraison pour la clientèle.
Nous surveillons également tout, du taux de livraison à l’utilisation de la mémoire, en passant par le temps de livraison. Cela nous a permis d’anticiper l’état de santé du moteur SMTP. Nous pouvons désormais détecter les problèmes avant qu’ils ne surviennent, afin que la clientèle ne soit pas impactée. Ces nouvelles données nous aident également à lutter contre les spammeurs, un combat sans fin, mais aussi à cibler l’origine des limitations pour améliorer d’autres aspects de Mailgun, réduisant ainsi la limitation et le temps de livraison.
La suite des événements
L’étape logique suivante consiste à retravailler nos algorithmes de taux d’envoi. Maintenant que nous bénéficions d’une meilleure livraison et d’une surveillance accrue, nous pouvons voir quand et où la limitation se produit, et quels changements l’affectent. Cependant, aucun changement algorithmique de notre part ne pourra jamais remplacer un trafic de qualité. Un trafic de haute qualité prime sur tout le reste en matière de livraison d’emails. C’est pourquoi notre autre grand investissement en 2014 consiste à améliorer notre système de réputation pour le rendre plus précis et fournir plus de données à notre clientèle.
Plus d’informations à venir sur ce sujet. D’ici là…
Bons envois !