В 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 версии

  • Добавили поддержку ограничений на значения полей. Это позволит проверять записываемое значение перед вставкой с помощью:

    1. любой пользовательской Lua-функции; 

    2. внешнего ключа.

Эти механизмы называются 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. Это позволит быстрее понимать нашей технической поддержке — что случилось и как решать проблему.