diff --git a/config.toml b/config.toml deleted file mode 100644 index 5c78950..0000000 --- a/config.toml +++ /dev/null @@ -1,403 +0,0 @@ -# -# Copyright 2026 Grigorii Safronov -# -# Licensed under the CDDL, Version 1.0 (the "License"); -# you may not use this file except in compliance with the License. -# -# You may obtain a copy of the License at -# https://opensource.org/licenses/CDDL-1.0 -# - -# ============================================================================ -# КОНФИГУРАЦИОННЫЙ ФАЙЛ СУБД futriiX -# ============================================================================ -# Данный файл содержит все настройки для работы кластерной СУБД futriiX. -# Формат: TOML (Tom's Obvious, Minimal Language) -# ============================================================================ - -# ============================================================================ -# [cluster] - НАСТРОЙКИ КЛАСТЕРА -# ============================================================================ -# Определяет конфигурацию узла в распределённом кластере. -# Все узлы должны иметь одинаковое имя кластера для взаимодействия. -# ============================================================================ -[cluster] - name = "test_cluster" # Имя кластера (должно совпадать на всех узлах) - node_ip = "192.168.0.103" # IP-адрес узла (0.0.0.0 - все интерфейсы) - node_port = 9876 # Порт для коммуникации между узлами - raft_port = 9878 # Порт для Raft консенсус-протокола - raft_data_dir = "raft_data" # Директория для данных Raft (логи, снапшоты) - bootstrap = true # Первый узел в кластере (только для инициализации) - nodes = [ # Список всех узлов кластера - "192.168.0.103:9878", # Формат: "IP:RaftPort" - ] - - # ---------- Таймауты Raft ---------- - heartbeat_timeout_ms = 1000 # Интервал heartbeat от лидера (мс) - election_timeout_ms = 1000 # Таймаут до начала выборов (мс) - commit_timeout_ms = 500 # Таймаут коммита (мс) - - # ---------- Snapshot настройки ---------- - snapshot_interval_min = 30 # Интервал создания снапшотов (минут) - snapshot_threshold = 1000 # Количество логов до создания снапшота - - # ---------- Split-brain защита ---------- - split_brain_prevention = true # Включить защиту от split-brain - recovery_timeout_sec = 30 # Таймаут восстановления (сек) - - # ---------- Региональные настройки ---------- - region = "default" # Регион узла (для географического распределения) - priority_zone = 0 # Приоритетная зона (0-9, меньше = выше приоритет) - -# ============================================================================ -# [storage] - НАСТРОЙКИ ХРАНИЛИЩА -# ============================================================================ -# Определяет параметры физического хранения данных. -# ============================================================================ -[storage] - page_size_mb = 64 # Размер страницы памяти (МБ) - max_collections = 100 # Максимальное количество коллекций в БД - max_documents_per_collection = 1000000 # Максимум документов в коллекции - default_engine = "row" # Движок хранения по умолчанию - enable_custom_engines = true # Включить поддержку кастомных движков - -# ============================================================================ -# [repl] - НАСТРОЙКИ REPL (Read-Eval-Print Loop) -# ============================================================================ -# Настройки интерактивной командной строки для управления СУБД. -# ============================================================================ -[repl] - prompt_color = "#00bfff" # Цвет приглашения (HEX) - history_size = 1000 # Размер истории команд - -# ============================================================================ -# [log] - НАСТРОЙКИ ЛОГИРОВАНИЯ -# ============================================================================ -# Определяет, куда и с какой детализацией сохранять логи. -# ============================================================================ -[log] - log_file = "futriix.log" # Путь к файлу логов - log_level = "debug" # Уровень: debug, info, warn, error, fatal - -# ============================================================================ -# [api] - НАСТРОЙКИ HTTP API -# ============================================================================ -# Порт для REST API сервера. -# ============================================================================ -[api] - port = 8080 # Порт HTTP API - -# ============================================================================ -# [replication] - НАСТРОЙКИ РЕПЛИКАЦИИ -# ============================================================================ -# Управляет репликацией данных между узлами кластера. -# Мастер-мастер репликация НЕ ИСПОЛЬЗУЕТСЯ (удалена из архитектуры). -# ============================================================================ -[replication] - enabled = false # Включить репликацию - sync_replication = false # Синхронная репликация (ждёт подтверждения) - replication_timeout_ms = 5000 # Таймаут репликации (мс) - max_replica_lag_ms = 5000 # Максимальная задержка для чтения с реплик - -# ============================================================================ -# [compression] - НАСТРОЙКИ СЖАТИЯ -# ============================================================================ -# Алгоритмы и параметры сжатия данных для экономии места. -# ============================================================================ -[compression] - enabled = true # Включить сжатие данных - algorithm = "snappy" # Алгоритм: snappy, lz4, zstd - level = 3 # Уровень сжатия (1-9) - min_size = 1024 # Минимальный размер документа для сжатия (байт) - -# ============================================================================ -# [webui] - НАСТРОЙКИ ВЕБ-ИНТЕРФЕЙСА -# ============================================================================ -# Встроенный веб-интерфейс для мониторинга и управления. -# ============================================================================ -[webui] - enabled = true # Включить веб-интерфейс - port = 9080 # Порт веб-интерфейса - theme = "dark" # Тема: dark, light - -# ============================================================================ -# [performance] - НАСТРОЙКИ ПРОИЗВОДИТЕЛЬНОСТИ -# ============================================================================ -# Оптимизация производительности системы. -# ============================================================================ -[performance] - enable_pipeline = true # Pipeline репликация (группировка команд) - batch_size = 100 # Размер батча операций - read_from_follower = true # Чтение из реплик (асинхронная репликация) - max_connections = 1000 # Максимум соединений - read_replica_delay_ms = 100 # Максимальная задержка для чтения с реплик - -# ============================================================================ -# [security] - НАСТРОЙКИ БЕЗОПАСНОСТИ -# ============================================================================ -# TLS шифрование и аутентификация клиентов. -# ============================================================================ -[security] - enable_tls = false # Включить TLS - cert_file = "" # Путь к сертификату (.crt) - key_file = "" # Путь к ключу (.key) - ca_file = "" # Путь к CA (.crt) - min_version = "1.2" # Минимальная версия TLS - -# ============================================================================ -# [monitoring] - НАСТРОЙКИ МОНИТОРИНГА -# ============================================================================ -# Сбор метрик и распределённый трейсинг. -# ============================================================================ -[monitoring] - enable_metrics = true # Включить Prometheus метрики - metrics_port = 9090 # Порт для метрик - enable_tracing = false # Включить распределённый трейсинг - trace_sample_rate = 0.01 # Частота сэмплирования (0-1) - -# ============================================================================ -# [recovery] - НАСТРОЙКИ ВОССТАНОВЛЕНИЯ -# ============================================================================ -# Автоматическое восстановление после сбоев. -# ============================================================================ -[recovery] - auto_rejoin = true # Автоматическое переподключение к кластеру - max_retry_sec = 300 # Максимальное время повторов (сек) - data_replication_timeout_sec = 60 # Таймаут репликации данных (сек) - stale_read_timeout_sec = 30 # Таймаут для устаревших чтений (сек) - -# ============================================================================ -# [wal] - НАСТРОЙКИ WAL (Write-Ahead Log) -# ============================================================================ -# Журнал предзаписи для обеспечения целостности данных. -# Поддерживает сегментирование и асинхронное восстановление. -# ============================================================================ -[wal] - segment_size_mb = 64 # Размер сегмента WAL (МБ) - sync_interval_sec = 5 # Интервал синхронизации с диском (сек) - batch_size = 100 # Размер пакета записи - recovery_workers = 4 # Количество воркеров для восстановления - enabled = true # Включить WAL - async_recovery = true # Асинхронное восстановление - async_recovery_workers = 4 # Количество воркеров для асинхронного восстановления - async_recovery_buffer = 10000 # Размер буфера для асинхронного восстановления - -# ============================================================================ -# [mvcc] - НАСТРОЙКИ MVCC -# ============================================================================ -# Multi-Version Concurrency Control для управления версиями документов. -# ============================================================================ -[mvcc] - max_versions_per_doc = 10 # Максимум версий документа (0 = отключено) - visibility_map_size = 1048576 # Размер карты видимости (1M) - prune_interval_min = 5 # Интервал очистки версий (минут) - retention_days = 7 # Дни хранения старых версий - read_cache_size = 10000 # Размер кэша чтения - read_cache_ttl_sec = 300 # TTL кэша (сек) - -# ============================================================================ -# [transactions] - НАСТРОЙКИ ТРАНЗАКЦИЙ -# ============================================================================ -# Управление транзакциями с поддержкой Saga и TCC. -# 2PC (Two-Phase Commit) НЕ ИСПОЛЬЗУЕТСЯ (удалён из архитектуры). -# ============================================================================ -[transactions] - default_timeout_sec = 30 # Таймаут транзакции по умолчанию (сек) - deadlock_check_interval_sec = 1 # Интервал проверки дедлоков (сек) - max_savepoints_per_tx = 100 # Максимум точек сохранения в транзакции - enabled = true # Включить поддержку транзакций - checkpoint_interval_sec = 300 # Интервал чекпоинтов (сек) - -# ============================================================================ -# [saga] - НАСТРОЙКИ SAGA ОРКЕСТРАТОРА -# ============================================================================ -# Отказоустойчивый оркестратор распределённых транзакций по протоколу SAGA. -# Обеспечивает выполнение длительных транзакций с компенсацией шагов. -# ============================================================================ -[saga] - # Основные настройки - enabled = true # Включить SAGA оркестратор - coordinator_count = 3 # Количество координаторов (>= 3 для отказоустойчивости) - state_dir = "saga_states" # Директория для хранения состояний SAGA - - # Настройки выполнения - max_retries = 5 # Максимальное количество попыток выполнения шага - retry_backoff_ms = 100 # Базовая задержка между повторными попытками (мс) - saga_timeout_sec = 300 # Таймаут выполнения SAGA (сек) - stuck_check_interval_sec = 10 # Интервал проверки зависших SAGA (сек) - - # Настройки оркестрации - leader_election_interval_sec = 5 # Интервал выбора лидера (сек) - recovery_interval_sec = 30 # Интервал восстановления незавершённых SAGA (сек) - metrics_interval_sec = 60 # Интервал сбора метрик (сек) - - # Настройки очистки и кэширования - cleanup_period_hours = 24 # Период очистки старых SAGA (часы) - max_cache_size = 10000 # Максимальное количество состояний в кэше - operation_retention_days = 7 # Время жизни выполненных операций (дни) - - # Настройки производительности - channel_buffer_size = 10000 # Размер буфера каналов - async_recovery_workers = 4 # Количество воркеров для асинхронного восстановления - async_recovery_timeout_sec = 30 # Таймаут асинхронного восстановления (сек) - - # Настройки синхронизации с диском - fsync_enabled = true # Принудительная синхронизация с диском - fsync_max_retries = 3 # Количество повторных попыток синхронизации - fsync_retry_delay_ms = 100 # Задержка между повторными попытками (мс) - -# ============================================================================ -# [acl] - НАСТРОЙКИ ACL (Access Control List) -# ============================================================================ -# Управление доступом и ролями пользователей. -# ============================================================================ -[acl] - max_denied_log_size = 10000 # Максимум записей в логе отказов - temporary_grant_ttl_hours = 24 # TTL временных разрешений (часы) - enable_role_hierarchy = true # Включить иерархию ролей - cache_ttl_sec = 60 # TTL кэша ACL (сек) - -# ============================================================================ -# [plugins] - НАСТРОЙКИ ПЛАГИНОВ -# ============================================================================ -# Поддержка Lua скриптов и кастомных движков хранения. -# ============================================================================ -[plugins] - enabled = true # Включить плагины - script_dir = "plugins" # Директория плагинов - allow_list = ["print", "math", "string", "table", "engine"] # Разрешённые Lua-библиотеки - max_lua_states = 100 # Максимум Lua-состояний - lua_state_ttl_sec = 600 # TTL неиспользуемого состояния (сек) - max_cpu_time_ms = 100 # Лимит CPU на плагин (мс) - max_memory_mb = 50 # Лимит памяти на плагин (МБ) - max_execution_time_sec = 5 # Лимит времени выполнения (сек) - max_instructions = 1000000 # Лимит инструкций Lua - hot_reload_interval_sec = 30 # Интервал проверки изменений (сек) - max_event_log_size = 1000 # Максимум записей в логе плагина - load_timeout_sec = 10 # Таймаут загрузки плагина (сек) - engine_plugin_dir = "engines" # Директория с движками-плагинами - -# ============================================================================ -# [engines] - НАСТРОЙКИ КАСТОМНЫХ ДВИЖКОВ -# ============================================================================ -# Конфигурация различных движков хранения данных. -# ============================================================================ -[engines] - # Встроенный row-based движок (всегда доступен) - [engines.row] - enabled = true - description = "Row-based storage engine (default)" - - # Колоночный движок для аналитических нагрузок - [engines.columnar] - enabled = false - description = "Columnar storage engine for analytics" - config = { compression = "zstd", block_size = 65536 } - - # Document-ориентированный движок (JSON-подобный) - [engines.document] - enabled = false - description = "Document-oriented storage engine" - config = { auto_index = true, max_nesting = 32 } - - # Key-Value движок для простых операций - [engines.kv] - enabled = false - description = "Key-Value storage engine" - config = { ttl_enabled = true, ttl_default_seconds = 86400 } - - # Time-series движок для временных рядов - [engines.ts] - enabled = false - description = "Time-series storage engine" - config = { chunk_interval_seconds = 3600, retention_days = 30 } - - # Графовый движок для связей - [engines.graph] - enabled = false - description = "Graph storage engine" - config = { vertex_label = "node", edge_label = "relationship" } - -# ============================================================================ -# [cluster_tls] - TLS ДЛЯ МЕЖУЗЛОВОГО ОБЩЕНИЯ -# ============================================================================ -# Шифрование трафика между узлами кластера. -# ============================================================================ -[cluster_tls] - enabled = false # Включить TLS для межузлового общения - cert_file = "certs/node.crt" # Путь к сертификату узла - key_file = "certs/node.key" # Путь к ключу узла - ca_file = "certs/ca.crt" # Путь к CA (для взаимной аутентификации) - min_version = "1.2" # Минимальная версия TLS - mutual_auth = false # Взаимная аутентификация (mTLS) - key_rotation_days = 30 # Дни до ротации ключей - auto_generate = false # Автогенерация сертификатов при отсутствии - -# ============================================================================ -# [backpressure] - НАСТРОЙКИ BACKPRESSURE -# ============================================================================ -# Защита системы от перегрузки. -# При достижении порогов начинает отклонять запросы или добавлять задержки. -# ============================================================================ -[backpressure] - enabled = true # Включить backpressure - cpu_threshold = 0.80 # Порог CPU для срабатывания (0-1) - memory_threshold = 0.85 # Порог памяти для срабатывания (0-1) - queue_size_threshold = 10000 # Порог размера очереди - connection_threshold = 5000 # Порог количества соединений - check_interval_ms = 1000 # Интервал проверки (мс) - low_delay_ms = 100 # Задержка при низкой нагрузке (мс) - medium_reject_prob = 30 # Вероятность отклонения при средней (%%) - high_reject_prob = 70 # Вероятность отклонения при высокой (%%) - -# ============================================================================ -# [runtime_limits] - ОГРАНИЧЕНИЯ НА УРОВНЕ ВЫПОЛНЕНИЯ -# ============================================================================ -# Жёсткие ограничения на размеры документов и коллекций. -# ============================================================================ -[runtime_limits] - enabled = true # Включить ограничения - global_max_doc_size_mb = 16 # Макс. размер документа (МБ) - global_max_coll_size_mb = 10240 # Макс. размер коллекции (МБ) (10 GB) - global_max_docs_per_coll = 10000000 # Макс. документов в коллекции - -# ============================================================================ -# [autoscaling] - НАСТРОЙКИ АВТОМАСШТАБИРОВАНИЯ -# ============================================================================ -# Автоматическое добавление/удаление узлов в зависимости от нагрузки. -# ============================================================================ -[autoscaling] - enabled = false # Включить автомасштабирование - min_nodes = 1 # Минимум узлов - max_nodes = 10 # Максимум узлов - scale_up_threshold = 0.75 # Порог для увеличения (0-1) - scale_down_threshold = 0.30 # Порог для уменьшения (0-1) - scale_up_cooldown_sec = 300 # Cooldown после увеличения (сек) - scale_down_cooldown_sec = 600 # Cooldown после уменьшения (сек) - evaluation_interval_sec = 30 # Интервал оценки (сек) - predictive_enabled = true # Прогнозирование нагрузки - max_scale_up_nodes = 3 # Макс. узлов за одно увеличение - max_scale_down_nodes = 2 # Макс. узлов за одно уменьшение - -# ============================================================================ -# [schema_migration] - НАСТРОЙКИ МИГРАЦИИ СХЕМЫ -# ============================================================================ -# Автоматическое обновление схемы данных при обновлении версии. -# ============================================================================ -[schema_migration] - enabled = true # Включить миграции - migration_dir = "migrations" # Директория с миграциями - auto_migrate = true # Автоматическая миграция при старте - target_version = "2.1.0" # Целевая версия схемы - -# ============================================================================ -# [backup] - НАСТРОЙКИ БЭКАПОВ -# ============================================================================ -# Планировщик резервного копирования данных. -# ============================================================================ -[backup] - enabled = true # Включить планировщик бэкапов - backup_dir = "backups" # Директория для бэкапов - max_concurrent = 1 # Макс. одновременных бэкапов - compress_enabled = true # Сжатие бэкапов - retention_days = 7 # Дни хранения бэкапов