Как оцифровать бизнес и не потерять информацию
Blumenkraft создает сервисы, которые хранят миллионы событий и обеспечивают к ним очень быстрый доступ. За шесть лет работы компания построила системы в разных сферах бизнеса: это учреждения дополнительного образования, строительные, инженерные, сервисные, торговые предприятия.
Возьмем, например, аналитическую систему для ритейла, которая учитывает движения товаров за всю историю компании (сеть из 15 розничных и оптовых магазинов). На странице товара можно увидеть историю продаж и поставок, интегрированные значения (объем остатков количественный и в деньгах) за любой выбранный период (до трех месяцев) в любом магазине или группе магазинов. Система, разработанная Blumenkraft, создает такой отчет менее чем за секунду. При этом учитывается до 100 тыс. событий — все продажи и передвижения товара за 10 лет. В сравнении с, например, привычными бухгалтерскими программами, где форма может открываться минуту, подобная скорость выглядит очень выигрышно, при этом объем и сложность накопленной информации сопоставимы.
Бизнес-системы Blumenkraft — это цифровые системы учета, планирования и контроля работы, которые позволяют клиентам:
- Собирать ключевые данные о бизнесе. Проекты, сроки, платежи, клиенты, сотрудники, контракты — всё в одном месте.
- Управлять компанией на основе визуализации данных и графиков.
- Предоставлять доступ сотрудникам или клиентам, определяя только нужные им функции.
- Системно экономить деньги организации и время сотрудников.
Чтобы хранить большие объемы данных и быстро получать к ним доступ, необходима высокоскоростная облачная платформа. Самым удобным, гибким, мощным и выгодным способом размещения разрабатываемых сервисов стало решение, основанное на Yandex Cloud и нереляционных базах данных MongoDB.
Зачем хранить данные и всю историю их изменений?
Бизнесу рано или поздно могут понадобиться любые детали операций. Даже если изначально детали казались неважными. Например, еще один проект Blumenkraft — система автоматизации для сети школы музыки для взрослых. Помимо классической CRM, она включает в себя полное расписание занятий, записи, абонементы и т. п. Заказчик проекта считал, что история изменений уроков ему не пригодится. Однако через год понадобилось изучить, насколько устойчиво расписание и кто чаще всего нарушает график. Однако даже если доработать систему, добавить в нее учет истории переносов уроков и сделать отчет, то данных за прошлый год в нем уже все равно не появится.
После ряда подобных случаев стало очевидно, что нужно хранить всю информацию, проходящую через систему автоматизации. При этом модель «изменить и сохранить» не годится: каждое изменение — событие, часть некоторого бизнес-процесса, о котором необходимо знать все детали. Но если собирать в базе данных весь массив истории, то очень быстро она вырастет до таких размеров, что скорость поиска информации в ней упадет до минимума и система станет нерабочей.
Методология CQRS и MongoDB
На помощь пришла методология CQRS (англ. command-query responsibility segregation — разделение ответственности на команды и запросы). При CQRS код, который изменяет состояние, отделяется от кода, читающего состояние.
Методология предлагает хранить и синхронизировать две модели данных:
- С полной историей.
- С готовыми для считывания компактными наборами данных, которые можно показывать в интерфейсе.
CQRS позволяет оптимизировать каждую часть для конкретных нужд.
В обычных бизнес-приложениях операции чтения происходят намного чаще, чем операции изменения данных. Код, отвечающий за запись, поддерживает транзакции и содержит сложную бизнес-логику. А код, отвечающий за чтение, не изменяется. Поэтому здесь можно денормализовать данные, не опасаясь за их целостность, и избавляться таким образом от сложных соединений таблиц при запросах. Благодаря этому производительность значительно увеличивается. Более того, хранилище с денормализованными данными можно легко масштабировать.
Для хранения подобных наборов данных идеально подошла MongoDB — популярное NoSQL-решение с открытым исходным кодом. Эта СУБД позволяет хранить информацию произвольной структуры, потоки событий и модели для чтения, а также быстро искать данные по определенному набору ключей. К преимуществам MongoDB также можно отнести удобство разработки на ней, открытость к модификации, верификацию корректности и простоту администрирования.
Развертывание CQRS в Yandex Cloud
На данный момент Blumenkraft, используя архитектуру CQRS, развернула в Yandex Cloud около 10 клиентских систем. До этого тестировали и применяли варианты хостинга решений — Microsoft Azure и локальные хостинг-провайдеры.
После переезда с Microsoft Azure затраты одного из клиентов на хостинг снизились ровно в два раза. А переезд с локальных провайдеров был ускорен известной историей с остановкой хостинга «Айхор» из-за конфликта акционеров. Тогда многие сервисы и компании простаивали несколько дней.
MongoDB в Yandex Cloud
Архитектура решения обычно такова: веб-сервер на виртуальной машине с CentOS и два хранилища данных — Event Store и Read Models. Первое работает только на запись и чтение по ключу, второе — на редкие обновления и частый поиск. Если нет специальных причин для тонкой настройки, то для обоих хранилищ подходит Mongo. В зависимости от этапа проекта это может быть и Managed MongoDB, и просто MongoDB на отдельной виртуальной машине.
Yandex Cloud поддерживает создание, работу и масштабирование нереляционных баз данных MongoDB с помощью Managed Service for MongoDB. В инфраструктуре Yandex Cloud применяются быстрые твердотельные накопители с поддержкой технологии NVMe. Они обеспечивают высокую производительность даже при обработке больших объемов данных. Обслуживание MongoDB, включая своевременные обновления, автоматизировано, а клиенты получают готовую к эксплуатации базу данных. Кроме того, у Yandex Cloud, как официального партнера, есть прямой доступ к технической поддержке разработчиков СУБД.
Безопасность
Клиенты Blumenkraft доверяют системам учет обязательств по проектам: договоры, акты и платежи. Следует надежно хранить такую чувствительную информацию и для этого:
- быстро создавать резервные копии;
- защищать систему от взлома;
- предотвращать доступ пользователей к данным.
В Yandex Managed Service for MongoDB все соединения с СУБД и резервные копии содержимого баз шифруются при помощи протокола TLS и технологией GPG соответственно. Кроме того, в Yandex Cloud можно изолировать базы данных друг от друга. Из-за того что общих компонентов нет, никто, кроме администраторов, не получит доступ к данным.
Дополнительное преимущество Yandex Cloud — размещение сервисов и баз данных на серверах в России. Это позволяет соблюдать закон о персональных данных ФЗ-152. Кроме того, Облако соответствует требованиям GDPR — это важно для компаний, которые работают в Европе.
Результаты
На базе Yandex Cloud и MongoDB сейчас развернуты системы управления бизнесом для компаний в сегментах от малого до крупного бизнеса. Обработано и учтено больше 3 млн событий, при этом среднее время отклика страниц в системах не превышает нескольких сотен миллисекунд.
Мнение
Мы создаем новый класс систем автоматизации бизнеса, которые встраиваются в процессы клиента и помогают вести их эффективнее. С помощью Yandex Cloud мы можем обеспечить надежную инфраструктуру для наших клиентов, ведь эти системы должны быть доступны 24×7. Часто нужно хранить персональные данные клиентов или сотрудников, поэтому важно, что серверы находятся на территории России.