Menü
Blogartikel

Design‑Hinweise für ein Temporary‑Mail‑Backend mit Go und MongoDB

CleanTempMail verwendet Go und MongoDB, aber die Wahl von Sprache und Datenbank ist nur ein Teil beim Betrieb eines E‑Mail‑Empfängers. Die wichtigen Design‑Fragen betreffen, wann eine Nachricht als angenommen gilt, wie sie abgerufen wird und was passiert, wenn der Speicher ausgelastet ist.

Akzeptanz und Haltbarkeit definieren

Ein Empfänger sollte eine dokumentierte Richtlinie für das Persistieren akzeptierter Mails und den Umgang mit temporären Fehlern haben. Nicht bestätigte Datenbank‑Writes sind kein Shortcut zu zuverlässiger Zustellung: Sie erschweren die Feststellung, ob ein Write erfolgreich war. Wählen Sie Haltbarkeitseinstellungen gemäß den Wiederherstellungsanforderungen des Dienstes und validieren Sie sie unter Fehlbedingungen.

Die tatsächlichen Lese‑Pfade indexieren

Untersuchen Sie die Abfragen, die für die Posteingangs‑Auflistung, Nachrichten‑Suche und Bereinigung verwendet werden. Wählen Sie Indizes, die diese Abfragen unterstützen, und messen Sie deren Lese‑ und Schreibkosten. Erstellen Sie keinen Index nur, weil ein anderer Dienst ihn nutzt.

Ablauf mit realistischen Erwartungen nutzen

MongoDB‑TTL‑Indizes können abgelaufene Dokumente im Hintergrund entfernen. Das Löschen erfolgt nicht sofort und verbraucht Ressourcen. Der Ablauf einer gespeicherten Nachricht deaktiviert nicht deren Empfängeradresse und entfernt keine Kopien in unverknüpften Protokollen, Exporten oder Backups. Siehe MongoDB‑TTL‑Dokumentation für Verhalten und Einschränkungen.

Parallelität und Warteschlangen begrenzen

Begrenzen Sie eingehende Verbindungen, Parsing‑Arbeit, Empfänger‑Amplifikation und gleichzeitige Speicheroperationen. Wiederverwenden Sie Datenbank‑Clients und dimensionieren Sie Verbindungspools anhand von Messungen statt einer universellen Empfehlung zur Pool‑Größe. Eine Wiederholungs‑Warteschlange benötigt eine begrenzte Worker‑Anzahl und Beobachtbarkeit hinsichtlich Alter sowie Länge.

Posteingangs‑Updates von Liefergarantien trennen

Server‑Sent‑Events können einen verbundenen Browser aktualisieren, nachdem eine Nachricht verarbeitet wurde. Sie entfernen nicht die Sender‑Warteschlangen oder Netzwerk‑Latenz. Programmgesteuerte Clients sollten der aktuellen API‑Dokumentation folgen, einschließlich Zugriffs‑ und Anfrage‑Limits.

Vergleichen Sie Designs anhand repräsentativer Traffic‑ und Fehlertests. Dieser Artikel liefert keinen Benchmark, der zeigt, dass Go oder MongoDB allgemein schneller ist als ein alternativer Stack.