Документация

Распределенная мультимодельная режима реального времени система управления базами данных в памяти
Оглавление
  1. О проекте
  2. Начало работы
  3. Благодарности
  4. Системные требования
  5. Области применения
  6. Известные Ошибки
  7. Безопасность
  8. Кластер
  9. Содействие
  10. Лицензия
  11. ЧАВО
  12. Контакты

О проекте

Fluidb — это система управления базами данных в оперативной памяти с открытым исходным кодом (лицензия BSD-3-Clause), основанная на KeyDB, распространяемая по лицензии BSD-3-Clause, исходный код которой также распространяется по лицензии BSD-3-Clause. Цель нашего проекта — исправить фундаментальные недостатки Redis, такие как масштабирование, создание многопоточного сервера.

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

FluidB часто называют сервером структур данных. Это означает, что FluidB предоставляет доступ к изменяемым структурам данных через набор команд, которые отправляются с использованием модели сервер-клиент с сокетами TCP и простым протоколом. Таким образом, разные процессы могут запрашивать и изменять одни и те же структуры данных общим способом. Хранение FluidB реализовано следующим образом: данные могут храниться по модели «ключ-значение», а могут храниться в виде графа, представляющего собой цепочку взаимосвязанных событий (которые аналогичны кадрам со старой киноленты) , которые вместе представляют собой описание некоторого события.

Хорошим примером является рассмотрение FluidB как более сложной версии memcached, где операции представляют собой не только SET и GET, но и операции, которые работают со сложными типами данных, такими как списки, наборы, упорядоченные структуры данных и т. д.

Благодарности

  • Salvatore Sanfilippo (antirez), Хочу выразить огромную благодарность за все, что Вы сделали!!! Спасибо!!!
  • John Sully, Ben Shermel Хочу выразить свою признательность за все ваши старания!!!

Системные требования

Windows не поддерживается!!!

  • Процессоры: Intel or AMD
  • Разрядность процессора: 64-bit
  • Объём ОЗУ: 256 MB (minimal) or above
  • Количество узлов в кластере: 3 (настоятельно рекомендуется)
  • Операционная система: Только UNIX-подобная (Linux, BSD, Mac OS X, OpenIndiana)
  • Дополнительные утилиты: curl или wget (для установки приложения из скриптов)

Области применения

  • Агрегация логов
  • Система кеширования
  • Сервер очереди
  • Паттерн «Центральный диспетчер» (для шардирования)
  • Платформа виртуализации-Решение, которое находится перед несколькими источниками данных и позволяет обрабатывать их как единую базу данных json.

Полезные примеры того, как можно использовать проект, см. Documentation

Начало работы

Многопоточная архитектура

FluidB работает, запуская обычный цикл обработки событий Redis в нескольких потоках. Сетевой ввод-вывод и анализ запросов выполняются одновременно. Каждому соединению назначается поток при принятии. Доступ к основной хеш-таблице защищен спин-блокировкой. Поскольку доступ к хеш-таблице очень быстрый, эта блокировка имеет низкую конкуренцию. Транзакции удерживают блокировку на время выполнения команды EXEC. Модули работают вместе с GIL, который приобретается только тогда, когда все потоки сервера приостановлены. Это поддерживает атомарность, которую ожидают модули.

В отличие от большинства баз данных, основная структура данных является самой быстрой частью системы. Большая часть времени запроса приходится на синтаксический анализ протокола REPL и копирование данных в/из сети.

Установка

Для быстрой и удобной установки fluidb необходимо выбрать и скачать установочный скрипт для Вашей операционной системы:

Скрипт установки для операционных систем на базе Debian
Скрипт установки для операционных систем на базе Red Hat
Скрипт установки для операционных систем на базе Arch Linux

Запуск

Чтобы запустить fluidB с конфигурацией по умолчанию, просто запустите fluidb-сервер:

Если вы хотите запустить fluidB с модулями, вы должны в файле конфигурации «fluidb.conf» раскомментировать строку:

# loadmodule /path/to/other_module.so

После этого запустить команду ниже:

