CleanTempMail menggunakan Go dan MongoDB, tetapi pilihan bahasa dan basis data hanya sebagian dari menjalankan penerima email. Pertanyaan desain penting berkaitan dengan kapan sebuah pesan dianggap diterima, bagaimana cara mengambilnya, dan apa yang terjadi ketika penyimpanan sibuk.
Definisikan penerimaan dan daya tahan
Seorang penerima harus memiliki kebijakan terdokumentasi untuk menyimpan email yang diterima dan menangani kegagalan sementara. Penulisan basis data yang tidak diakui bukanlah jalan pintas ke pengiriman yang dapat diandalkan: hal itu membuat lebih sulit mengetahui apakah penulisan berhasil. Pilih pengaturan daya tahan sesuai dengan kebutuhan pemulihan layanan dan validasi di bawah kondisi kegagalan.
Indeks jalur baca sebenarnya
Periksa kueri yang digunakan untuk daftar kotak masuk, pencarian pesan, dan pembersihan. Pilih indeks yang mendukung kueri tersebut dan ukur biaya baca serta tulisnya. Hindari membuat indeks semata-mata karena layanan lain menggunakannya.
Gunakan kedaluwarsa dengan ekspektasi realistis
Indeks TTL MongoDB dapat menghapus dokumen yang kedaluwarsa di latar belakang. Penghapusan tidak langsung dan memakan sumber daya. Kedaluwarsa pesan yang disimpan tidak menonaktifkan alamat penerimanya atau menghapus salinan dalam log, ekspor, atau cadangan yang tidak terkait. Lihat dokumentasi TTL MongoDB untuk perilaku dan keterbatasannya.
Batasi konkurensi dan antrian
Batasi koneksi masuk, pekerjaan parsing, amplifikasi penerima, dan operasi penyimpanan bersamaan. Gunakan kembali klien basis data dan ukuran pool koneksi dengan mengandalkan pengukuran bukan rekomendasi ukuran pool universal. Antrian retry memerlukan jumlah pekerja terbatas dan observabilitas untuk usia serta panjangnya.
Pisahkan pembaruan kotak masuk dari jaminan pengiriman
Server-sent events dapat memperbarui browser yang terhubung setelah pesan diproses. Mereka tidak menghapus antrian pengirim atau latensi jaringan. Klien programatik harus mengikuti dokumentasi API saat ini, termasuk batas akses dan permintaan.
Bandingkan desain menggunakan lalu lintas representatif dan tes kegagalan. Artikel ini tidak menyediakan benchmark yang menetapkan bahwa Go atau MongoDB secara universal lebih cepat daripada tumpukan alternatif.