Linux Adictos Darkcrizt  

Gluon, una biblioteca IMAP open source de la mano de Proton Mail

gluon-imap-library

Gluon busca cerrar esa brecha y superar las limitaciones en las bibliotecas IMAP de código abierto existentes

La empresa suiza Proton AG, que desarrolla los servicios Proton Mail y Proton VPN, presento recientemente la librería Gluon IMAP, diseñada para crear servidores IMAP propios.  La biblioteca es destacable, ya que admite el protocolo IMAP4rev1 (RFC-3501) y está incluida en la nueva versión del servicio Proton Bridge.

Durante el desarrollo, la atención se centra en la corrección de la implementación, la estabilidad, la fiabilidad, la facilidad de uso para los desarrolladores y el alto rendimiento.

Sobre Gluon IMAP

Se menciona que la razón para crear una nueva implementación del protocolo IMAP es el deseo de obtener una solución confiable y de alto rendimiento que pueda funcionar con buzones grandes. Según los desarrolladores de Proton Mail, las bibliotecas IMAP de código abierto existentes experimentaron problemas de mantenimiento o no escalaron.

Nuestro primer paso para escribir Gluon fue generar un analizador IMAP a partir de la sintaxis dada en RFC3501(nueva ventana). Usamos ANTLR4(nueva ventana), un popular generador de analizadores, para crear un analizador que pudiera analizar comandos y respuestas IMAP de acuerdo con la especificación. Esto nos permitió centrarnos en implementar la lógica del protocolo IMAP en lugar de analizar y validar la entrada.

Gluon también funciona correctamente con múltiples clientes al mismo tiempo, por ejemplo, cuando un usuario está viendo el correo a través de la interfaz web y usa un cliente de correo separado al mismo tiempo.

La complejidad de organizar dicho trabajo se debe al hecho de que los clientes IMAP generalmente usan los números de secuencia de los mensajes en el buzón para identificar los mensajes de correo, pero cuando un cliente elimina un mensaje, los números de secuencia cambian y el otro cliente debe tomar en cuenta este cambio.

En tal situación, el servidor envía una notificación de cambio a los clientes, pero antes de acusar recibo de la notificación, el servidor debe asegurarse de que los números de mensajes en los comandos transmitidos se interpreten correctamente.

El correo electrónico debe ser confiable, pero también debe ser de alto rendimiento, especialmente porque el tamaño de la bandeja de entrada típica ha crecido significativamente durante la última década. Muchas implementaciones de IMAP de código abierto tienden a optimizar para una y no para la otra, lo que genera errores o compensaciones bastante importantes.

Para resolver este problema, así como para organizar el procesamiento de varias conexiones paralelas desde un cliente, Gluon implementa el mecanismo de instantáneas. La esencia de este mecanismo es que Gluon asigna su propia instantánea de buzón de correo a cada cliente.

Cada instantánea refleja una vista única del buzón asociado con el cliente que conserva su estado y garantiza que los números de secuencia sigan siendo los mismos, independientemente de las acciones realizadas por otros clientes.

Gluon realiza un seguimiento de dos estados de buzón: persistente y de sesión. El estado persistente refleja la posición real de los mensajes en el buzón seleccionado, mientras que el estado de sesión refleja la vista de cada cliente del contenido del buzón.

Para sincronizar el estado por sesión entre varios clientes conectados, Gluon utiliza un sistema de «respondedores». Estos son tipos que encapsulan un cambio de estado y, cuando se ejecutan, se convierten en respuestas IMAP. 

Cuando un cliente realiza una acción (como marcar un mensaje como leído) que cambiaría el estado de otro cliente, el backend crea un respondedor para la acción y lo empuja al estado afectado. El estado afectado permanece sin cambios hasta que se ejecuta el respondedor, momento en el que se actualiza y se envía una respuesta IMAP correspondiente al cliente. 

Este enfoque le permite a Gluon administrar de manera eficiente el estado por sesión al tiempo que garantiza la coherencia entre múltiples clientes.

Finalmente, se menciona que el estado IMAP se almacena en un DBMS que admite SQL. Las pruebas beta del servicio Proton Mail Bridge, traducido a Gluon, mostraron un aumento significativo (1000 %) en la velocidad de trabajo con IMAP. El código de la biblioteca está escrito en Go y se distribuye bajo la licencia MIT.

Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.