Пропускная способность сервера

Обновление от 2026-05-30 · После раскатки фиксов 6.61-6.64.

Главное: pre-production, легаси нет

Реальных юзеров в проде ещё нет. Все установки — наши тестовые. Соответственно:

Оценка по зонам нагрузки

Аудитория MAUConcurrent WS (пик)Состояние одного VPSГлавное узкое место
≤ 30k ≤ 3k Запас 10×, idle Ничто из нашего стека
30k — 100k 3k — 10k Целевая зона, работает комфортно Workerman CPU держит pong+events легко. БД на PK-lookup'ах. RAM 500MB-1GB на сокеты.
100k — 200k 10k — 20k Работает с напрягом Workerman single-process греется в час-пик. Если повылазит баг с WS-флапом — деградация.
> 200k > 20k Упрёмся Нужна фаза C (Workerman count=4 + Redis pub/sub для shared $hosts/$guests).

Что починили в 6.61-6.64

МетрикаДо фиксовПосле 6.64Где сделано
ble_token_renew в очереди при оффлайне хозяина 1300/4ч 1 (UNIQUE INDEX dedup) Сервер — работает для любого клиента
HTTP retry при сетевом сбое 5 keys × 1/мин = 7200/день ~50/день (backoff 30мин) Клиент 6.64 — нужен новый APK
WS-реконнект при флапе сети ~10/мин (1с retry) ~1/мин (60с backoff) Клиент 6.62+ — нужен новый APK
DB hello-lookups при WS-флапе ~50/сек на 10k клиентов ~5/сек Сервер — rate-limit 5с защищает от любых клиентов
Failed fire-events в Prefs гостя 60+/день на гостя с истёкшим токеном 0 Клиент 6.63
Recompose-волны при guest_ok каждый numbers_update только при реальном изменении Клиент 6.64

Что работает СРАЗУ для всех клиентов (серверные фиксы)

Серверные защиты опираются на онмессадж-логику — отрабатывают независимо от того, какая версия клиента шлёт данные.

Что работает только после апдейта клиента

Решение: поднял $MIN = '6.66'. Любой старый клиент при первом versionCheck получит блокирующий диалог «Обновите приложение» (UI уже есть, см. App.kt:checkVersionAsync).

Workerman scale-out — когда понадобится

Сейчас count=1 — один PHP-процесс держит ВСЕ WS в массивах $hosts/$guests/$calls in-memory.

Конкретные пороги:

Что делать при приближении к 15k:

  1. Поставить Redis на VPS (apt install redis-server).
  2. Workerman count=4 (по числу ядер VPS).
  3. Вынести $hosts/$guests/$calls в Redis HASH с TTL.
  4. Pub/sub между воркерами: когда сообщение пришло на W1, а получатель сидит на W2 — пересылаем через канал.

Эффект: линейный scale до 4×, потолок поднимается до ~40-60k concurrent.

CDN-миграция — когда понадобится

Сейчас APK 22 МБ × N юзеров идёт с твоего VPS. На 100k юзеров при релизе = 2.2 ТБ outbound. Своего канала может не хватить или будет дорого.

Подготовлено в 6.64:

Когда понадобится переезд:

  1. Cloudflare R2 bucket → залить entrixy.apk.
  2. Custom domain apk.entrixy.com через Cloudflare CDN.
  3. В _config.php: $GLOBALS['apk_url'] = 'https://apk.entrixy.com/entrixy.apk';
  4. В deploy-скрипте после assembleRelease добавить r2 cp app-release.apk apk-bucket/entrixy.apk.

На текущем масштабе (десятки тестеров) — не надо.

Стек действий: что сейчас на сервере и в приложении

Чтобы все фиксы заработали:
  1. На сервере: sudo supervisorctl restart dialer-ws (от твоего sudo).
  2. Юзеры с любой версией ниже 6.66 при следующем запуске получат force-update диалог и пойдут качать.
  3. После раскатки клиентов 6.66 — нагрузка от штормов реконнектов и retry'ев упадёт на порядок.