Как оцифровать бизнес и не потерять информацию

Blumenkraft создает сервисы, которые хранят миллионы событий и обеспечивают к ним очень быстрый доступ. За шесть лет работы компания построила системы в разных сферах бизнеса: это учреждения дополнительного образования, строительные, инженерные, сервисные, торговые предприятия.

Возьмем, например, аналитическую систему для ритейла, которая учитывает движения товаров за всю историю компании (сеть из 15 розничных и оптовых магазинов). На странице товара можно увидеть историю продаж и поставок, интегрированные значения (объем остатков количественный и в деньгах) за любой выбранный период (до трех месяцев) в любом магазине или группе магазинов. Система, разработанная Blumenkraft, создает такой отчет менее чем за секунду. При этом учитывается до 100 тыс. событий — все продажи и передвижения товара за 10 лет. В сравнении с, например, привычными бухгалтерскими программами, где форма может открываться минуту, подобная скорость выглядит очень выигрышно, при этом объем и сложность накопленной информации сопоставимы.

Бизнес-системы Blumenkraft — это цифровые системы учета, планирования и контроля работы, которые позволяют клиентам:

  • Собирать ключевые данные о бизнесе. Проекты, сроки, платежи, клиенты, сотрудники, контракты — всё в одном месте.
  • Управлять компанией на основе визуализации данных и графиков.
  • Предоставлять доступ сотрудникам или клиентам, определяя только нужные им функции.
  • Системно экономить деньги организации и время сотрудников.

Чтобы хранить большие объемы данных и быстро получать к ним доступ, необходима высокоскоростная облачная платформа. Самым удобным, гибким, мощным и выгодным способом размещения разрабатываемых сервисов стало решение, основанное на Yandex Cloud и нереляционных базах данных MongoDB.

Зачем хранить данные и всю историю их изменений?

Бизнесу рано или поздно могут понадобиться любые детали операций. Даже если изначально детали казались неважными. Например, еще один проект Blumenkraft — система автоматизации для сети школы музыки для взрослых. Помимо классической CRM, она включает в себя полное расписание занятий, записи, абонементы и т. п. Заказчик проекта считал, что история изменений уроков ему не пригодится. Однако через год понадобилось изучить, насколько устойчиво расписание и кто чаще всего нарушает график. Однако даже если доработать систему, добавить в нее учет истории переносов уроков и сделать отчет, то данных за прошлый год в нем уже все равно не появится.

После ряда подобных случаев стало очевидно, что нужно хранить всю информацию, проходящую через систему автоматизации. При этом модель «изменить и сохранить» не годится: каждое изменение — событие, часть некоторого бизнес-процесса, о котором необходимо знать все детали. Но если собирать в базе данных весь массив истории, то очень быстро она вырастет до таких размеров, что скорость поиска информации в ней упадет до минимума и система станет нерабочей.

Методология CQRS и MongoDB

На помощь пришла методология CQRS (англ. command-query responsibility segregation — разделение ответственности на команды и запросы). При CQRS код, который изменяет состояние, отделяется от кода, читающего состояние.

Методология предлагает хранить и синхронизировать две модели данных:

  1. С полной историей.
  2. С готовыми для считывания компактными наборами данных, которые можно показывать в интерфейсе.

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 млн событий, при этом среднее время отклика страниц в системах не превышает нескольких сотен миллисекунд.

Мнение

Андрей Цветков,
основатель Blumenkraft
Андрей Цветков,
основатель Blumenkraft

Мы создаем новый класс систем автоматизации бизнеса, которые встраиваются в процессы клиента и помогают вести их эффективнее. С помощью Yandex Cloud мы можем обеспечить надежную инфраструктуру для наших клиентов, ведь эти системы должны быть доступны 24×7. Часто нужно хранить персональные данные клиентов или сотрудников, поэтому важно, что серверы находятся на территории России.

Партнёры, которые могут помочь