Наши клиенты часто просят рассказать о том, как устроены сервисы Navixy. Например, чего им ждать в случае, если какой-то из компонентов нашей системы выйдет из строя, как устроена защита от простоя в работе, от потери данных, от проблем на промежуточных сетевых узлах и так далее.

Данный документ дает общее представление о том, как все работает “под капотом”. Мы не будем слишком глубоко погружаться в технические детали, но раскроем некоторые архитектурные особенности системы.

Отказоустойчивость и надежность

Одни из самых частых вопросов к нам на этапе подключения нового клиента — насколько система отказоустойчива, надежна, как резервируется. Вопросы закономерные, ведь сервисы Navixy предоставляются в режиме 24/7 клиентам по всему миру, что требует бесперебойной работы и стабильности.

Для снижения рисков система разбита на несколько региональных узлов, которые хоть и связаны между собой, не зависят друг от друга. Каждый региональный узел строится по общему, отказоустойчивому шаблону, а количество серверов, выполняющих отдельные функции, подбирается, исходя из требований к обрабатываемой нагрузке на каждом из узлов. Если говорить в терминах SLA (Service Level Agreement — Соглашение об уровне предоставления услуг) — мы стремимся, чтобы наш целевой показатель доступности был не ниже 99.99%, т.е. 52.56 минуты простоя в год. На текущий момент в 2020 году мы не опускались ниже 99.999%.

Еще на стадии проектирования системы мы выбрали разделение на региональные узлы. Это показалось нам самым простым способом снизить сетевые задержки при доступе клиентов к системе, независимо от их географического расположения, и уменьшить влияние технических проблем в каком-то из регионов на общую стабильность. Можно вспомнить сложности в инфраструктуре глобальных провайдеров, которые приводили к нарушениям сетевой связности стран и целых континентов. Мы стараемся снизить этот риск.

Теперь перейдем к схеме нашего типового узла.

Navixy архитектура облака
Облачная инфраструктура Navixy

Все ключевые компоненты, которые нужны для непрерывного предоставления услуг, у нас всегда зарезервированы и продублированы. Так как мы используем инфраструктуру Amazon AWS, то схема резервирования всегда включает как запуск избыточного количества виртуальных серверов для выполнения своей функции, так и распределение их по нескольким дата-центрам в рамках географической точки присутствия. Т.е. узел во Франкфурте, например, распределен по трем независимым дата-центрам. Все базы данных непрерывно реплицируются.

В дополнение к дублированию компонентов, со всех ключевых серверов каждый день делается резервная копия. Это включает резервные копии баз данных, виртуальных дисков или серверов целиком.

Ну и каждый сервер у нас — это отдельная функция. И если какой-то сервер вышел из строя, то затрагивается только один элемент инфраструктуры. Мы сразу разворачиваем аналогичный сервер из подготовленного образа и автоматически выгружаем на него текущую версию любого из наших программных компонентов. Наша CD/CI инфраструктура всегда позволяет получить последнюю собранную версию любого из компонентов и развернуть на любом из серверов. Сама процедура развертывания происходит автоматически с использованием ansible.

Доступность

Помимо высоких показателей надежности мы стремимся обеспечить нашим клиентам высокую скорость доступа к нашим сервисам. Система с распределенными узлами позволяет расположить наши сервисы ближе к потребителю услуг, но и при использовании этой схемы есть регионы, доступ из которых к сервисам может страдать из-за перегруженных линий связи или значительных расстояний. Для снижения влияния этих факторов мы используем сеть CloudFlare CDN, которая часто показывает результаты лучше, чем просто передача данных напрямую клиенту через интернет. Наши тесты показывают снижение задержек при загрузке клиентских порталов на 50% и более. Переключение на использование CloudFlare CDN для всех клиентов Navixy мы завершили в середине сентября 2020 года.

CloudFlare может испытывать сложности в работе, так что мы можем подключить или отключать CloudFlare CDN “на лету“ для всех пользователей или отдельных групп клиентов. Все переключения — будь то переключение на резервный сервер, базу данных или любой сервис, происходят незаметно для пользователей.

Стабильность и безопасность

Наша распределенная инфраструктура находится под постоянным контролем. Причем, для получения полной картины мы используем несколько каналов получения информации о состоянии всех объектов инфраструктуры:

  1. Внутренняя система мониторинга.
  2. Внешний сервис, проверяющий доступность публичных компонентов.
  3. Встроенные сервисы Amazon, сообщающие о проблемах с инфраструктурой Amazon и работающими виртуальными серверами.

Так что мы видим и контролируем все параметры работы инфраструктуры, это также относится к безопасности системы. Доступ ко всем узлам контролируется, возможность доступа имеет только авторизованный персонал. Все соединения всегда зашифрованы, а списки контроля доступа ограничивают IP-адреса, с которых могут подключаться сотрудники.

Итог

Сервисы Navixy на сегодня обрабатывают трафик сотен тысяч устройств и миллионы запросов клиентов. Наша архитектура достаточно проста для реализации и понимания, и в ней заложена возможность масштабирования в очень широких пределах. Мы всегда можем линейно нарастить производительность любого из наших узлов, а также добавить дополнительный региональный узел.

Наши приоритеты в работе — предоставление отказоустойчивого, надежного, доступного, стабильного и безопасного сервиса нашим клиентам. Все наши технические решения нацелены на это.

Надеемся, что статья была вам полезна. Если у вас остались дополнительные вопросы, обращайтесь к нам по адресу [email protected]. Будем рады узнать ваше мнение в разделе комментариев ниже.