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

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

О проекте

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

Наша цель: «Создать многопоточное, распределённое высокопроизводительное приложение на основе модульной архитектуры, максимально простое в использовании с хранением неизменяемых данных»

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

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

Почему fluidB?

Ниже приведена сравнительная таблица, сравнивающая fluidb c популярной субд KeyDB

Параметры сравненияfluidbKeyDB
Модели данных“Ключ-значение”, “Темпоральная”, “Документно-ориентированная”“Ключ-значение”
Поддержка SQLЕстьНет
Сервер приложенийОснова проектаНет
Тип репликацияPub/SubНет
Наличие триггеровНетНет
Наличие установочных скриптовДаНет
Инструмент построения кластераСкрипт “create-cluster.sh”Redis Sentinel
Язык на котором написана субдС++, bash, GoС++
Внешние ключи (Foreign Keys)НетНет
Язык для написания внутренних скриптов, расширяющий базовые функциональные возможностиlualua
Серверная операционная системаBSD
Linux
OS X
BSD
Linux
OS X
Windows

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

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

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

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

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

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

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

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

Установка

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

После того как Вы скачали скрипт для вашей ОС, вам необходимо перейти в каталог, в который вы скачали скрипт и выполнить в терминале следующую команду, которая сделает файл со скаченным скриптом исполняемым и запустит его (вместо ‘script_name.sh’ вам нужно написать имя скаченного скрипта) :

$ wget https://fluidb.icu/wp-content/download/installd.sh   Для ОС на базе Debian
$ wget https://fluidb.icu/wp-content/download/installr.sh   Для ОС на базе Red Hat
$ wget https://fluidb.icu/wp-content/download/installh.sh   Для ОС на базе Arch Linux

$ cd directory_name
$ chmod +x 'script_name.sh'  'script_name.sh' && ./'script_name.sh'

Запуск

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

$ ./fluidb-serv 

Модули

СУБД fluidB спроектирована таким образом, что по умолчанию она загружается только с поддержкой модели “ключ-значение”. Дополнительную функциональность, такую как поддержка темпоральной и документной модели данных обеспечивают модули, внешние библиотеки, имеющие расширения “.so”, и компилирующийся отдельно. Если вы хотите запустить fluidB с модулями, вы должны в файле конфигурации “fluidb.conf” (по умолчанию находится в папке fluidB) раскомментировать строку (удалить символ #):

# 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 имеет некоторые зависимости, которые включены в каталог deps. Утилита make не перестраивает зависимости автоматически, даже если что-то изменилось в исходном коде зависимостей.

Когда вы обновляете исходный код внутри дерева зависимостей, или если вы настроили определенные параметры сборки, такие как сборка для 32-битной версии ОС, или указали отсутствие оптимизации компилятора C (для целей отладки) или другие подобные параметры сборки, эти параметры кэшируются на неопределенный срок, пока не будет выполнена команда для полной очистки и перестройки приложения с нуля:

$ make distclean

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

Начало работы с fluidB c помощью клиента clif

Отдельно отметим, что большинство команд fluidB совпадает с командами KeyDB, в этой связи вы можете найти список всех доступных команд в разделе Все доступные команды.

Ниже на примере, мы покажем вам как начать работать с приложением, подключившись к нему утилитой clif (“client fluidB” клиент fluidB) для работы с приложением. Запустите экземпляр fluidB-сервера (См. команду выше), затем в другом терминале, запустите clif и попробуйте ввести следующие команды:

-------------------------------------------------------------------------------    
 Начнём знакомство с fluidB с работой модели ключ-значение
------------------------------------------------------------------------------

    $ 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

--------------------------------------------------------------
 Теперь запустим 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

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

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

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

$ make MALLOC=libc

Для компиляции с проекта с аллокатором jemalloc в системах Mac OS X используйте следующую команду:

$  make MALLOC=jemalloc

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

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

$ make V=1

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

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

Ошибка №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.

Решение

1. Принудительно завершить процесс fluidb-serv командой kill PID процесса, который можно узнать выполнив команду d терминале “ps-axu”
2. Зайдя в режим суперпользователя (root), в файл /etc/sysctl.conf добавить следующую строку: vm.overcommit_memory = 1 после чего сохранить изменения и закрыть файл.
3. Выйти из режима суперпользователя и повторно запустить сервер fluidb, командой “./fluidb-serv”

Ошибка №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).

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

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

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