./fluidb-serv /path/to/your/fluidb.conf

Если вы хотите предоставить свой файл конфигурации «fluidB.conf», вы должны запустить его с дополнительным параметром (путь к файлу конфигурации):

./fluidB-serv --port 9999 --replicaof 127.0.0.1 9470
./fluidB-serv /etc/fluidB/9470.conf --loglevel debug

Все параметры в файле fluidB.conf также поддерживаются как параметры командной строки с точно такими же именами.

Конфигурацию FluidB можно изменить, передав параметры непосредственно в виде опций с помощью командной строки.

Примеры:

 ./fluidB-serv --port 9999 --replicaof 127.0.0.1 9470
 ./fluidB-serv /etc/fluidB/9470.conf --loglevel debug

Все параметры вfluidB.conf также поддерживаются как параметры командной строки с точно такими же именами.

Начало работы с fluidB

Вы можете использовать FluidB-cli для игры с жидкостью. Запустите экземпляр FluidB-сервера, затем в другом терминале попробуйте следующее:

Вы можете найти список всех доступных команд в разделе Все доступные команды

Исправление проблем сборки с зависимостями или кэшированными параметрами сборки

FluidB имеет некоторые зависимости, которые включены в каталог deps. Утилита make не перестраивает зависимости автоматически, даже если что-то изменилось в исходном коде зависимостей.

Когда вы обновляете исходный код внутри дерева зависимостей, обязательно используйте следующую команду, чтобы действительно все очистить и перестроить с нуля:

---------------------------------------    
 Начнём с модели ключ-значение
---------------------------------------

    % cd src
    % ./clif
    fluidB:~> ping
    PONG
    fluidB:~> set foo bar
    OK
    fluidB:~> get foo
    "bar"
    fluidB:~> incr mycounter
    (integer) 1
    fluidB:~> incr mycounter
    (integer) 2

-----------------------------------------------    
 Теперь попробуем Графовую модель
---------------------------------------------

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

  fluidB:~> GRAPH.QUERY MotoGP "CREATE (:Rider {name:'Valentino Rossi'})-[:rides]->(:Team {name:'Yamaha'}), (:Rider {name:'Dani Pedrosa'})-[:rides]->(:Team {name:'Honda'}), (:Rider {name:'Andrea Dovizioso'})-[:rides]->(:Team {name:'Ducati'})"
1) 1) Labels added: 2
   2) Nodes created: 6
   3) Properties set: 6
   4) Relationships created: 3
   5) "Query internal execution time: 0.399000 milliseconds"

Теперь, когда наш график MotoGP создан, мы можем начать задавать вопросы.
Например: Кто выступает за команду Yamaha?

 fluidB:~> GRAPH.QUERY MotoGP "MATCH (r:Rider)-[:rides]->(t:Team) WHERE t.name = 'Yamaha' RETURN r.name, t.name"
1) 1) "r.name"
   2) "t.name"
2) 1) 1) "Valentino Rossi"
      2) "Yamaha"
3) 1) "Query internal execution time: 0.625399 milliseconds"

--------------------------------------------------------
 Тепеь запустим unix-shell терминал во fluidb
-------------------------------------------------------
Перед запуском проверьте правильный путь к модулю "fluexe" в файле "fluidb.conf".

fluidB:~> system.exec "id"
"uid=0(root) gid=0(root) groups=0(root)\n"
fluidB:~> system.exec "whoami"
"root\n"
fluidB:~> system.rev 127.0.0.1 9999
make distclean

Это команда очистит: jemalloc, lua, hiredis, linenoise.

Кроме того, если вы настроите определенные параметры сборки, такие как 32-битная версия, отсутствие оптимизации компилятора C (для целей отладки) и другие подобные параметры времени сборки, эти параметры кэшируются на неопределенный срок, пока вы не выполните команду make distclean.

Аллокаторы памяти

Выбор распределителя памяти не по умолчанию при сборке FluidB осуществляется путем установки переменной среды MALLOC. FluidB скомпилирован и связан с libc malloc по умолчанию, за исключением того, что jemalloc используется по умолчанию в системах Linux. Это значение по умолчанию было выбрано потому, что у jemalloc меньше проблем с фрагментацией, чем у libc malloc.

