Stalwart v1.0: servidor de correo 200 veces más rápido

¿Qué es Stalwart y por qué la v1.0 es un hito?

El 3 de octubre de 2021 se subía el primer commit de mail-parser, una librería de parseo de correo escrita en Rust. Cinco años después, ese repositorio es Stalwart v1.0, el primer release estable de un servidor de correo y colaboración completo: JMAP, IMAP, POP3, SMTP, CalDAV, CardDAV y WebDAV, filtro de spam, clustering y soporte para media docena de backends de almacenamiento.

La v1.0 no fue pensada como un release de features. Tuvo dos objetivos declarados: rendimiento medido con números y estabilidad del esquema de base de datos. El segundo importa más de lo que parece: a partir de ahora, actualizar Stalwart es instalar una versión nueva y nada más, sin las migraciones disruptivas que exigieron releases anteriores.

El release incluye cerca de 200 commits que tocan más de 1.300 archivos, y la mayoría existe para hacer algo más rápido o más liviano.

¿Y esto cómo se aplica en tu negocio?

En CAR, dueños de empresa de Latinoamérica y España usan la tecnología para ser más rentables. Empiezas con una ruta de 7 días y terminas con un sistema funcionando en tu negocio.

👥 Probar 7 días

¿Cómo logró Stalwart ser tan rápido? SIMD, SWAR y trabajo bajo profiler

Un servidor de correo pasa una cantidad sorprendente de tiempo buscando bytes específicos: el final de una línea de cabecera, un boundary MIME, un signo igual en un cuerpo quoted-printable, el espacio que cierra un tag de IMAP. Hacerlo byte a byte son muchísimas iteraciones para un mensaje de 10 MB.

Stalwart atacó eso con dos técnicas:

  • SIMD: usa los registros vectoriales anchos de los procesadores modernos (SSE2, SSSE3 y AVX2 en x86-64, NEON en ARM) para comparar o transformar 16 o 32 bytes con una sola instrucción.
  • SWAR: aplica la misma idea con enteros de 64 bits comunes, sin instrucciones especiales, así que funciona en cualquier CPU.

Dos librerías llegan a 1.0 junto al servidor. mail-parser 1.0 fue reescrita desde cero: es 3 veces más rápida que el popular crate Rust mailparse, 9 veces más rápida que el parser de Dovecot y entre 15 y 31 veces más rápida que libEtPan!, VMime y GMime en un parseo completo. encodify es nueva y aporta kernels SIMD para Base64, Base32 y quoted-printable: decodificar un adjunto Base64 es 22 veces más rápido que con el crate estándar de Rust en un servidor AMD EPYC, y quoted-printable 9 veces más rápido.

¿Qué encontró el laboratorio de benchmarking?

Optimizar sin medir bajo carga real es adivinar. Stalwart construyó un laboratorio en Microsoft Azure, en más de 30 regiones, con hasta 18 laboratorios completos en paralelo y varios cientos de vCPUs trabajando a la vez. El catálogo cubre 35 tipos de test repartidos en más de 550 celdas: todos los protocolos, PostgreSQL, FoundationDB y RocksDB como almacenes, Redis en memoria, S3 y filesystem como blob stores, y un clúster de tres nodos bajo carga mixta.

Los datasets son agresivos: 1,6 millones de mensajes y 750.000 ítems de calendario y contactos en 500 cuentas, buzones individuales de 1, 2 y 5 millones de mensajes, 100.000 cuentas en un solo servidor, colas de 10 millones de mensajes, 20.000 conexiones nuevas por segundo y soak tests de seis horas, incluido uno que empujó más de 10 millones de mensajes a través del MTA.

La primera ronda completa detectó 64 problemas; la segunda, 33 más. Algunos ejemplos de lo que encontró el laboratorio:

  • Reabrir un buzón de 5 millones de mensajes pasó de 61 ms a 0,21 ms.
  • Una consulta JMAP sobre una cuenta de 5 millones de mensajes pasó de 3,3 segundos a 12 ms.
  • El throughput máximo de correo entrante en RocksDB casi se duplicó, de 9.690 a 18.394 mensajes por segundo.
  • Un problema de memoria donde el proceso retenía hasta 9,6 GB con un heap real por debajo de 0,4 GB.

