MySQL, Redis, Vault: как Orbitsoft сохраняет данные в системе учета Posiflora

MySQL, Redis, Vault: как Orbitsoft сохраняет данные в системе учета Posiflora

Коротко о проекте

  • 01
    Что за инструмент

    Базы данных MySQL, Redis, Vault

  • 02
    Где используем

    Система учета и контроля продаж в цветочном бизнесе Posiflora

  • 03
    Какие задачи выполняют

    Сохраняют разные типы данных отдельно друг от друга

    Защищают секретные данные от взлома

    Позволяют создавать сложные аналитические запросы

    Имеют запас мощности на случай роста нагрузки

  • 04
    Результаты

    Данные более 1200 пользователей надежно защищены

    Обрабатывает до 3 млн запросов к API ежедневно, а в праздники в 10 раз больше

    Сохраняет данные даже если их загружают оффлайн

    Создаем разные типы отчетов для развития бизнеса

Доход цветочных магазинов зависит от хранения и анализа данных

POSiFLORA — система учета и контроля продаж в цветочном бизнесе. Основные клиенты POSiFLORA — небольшие цветочные магазины.

Для цветочных магазинов важно сохранять и правильно анализировать данные о продажах: какие цветы распродаются лучше, а какие хуже, какова сумма среднего чека, как выглядит среднестатистический покупатель. Если допустить ошибку в данных, бизнес не сможет планировать продажи и закупки и потеряет деньги. Рассказываем, как OrbitSoft организовал систему хранения данных в POSiFLORA и чем мы помогаем цветочному бизнесу.

цветочный
Система учета помогает владельцам цветочного бизнеса планировать закупки и оптимизировать расходы

Разделили данные по типам и используем для них разные хранилища

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

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

  • Данные от клиентов хранятся в базе MySQL.
  • Секретные данные хранятся в специальной базе Vault.
  • Оперативные данные хранятся в базе Redis.

Рассказываем про каждое решение подробнее.

MySQL для хранения данных клиентов

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

MySQL

Как MySQL помогает решать задачи клиентов

Мы выбрали для хранения данных клиентов MySQL по нескольким причинам:

  • Позволяет сохранять данные клиентов отдельно друг от друга и исключает возможность того, что они перемешаются.
  • Позволяет создавать сложные аналитические запросы, чтобы клиенты могли анализировать данные и планировать свою работу.
  • Аналитикам проще работать с этой базой, чем с другими, потому что она понимает язык запросов SQL.
  • Слоты для хранения данных удобно расширять, когда клиентов становится больше.
  • База данных бесплатна для использования — это экономит ресурсы на хранение.

На сегодняшний день мы сохраняем в безопасности данные 1 200 клиентов и обрабатываем до 2,3 млн запросов по API ежедневно.

HashiCorp Vault для хранения секретных данных

Кроме данных пользователей, мы сохраняем чувствительные данные, которым нужна повышенная степень защиты от взлома. Для большей безопасности мы сохраняем такие данные в специальной базе — Vault.

Vault

Как Vault сохраняет чувствительные данные

Мы выбрали Vault ради повышенной безопасности по следующим причинам:

  • Несколько уровней защиты данных.
  • Даже если данные скачают, они будут в виде «785kjhgdwyegnsSJDC3523JLWK» — злоумышленник не сможет расшифровать их без ключа.
  • Ключ состоит из трех частей и хранится у трех людей.

База с секретными данными работает обособленно от других систем — это увеличивает ее безопасность. Даже, если что-то произойдет с остальными данными, чувствительные будут защищены.

Redis для хранения кэшированных данных

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

Redis
Как Redis помогает ускорять работу системы

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

Результаты распределенной системы хранения данных

  1. Безопасность. Исключает возможность того, что данные могут пересечься из-за ошибок в коде. Данные одного клиента никогда не будут доступны другим. Повышенная безопасность для чувствительных данных.
  2. Возможность масштабирования. Часть данных хранится в одном сервере, часть в другом — это делает разработку дешевле.
  3. Данные просто обновлять. Если мы добавляем новый функционал, например, ограничиваем сотрудникам доступ к данным, это можно опробовать на одном клиенте, а потом раскатать на других. Если что-то пойдет не так, мы сразу заметим ошибку и устраним ее. Для большинства клиентов программа будет работать без сбоев.
  4. Высокая скорость работы системы. Система учета не зависает при работе, даже в наплыв клиентов в праздники.

Технический блок

Фреймворки:

  • Back-End: Symfony
  • Web Front-End: Angular
  • Mobile/Desktop App: Qt

Языки программирования:

  • Back-End: PHP 7.3—7.4
  • Web Front-End: TypeScript
  • Mobile/Desktop App: C++

Библиотеки:

  • neomer/json-api
  • Doctrine ORM
  • Enqueue
  • League/Flysystem
  • Monolog
  • Swift Maile
  • Twig

Базы данных:

  • MySQL
  • Redis
  • Apache Kafka
  • RabbitMQ
  • Couchbase
  • SQLite
  • ElasticSearch

Платформы и стороннее ПО:

  • Docker, Docker Compose, Docker Swarm
  • HashiCorp Consul
  • HashiCorp Vault
  • Kafka Connect
  • Graylog
  • Grafana, Graphite, StatsD

В чем бы вы ни нуждались, мы можем помочь!

Расскажите нам, с какими проблемами вы сталкиваетесь в своем бизнесе. Мы с нетерпением ждем вашего ответа.

Получите ответ по смс

Ваше сообщение успешно отправлено!
Представьтесь пожалуйста
Укажите номер, на который придет ответ
Нажимая на кнопку, вы даете согласие
на обработку персональных данных.