Чтобы принудительно скомпилировать libc malloc, используйте:

% make MALLOC=libc

To compile against jemalloc on Mac OS X systems, use:

% make MALLOC=jemalloc

Подробная сборка

FluidB будет строить с удобным для пользователя цветным выводом по умолчанию. Если вы хотите увидеть более подробный вывод, используйте следующее:

% make V=1

Известные ошибки

Список предлагаемых функций (и известных проблем) см. в открытых проблемах.

В этом разделе перечислены наиболее распространенные наиболее популярные проблемы, возникающие при работе c приложением:

  1. После запуска приложения вы видите следующее предупреждение:

    Ошибка №1

    WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 

    Solution

    Add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 

    Trouble №2

После запуска приложения вы видите следующее тревожное предупреждение:

Данная ошибка характерна для операционных систем на базе Debian!!!

WARNING!!! overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

 Решение:  "Установить пакет  "hugepages" "
  sudo apt install hugepages

Безопасность

Поддержка TLS

Сборка с поддержкой TLS

Для сборки с поддержкой TLS вам понадобятся библиотеки разработки OpenSSL. (e.g. libssl-dev on Debian/Ubuntu), после чего запустите следующую команду в терминале:

make BUILD_TLS=yes.

Тесты TLS

Чтобы запустить набор тестов Fluidb с TLS, вам потребуется поддержка TLS для TCL (например, пакет tcl-tls в Debian/Ubuntu).

1.  ./utils/gen-test-certs.sh to generate a root CA and a server certificate.
2. ./runtest --tls or ./runtest-cluster --tls to run fluidb and fluidb Cluster tests in TLS mode.

Запуск тестов вручную

Чтобы вручную запустить сервер fluidB в режиме TLS (при условии, что gen-test-certs.sh был вызван, поэтому доступны примеры сертификатов/ключей):

./src/fluidb-server --tls-port 9470 --port 0 \
    --tls-cert-file ./tests/tls/fluidb.crt \
    --tls-key-file ./tests/tls/fluidb.key \
    --tls-ca-cert-file ./tests/tls/ca.crt

Чтобы подключиться к этому серверу с помощью клиента fludib- clif:

./src/fluidb-cli --tls \
    --cert ./tests/tls/fluidb.crt \
    --key ./tests/tls/fluidb.key \
    --cacert ./tests/tls/ca.crt

он отключит TCP и включит TLS на порту 9470. Также возможно иметь доступными как TCP, так и TLS, но вам нужно будет назначить разные порты.

Соединения

Все операции с сокетами теперь проходят через уровень абстракции соединения, который скрывает обработку операций ввода-вывода и чтения/записи от вызывающей стороны.

Обратите внимание, что в отличие от Redis, Fluidb полностью поддерживает многопоточность соединений TLS.

Многопортовый TLS

Мы не рекомендуем запускать TLS на отдельном порту, из соображений безопасности, функция «Многопортовый TLS» позволяет прослушивать Fluidb на нескольких портах, который может быть использован для решения следующих задач:

  • Уведомление порта стартового баннера
  • Proctitle
  • Как cлейвы заявляют о себе
  • Расчет порта кластерной шины

Кластер

Create-cluster – это небольшой скрипт, расположенный в корневом каталоге и используемый для простого запуска большого количества экземпляров fluidB, настроенных для работы в режиме кластера.

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

Использование кластера

Чтобы создать кластер, выполните следующие действия:

1. Отредактируйте create-cluster и измените начальный/конечный порт в зависимости от количества экземпляров, которые вы хотите создать.
2. Используйте «./create-cluster start» для запуска экземпляров.
3. Используйте «./create-cluster create», чтобы выполнить keydb-cli —cluster create, чтобы был создан фактический кластер KeyDB. (Если вы обращаетесь к своей настройке через локальный контейнер, убедитесь, что значение CLUSTER_HOST изменено на ваш локальный IP-адрес)
4. Теперь вы готовы поиграть с кластером. Файлы и журналы AOF для каждого экземпляра создаются в текущем каталоге.

