Spilling Service
Обзор
Spilling Service — это акторный сервис, который предоставляет временное хранилище для блобов данных в системе YDB. Сервис работает по принципу key-value хранилища, где клиенты могут сохранять данные по уникальному идентификатору и получать их обратно по этому идентификатору.
Архитектура
Основные компоненты
- Task queue: Сервис поддерживает внутреннюю очередь операций записи и чтения. Все запросы на спиллинг помещаются в данную очередь и обрабатываются асинхронно.
- Thread pool: Для выполнения операций ввода-вывода используется пул рабочих потоков. Количество потоков конфигурируется и влияет на производительность сервиса.
- File management: Сервис автоматически создает, удаляет и управляет файлами на диске.
- Resource monitoring: Сервис осуществляет мониторинг использования дискового пространства, количества активных операций и других метрик производительности.
Хранение данных
Данные сохраняются в файлах на локальной файловой системе. Spilling Service обеспечивает:
- распределение записей между файлами;
- удаление файлов;
- управление жизненным циклом данных.
При непредвиденном перезапуске устаревшие файлы удаляются автоматически.
Взаимодействие с компонентами
Компоненты системы интегрированы с Spilling Service и взаимодействуют с ним через события акторной системы:
Мониторинг состояния памяти
Вычислительные узлы осуществляют постоянный мониторинг состояния памяти через аллокатор. Аллокатор информирует узлы о снижении объема свободной памяти. Однако, система не дожидается полного исчерпания памяти, поскольку процесс спиллинга также требует дополнительных ресурсов памяти для сериализации и буферизации данных.
Отправка событий
При обнаружении необходимости спиллинга данных вычислительный компонент (подсистема передачи данных или вычислительное ядро) выполняет следующие действия:
- Сериализует данные в блоб
- Генерирует уникальный идентификатор для блоба
- Создает запрос на спиллинг с блобом и сгенерированным идентификатором
- Отправляет запрос в Spilling Service
- Освобождает ресурсы и переходит в режим ожидания, давая возможность другим задачам использовать вычислительные ресурсы
Ожидание результатов
После отправки запроса вычислительный компонент освобождает ресурсы для других задач и переходит в режим ожидания, позволяя системе оптимально использовать вычислительные мощности кластера до завершения записи во внешнее хранилище.
Обработка ответов
Spilling Service обрабатывает запрос и возвращает подтверждение записи по указанному идентификатору или сообщение об ошибке. Продолжение работы вычислительного компонента возможно только после получения подтверждения.
Чтение данных
При необходимости восстановления данных компонент отправляет запрос чтения с идентификатором блоба. Spilling Service читает данные из внешней памяти и возвращает ответ с восстановленными данными. Во время ожидания загрузки данных освободившиеся вычислительные ресурсы используются для обработки других задач.
Схема работы спиллинга
Конфигурация
Подробная информация о настройке Spilling Service доступна в разделе Конфигурация спиллинга.