$ chmod +x gen-test-certs.sh gen-test-certs.sh
$ ./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.sh”.
Create-cluster – это небольшой скрипт, расположенный в корневом каталоге и используемый для простого запуска большого количества экземпляров fluidB, настроенных для работы в режиме кластера.

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

Создание кластера

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

1. Отредактируйте скрипт “create-cluster.sh” в любом текстовом редакторе и измените в нём начальный/конечный порт в зависимости от количества экземпляров БД (инстансов), которые вы хотите создать.
2. Запустите команду «./create-cluster start» для запуска экземпляров.
3. Используйте команды «./create-cluster create», и “clif –cluster create”, чтобы был создан фактический кластер fluidB. (Если вы обращаетесь к своей настройке через локальный контейнер, убедитесь, что значение CLUSTER_HOST изменено на ваш локальный IP-адрес)
4. Теперь вcё готово для работы с кластером. Файлы и журналы AOF для каждого экземпляра создаются в текущем каталоге.

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

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

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

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

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

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

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

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

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

min-clients-per-thread 50

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

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

replica-weighting-factor 2

Следует ли fluidB предпринимать активные попытки балансировки клиентов между потоками? Это может повлиять на производительность при приеме новых клиентов. По умолчанию это включено. Если отключено, ядро ​​по-прежнему будет прилагать все усилия для распределения по потокам с помощью SO_REUSEPORT, но это будет не так справедливо. По умолчанию это значение включено

active-client-balancing yes

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

 active-replica yes

Блокировки

fluidB реализует механизм блокировки, аналогичный спин-блокировке, используемый в KeyDB который называется быстрой блокировкой.
Основные структуры данных fastlock:

Рисунок взят с сайта: https://russianblogs.com/article/5101769535/

Используемые атомарные операции__atomic_load_2,__atomic_fetch_add,__atomic_compare_exchange определяют, можно ли получить блокировку, сравнив m_active = m_avail.
fastlock предоставляет два способа получения блокировок:

  • try_lock: как только получение не удалось, вернитесь напрямую
  • lock: busy wait, использовать sched_yield после каждых 1024 * 1024 ожиданий занятости для активной передачи процессора, перейти к концу задачи cpu, чтобы дождаться выполнения.

Мы рекомендуем вам комбинировать try_lock с событиями в fluidB, чтобы избежать загруженных ситуаций.

У каждого клиента есть выделенная блокировка. Он будет пытаться её получить перед чтением данных клиента. В случае неудачи он выйдет. Поскольку данные не были прочитаны, они могут быть обработаны снова в следующем цикле обработки событий epoll_wait.

Рисунок взят с сайта: https://russianblogs.com/article/5101769535/

В отличии от управление ссылками в Redis, которые все осуществляются в одном потоке, в конструкции fluidB, как и в KeyDB каждый рабочий поток отвечает за набор ссылок, и все ссылки вставляются в список ссылок этого потока для обслуживания. Создание, работа и уничтожение ссылок должны происходить в одном потоке. Каждая ссылка добавляет новое поле
int iel; /* the event loop index we're registered with */
используется, чтобы указать, к какому потоку принадлежит ссылка, которую нужно передать.
fluidB поддерживает три ключевые структуры данных для управления ссылками:

  • client_pending_write: связанный список, связанный с потоком, поддерживает очередь, которая синхронно отправляет данные по ссылке клиента
  • client_pending_asyncwrite: связанный список для конкретного потока, который поддерживает очередь, которая асинхронно отправляет данные клиентам
  • clients_to_close: глобальный связанный список, поддерживающий клиентские ссылки, которые необходимо закрывать асинхронно