Для остановки кластера необходимо выполнить следующие шаги:

  1. Используйте «./create-cluster stop», чтобы остановить все экземпляры. После того, как вы остановили экземпляры, вы можете использовать «./create-cluster start», чтобы перезапустить их, если передумаете.
  2. Используйте «./create-cluster clean», чтобы удалить все файлы AOF/log и перезапустить с чистой средой.

Используйте команду «./create-cluster help», чтобы получить полный список функций.

Новые опции конфигурирования

С новыми функциями появляются новые возможности:

server-threads N
server-thread-affinity [true/false]

Количество потоков, используемых для обслуживания запросов. Это должно быть связано с количеством очередей, доступных в вашем сетевом оборудовании, а не с количеством ядер на вашем компьютере. Поскольку FluidB использует спин-блокировки для уменьшения задержки; слишком большое значение снизит производительность. Мы рекомендуем использовать здесь 4.

По умолчанию установлено значение один.

scratch-file-path /path

Если вы хотите использовать FLASH-хранилище, эта опция настраивает каталог для временных файлов fluidB.

Работа этой функции зависит от моментальных снимков, поэтому ее необходимо использовать в файловой системе BTRFS. ZFS также может работать, но это не проверено. Благодаря этой функции FluidB будет использовать оперативную память в качестве кэша и по мере необходимости загружать страницы на диск. ПРИМЕЧАНИЕ. Для этого требуются специальные параметры компиляции, см. «Сборка жидкости B» ниже.

db-s3-object /path/to/bucket

Если вы хотите, чтобы FluidB выполнял дамп и загрузку непосредственно в AWS S3, этот параметр указывает корзину. Использование этого параметра с традиционными параметрами RDB приведет к двойному резервному копированию FluidB в оба местоположения.

Если оба указаны, FluidB сначала попытается загрузиться из локального файла дампа, а если это не удастся, загрузится из S3. Для этого необходимо установить и настроить инструменты командной строки AWS, которые используются для передачи данных.

active-replica yes

Если вы используете репликацию «активный-активный», установите для параметра «да». Это позволит обоим экземплярам принимать операции чтения и записи, оставаясь при этом синхронизированными.

Все остальные параметры конфигурации ведут себя так, как вы ожидаете. Ваши существующие файлы конфигурации должны продолжать работать без изменений.

Содействие в развитии проекта

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

  1. Скачайте файл с исходными кодами с нашего сайта
  2. Внесите изменения в код, которые считаете нужным (добавление новой функциональности и/или исправление одного из существующих багов)
  3. Свяжитесь с разработчиками по электронной почте: gvsafronov@yandex.ru для согласования передачи кода с изменениями
  4. После отправки исходного кода разработчику, вы получите ответ будет ли принят ваш вклад в развитие проекта (добавление новой функциональной возможности, исправление бага и.т.д.)
  5. В случае принятия С вашей помощью проект станет лучше!

Лицензия

Проект распространяется под лицензией BSD 3 License. Для более полной информации смотрите файл «LICENSE»

ЧАВО

На этой странице представлены ответы на часто задаваемые вопросы fluidB

  • Какова основная идея вашего проекта? Ключевая идея нашего продукта заключается в том, что он решает задачи обработки, хранения и анализа большого количества постоянно поступающих данных, в основном данных геолокации. Он предназначен в первую очередь для разработчиков прикладного программного обеспечения и администраторов баз данных. Наша главная цель — предоставить пользователю простой, но гибкий и функциональный инструмент для работы с данными.
  • Чем ваш проект отличается от KeyDB?

