---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ydb.tech/docs/en/contributor/spilling-service.md?version=main
  - https://ydb.tech/docs/ru/contributor/spilling-service.md?version=main
sourcePath: ru/core/contributor/spilling-service.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Spilling Service

## Обзор

**Spilling Service** — это [акторный сервис](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#actor-service), который предоставляет временное хранилище для блобов данных в системе YDB. Сервис работает по принципу key-value хранилища, где клиенты могут сохранять данные по уникальному идентификатору и получать их обратно по этому идентификатору.

## Архитектура

### Основные компоненты

- **Task queue**: Сервис поддерживает внутреннюю очередь операций записи и чтения. Все запросы на спиллинг помещаются в данную очередь и обрабатываются асинхронно.
- **Thread pool**: Для выполнения операций ввода-вывода используется пул рабочих потоков.
- **File management**: Сервис автоматически создает, удаляет и управляет файлами на диске.
- **Resource monitoring**: Сервис осуществляет мониторинг использования дискового пространства, количества активных операций и других метрик производительности.

### Хранение данных

Данные сохраняются в файлах на локальной файловой системе. Spilling Service обеспечивает:

* распределение записей между файлами;
* удаление файлов;
* управление жизненным циклом данных.

При непредвиденном перезапуске устаревшие файлы удаляются автоматически.

## Взаимодействие с компонентами

Компоненты системы интегрированы с Spilling Service и взаимодействуют с ним через события акторной системы:

### Мониторинг состояния памяти

Вычислительные узлы осуществляют постоянный мониторинг состояния памяти через аллокатор. Аллокатор информирует узлы о снижении объема свободной памяти. Однако, система не дожидается полного исчерпания памяти, поскольку процесс спиллинга также требует дополнительных ресурсов памяти для сериализации и буферизации данных.

### Отправка событий

При обнаружении необходимости спиллинга данных вычислительный компонент (подсистема передачи данных или вычислительное ядро) выполняет следующие действия:

1. Сериализует данные в блоб
2. Генерирует уникальный идентификатор для блоба
3. Создает запрос на спиллинг с блобом и сгенерированным идентификатором
4. Отправляет запрос в Spilling Service
5. Освобождает ресурсы и переходит в режим ожидания, давая возможность другим задачам использовать вычислительные ресурсы

### Ожидание результатов

После отправки запроса вычислительный компонент освобождает ресурсы для других задач и переходит в режим ожидания, позволяя системе оптимально использовать вычислительные мощности кластера до завершения записи во внешнее хранилище.

### Обработка ответов

Spilling Service обрабатывает запрос и возвращает подтверждение записи по указанному идентификатору или сообщение об ошибке. Продолжение работы вычислительного компонента возможно только после получения подтверждения.

### Чтение данных

При необходимости восстановления данных компонент отправляет запрос чтения с идентификатором блоба. Spilling Service читает данные из внешней памяти и возвращает ответ с восстановленными данными. Во время ожидания загрузки данных освободившиеся вычислительные ресурсы используются для обработки других задач.

## Схема работы спиллинга

```mermaid
sequenceDiagram
    participant CN as Вычислительный узел
    participant SS as Spilling Service
    participant ES as Внешнее хранилище

    Note over CN: Память заполнена
    CN->>SS: Отправка данных (асинхронно)
    Note over CN: Продолжает работу с другими данными
    SS->>ES: Сохранение данных
    SS-->>CN: Подтверждение записи (асинхронно)

    Note over CN: Нужны сохраненные данные
    CN->>SS: Запрос данных (асинхронно)
    Note over CN: Продолжает работу с другими данными
    SS->>ES: Чтение данных
    SS-->>CN: Возврат данных (асинхронно)
```

## Конфигурация

Подробная информация о настройке Spilling Service доступна в разделе [Конфигурация спиллинга](https://ydb.tech/docs/ru/reference/configuration/table_service_config.md?version=main).

## См. также

- [Концепция спиллинга](https://ydb.tech/docs/ru/concepts/query_execution/spilling.md?version=main)
- [Конфигурация спиллинга](https://ydb.tech/docs/ru/reference/configuration/table_service_config.md?version=main)
- [Мониторинг YDB](https://ydb.tech/docs/ru/devops/observability/monitoring.md?version=main)
- [Диагностика производительности](https://ydb.tech/docs/ru/troubleshooting/performance/index.md?version=main)

<!-- source: ru/contributor/_includes/career.md -->
{% note tip "Хотите присоединиться к команде разработки YDB?" %}

Ознакомьтесь с разделами о [команде YDB и открытых вакансиях](https://ydb.tech/ru/careers/), а также о [возможностях для студентов](https://ydb.tech/ru/students/).

{% endnote %}
<!-- endsource: ru/contributor/_includes/career.md -->