Настройка внешней БД Cassandra
По умолчанию SberMobile Server использует встроенный движок базы данных, который может поддерживать небольшие приложения. В случаях, когда вы разрабатываете сложное приложение, может потребоваться внешняя база данных или кластер баз данных.
В SberMobile для хранения данных используется NoSQL база данных Apache Cassandra , а также несколько различных движков баз данных для реляционного хранения и хранения данных “ключ-значение”. В следующем примере показано как развернуть экземпляр Cassandra, запущенный в контейнере Docker.
Если вы уже развернули экземпляр Cassandra локально, в руководстве по работе с внешней базой данных Cassandra вы найдете подробную информацию о том, как получить доступ и настроить ваш экземпляр в соответствии с вашим сценарием использования.
Настройка Cassandra в Docker
Docker - это набор продуктов, которые используют виртуальные операционные системы для упаковки пакетов программного обеспечения в виде контейнеров. Контейнерное приложение изолируется от основной операционной системы для запуска приложения, библиотек и вспомогательного программного обеспечения, а также самого приложения. Эти приложения доставляются в виде образов Docker, которые представляют собой шаблоны, содержащие инструкции по созданию контейнера docker. Контейнер - это изолированное место, где приложение запускается без влияния на остальную систему и без влияния системы на приложение.
Установка Docker
Загрузите версию Docker Desktop, подходящую для основной операционной системы. В примере docker запускается на той же машине, что и SberMobile, однако это не обязательно. Подключение к удаленным базам данных упоминается в следующих руководствах:
Запуск контейнера
В этом примере используется официальный образ Docker Cassandra. Это хорошо задокументированный образ, содержащий все необходимое для начала работы. Необходимо ввести следующие команды в терминале Linux или Power Shell Windows:
Для загрузки последней версии образа cassandra
из публичного репозитория Docker:
docker pull cassandra:latest
Для запуска контейнера в соответствии с определенными условиями, описанными ниже:
docker run -d --name cassandra-external -p 9042:9042 -t cassandra:latest
Ниже описана каждая часть приведенной выше команды:
Команда / Аргумент | Назначение |
---|---|
| Команда для запуска Docker |
| Создает новый контейнер на основе предоставленных аргументов и опций |
| Дает имя контейнеру, чтобы его было легче идентифицировать во время других операций |
| Флаг Detached запускает контейнер в фоновом режиме, оставляя терминал свободным для дальнейших команд |
| Сопоставляет порт |
| Указывает, какой образ использовать при создании контейнера, в данном случае последнюю версию |
После выполнения команды вы захотите проверить, правильно ли работает контейнер. Для этого можно воспользоваться утилитой nodetool
из контейнера docker, выполнив следующую команду:
docker exec -it cassandra-external nodetool status
Выполнится команда nodetool status
в контейнере и отобразится примерно следующий результат:
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 172.17.0.2 104.31 KiB 16 100.0% 4067c208-7175-4360-be5c-656040979768 rack1
Вам также потребуется получить IP-адрес, с помощью которого можно подключиться к контейнеру. Это можно сделать с помощью команды docker inspect
:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' cassandra-external
В приведенном примере указано, что IP-адрес контейнера - 172.17.0.2
. Теперь вы готовы подключиться к базе данных.
Подключение SberMobile к базе данных
В веб-интерфейсе SberMobile откройте контекстное меню сервера и выберите опцию Настроить сервер.
Откройте вкладку Хранилище в окне Конфигурация сервера и в разделе NoSQL хранилище установите указанные значения:
Использовать встроенную службу -
False
, чтобы указать, что вы хотите подключиться к внешней базе данных.Адрес сервера - IP-адрес Cassandra. В данном примере
172.17.0.2
.Порт - порт, на котором Cassandra прослушивает соединения. В данном примере используется порт по умолчанию,
9042
.
После ввода значений нажмите OK для сохранения изменений и закрытия окна. Вам будет предложено перезапустить SberMobile Server.
Когда сервер перезапустится, он должен подключиться к внешней базе данных.
Прямой доступ к внешней базе данных
Теперь, когда SberMobile запущен и подключен к контейнеру Cassandra, вы можете войти в контейнер и убедиться, что события записываются в базу данных. Аналогично тому, как вы ранее использовали notetools
, вы можете использовать docker run
для запуска инструмента cqlsh и выполнения запроса к Cassandra:
docker exec -it cassandra-external cqlsh
Откроется оболочка языка запросов Cassandra:
cqlsh>
Из оболочки CQL можно проверить, что таблицы, связанные с SberMobile, были созданы правильно:
cqlsh> describe tables;
В результате будут показаны все соответствующие пространства ключей, включая пространство, связанное с SberMobile:
Keyspace SberMobile
------------------
ag_alert ag_deactivation ag_netflow_2 ag_properties
ag_attendance ag_events ag_netflow_3 context_directory
ag_change ag_info ag_netflow_4 rrd
ag_classinstancechanged ag_netflow_1 ag_netflow_5
Можно выполнить запрос к любой таблице в пространстве ключей. Следующий запрос покажет количество всех событий SberMobile, сохраненных в базе данных:
cqlsh> select count(*) from SberMobile.ag_events;
Дальнейшее изучение
Теперь, когда ваш экземпляр SberMobile подключен к внешней базе данных Cassandra, вы можете подумать об оптимизации базы данных для операций, требующих больших объемов записи. Это особенно актуально, если ваше приложение требует хранения необработанной истории переменных для многих переменных.