Tarantool 2.10: сжимаем данные, шифруем трафик, помогаем расследовать инциденты
В Tarantool 2.10 добавили новые инструменты как для Enterprise версии, так и для Community Edition. А еще мы запустили Tarantool по модели DBaaS в облаке VK Cloud Solutions. Далее подробно расскажем про главные обновления: шифрование соединений между репликами и клиентом, сжатие данных в памяти, расширенные возможности аудита и поделимся ссылкой на полный список изменений.
Сжатие
Tarantool всегда умел сжимать данные на диске. Теперь Tarantool Enterprise позволяет сжимать данные, которые хранятся в оперативной памяти. Это позволяет экономить место в памяти, что снижает потребность в закупке дополнительного железа. Особенно это актуально, если вы храните в памяти длинные строчки и/или JSON объекты. На некоторых датасетах можно снизить объем хранимых данных в оперативной памяти до 60%.
Сжатие можно запустить прямо на работающем кластере. При этом продолжать обслуживать запросы как обычно. Это уменьшит размер хранимых данных и позволит сократить количество используемых серверов или продлить время возможного ожидания закупок.
Поддерживаются алгоритмы ZSTD, LZ4. Первый сжимает лучше, но тратит чуть больше времени на процесс компрессии. Второй сжимает менее эффективно, но и работает быстрее.
Для использования сжатия не нужно пересоздавать спейс с данными. Просто укажите, какие поля необходимо сжимать в функции space:format()
. Потом запустите фоновую миграцию через space:upgrade({ background = true })
. Дальше все работает прозрачно: при записи данные сами сжимаются, при чтении разжимаются.
Сжимать данные можно в том числе в уже существующих хранилищах.
Шифрование
Как правило, Tarantool находится во внутреннем контуре, и у него нет доступа в интернет. За счет этого достигается безопасность хранения данных.
Раньше у Tarantool не было встроенных инструментов для безопасного общения с сервисами внутри компании. Были кастомные решения, которые делались под клиента. Теперь такой инструмент появился в продукте — в новой версии Tarantool Enterprise весь трафик шифруется.
Шифрование позволит:
защитить взаимодействие сервисов с Tarantool;
защитить взаимодействие инстансов Tarantool между собой;
выставлять доступ к Tarantool напрямую в интернет.
Злоумышленник не сможет прочитать данные, даже если он смог перехватить ваш трафик.
Настроить шифрование просто: нужно указать порт, ключ, сертификат и необходимый алгоритм. Дальше — все работает.
В новой версии поддерживается протокол TLS. Работает это с помощью алгоритма ГОСТ 34.10-2018ГОСТ, а также популярных зарубежных алгоритмов. Это позволяет использовать Tarantool в стеке и удовлетворить требованиям информационной безопасности любой компании.
Аудит
Неправомерное использование данных сотрудниками, попытки хакерских атак и другие инциденты — это то, от чего не защищена ни одна компания. В новом релизе мы расширили возможности аудит-лога в Tarantool Enterprise. Теперь расследовать инциденты будет проще.
Система аудита позволит быстро понять:
что происходило в тот или иной момент времени в системе;
какие запросы и изменения выполнялись конкретными пользователями.
Логи теперь можно писать в JSON, CSV. Сами записи конфигурируются. Работает по тому же принципу, что и в других распространенных базах данных. Типы событий, которые необходимо логировать, можно фильтровать. Также можно создавать собственные типы событий через API Tarantool.
Аудит-лог по-прежнему включается через опцию audit_log
в box.cfg{}
. Ничего не поменялось.
А что еще?
Tarantool в облаке
Community-версия Tarantool теперь доступна как управляемая база данных на облачной платформе VK Cloud Solutions. Tarantool в облаке уже настроен и полностью готов к загрузке данных. Облачная версия снижает порог входа: для работы с Tarantool в облаке не нужно программировать на Lua, разбираться в шардировании и самостоятельно администрировать решение.
Для Community и Enterprise версии
Добавили поддержку ограничений на значения полей. Это позволит проверять записываемое значение перед вставкой с помощью:
любой пользовательской Lua-функции;
внешнего ключа.
Эти механизмы называются Constraints и Foreign keys соответственно.
Пример API для constraints:
box.schema.func.create('check_day_of_year',
{ language = 'LUA',
is_deterministic = true,
body = 'function(x, c) return x >= 1 and x <= 366 end'})
space:format({.., { name = 'day_of_year', constraint = 'check_day_of_year'}, ..})
Пример API для Foreign keys:
space:format({.., { name = 'country_id',
foreign_key = {
country = { space = 'countries', field = 'id'}
}
}, ..
})
Ускорили шардинг: вызовы удаленных хранимых процедуры с vshard ускорились до 70%. Если используется модуль
crud
, то вы также заметите прирост производительности.Сэкономили место: маленькие строчки теперь хранятся оптимальнее — на одну строчку в памяти нужно на 4 байта меньше. За счет этого можно сэкономить до нескольких сотен МБ на некоторых датасетах. Доступно после обновления. Дополнительно настраивать ничего не нужно.
Расширили поддержку транзакций в протоколе для коннекторов: теперь можно держать транзакции открытыми и при этом выполнять другие операции.
Только в Tarantool Enterprise:
⚡️ Научились менять схему данных в фоновом режиме. Теперь не нужно вручную мигрировать данные в новый спейс и тратить время на написание, обкатку и запись миграционного скрипта.
Как это работает? Всё это будет работать через функцию
space:upgrade()
.выполнение команды
space:upgrade()
приводит к моментальной смене формата спейса (так что вставка новых данных и выборка должна соответствовать новому формату);спейс не блокируется на чтение/запись, вместо этого выборка отдает кортежи в новом формате (вне зависимости сконвертированы они уже или нет);
команда запускает фоновую задачу, которая обходит все кортежи спейса и приводит их к новому формату согласно
upgrage_function
.
⚡️ Реализовали поддержку LDAP. Все привычно и есть то, что ожидается. Почитать документацию можно тут.
⚡️ Начали записывать внутреннюю информацию и статистику Tarantool на диск. Назвали это Flightrec. Это позволит быстрее понимать нашей технической поддержке — что случилось и как решать проблему.
Полный список изменений на github.
Скачать Tarantool можно на официальном сайте.
Получить помощь можно в Telegram-чате.
Познакомиться с базовыми возможностями платформы можно прямо в браузере с помощью сервиса Try Tarantool.