Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Рабочий процесс сессии

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

Мотивация

Изоляция процессов обеспечивает ряд преимуществ:

  • Локализация сбоев — аварийное завершение одной сессии не затрагивает другие
  • Ограничения ресурсов — применение лимитов памяти и CPU на сессию через cgroups или механизмы ОС
  • Граница безопасности — сессии с разными уровнями доверия работают в отдельных адресных пространствах
  • Плавная деградация — основной процесс может перезапустить сбойные рабочие процессы

Архитектура

┌──────────────┐
│ Основной     │
│ процесс      │
│ (Супервизор) │
│               │
│  ┌──────────┐ │    ┌─────────────┐
│  │ Сессия A ├─┼───►│ Рабоч. проц.│
│  └──────────┘ │    └─────────────┘
│  ┌──────────┐ │    ┌─────────────┐
│  │ Сессия B ├─┼───►│ Рабоч. проц.│
│  └──────────┘ │    └─────────────┘
└──────────────┘

Основной процесс выступает в роли супервизора, взаимодействуя с рабочими процессами через IPC (Unix-сокеты домена или каналы).

Протокол связи

Рабочие процессы взаимодействуют с супервизором по протоколу JSON с префиксом длины через IPC-канал:

  1. Spawn — супервизор отправляет конфигурацию сессии рабочему процессу
  2. Messages — двунаправленная потоковая передача сообщений пользователя/агента
  3. Heartbeat — периодические проверки состояния
  4. Shutdown — сигнал корректного завершения

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

toml
[agent.worker]
enabled = false
ipc_socket_dir = "/tmp/prx-workers"
heartbeat_interval_secs = 10
max_restart_attempts = 3

Ограничения ресурсов

При работе на Linux рабочий процесс сессии может применять ограничения ресурсов на основе cgroup:

toml
[agent.worker.limits]
memory_limit_mb = 256
cpu_shares = 512

Связанные страницы

Released under the Apache-2.0 License.