feature_flags
В рамках классического подхода feature toggling проект YDB реализует механизм фича-флагов.
Фича-флаги — настройки, которые включают или отключают отдельные возможности YDB. Они позволяют включать новую функциональность поэтапно: её код уже может присутствовать в установленной версии YDB, а сама функциональность ещё недоступна пользователям.
Кто переключает фича-флаги
Переключать фича-флаги может владелец функциональности, знакомый с её внутренней реализацией. Переключение — сложный процесс: необходимо учитывать состояние кластера, зависимости между возможностями и совместимость версий и форматов данных.
Не переключайте флаги самостоятельно, если у вас недостаточно знаний о внутренней реализации функциональности и последствиях изменения её состояния. Перед переключением изучите документацию нужной версии YDB и при необходимости обсудите изменение с владельцем функциональности.
Важно
Включение флага может повлиять на совместимость данных и заблокировать откат YDB на предыдущую версию. Такой откат может понадобиться, если после обновления обнаружится критическая ошибка.
Экспериментальная функциональность
Почему флаг может быть выключен
Часть функциональности попадает в релиз в экспериментальном состоянии. Она ещё находится в разработке, поэтому по умолчанию выключена. Её поведение, синтаксис, API или формат хранения данных могут измениться без сохранения обратной совместимости. Такая функциональность может долго оставаться экспериментальной или быть удалена, так и не став общедоступной.
При этом не каждый выключенный флаг означает экспериментальную функциональность. Некоторые флаги управляют стабильными возможностями, которые нужны не всем. Статус конкретной возможности проверяйте по её документации для нужной версии YDB.
Наличие описания возможности в документации или её кода в релизе ещё не означает, что она включена на кластере вашей базы.
Чем опасно включение экспериментальной функциональности
Для экспериментальной функциональности не гарантируются стабильность, производительность и обратная совместимость. Включение её флага может привести к:
- ошибкам при выполнении запросов или нестабильной работе кластера;
- снижению производительности;
- записи данных в формате, который не поддерживается предыдущей версией YDB.
В последнем случае отключение флага не обязательно возвращает данные в прежний формат. Поэтому возможность отката версии нужно оценивать до включения функциональности, а не после возникновения проблемы.
Не включайте экспериментальную функциональность в production-кластерах. Для проверки используйте отдельный тестовый кластер с данными, которые не жалко потерять.
Как узнать, доступна ли функциональность
При проверке доступности учитывайте установленную версию YDB и конфигурацию кластера.
- Прочитайте документацию нужной версии и release notes. Проверьте ограничения функциональности и указания на её экспериментальный статус.
- Сгенерируйте конечную конфигурацию для узлов, которые обслуживают нужную базу данных, и проверьте значение соответствующего флага. Описание флагов приведено в справочнике конфигурации.
Значение флага по умолчанию определяется кодом соответствующей версии YDB. В конфигурации кластера значение может отличаться от значения по умолчанию. Поэтому справочник флагов не заменяет проверку фактической доступности на вашем кластере.
Как функциональность становится общедоступной
Когда экспериментальная функциональность готова к общему использованию, её флаг включают по умолчанию в соответствующей версии YDB. Из документации этой версии убирают предупреждение об экспериментальном статусе, а в release notes появляется запись о доступности функциональности.
После обновления кластера проверьте его конфигурацию: явно заданное значение флага может отличаться от нового значения по умолчанию.
Настройка флагов
Секция feature_flags включает или отключает отдельные возможности YDB в основной конфигурации кластера. С помощью селекторов динамической конфигурации можно переопределить флаги для отдельных баз данных или групп узлов. Чтобы включить возможность, установите соответствующий фича-флаг в значение true. Например, для включения поддержки автопартиционирования топиков в CDC добавьте следующие строки в конфигурацию:
feature_flags:
enable_topic_autopartitioning_for_cdc: true
Функциональные флаги
| Флаг | Функция |
|---|---|
enable_json_index |
JSON-индексы для ускорения поиска в полях JSON |
enable_json_index_auto_select |
Автоматический выбор JSON-индексов при выполнении запросов |
enable_fulltext_index |
Полнотекстовый индекс для полнотекстового поиска |
enable_local_bloom_filter_index |
Локальный Блум-индекс типа bloom_filter |
enable_local_bloom_ngram_filter_index |
Локальный Блум-индекс типа bloom_ngram_filter |
enable_local_min_max_index |
Локальный min_max-индекс |
enable_topic_autopartitioning_for_cdc |
Автопартиционирование топиков в CDC для строковых таблиц |
enable_access_to_index_impl_tables |
Возможность указания числа реплик для вторичного индекса |
enable_changefeeds_export, enable_changefeeds_import |
Поддержка потоков изменений (changefeed) в операциях резервного копирования и восстановления |
enable_view_export |
Поддержка представлений (VIEW) в операциях резервного копирования и восстановления |
enable_export_auto_dropping |
Автоудаление временных директорий и таблиц при экспорте в S3 |
enable_followers_stats |
Системные представления с информацией об истории перегруженных партиций |
enable_strict_acl_check |
Запрет на выдачу прав несуществующим пользователям и на удаление пользователей, которым выданы права |
enable_strict_user_management |
Строгие правила администрирования локальных пользователей (т.е. администрировать локальных пользователей может только администратор кластера или базы данных) |
enable_database_admin |
Добавление роли администратора базы данных |
enable_kafka_native_balancing |
Клиентская балансировка партиций при чтении по протоколу Kafka |
enable_topic_compactification_by_key |
Включение компактификации топиков в YDB Topics Kafka API |
enable_kafka_transactions |
Включение транзакций в YDB Topics Kafka API |
enable_external_data_sources |
Включение внешних источников данных |
switch_to_config_v2 |
Переход с конфигурации V1 на конфигурацию V2 |
enable_streaming_queries |
Включение потоковых запросов |
enable_stable_node_names |
Включение стабильных имен динамических узлов |
enable_alter_database_create_hive_first |
Создание отдельного Hive для системных таблеток базы при создании базы данных |