Stalwart vs Postfix y Dovecot: los números del duelo

Los números internos solo dicen si Stalwart mejoró respecto de sí mismo. Para saber cómo se compara con lo que corre la mayoría del mundo, lo pusieron frente a la combinación open source más desplegada: Postfix 3.11 para SMTP y Dovecot 2.4 para IMAP.

Ambos corrieron en servidores Azure idénticos (8 vCPUs AMD EPYC Zen 5, 32 GiB de RAM, NVMe local), con las mismas 1.000 casillas más tres buzones muy grandes de hasta 250.000 mensajes, y recibieron exactamente el mismo trabajo. Stalwart fue más rápido en 35 de las 38 comparaciones principales:

  • IMAP: más rápido en 14 de 15 operaciones cotidianas, entre 1,4 y 19 veces. Un login con handshake TLS completo tarda 5,1 ms en lugar de 28 ms; traer un mensaje de 1 MB es 6 veces más rápido; hacer threading de la INBOX, 5 veces; mover o borrar 100 mensajes, entre 18 y 19 veces.
  • SMTP: acepta un mensaje entre 3,6 y 12 veces más rápido que Postfix, y sostiene 5.445 mensajes entrantes por segundo contra 723 de Postfix.
  • Entrega: un mensaje es visible para un cliente IMAP 16 veces antes, y un cliente esperando en IDLE recibe el aviso en 3,3 ms en lugar de medio segundo.
  • Carga: sirve 5,4 veces más sesiones IMAP concurrentes por segundo y relay 3,8 veces más correo antes de empezar a frenar.

La brecha crece con el tamaño del buzón. En una casilla de 250.000 mensajes, una búsqueda full-text de todos los cuerpos tarda 3,75 ms en Stalwart y 136 ms en Dovecot, y mover o borrar 25.000 mensajes termina en alrededor de una décima de segundo en lugar de 24 a 34 segundos: más de 200 veces más rápido. Los tres tests que ganó Dovecot son todos la misma operación: marcar todos los mensajes de un buzón como leídos de una vez.

El detalle que da peso al resultado: Postfix y Dovecot no son dos productos cualesquiera. Son el motor detrás de casi todo servidor de correo autoalojado popular, incluidos docker-mailserver, mailcow y Mail-in-a-Box.

¿Qué novedades trae la v1.0 además del rendimiento?

  • Búsqueda dentro de documentos: Stalwart extrae e indexa el texto de PDF, Microsoft Office (docx, xlsx, pptx), OpenDocument (odt, ods, odp), EPUB y RTF, tanto en adjuntos como en almacenamiento de archivos. Buscar una frase ahora encuentra el contrato adjunto, no solo el mensaje que lo menciona. El extractor está escrito desde cero en Rust, sin librerías externas, y procesa cada documento bajo límites estrictos de tamaño y complejidad.
  • Búsqueda full-text del almacenamiento de archivos, con cola de indexación, reintentos y reconstrucciones por partición.
  • Metadatos: JMAP Object Metadata para correos, buzones, calendarios, contactos y archivos, e IMAP METADATA (RFC 5464).
  • DKIM2 post-cuántico: firmas compuestas ML-DSA-44 y Ed25519.
  • OAuth y OpenID Connect: documentos de metadatos de client ID, scopes por cliente para correo, contactos, calendarios y archivos, y una lista de aplicaciones conectadas que el usuario puede revocar.
  • Modelos de IA y clasificador de spam con IA en la edición Enterprise, con soporte para modelos compatibles con OpenAI, Anthropic, Gemini y Ollama.

¿Qué significa esto para tu startup?

Si tu producto envía o recibe correo transaccional, o si tu equipo depende de un servidor de correo autoalojado, estos números se traducen en costos concretos. Un login IMAP que tarda 5,1 ms en lugar de 28 ms no cambia la vida de nadie; 5.445 mensajes entrantes por segundo contra 723 sí, porque define cuántas máquinas necesitas para absorber un pico.

