Эмбеддер — один общий сервис для всей платформы: преобразует текст в вектор, к нему обращаются Harvester, Knowledge Store, Query Engine и Agent Engine. Несущее решение уже принято на стороне реестра моделей: эмбеддер вынесен отдельным сетевым сервисом (OpenAI-совместимый, веса грузятся лениво), а не вшит в backend. Поэтому масштаб здесь — вопрос эксплуатации, а не передизайна.
Четыре источника нагрузки сходятся в один общий рантайм.
search KS
в агентном цикле — вектор намерения
| Путь | Объём | Латентность | Ожидание |
|---|---|---|---|
| Поиск · QE | маленький запрос | юзер ждёт ответа | критично |
| Поиск · Agent | маленький запрос | фон, но мелкий | терпит · online |
| Инжест · Harvester | большие пачки | фон | терпит |
| Реэмбеддинг · KS | массовый прогон, редко | фон | терпит |
Неравномерность по источникам — не забота эмбеддера. В потоке фрагментов источника уже нет: эмбеддеру важен только суммарный объём, а темп и устойчивость приёма по каждому источнику держат воркеры приёма Harvester.
Риск — не сам объём, а разная форма нагрузки у путей. Большой реиндекс на сотни тысяч фрагментов способен занять рантайм целиком — и запрос пользователя встанет в очередь за ним, поиск затормозит. Это вопрос приоритета, а не количества железа.
search KS, что и у пользователя: ставить его в очередь за
реиндексом значило бы заморозить цикл на минуты ради задачи на
миллисекунды. Поэтому он делит online-путь с поиском, а
не bulk-лимит. Объёма это не добавляет: темп агентных запросов ограничен
сверху
агентным потолком параллелизма, а не пропускной способностью эмбеддера.
MODEL_TOO_LARGE; предпроверка идёт до любого коммита), а
не всплывает позже OOM-убийством. Пофазовое состояние модели
(loading / ready / error) отдаётся отдельным статусным endpoint'ом —
экраны Admin показывают «загрузку весов» и «переиндексацию» как разные
стадии, — а /healthz остаётся чистым liveness: контейнер,
занятый загрузкой весов, жив, и autoheal-сторож не должен его
пристреливать.
У сервиса два рычага мощности. Батчинг — рантайм копит запросы на несколько миллисекунд и считает их одной пачкой; даёт кратный рост пропускной способности на одном контейнере, берётся бесплатно с батчинг-способным рантаймом. Реплики за балансировщиком — N копий: эмбеддинг stateless (текст на входе, вектор на выходе, без состояния между запросами), поэтому любой запрос обслужит любая копия. Сначала выжимается батчинг, потом реплики.
base_url): нарастить пул — это сменить цель адреса, код Harvester, Knowledge
Store и Query Engine не меняется.