Как мы перешли на Kubernetes и "переехали" в Яндекс-Облако
На протяжении многих лет наши продукты (Websoft HCM/Webtutor, E-Staff) приобретались клиентами для размещения на собственных серверах. Запросы на "облачные" решения были эпизодическими. Но, несколько лет назад ситуация начала меняться.
Первые, единичные, "облачные" решения мы разворачивали на собственных серверах в одном из крупных российских дата-центов. Следующим логичным шагом стало использование решений Microsoft Azure (мы давние партнеры Microsoft). Мы построили достаточно эффективный механизм развертывания платформы в Azure на принципах Multitenant (множество виртуальных экземпляров системы в рамках одной большой инсталляции)
Однако, требования российского законодательства и особенности использования Websoft HCM заказчиками (multitenant подход не всегда удобен - разным клиентам нужны разные версии продукта) заставили нас искать новое решение.
Мы поняли, что нам необходимы:
- российский провайдер облачной инфраструктуры, соблюдающий требования законодательства, в том числе о защите персональных данных
- новые механизмы развертывания и гибкого масштабирования системы, построенные на микросервисной архитектуре
Еще более 5 лет назад, решая задачу импортозамещения для наших государственных заказчиков, мы обеспечили работу наших продуктов не только на платформе Microsoft, но и на Linux/PostreSQL. Это очень облегчило нам решение задачи создания нового "облака".
Что мы сделали
В итоге мы выбрали следующую конфигурацию:
- Провайдером облачной инфраструктуры для нас стало Яндекс-Облако
- В качестве платформы для управления микросервисами мы используем Kubernetes
- Поскольку крупные внедрения Websoft HCM могут использовать множество различных сервисов (ролей) - сервера веб-приложений, worker сервера, медиа-сервера, сервера записи вебинаров и анализа прокторинга, ... мы создали решение, работающее по принципу Service Discovery, для гибкого динамического распределения ролей между экземплярами системы (подами, в терминологии Kubernetes). Этот компонент мы назвали Websoft Inventa.
... и мы начали работать.
Все работы по доработке системы и настройке инфраструктуры выполнили специалисты Websoft. Коллеги из Яндекса помогли нам, предоставив среду для экспериментов и документацию. Со всем остальным мы справились сами.
Немного техники - что мы используем для работы системы в "облаке"
Managed Service for Kubernetes – сервис управления экземплярами системы, для каждого клиента – как минимум 1 экземпляр, расширяемый до необходимого кол-ва , в зависимости от требуемой производительности
Управляем базой данных системы из консоли Яндекс-Облака |
Managed Service for PostgreSQL – сервис управления базами данных системы, для каждого клиента – изолированная база данных с отдельным доступом. Сейчас используется версия PostgreSQL 12.
Yandex S3 Compatible Object Storage – сервис объектного хранилища для хранения файлов системы, для каждого клиента – изолированная папка с отдельным доступом. В Websoft HCM реализован внутренний модуль поддержки виртуальной файловой системы (VFS) , которая перехватывает все функции работы с заданными директориями, blobs в базе данных и полнотекстовыми индексами и перенаправляет потоки на внешние источники (S3 , сетевое хранилище).
Хранилище docker образов системы |
Yandex Container Registry – сервис хранилища docker - образов – для размещения в kubernetes
Websoft Inventa – сервис управления размещением экземпляров и их параметров для каждого клиента HCM
Интерфейс для настройки конфигураций клиентов в Websoft Inventa |
Что получили наши клиенты
Теперь мы можем буквально за несколько минут развернуть заказчику облачный экземпляр системы. С функциональной точки зрения он ничем не будет отличаться от экземпляра, размещаемого на собственных серверах. Заказчики могут пользоваться всеми инструментами разработки, встроенными в систему, могут выполнять любые кастомизации.
Весьма важно, что мы не получили в результате всех описанных манипуляций два разных продукта (облачный и обычный). У нас один единый продукт и каждая его сборка может быть развернута как в "облаке" так и в инфраструктуре заказчика. Соответственно, заказчик получает одинаковую документацию, одинаковую техническую поддержку и идентичные сервисы не зависимо от того какой вариант развертывания он выбирает.
Масштабировать систему, подключать дополнительные сервисы мы можем максимально быстро, в том числе автоматически (если в настройках конфигурации клиента выставлена возможность автоматического наращивания предоставляемой мощности). В результате стали возможны проекты, в которых, например, клиенту в течение 10 месяцев года нужна определенная мощность, а в 2 пиковых месяца в году (когда проходит массовое обучение или оценка) эта мощность удваивается. Изменение конфигурации для такой задачи выполняется несколькими кликами мышки.
Итоги
- Доработка платформы для поддержки Kubernetes, создание инструментов развертывания системы, миграции данных и т.п. заняла у нас порядка 3 месяцев. Еще 2-3 месяца ушло на отладку и оптимизацию
- За 3 месяца наши инженеры, без потерь данных и с минимальными перерывами в предоставлении сервиса, мигрировали клиентов в новое облако, заодно, обновив их до актуальной версии платформы
- Дорабатывая систему для поддержки новой облачной модели, мы создали решение (Websoft Inventa) облегчающее процесс управления большими группировками собственных серверов для наших крупных заказчиков. А заодно и поддержали работу системы с провайдерами DFS (Distributed File System) для кластеров в корпоративных сетях. Теперь эти решения используют наши традиционные "необлачные" заказчики