IT & Engineering
Como o pool de conexões nos ajudou a reduzir o tempo de entrega pela metade e oferecer TLS oportunístico
Este post foi escrito por Russell Jones, desenvolvedor de software da Mailgun responsável por disponibilizar em código aberto a nossa biblioteca de análise de MIME flanker. Hoje, ele vai escrever no blog sobre como otimizamos as conexões de saída e reduzimos o tempo de envio ao implementar o TLS oportunístico. A mesma técnica pode ser usada para otimizar tudo, desde web crawling até APIs externas de alto rendimento, mas discutiremos o SMTP como exemplo.
Em janeiro de 2014
Decidimos que precisávamos focar novamente em nosso pipeline principal de envio para reduzir o tempo de inatividade e aumentar o desempenho. Isso significa escalar e refatorar partes da Mailgun para atingir nossos objetivos. Eu foquei na parte de entrega de e-mails do pipeline de envio, a última etapa que um e-mail percorre no pipeline de envio da Mailgun, onde transmitimos a mensagem real para o destinatário pretendido, e é sobre isso que falarei hoje.
Nossos objetivos eram simples. Manter-nos à frente do nosso crescimento para que, à medida que continuamos a adicionar clientes e a enviar mais e-mails, nossos clientes não enfrentem nenhum tempo de inatividade ou lentidão na velocidade de entrega.
Tínhamos algumas metas concretas:
- Reduzir o tempo de entrega de um e-mail.
- Reduzir o throttling que sofremos de provedores de serviços de e-mail (ESPs) destinatários.
- Melhorar a segurança criptografando a entrega de e-mails sempre que possível (TLS oportunístico).
- Usar monitoramento para obter insights sobre o novo mecanismo SMTP, para que possamos rastrear melhor o tempo de entrega e o throttling.
Solução
Nosso mecanismo SMTP original era simples: para cada e-mail que retirávamos da nossa fila de entrega, abríamos uma conexão com o servidor para o qual tentávamos entregar, enviávamos a mensagem e, em seguida, fechávamos a conexão.
Embora fosse incrivelmente simples e eficaz, na escala em que a Mailgun opera agora, essa técnica gerava desperdício. Para cada mensagem que enviávamos, tínhamos a sobrecarga de um handshake TCP, um handshake SMTP e, se estivéssemos entregando via TLS, tínhamos o handshake TLS. Para dar uma ideia com dados, muitas vezes levávamos mais de um minuto e meio para entregar uma mensagem se estivéssemos tentando entregar via TLS. Esse é um dos motivos pelos quais não tínhamos implementado o TLS oportunístico antes — era simplesmente muito custoso.
Quando nos sentamos e começamos a pensar em melhorar a entrega, queríamos reduzir o tempo que levava para enviar uma mensagem, bem como oferecer o TLS oportunístico para nossos clientes. A nossa solução foi enviar várias mensagens por conexão e usar o pool de conexões para reutilizar as conexões já existentes. Como a Mailgun envia muitos e-mails, encontrar uma conexão que já estivesse aberta não foi um problema e isso nos permitiu eliminar a sobrecarga de estabelecimento de conexões.
O que isso nos permite fazer?
Isso nos permite amortizar o custo do handshake TCP e TLS em várias mensagens, reduzindo seu custo e aumentando a velocidade de entrega. As mensagens que podiam levar um minuto e meio ou mais para serem entregues agora levam aproximadamente menos de 600 ms para a entrega. Isso também nos permite ajustar as taxas de envio do IP para o ESP destinatário, que são criticamente importantes na entrega de e-mails, e aumentar a entrega geral enquanto reduzimos os custos para nós e para os ESPs. Ser um bom cidadão no mundo dos e-mails leva a um throttling menor, menos uso de recursos e uma melhor entrega para os clientes
Também monitoramos tudo, desde a taxa de entrega, o uso da memória até o tempo de entrega. Isso nos permitiu ficar um passo à frente em relação à integridade do mecanismo SMTP. Agora podemos detectar problemas antes que ocorram, para que os clientes não sejam afetados. Esses novos dados também nos ajudam a combater spammers, uma batalha sem fim, além de nos ajudar a identificar onde o throttling está ocorrendo, para que possamos melhorar a Mailgun em outras áreas para reduzir o throttling e o tempo de entrega.
Para onde vamos a partir daqui
O próximo passo lógico é trabalhar na reformulação dos nossos algoritmos de taxa de envio. Agora que temos uma melhor entrega e monitoramento, podemos ver quando e onde o throttling ocorre, além de saber quais mudanças o afetam. No entanto, nenhuma mudança algorítmica da nossa parte pode superar um bom tráfego. Tráfego de alta qualidade supera tudo no que diz respeito à entrega de e-mails. É por isso que nosso outro grande investimento em 2014 é melhorar nosso sistema de reputação para torná-lo mais preciso e fornecer mais dados aos nossos clientes.
Mais novidades sobre isso em breve. Até lá…
Bons envios!