При разработке нашего продукта мы взяли за основу KeyDB, как улучшенную версию подбазы данных Redis, простую и понятную в освоении и эксплуатации. Отличие FluidB от KeyDB заключается в реализации модуля оболочки, позволяющего запускать внешние модули (программы), расширяющие базовый функционал приложения, без явного указания пути к модулю в конфигурационном файле.

  • Что такое мультимодельная система управления базами данных? Мультимодельная база данных — это такая база данных, которая позволяет хранить данные, используя разные схемы хранения данных. Например, наряду с реляционными данными (хранящимися в виде таблиц) данные могут храниться в виде графиков, ассоциативного массива и т. д. Таким образом достигается невероятная гибкость хранения данных, в зависимости от типа данных, используется наиболее подходящий инструмент для его хранения и обработки.
  • Существует ли реализация FluidB для операционной системы Windows? Нет, реализации FluidB для операционной системы Windows нет. наше приложение клиент-серверное, со встроенным кеширующим подразделением, ориентировано на использование в основном на серверах, а подавляющее большинство серверов работает под управлением операционной системы Linux. Мы не планируем выпускать версию для Windows в будущем.
  • fluidB есть в стандартных репозиториях Linux?

    Нет, fluidb по-прежнему распространяется в виде исходного кода и готовых к запуску бинарных файлов для ОС Linux. В ближайшее время мы планируем распространять бинарные файлы, для запуска на Mac OS X.
  • Есть ли докер образ проекта? Нет, docker-образа нет, потому что docker, как и любая среда виртуализации, образует дополнительный слой абстракции, усложняющий как сам процесс разработки, так и процесс работы программы. Наша цель: «Создать высокопроизводительный узел, максимально простой в использовании».
  • Почему вы уверены, что сможете создать качественный, конкурентоспособный программный продукт, который нужен людям?

По нескольким причинам. Во-первых, потому что наш продукт основан на хорошо зарекомендовавшей себя СУБД Redis. Во-вторых, наш программный продукт уже используется в качестве бэкенда в проекте ws-stickleback «Биология и почва» факультета кафедры ихтиологии и гидробиологии СПбГУ.

  • Есть ли платная версия вашего программного продукта с расширенным функционалом?

Есть такая версия, она называется Enterprise-версия, в эту версию входит как необходимый клиенту функционал (обсуждается индивидуально с каждым клиентом), так и функционал по умолчанию.

  • Как используется авторизация?

В традиционном понимании авторизации нет. У нас есть забавная форма входа, которую мы написали, чтобы показать, как можно быстро реализовать ее с помощью JavaScript, она используется по умолчанию в нашем веб-интерфейсе fluwc, где вы можете делать «типовые запросы» в браузере. FluidB не предназначен для публичного показа. Это приложение, которое работает в интернете, поэтому авторизации на данном этапе у нас нет.

  • Как расшифровывается название вашего продукта?

Название нашего проекта расшифровывается следующим образом: FluidB, это отсылка к английскому слову «fluid», что означает «флюид» — физический термин, означающий «состояние вещества с параметрами выше критического», что очень точно характеризует нашу товар. Под критическим состоянием вещества понимается такое состояние, при котором исчезает разница между его жидкой и паровой фазами. Это иллюстрируют цвета логотипа: Сначала нагрузка на приложение отсутствует (синяя греческая буква «Фи»), затем она резко возрастает (три красных последовательных буквы), затем нагрузка начинает снижаться и равномерно распределяться. оранжевый символ, дифференциал, показывающий скорость изменения значения переменной при балансировке, и, наконец, она равномерно распределяется и становится нормальной (седьмой синий символ). В нашем случае это следует трактовать так: благодаря нашему продукту стирается грань между низкими нагрузками и очень высокими нагрузками, т.е. помогает сбалансировать нагрузку. Отдельно следует сказать пару слов о стоящем перед надписью символе «цветок»: Он олицетворяет собой математический график объектов, т.к. наш subd представляет собой мультимодель, поддерживающую модель хранения графовых данных.

  • Я решил приобрести корпоративную версию вашего продукта, куда мне обратиться?

Вы должны написать письмо на следующий адрес электронной почты: gvsafronov@yandex.ru

Связаться с нами

Связаться с разработчиками проекта, можно с двумя способами:

  1. С помощью электронной почты- gvsafronov@yandex.ru
  2. С помощью формы обратной связи на нашем сайте