CleanTempMail использует Go и MongoDB, но выбор языка и базы данных — лишь часть работы почтового приемника. Важные вопросы дизайна касаются того, когда сообщение считается принятым, как оно извлекается и что происходит, когда хранилище занято.
Определите принятие и долговечность
Приемник должен иметь документированную политику сохранения принятых писем и обработки временных сбоев. Не подтвержденные записи в базе данных не являются обходным путем к надежной доставке: они усложняют определение, произошла ли запись успешно. Выбирайте настройки долговечности в соответствии с требованиями восстановления сервиса и проверяйте их в условиях сбоев.
Индексируйте реальные пути чтения
Проанализируйте запросы, используемые для списка входящих, поиска сообщений и очистки. Выберите индексы, поддерживающие эти запросы, и измерьте их стоимость чтения и записи. Не создавайте индекс только потому, что другой сервис его использует.
Используйте истечение срока с реалистичными ожиданиями
TTL‑индексы MongoDB могут удалять просроченные документы в фоновом режиме. Удаление не мгновенно и потребляет ресурсы. Истечение срока хранения сообщения не отключает его адрес получателя и не удаляет копии в несвязанных журналах, экспортных файлах или резервных копиях. См. документацию по TTL MongoDB для описания поведения и ограничений.
Ограничьте параллелизм и очереди
Ограничьте входящие соединения, работу парсера, усиление получателей и одновременные операции хранения. Переиспользуйте клиенты базы данных и задавайте размер пулов соединений, опираясь на измерения, а не на универсальную рекомендацию по размеру пула. Очередь повторных попыток требует ограниченного количества работников и наблюдаемости как за возрастом, так и за длиной.
Разделяйте обновления ящика от гарантий доставки
События, отправляемые сервером, могут обновлять подключенный браузер после обработки сообщения. Они не удаляют очереди отправителей и не устраняют сетевую задержку. Программные клиенты должны следовать текущей документации API, включая ограничения доступа и запросов.
Сравнивайте дизайны, используя репрезентативный трафик и тесты сбоев. Эта статья не предоставляет бенчмарк, подтверждающий, что Go или MongoDB универсально быстрее альтернативного стека.