Общее описание продукта¶
Данный раздел содержит общие сведения о продукте Picodata, его назначении, области применения и внутреннем устройстве.
Что такое Picodata?¶
Picodata — это распределенная система промышленного уровня для управления базами данных с возможностью расширения функциональности за счет плагинов. Исходный код Picodata открыт. Программное обеспечение Picodata реализует хранение структурированных и неструктурированных данных, транзакционное управление данными, язык запросов SQL, а также поддержку плагинов на языках Rust и Lua.
Назначение¶
Основным назначением продукта Picodata является горизонтально масштабируемое хранение структурированных и неструктурированных данных, управление ими, предоставление среды вычислений внутри кластера, состоящего из реплицированных отдельных узлов (инстансов). Данная комбинация возможностей позволяет эффективно реализовать сценарии управления наиболее востребованными, часто изменяющимися, горячими данными. В традиционных корпоративных архитектурах для ускорения и повышения надёжности доступа к данным классических, универсальных СУБД используются кэши и шины данных. Цель развития Picodata: заменить три компонента корпоративной архитектуры — кэш, шина и витрина доступа к данным — единым, высокопроизводительным и строго консистентным решением.
Роль в платформе данных¶
С точки зрения использования нашего ПО в составе корпоративной платформы, Picodata предоставляет операционный слой управления данными для решений класса In-memory data grid (IMDG). Это резидентная база данных для очень быстрой обработки среднего по объёму массива данных. Все данные хранятся в оперативной памяти, но при этом они персистентны за счёт периодического обновления снимков БД (snapshots) на диске. Ниже показана условная пирамида управления данными с точки зрения их объёма.
Picodata занимает верхнюю часть пирамиды, т.к. оперирует данными ограниченного объёма. На изображении показаны примеры прочих СУБД, которые служат для управления более крупными массивами данных и лучше подходят для архивного хранения и построения аналитических отчетов. В то же время такие СУБД хуже справляются с потоком часто меняющихся данных. Это именно та область, где Picodata эффективно решает поставленные задачи.
Задачи¶
Программное обеспечение Picodata решает следующие задачи:
- реализация общего линеаризованного хранилища конфигурации, схемы данных и топологии кластера, встроенного в распределенную систему управления базами данных;
- предоставление интерфейса командной строки по управлению топологией кластера;
- реализация runtime-библиотек по работе с сетью, файловому вводу-выводу, реализация кооперативной многозадачности и управления потоками, работа со встроенной СУБД средствами языка Rust;
- поддержка языка SQL для работы как с данными отдельного инстанса, так и с данными всего кластера;
- управление кластером;
- поддержка жизненного цикла приложения в кластере, включая версионирование, управление зависимостями, упаковку дистрибутива, развертывание и обновление запущенных приложений.
Варианты и области применения¶
Мы выделяем для продукта Picodata следующие четыре варианта применения:
- использование непосредственно как БД с хранением данных в оперативной памяти (IMDB);
- распределенное хранилище объектов в памяти с доступом по объектным ключам (IMDG);
- запуск и использование бизнес-логики на сервере приложений Picodata непосредственно рядом с данными;
- возможность использования сервера приложений Picodata как платформы для микросервисов.
Области применения в бизнесе¶
Ключевые преимущества Picodata (скорость, отказоустойчивость, гибкость) позволяют использовать продукт в следующих областях:
- управление телекоммуникационным оборудованием;
- банковские и в целом финансовые услуги, биржевые торги (высокочастотный трейдинг), аукционы;
- формирование персональных маркетинговых предложений с привязкой ко времени и месту;
- обработка больших объемов данных в реальном времени для систем класса "интернет вещей" (IoT);
- игровые рейтинговые таблицы;
- и многое другое!
Особенности кластера Picodata¶
Кластер с СУБД Picodata обладает следующими свойствами:
- высокая производительность: от 10000 запросов к данным в секунду;
- объем обрабатываемых данных: 2-100 Тб;
- автоматическое горизонтальное масштабирование кластера;
- простая настройка для запуска шардированного кластера. Не требуется много файлов конфигурации;
- совместимость с любыми инструментами развертывания инстансов (Ansible, Chef, Puppet и др.);
- обеспечение высокой доступности данных без необходимости в кластере Etcd и дополнительных настройках;
- автоматическое определение активного инстанса в репликасетах любого размера;
- единая схема данных во всех репликасетах кластера;
- возможность обновлять схему данных и менять топологию работающего кластера, например, добавлять новые инстансы. Picodata автоматически управляет версиями схемы;
- встроенные инструменты для создания и запуска приложений;
- гарантия сохранности и консистентности данных.
Архитектура кластера¶
Составные части кластера¶
Архитектура кластера Picodata предполагает систему отдельных инстансов — программных узлов, входящих в состав кластера. Каждый такой узел может выполнять различные роли, например роль хранения данных, роль сервера приложения, или служебную роль координатора кластера. Все инстансы работают с единой схемой данных и кодом приложения. Каждый процесс базы данных выполняется на одном процессорном ядре и хранит используемый набор данных в оперативной памяти. Любой отдельный инстанс является частью набора реплик, который также называют репликасетом. Репликасет может состоять из одного или нескольких инстансов — дубликатов одного и того же набора данных. Внутри репликасета всегда есть активный инстанс и — если реплик больше 1 — то некоторое число резервных инстансов, обеспечивающих отказоустойчивость системы в случае выхода из строя или недоступности активного инстанса. Число реплик определяется фактором репликации, заданным в глобальных настройках Picodata.
На рисунке ниже показана схема простого кластера из двух репликасетов, каждый из которых состоит из двух инстансов (активного и резервного).
Репликасеты являются единицами горизонтального масштабирования кластера. Данные балансируются между ними автоматически.
Хранение данных¶
Внутри каждого репликасета есть бакет (bucket) — виртуализированная неделимая единица хранения, обеспечивающая локальность данных (например, хранение нескольких связанных с клиентом записей на одном физическом узле сети). Сам по себе бакет не имеет ограничений по емкости и может содержать любой объем данных. Горизонтальное масштабирование позволяет распределить бакеты по разным шардам, оптимизируя производительность кластера путем добавления новых реплицированных инстансов. Чем больше репликасетов входит в состав кластера, тем меньше нагрузка на каждый из них. Бакет хранится физически на одном репликасете и является промежуточным звеном между данными и устройством хранения. В каждом репликасете может быть много бакетов (или не быть ни одного). Внутри бакета данные задублированы по всем инстансам в рамках репликасета в соответствии с фактором репликации. Количество бакетов может быть задано при первоначальной настройке кластера. По умолчанию кластер Picodata использует 3000 бакетов.
Ниже показан пример схемы хранения данных внутри репликасета.