Он разделен на две очереди, синхронную и асинхронную, потому что у Redis есть некоторые API-интерфейсы связывания, такие как pub / sub. После публикации ему необходимо отправлять сообщения клиенту подписки. Поток выполнения pub и поток субклиента не являются одним и тем же потоком, чтобы справиться с этим. В этом случае KeyDB потребуется отправлять данные клиентам, отличным от потока, чтобы поддерживать их в асинхронной очереди.
Логика синхронной отправки относительно проста. Все они выполняются в этом потоке. На следующем рисунке показано, как синхронно отправлять данные клиенту:

Рисунок взят с сайта: https://russianblogs.com/article/5101769535/

fluidB передает сообщения двумя потоками по каналам:

Рисунок взят с сайта: https://russianblogs.com/article/5101769535/

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

Когда локальному потоку необходимо отправлять данные асинхронно, сначала проверьте, принадлежит ли клиент локальному потоку. Не локальный поток получает идентификатор монопольного потока клиента, а затем отправляет его монопольному потоку .AE_ASYNC_OP::CreateFileEvent. Операция требует добавления события сокета записи. Выделенный поток добавляет соответствующий запрос к событию записи при обработке сообщения конвейера, как показано на рисунке:

Рисунок взят с сайта: https://russianblogs.com/article/5101769535/

Лицензия

Ниже приведена лицензия (BSD-3-Clause license) по которой распространяется наш продукт.

Данный текст лицензии предоставляется на английском языке так как для программ, распространяющихся с таким же лицензионным соглашением на другом (в частности английском языке), юридическую силу имеет именно соглашение на этом языке, а его перевод на русский может использоваться лишь в ознакомительных целях!!!

Copyright (c) 2006-2020, Salvatore Sanfilippo
Copyright (C) 2019-2021, John Sully
Copyright (C) 2020-2021, EQ Alpha Technology Ltd.
Copyright (C) 2022 Snap Inc.
Copyright (C) 2022 Grigoriy Safronov, Alexandr Muraviev, George Pliev
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

Neither the name of Redis nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE O

ЧАВО

Ниже представлены ответы на часто задаваемые вопросы по проекту fluidB

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

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

  • Что такое мультимодельная система управления базами данных?

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

    Нет, реализации FluidB для операционной системы Windows нет.
    В виду того что, наше приложение является клиент-серверным, то оно ориентировано на использование на серверах, а подавляющее большинство серверов работает под управлением операционной системы Linux. Поэтому мы не планируем выпускать версию для Windows в будущем.
  • fluidB есть в стандартных репозиториях Linux?

    Пока, к сожалению нет. Fluidb по-прежнему распространяется в виде исходного кода и готовых к запуску бинарных файлов для ОС Linux. В ближайшее время мы планируем выпустить пакеты fluidb для ОС Linux семейства Debian, Red Hat и Arch Linux.
  • Есть ли докер образ проекта?

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

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

Пока что такой версии нет.

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

В традиционном понимании авторизации нет, так как fluidB не предназначен для публичного показа. Это приложение, которое работает в интернете, поэтому авторизации на данном этапе у нас нет.

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

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

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

У нас реализован тип репликации, который называется Active-Active (Active-Replica) многоактивный механизм, каждая реплика может быть настроена для записи, а не только для чтения, при этом реплики синхронизируют данные друг с другом. Основные особенности:

  • Каждая реплика имеет метку uuid, используемую для удаления круговой репликации.
  • Недавно добавьте API rreplay, упакуйте инкрементные команды в команды rreplay и перенесите локальный uuid
  • Ключ, значение плюс номер версии метки времени используется в качестве проверки конфликта. Если такой же ключ существует локально, а номер версии метки времени больше, чем синхронизированные данные, новая запись не выполняется. Текущая временная метка сдвигается на 20 бит влево, а последние 44 бита увеличиваются, чтобы получить номер версии временной метки ключа.