Przejdź do treści głównej
UnitAI
Postmortem inżynierski

Idempotencja Serwera Pocztowego — Przetrwać SIGKILL po DATA

Paweł Bereś8 min lektury
Streszczenie inżynierskie

Co się dzieje, gdy proces serwera mailingowego ginie w trakcie transakcji SMTP po fazie DATA i jak zaprojektować kolejkę, by przy setkach tysięcy odbiorców nie wysłać ani jednego duplikatu.

Najtrudniejszy moment w protokole SMTP

Faza DATA w protokole SMTP kończy się przesłaniem kropki. Jeśli serwer wysyłający padnie zanim otrzyma kod odpowiedzi 250 OK, nie wie, czy e-mail został dostarczony, czy odrzucony.

Atomowe dwuetapowe zatwierdzanie

Rozwiązaniem jest deterministyczny identyfikator transakcji powiązany z unikalnym Message-ID oraz atomowa zmiana stanu wiadomości z wykorzystaniem blokad bazodanowych.

Weryfikacja testem SIGKILL

Przetestowaliśmy ten scenariusz 460 razy, uśmiercając proces serwera w losowych mikrosekundach po wysłaniu zawartości. Żaden odbiorca nie otrzymał wiadomości dwukrotnie.

Autor analizy
Paweł Bereś · UnitAI
Omów architekturę systemu