Dos acciones concretas:

  • Mide antes de migrar. El repositorio de benchmarks incluye cada script, configuración, escenario y resultado crudo, junto con la metodología y una lista franca de salvedades, como las diferencias en el comportamiento de sincronización a disco entre los dos sistemas. Si tienes cuenta de Azure, puedes levantar los mismos servidores y correr la suite completa con tu propia carga antes de decidir.
  • Revisa tu proveedor de identidad si usas OAuth. Stalwart ahora aplica por completo el perfil OAuth para clientes públicos abiertos, el estándar que permite que cualquier cliente de correo se autentique contra cualquier servidor sin registrarse de antemano. Muchos proveedores externos todavía no lo soportan. Stalwart permite relajar las validaciones de token desde los ajustes de compatibilidad del directorio OIDC, pero cada relajación debilita una verificación de seguridad. Y hay un reloj corriendo: clientes populares como Apple Mail están adoptando el perfil, y cuando lo hagan, sus usuarios no podrán autenticarse contra un proveedor no conforme.

¿Cómo migrar a Stalwart v1.0 sin romper la operación?

Finalizar el esquema de base de datos tiene un costo que se paga una sola vez: la v1.0 usa un layout nuevo y un servidor v1.0 no abrirá un store creado por una versión anterior. Hay dos rutas.

Para despliegues en v0.16, la vía fácil es stalwart-migrate, que requiere v0.16.27 (las versiones 0.16 anteriores deben actualizarse primero). Convierte los ajustes al esquema v1.0 y copia todos los datos a un store nuevo y vacío. Solo lee del store viejo, así que el despliegue original queda intacto y puede reiniciarse en cualquier momento antes del cambio. Migra de forma incremental: la primera copia corre mientras la v0.16 sigue sirviendo usuarios, y cada corrida posterior copia solo lo que cambió. El único downtime es la corrida final corta, después de detener la v0.16. Se preservan identificadores de cuenta y mensaje, UIDs de IMAP e historial de cambios, así que los clientes IMAP y JMAP continúan sin volver a descargar nada.

Para quienes corren v0.15 o anterior, o prefieren mover usuarios de a uno, existe una segunda ruta con un proxy de migración que se ubica delante de ambos servidores y envía a cada usuario al que tiene su cuenta, más Vandelay, que copia cuentas de forma incremental. Cada cuenta se conmuta cambiando una entrada en una tabla de mapeo, sin downtime para ese usuario. El mismo procedimiento sirve para pasar de Dovecot y Postfix a Stalwart.

Dos cambios exigen atención antes de actualizar: los clústeres ahora requieren un almacén en memoria basado en Redis (Redis, Redis Cluster o Redis Sentinel), y los despliegues de un solo nodo obtienen un store local integrado. Además, la WebUI ya no usa un client id fijo, sino un documento de metadatos de client ID.

Conclusión

Stalwart empezó como una librería de parseo de correo en Rust y hoy se presenta como el servidor de correo más rápido del planeta, con 35 de 38 comparaciones ganadas contra la dupla Postfix-Dovecot. Lo más valioso para un equipo técnico no es el titular, sino el método: un laboratorio de benchmarking permanente que ahora forma parte del ciclo de release, de modo que las ganancias de rendimiento no se pierden en la siguiente versión. Si estás evaluando infraestructura de correo, la decisión ya no depende de promesas de marketing: los scripts y los resultados crudos están publicados.

Fuentes

¿te gustó o sirvió lo que leíste?, Por favor, comparte.

¿Y esto cómo se aplica en tu negocio?

En CAR, dueños de empresa de Latinoamérica y España usan la tecnología para ser más rentables. Empiezas con una ruta de 7 días y terminas con un sistema funcionando en tu negocio.

👥 Probar 7 días

Daily Shot: Tu ventaja táctica

Lo que pasó en las últimas 24 horas, resumido para que tú no tengas que filtrarlo.

Suscríbete para recibir cada mañana la curaduría definitiva del ecosistema startup e inversionista. Sin ruido ni rodeos, solo la información estratégica que necesitas para avanzar:

  • Venture Capital & Inversiones: Rondas, fondos y movimientos de capital.
  • IA & Tecnología: Tendencias, Web3 y herramientas de automatización.
  • Modelos de Negocio: Actualidad en SaaS, Fintech y Cripto.
  • Propósito: Erradicar el estancamiento informativo dándote claridad desde tu primer café.

📡 El Daily Shot Startupero

Noticias del ecosistema startup en 2 minutos. Gratis, todos los días.

Share to...