CleanTempMail usa Go y MongoDB, pero la elección del lenguaje y la base de datos es solo una parte de ejecutar un receptor de correo. Las preguntas de diseño importantes conciernen cuándo se considera aceptado un mensaje, cómo se recupera y qué ocurre cuando el almacenamiento está ocupado.
Definir aceptación y durabilidad
Un receptor debe tener una política documentada para persistir el correo aceptado y manejar fallos temporales. Las escrituras no reconocidas en la base de datos no son un atajo para una entrega fiable: dificultan saber si una escritura tuvo éxito. Elige configuraciones de durabilidad según los requisitos de recuperación del servicio y valídalas bajo condiciones de falla.
Indexar las rutas de lectura reales
Inspecciona las consultas usadas para listar bandejas, buscar mensajes y limpiar. Selecciona índices que soporten esas consultas y mide su costo de lectura y escritura. Evita crear un índice solo porque otro servicio lo use.
Usar expiración con expectativas realistas
Los índices TTL de MongoDB pueden eliminar documentos caducados en segundo plano. La eliminación no es inmediata y consume recursos. La expiración de un mensaje almacenado no desactiva su dirección de destinatario ni elimina copias en registros, exportaciones o copias de seguridad no relacionados. Consulta la documentación TTL de MongoDB para conocer el comportamiento y las limitaciones.
Limitar concurrencia y colas
Limita las conexiones entrantes, el trabajo de análisis, la amplificación de destinatarios y las operaciones de almacenamiento simultáneas. Reutiliza clientes de base de datos y dimensiona los pools de conexiones usando mediciones en lugar de una recomendación universal de tamaño de pool. Una cola de reintentos necesita un número limitado de trabajadores y observabilidad tanto de la edad como de la longitud.
Separar actualizaciones de bandeja de garantías de entrega
Los eventos enviados por el servidor pueden actualizar un navegador conectado después de que se procese un mensaje. No eliminan las colas del remitente ni la latencia de red. Los clientes programáticos deben seguir la documentación actual de la API, incluidos los límites de acceso y de solicitud.
Compara diseños usando tráfico representativo y pruebas de falla. Este artículo no proporciona un benchmark que establezca que Go o MongoDB son universalmente más rápidos que una pila alternativa.