швейцарская компания Протон АГ, которая разрабатывает сервисы Proton Mail и Proton VPN, недавно представила библиотеку Gluon IMAP, разработан пдля создания собственных IMAP-серверов. Библиотека примечательна тем, что поддерживает протокол IMAP4rev1 (RFC-3501) и включена в новую версию сервиса Proton Bridge.
Во время разработки основное внимание уделяется правильности реализации, стабильности, надежности, простоте использования для разработчиков и высокой производительности.
О Gluon IMAP
Упоминается, что причина создать новую реализацию протокола IMAP стремление к надежному и высокопроизводительному решению который может работать с большими почтовыми ящиками. По словам разработчиков Proton Mail, существующие библиотеки IMAP с открытым исходным кодом испытывали проблемы с обслуживанием или не масштабировались.
Нашим первым шагом в написании Gluon было создание парсера IMAP на основе синтаксиса, указанного в RFC3501 (новое окно). Мы использовали ANTLR4 (новое окно), популярный конструктор синтаксических анализаторов, чтобы создать синтаксический анализатор, который может анализировать команды и ответы IMAP в соответствии со спецификацией. Это позволило нам сосредоточиться на реализации логики протокола IMAP вместо разбора и проверки ввода.
Gluon также отлично работает с несколькими клиентами. одновременно, например, когда пользователь просматривает почту через веб-интерфейс и одновременно использует отдельный почтовый клиент.
Сложность организации такой работы связана с тем, что IMAP-клиенты обычно используют порядковые номера сообщений в почтовом ящике для идентификации почтовых сообщений, но когда один клиент удаляет сообщение, порядковые номера меняются и другой клиент должен принять это изменение во внимание. счет.
В такой ситуации сервер отправляет клиентам уведомление об изменении, но перед подтверждением уведомления сервер должен убедиться, что номера сообщений в переданных командах интерпретируются правильно.
Электронная почта должна быть надежной, но она также должна быть высокопроизводительной, особенно с учетом того, что размер типичного почтового ящика значительно вырос за последнее десятилетие. Многие реализации IMAP с открытым исходным кодом, как правило, оптимизируются для одного, а не для другого, что приводит к довольно большим ошибкам или компромиссам.
Для решения этой проблемы, а также организовать обработку нескольких параллельных подключений от клиента, Gluon реализует механизм моментальных снимков. Суть этого механизма в том, что Gluon назначает каждому клиенту свой снимок почтового ящика.
Каждый моментальный снимок отражает уникальное представление почтового ящика, связанного с клиентом, которое сохраняет его состояние и гарантирует, что порядковые номера остаются неизменными, независимо от действий, предпринимаемых другими клиентами.
Gluon отслеживает два состояния почтового ящика: постоянное и сеансовое. Постоянное состояние отражает фактическое положение сообщений в выбранном почтовом ящике, а состояние сеанса отражает представление каждого клиента о содержимом почтового ящика.
Чтобы синхронизировать статус за сессию между несколькими подключенными клиентами, Gluon использует систему «респондеров». Это типы, которые инкапсулируют изменение состояния и при выполнении преобразуются в ответы IMAP.
Когда клиент выполняет действие (например, помечает сообщение как прочитанное), которое может изменить состояние другого клиента, серверная часть создает ответчик для действия и переводит его в затронутое состояние. Затронутое состояние остается неизменным до тех пор, пока ответчик не будет выполнен, после чего он будет обновлен, и клиенту будет отправлен соответствующий ответ IMAP.
Такой подход позволяет Gluon эффективно управлять состоянием каждого сеанса, обеспечивая согласованность между несколькими клиентами.
Наконец, упоминается, что государство IMAP хранится в СУБД, поддерживающей SQL. Бета-тестирование сервиса Proton Mail Bridge, переведенного на Gluon, показало значительный (1000%) прирост скорости работы с IMAP. Код библиотеки написан на Go и распространяется под лицензией MIT.
Если вы хотите узнать больше об этом, вы можете ознакомиться с деталями По следующей ссылке.