Производительность и масштабирование

sections.operations

Производительность и масштабирование

Как Skrum держит нагрузку: цели p95 на горячих путях, кэш чтения, ограниченный рабочим пространством, и хаос-поведение при отказе зависимости.

Производительность и масштабирование

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

Skrum спроектирован так, чтобы оставаться отзывчивым при росте рабочего пространства и в неудачные дни инфраструктуры. На этой странице собраны конкретные цифры, модель кэширования и режимы отказа.

Пороги нагрузки

Опциональные сценарии k6 в каталоге load/ удерживают Skrum в этих целях против составленной среды с детерминированными подставными провайдерами:

  • Реалтайм-рассылка — 500 одновременных сокет-клиентов в одном канале, задержка p95 от сообщения до рассылки ≤ 250 ms, доля ошибок < 0.1%.
  • POST сообщения — p95 ≤ 200 ms при 50 rps, доля ошибок < 0.5%.
  • Чтение доски (GET /api/tasks?projectId=…) — p95 ≤ 150 ms при 100 rps, доля ошибок < 0.5%.
  • Поиск (GET /api/search) — p95 ≤ 300 ms при 50 rps, доля ошибок < 1%.
  • Сводка главной (GET /api/home/summary) — p95 ≤ 200 ms при 100 rps, доля ошибок < 0.5%.

Сквозной кэш чтения

Небольшой сквозной кэш чтения на Redis покрывает три горячих пути: список каналов на рабочее пространство, проекции досок проектов и сводку панели/главной. Каждый ключ снабжается префиксом accountId рабочего пространства — рабочее пространство читает только свои собственные закэшированные данные. Инвалидация управляется событиями реалтайм-хребта (message.posted, channel.*, task.*), а короткий TTL служит подстраховкой. Кэш хранит только уже авторизованные, несекретные проекции.

Устойчивость к хаосу

Когда зависимость падает, Skrum отказывает безопасно, а не пишет частично и не утекает данными.

  • Redis лежит. Реалтайм и кэш деградируют; REST продолжает отдавать источник истины из Mongo и Postgres. Лимитеры отказывают безопасно (запрещают, никогда не открывают проход).
  • Mongo или Postgres недоступны. Маршруты возвращают локализованную ошибку класса 503 — без необработанных падений и без частичной записи.
  • MinIO или LiveKit лежат. Загрузка файлов и совещания безопасно отказывают с локализованной ошибкой; остальное приложение продолжает работать. См. Резервное копирование и восстановление.

Когда зависимость возвращается, сервис возобновляется автоматически — ручного перезапуска не требуется.

Частые вопросы

  • Запускать ли набор k6 в CI? Да, через опциональную задачу. Сценарии нагрузки никогда не блокируют обычный pull request.
  • Можно ли повысить TTL кэша? TTL умышленно короткий. Инвалидация по событиям — основной путь корректности; TTL нужен только на случай простоя Redis.
  • Может ли кэш утечь между рабочими пространствами? Нет — каждый ключ снабжается префиксом accountId, и отдельный тест доказывает изоляцию между арендаторами.

См. также: Документация Skrum