Первый взгляд: как устроена новая корпоративная почтовая система Mailion от МойОфис
Почти четыре года назад мы начали проектировать принципиально новую распределенную почтовую систему Mailion, которая предназначена для корпоративных коммуникаций. Наше решение построено на Cloud Native микросервисной архитектуре, способно работать с более чем 1 000 000 пользователей одновременно и будет готово покрыть 100% потребностей крупных корпораций.
За время работы над Mailion команда выросла в несколько раз, и сейчас в продукт вовлечено почти 70 разработчиков. Мы прошли большой путь от идеи и первых прототипов до этапа пилотирования коммерческой версии. Настало время рассказать Хабру о том, что за продукт мы создаем, как устроена и работает наша почтовая система, какой стек технологий мы используем и почему за нашим решением — будущее корпоративных коммуникаций. Погнали!
Хабр, привет! Меня зовут Антон Герасимов, я руковожу департаментом разработки в московском центре разработки компании МойОфис. Сегодня мы хотим представить Mailion — принципиально новую российскую почтовую систему корпоративного класса, которая станет достойной альтернативой популярным иностранным решениям. Mailion обладает высокой нагрузочной способностью, беспрецедентными возможностями масштабирования и отказоустойчивости, а также требует минимального внимания со стороны системных администраторов.
Сейчас наша разработка находится в стадии бета-версии, но совсем скоро, по нашему плану до конца 2020 года, перейдет в статус пилотного внедрения коммерческого продукта.
По большей части эта статья содержит общие сведения — рассказать о сложном программном продукте в одной публикации просто невозможно. Я планирую сделать серию статей с рассказом про ключевые технологии. А пока для вашего удобства предлагаю такое содержание:
## Что такое корпоративная почтовая система?
Простой и очевидный ответ на этот вопрос — средство для работы с электронной почтой и календарем. Но дьявол, как известно, кроется в деталях.
Итак, мы создаем почту нового поколения с расширенными функциями календарного планирования, которая ориентирована на корпоративный сегмент и крупные компании. Мы нацелены на работу с большими коммерческими и государственными структурами, в которых может быть от 30 тысяч до нескольких сотен тысяч рабочих мест.
В основе нашей системы лежит принцип платформенного решения. Мы отталкиваемся от концепции Unified Communications и предлагаем единый инструмент для работы с почтой, календарем и документами внутри одной системы, с возможностью наращивания функциональности решения за счет подключения дополнительных модулей и компонентов. Расширения, к слову, могут быть разработаны не только нами, но и нашими партнерами. Для этой цели будет опубликован и достаточно широкий инструментарий SDK.
### Кому и зачем нужна еще одна почта?
Крупный бизнес сформировал интересный тренд — предприятия испытывают потребность в функциях совместной работы. Речь не только про непосредственное взаимодействие сотрудников через пересылку чего-либо, а именно про совместный доступ к почтовым и ролевым ящикам, возможность работы с большими группами участников и наличие различных корпоративных функций.
*********
Типичная корпоративная функция — механизм отзыва писем, который крайне востребован в крупных компаниях, но при этом практически не используется ни в B2C-сегменте, ни в малом бизнесе. Все дело в том, что среди малых групп пользователей вероятность возникновения такой потребности довольно невелика, да и цена ошибки намного меньше. Причем реализовать эту функцию вне корпоративной почтовой системы просто невозможно — даже в почте Google нет отзыва писем в том виде, к которому привыкли пользователи Exchange. Корень проблемы находится в устройстве почтовых протоколов из 80-х годов прошлого века.
*********
Мы провели десятки фокус-групп, опросили сотни пользователей и потратили несколько тысяч человеко-часов на выявление типовых сценариев использования почты. Это позволило нам тщательно изучить потребности наших потенциальных пользователей и особенности их бизнес-процессов. На основе полученных данных мы решили разрабатывать архитектуру, которая позволила бы при необходимости масштабироваться до нужного объема нагрузки. В нашем представлении — предела вообще не существует, однако на текущий момент мы понимаем, как обеспечить работу компаний, в которых трудится нескольких сотен тысяч пользователей.
### Что скрывается под капотом
[![](https://habrastorage.org/webt/ms/uk/xl/msukxlv16wc4nms_4af5hj50f2s.jpeg)](https://habrastorage.org/webt/ms/uk/xl/msukxlv16wc4nms_4af5hj50f2s.jpeg)
В состав нашего продукта входят почтовое решение, инструмент для календарного планирования, адресная книга, а также интерактивный просмотр документов на базе нашего же решения МойОфис для работы с документами.
Поскольку мы говорим о решении корпоративного уровня, то неотъемлемой частью корпоративной почты является ещё и полноценная поисковая система. Наше решение способно проводить сквозной морфологический поиск по всем компонентам. Кроме того, вся почтовая система базируется на собственном хранилище, которое также оптимизировано для совместной работы.
Мы в МойОфис решили, что для удовлетворения потребностей компаний разного масштаба необходимо сделать две почтовые системы корпоративного класса. Продукт «МойОфис Почта» предназначен для организаций, в которых число пользователей исчисляется тысячами или несколькими десятками тысяч. Для более крупных структур целесообразнее применять Mailion — новый продукт МойОфис, который построен на Cloud Native микросервисной архитектуре, имеет беспрецедентные возможности по масштабированию и отказоустойчивости.
При выборе продуктов, клиентам требуется заранее определиться со стратегией дальнейшего развития своей компании. Для любой организации внедрение почтовой системы — сложная проектная работа, которая не предполагает быстрой замены одного решения другим. Поэтому, максимально возможную нагрузку, критерии отказоустойчивости и самовосстановления, а также фактор географического распределения стоит учитывать заранее.
Две почтовые системы МойОфис — принципиально разные. Они построены с использованием разных технологических стеков, и инструменты для каждой из систем выбираются в соответствии с целями и задачами того сегмента, в котором будет разворачиваться почтовая система. У нас есть общее продуктовое видение того, что должно присутствовать в почтовых системах, а также синхронизация в подходах к дизайну. Но это два продукта, которые рассчитаны на разную аудиторию пользователей.
### Какие вызовы стоят перед разработчиками
Далее по тексту я буду говорить только про новую корпоративную почтовую систему Mailion.
Мы провели тщательное исследование и проанализировали преимущества и недостатки существующих почтовых решений. Накопленный опыт наших специалистов, которые в прошлом имели непосредственное отношение к созданию высоконагруженных систем, позволил быстро выявить основную болевую точку любого известного продукта — производительность дисковых операций ввода и вывода (IO).
Можно сказать, что задача по ускорению IO-операций стала главным вызовом, с которым мы столкнулись. Необходимо было сосредоточиться на решении наших конкретных задач и мы стали создавать и развивать собственную систему хранения бинарных данных. У такого подхода есть вполне очевидная экономическая составляющая — нам требуется не только хранить данные, но и производить достаточно много операций дискового ввода и вывода.
Такое решение далось нелегко. Мы изучили множество продуктов корпоративного класса, которые нацелены на хранение информации, и не смогли найти ничего готового и подходящего под наши требования. Ведь нам нужно не только хранить данные, но и постоянно с ними работать, причем не в монопольном режиме с доступом одного пользователя, а обеспечить возможность коллаборации нескольких десятков тысяч пользователей.
Итак, мы определили, что наиболее приоритетным корпоративным критерием для нас является работа с большими объемами данных.
#### Надежность
Причем это не столько вопрос хранения, сколько задача обработки и быстрого доступа к этой информации. Требуется обеспечить высокие показатели надежности — время непрерывной работы всего решения должно быть на уровне 99,9%. При этом почтовая система должна быть автономной в принятии верных решений об обработке отказов. Только таким образом можно добиться отсутствия сбоев, способных парализовать бизнес-процессы той или иной компании.
#### Отказоустойчивость
Мы проработали комплекс мер, которые применяются для каждого компонента, и отобрали подходы для обеспечения отказоустойчивости. В частности, в корпоративной почтовой системе применяется кворумная работа с данными, резервирование сервисов и контроль отсутствия их состояний, а также собственные механизмы маршрутизации и поддержки кворума на базе консенсуса.
Критерием высокой отказоустойчивости является наличие в каждом компоненте механизмов для самопроверки. Mailion постоянно анализирует, правильно или неправильно исполняется та или иная функция, корректно ли действует тот или иной блок. Это одно из средств самовосстановления системы в случае сбоя. Информация не должна теряться, решение должно проходить в консистентное состояние в конечном счете.
Надо понимать, что предусмотреть вообще все вероятные события в жизни не представляется возможным — физику не обманешь. Но мы придерживаемся таких подходов к проектированию, которые позволяют нам с достаточно высокой степенью уверенности говорить о корректной обработке аварий определенных паттернов. У нас также есть большая группа тестирования, которая все время пытается что-нибудь в продукте сломать. И иногда у них это получается. По такому факту заводится инцидент, который мы детально изучаем и на его основе создаем новый механизм для устранения подобного рода проблем.
При проектировании подобной инсталляции нужно учитывать потребности заказчика и его набор критериев надежности. Ошибочно полагать, что подключение к сети передачи данных везде одинаковое. В корпоративных системах важно учитывать даже скорость прохождения сигнала по оптоволокну.
Если заказчик предъявляет высокие требования к надежности, то мы будем рекомендовать установку в нескольких дата-центрах, которые будут объединены выделенными линиями связи.
Тем не менее нельзя исключать и сценарий полного отключения электричества в одном из узлов почтовой системы. В этом случае приостановится работа с мастер-данными этого сегмента, но остальные части будут работать, будто ничего не произошло. Система уведомит администраторов о потере узла, и сотрудники должны будут предпринять ряд соответствующих действий.
Также нашу почтовую систему можно настроить таким образом, чтобы происходило резервирование внутри дата-центра. Такой подход обеспечит работоспособность при потере нескольких узлов внутри ЦОД, причем потерю одного из узлов никто не заметит — кроме, конечно, системы мониторинга. При возникновении такого события нагрузка просто перераспределяется. Поэтому при проектировании почтовой системы важно учитывать запас — сколько и каких компонент можно будет «потерять» при аварии.
#### Самостоятельность
Абсолютно надежных систем не бывает, и отказы так или иначе, но могут случиться. Поэтому при проектировании почтовой системы важно обеспечить возможность быстрой локализации сбоев, которая позволит их устранить за определенный SLA-период. Причем сбои должны устраняться системой самостоятельно, минимизируя при этом вмешательство системных администраторов и служб эксплуатации.
#### Простота эксплуатации
Конечно же, большие системы не могут совсем не требовать к себе внимания высококвалифицированных сотрудников. Но один из аспектов, который мы рассматриваем при проектировании, заключается в том, что система должна быть легко администрируемая и не требовать каких-то уникальных компетенций.
#### Экономическая эффективность
Безусловно, для работы с любыми подобными корпоративными системами требуется подготовка сотрудников — ведь мы говорим о действительно огромных масштабах. Поэтому при создании нашего продукта мы фокусировались на снижении совокупной стоимости владения системой. Для любого бизнеса важно следить за эффективностью трат и стремиться избежать бесконечного вливания денег в операционные расходы.
#### Децентрализованность
Для обеспечения тех принципов, о которых я говорил ранее, необходимо, чтобы система была полностью распределена — централизованный подход всегда ограничен условиями использования аппаратного обеспечения.
Конечно, можно купить один большой сервер и попробовать поставить на него все приложения и сервисы. Но чем крупнее система, тем сложнее вся конструкция, да и надежность такой системы неуклонно снижается — ведь один сервер означает и единую точку отказа. И чем более мы централизуем работу, тем больше мы зависим от этой центральной точки.
#### Системные требования
Когда мы говорим о сложных корпоративных почтовых системах, то нужно понимать, что такого понятия, как «минимальная конфигурация для работы» не существует. В основе любых больших внедрений всегда лежит серьезная проектная работа. Она позволяет соотнести потребности конкретного бизнеса и оптимальную конфигурацию почтовой системы.
Корпоративная почтовая система — это гибкий инструмент, который можно настроить в соответствии с большим количеством параметров. Мы проводим нагрузочное тестирование по собственной методике, которая позволяет моделировать нагрузку, исходя из анализа десятка базовых и нескольких сотен возможных критериев.
Можно сказать, что при подготовке проекта внедрения именно расчеты покажут интенсивность работы пользователей в существующих бизнес-процессах организации. При этом анализируется много входных параметров, и в зависимости от возможной нагрузки принимается решение о необходимом объеме вычислительных мощностей — от одного компьютера до целого машинного зала.
Поэтому говорить о каких-то минимальных конфигурациях — не совсем корректно. В частности, у нас есть и демонстрационный стенд, который работает всего на одной машине. Но мы понимаем, что работа в корпоративном сегменте требует инсталляции на десятки и даже сотни виртуальных машин.
## Технологический стек
При создании продуктов мы уделяем особое внимание лицензионной чистоте кода. В МойОфис установлены и действуют высокие стандарты качества, которые требуют от нас самостоятельно разрабатывать продукты полностью, с минимальным привлечением внешнего кода.
Большая доля кода Mailion — собственная разработка, код, права на который полностью принадлежат нам и который мы можем изменять и дорабатывать при необходимости. Большая часть кода нашей почтовой системы написана самостоятельно на Go (Golang). Кроме Go, мы используем C++, а также Java Script ES6 для веб-части.
Оставшиеся 5% — так называемые «тяжелые компоненты», такие как базы данных. К их числу относятся RethinkDB, ArangoDB и Redis. Из ключевых технологий также отмечу еще gRPC — систему удаленного вызова процедур, которая используется как единый механизм для взаимодействия по API, это важная часть.
## Из чего состоит продукт
Корпоративная почтовая система — это не «сервер в вакууме». В состав нашего продукта входит порядка 70 компонентов и 45 сервисов, которые занимаются обслуживанием почтовой системы. Все эти элементы написаны «с нуля» и являются собственной разработкой МойОфис.
Наиболее заметной частью системы является серверный комплекс, который обеспечивает работу хранилища, почтовой, календарной и поисковой систем, и веб-клиента. Мы разрабатываем и несколько пользовательских приложений и планируем к моменту коммерческого релиза предложить нашим пользователям новые «тонкие клиенты» на технологиях нашего веб-клиента.
### Совместимость с почтовыми системами
Mailion работает по стандартным протоколам. Для того чтобы начать пользоваться нашим решением, нужно лишь настроить клиентские приложения и дальше работать с ними в привычном окружении. Например, можно использовать входящее в продукт «МойОфис Почта» клиентское приложение.
Также для удобства наших пользователей мы создали специальный плагин, который обеспечивает бесшовный переход с Exchange. С его помощью пользователи смогут при замене почтового сервера продолжить работать с MS Outlook — они даже не заметят, что в их привычном взаимодействии со средствами коммуникации что-то изменилось. Такой плагин позволяет плавно переносить пользователей из прежней почтовой системы, без остановки работы всей организации. Это особенно важно, если вам требуется заменить средства для работы сотен тысяч пользователей.
### Легкость администрирования
Особенность нашей корпоративной почтовой системы — в необходимости крайне малого участия администраторов. При проектировании мы постарались найти баланс между возможностью кастомизации и сложностью управления. Чтобы этого добиться, нам потребовалось провести множество исследований паттернов поведения администраторов сложных корпоративных систем.
В составе нашей команды работают, как я уже сказал ранее, специалисты высокой квалификации — у каждого из них есть солидный опыт администрирования. Поэтому при разработке системы мы постарались перенести их опыт на потребности пользователей при управлении сложным продуктом. Говоря иначе — зная о потенциальных проблемах, мы заранее предусмотрели способы их решения на уровне проектирования архитектуры.
Например,
* предусмотрена изоляция компонентов системы в контейнеры, включая инфраструктурные — это помогает нам повысить уровень безопасности, гибко настраивать доступы между компонентами, а также позволяет быстро включать в список поддерживаемых систем и платформ новые пункты, востребованные бизнесом;
* единый подход к разработке и развертыванию, единый формат конфигурации всех компонентов способствуют более понятной и эффективной работе и сокращают траты на поддержку;
* собственный инсталлятор системы, на базе привычных инструментов развёртывания, позволяет централизованно, гибко и понятно управлять установкой;
микросервисная архитектура с чётким разделением ответственности бизнес-логики между сервисами помогает понять схему работы системы и более эффективно осуществлять поддержку;
* инфраструктурная часть системы базируется на привычных решениях, с использованием лучших практик, а также позволяет проводить интеграции с уже имеющимися системами на предприятии, что упрощает ввод системы в эксплуатацию внутри компании;
* в хранилище для этого будет предусмотрена система на базе искусственного интеллекта, которая сможет самостоятельно выявлять потенциальные отказы и управлять оборудованием.
### Современный дизайн
На создание дизайна продукта ушло несколько тысяч человеко-часов. Перед разработкой стояла задача сделать интерфейс современным — легким и интуитивно понятным. Это сложно, когда ты проектируешь корпоративную систему, которая по умолчанию должна включать ряд специфических функций.
[![](https://habrastorage.org/webt/e_/_b/74/e__b74fo4yx844m2zg2vtdx-34c.jpeg)](https://habrastorage.org/webt/e_/_b/74/e__b74fo4yx844m2zg2vtdx-34c.jpeg)
Конечно, дизайн нельзя «высечь в камне» или утвердить под подпись и печать — это живой инструмент, он постоянно развивается и совершенствуется. За четыре года мы трансформировали дизайн несколько раз, но при этом не было радикальной смены идеологии. Ключевой принцип построения всей корпоративной линейки продуктов заключается в создании универсальной дизайн-системы.
При проектировании дизайна корпоративной почтовой системы мы уделили особое внимание проработке трех ключевых направлений — адаптивность, системность и возможность подстроиться под фирменный стиль клиента.
#### Адаптивность
Особенность дизайна интерфейсов корпоративной почтовой системы Mailion — возможность отображения на устройствах с экранами любых размеров. Все визуальные компоненты тщательно прорисованы, они правильно масштабируются при работе на мобильных устройствах и отлично подходят даже для управления пальцами на сенсорных экранах. Также при изменении размера окна приложения трансформируется и колоночная верстка — размер колонок смещается пропорционально, в строгом соответствии с постулатами концепции насыщенных интернет-приложений.
#### Системность
В основе дизайна корпоративной почтовой системы Mailion лежит системный подход. Мы разрабатываем это направление с начала 2017 года, когда о дизайн-системах говорить было не так модно, как нынче. Дизайн-система — это набор правил и инструментов для визуального и технического исполнения, который отражает философию продукта и постоянно развивается. Мы вводили ее для упрощения коммуникации между разработкой и дизайном.
#### Настройка фирменного стиля
Наш дизайн — это «хамелеон», способный подстроиться под любой фирменный стиль клиента. Цвета всех элементов интерфейса определены через переменные. Таким образом, изменив базовый набор из нескольких цветов, можно перекрасить разом все приложения.
Шрифты также определяются через переменные: интерфейс может использовать фирменный шрифт компании-клиента, если это предусмотрено клиентским брендбуком. При этом разные шрифты могут иметь разный размер литер, и мы это учитываем. Например, PT Sans в 16-м размере выглядит ощутимо мельче, чем Roboto в том же 16-м размере. Поэтому мы подстраиваем размер текстовых блоков под особенности конкретного шрифта.
Устройству нашей цветовой библиотеки и особенностям работы со шрифтами мы посвятим отдельные статьи.
### Мобильные приложения
Неотъемлемой частью любой современной почтовой системы являются мобильные приложения — пользователи должны иметь возможность работать из любого места и в любое время.
Сейчас мы только формируем концепцию корпоративных мобильных приложений, они должны учитывать различия в функциональности почтовых систем МойОфис и предлагать разные подходы к использованию электронной почты и календарных систем в корпорациях.
### Интеллектуальная медиа панель
Наши фокус-группы показали, что пользователи считают громоздкими интерфейсы привычных почтовых систем. Опрошенные нами респонденты отмечали, что особенно сложно работать с событиями в календаре и с вложениями. Мы старались добиться отзывчивости интерфейса и увеличения производительности — сделать так, чтобы нашим продуктом было приятно пользоваться.
Медиапанель, новое средство для ускорения совместной работы, систематизирует всю информацию о переписке и обеспечивает моментальный доступ к списку участников переписки, ссылкам и версиям документов, которые когда-либо были отправлены.
Этот инструмент помогает в ситуациях, когда пользователям приходится работать с большими треками из сотен сообщений. Часто бывает так, что требуется найти документ или картинку, которые были только в одном из них. Медиапанель создает перечень всех элементов из цепочки писем, и отображает их в одном месте. В результате чего находить нужный объект становится гораздо проще.
### Локализация
Потребность в корпоративной почтовой системе есть не только у российских пользователей. МойОфис проводит последовательную политику по выходу на иностранные рынки, поэтому вопросам локализации продуктов уделяется довольно большое внимание.
В нашем продукте потребность в локализации на иностранные языки закладывалась изначально, на уровне базовой части системы. Само по себе добавление новых языков для нас не является большой проблемой — это вполне понятная задача, которую мы знаем, как решать.
Сейчас пользователям доступны русский и английский языки. В ближайших релизах мы добавим в корпоративную почтовую систему поддержку языков, на которых работают продукты МойОфис — французский, испанский, португальский и другие. Нам в некотором плане проще, чем коллегам из соседних подразделений, так как для почтовых и календарных систем требуется учитывать только алфавит и особенности работы с датами и временем — формул, как в табличном редакторе, у нас, к счастью, нет.
## Yes, we are hiring!
На создание нашего продукта ушло несколько сотен человеко-лет. И при всем желании я бы не смог рассказать сразу обо всем в рамках одной статьи. Тем не менее я надеюсь, что эта публикация послужит отправной точкой для знакомства с нашим продуктом — как я уже сказал выше, я планирую в дальнейшем рассказывать более подробно как о самом решении и его особенностях, так и о наших подходах к разработке.
Без тени скромности также скажу, что сегодня число компаний, которые разрабатывают подобные почтовые системы во всем мире — считанные единицы. Это действительно сложная инженерная задача, она требует и глубинного понимания потребностей корпоративных заказчиков, и тщательного анализа бизнес-процессов крупных организаций, современных трендов в дизайне и разработке, а также изрядное количество компетентных специалистов. Наша почтовая система развивается каждый день.
Прямо сейчас у нас открыто почти [полсотни](https://hh.ru/employer/213397? customDomain=1) вакансий в разработке. Приходите к нам на работу, если вы хотите вместе с нами создавать продукт, который способен перевернуть представление корпоративного мира об электронной почте.