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
Omów architekturę systemuPaweł Bereś · UnitAI