Gluon се стреми да преодолее тази празнина и да преодолее ограниченията в съществуващите IMAP библиотеки с отворен код.
швейцарската компания Proton AG, която разработва услугите 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 следи две състояния на пощенската кутия: постоянна и сесия. Постоянното състояние отразява действителната позиция на съобщенията в избраната пощенска кутия, докато състоянието на сесията отразява изгледа на всеки клиент за съдържанието на пощенската кутия.
За синхронизиране на състоянието на сесия между няколко свързани клиента, Глуонът използва система от "респонденти". Това са типове, които капсулират промяна на състоянието и, когато се изпълнят, се преобразуват в IMAP отговори.
Когато клиент извърши действие (като маркиране на съобщение като прочетено), което би променило състоянието на друг клиент, бекендът създава отговор за действието и го изпраща в засегнатото състояние. Засегнатото състояние остава непроменено, докато отговорът не бъде изпълнен, в който момент той се актуализира и съответният IMAP отговор се изпраща на клиента.
Този подход позволява на Gluon ефективно да управлява състоянието на сесия, като същевременно гарантира съгласуваност между множество клиенти.
Накрая се споменава, че държавата IMAP се съхранява в СУБД, която поддържа SQL. Бета тестването на услугата Proton Mail Bridge, преведена на Gluon, показа значително (1000%) увеличение на скоростта на работа с IMAP. Кодът на библиотеката е написан на Go и се разпространява под лиценза на MIT.
Ако се интересувате да научите повече за него, можете да се консултирате с подробностите В следващия линк.