§ Продуктивність та масштабування

Робота UBD на повільних каналах (від 64 кбіт/с)

Як платформа працює на GSM CSD, як виявляти і виправляти проблеми у тер. підрозділах.

ЧАС: 9 хв читання СКЛАДНІСТЬ: Середня ОНОВЛЕНО: 2026-05-14

У 2026 році 99% користувачів працюють на широкосмугових каналах від 100 Мбіт/с. Але для держсектору, охоронних компаній і служб типу МВС залишається сценарій: територіальний підрозділ у віддаленій місцевості з GSM-модемом або супутниковим зв’язком, де доступно 64-128 кбіт/с з high latency. Якщо система не працює там — вона не працює там, де найбільше потрібна.

Чому це важливо

Сценарії, де повільні канали — норма:

  • Прикордонні застави.
  • Виїзні пости поліції у сільській місцевості.
  • Резервні канали зв’язку при відмові основних (наприклад, при пошкодженні оптики).
  • Польові підрозділи з тимчасовим розгортанням (учбові центри, навчання).
  • Сільські медичні пункти, де канал — ADSL 256 кбіт/с.

На таких каналах звичайний веб-додаток не працює: сторінка з 5 MB JavaScript завантажується 10 хвилин. UBD спроєктований з врахуванням цих сценаріїв як обов’язкової частини QA.

Архітектурні рішення UBD

Низький overhead

Кожен HTTP-запит UBD містить мінімум метаданих. Сесійні токени — короткі (JWT з мінімальним claim set). Заголовки — без надлишкових кук.

Типовий запит до API: 200-400 байт overhead + payload. Для порівняння, типовий веб-додаток — 2-5 KB overhead.

Compression

HTTP-відповіді стискаються через gzip або brotli. Текстовий JSON стискається у 5-10 разів. Для повільних каналів — це різниця між «прийнятно» і «неможливо».

Налаштування: gzip level 6 — оптимум між CPU overhead і степенем стиснення. Brotli — кращий, але більше CPU; вмикається селективно для критичних endpoints.

Batching

На повільних каналах latency запитів — десятки секунд. UBD підтримує batch-API: кілька логічних запитів передаються одним HTTP-запитом. Замість 10 запитів × 5 секунд = 50 секунд, отримуємо 1 запит × 5 секунд = 5 секунд.

Differential updates

При оновленні даних — передається тільки зміни (delta), не повний об’єкт. Якщо документ 1 MB, але змінилось одне поле — передається 100 байт, не 1 MB.

Тестування з network shaping

Розробка під повільні канали без емуляції — рецепт катастрофи. У lab-середовищі канал 1 Гбіт/с, система працює ідеально. У полі — 64 кбіт/с з 800 мс latency, система не працює.

Інструменти network shaping:

  • tc (traffic control) у Linux: точне обмеження bandwidth і додавання затримки. Стандартний інструмент.
  • Clumsy у Windows: графічний інструмент для імітації мережевих проблем.
  • NetEm: розширення tc для імітації втрат пакетів, jitter, дублювань.

Базовий тест-сценарій для UBD: 64 кбіт/с, 500 мс latency, 1% packet loss. Якщо ключові операції працюють (вхід, перегляд списку, створення документа за <30 секунд) — система готова.

Типові проблеми на повільних каналах

1. Timeout

HTTP-клієнт чекає відповіді 30 секунд, не отримує — кидає помилку. На каналі 64 кбіт/с великий response (100 KB) може передаватися 15+ секунд, що з latency дає 17-20 секунд. Близько до межі.

Рішення: збільшити client-side timeout до 120 секунд для повільних каналів. Дати користувачеві візуальний індикатор: «триває завантаження…».

2. Partial loads

Канал нестабільний, з’єднання обривається у середині передачі. Користувач отримує половину сторінки. Frontend має це коректно обробляти: повторна спроба завантаження, не відображення проміжного стану.

Рішення: HTTP Range requests, resume на обриві.

3. Затримка автоматичного оновлення

Інтерфейс автоматично оновлюється (наприклад, список вхідних повідомлень). На повільному каналі це означає постійне завантаження. Користувач не може зробити іншу операцію.

Рішення: на повільному каналі вимикати auto-refresh. Користувач сам оновлює, коли потрібно.

4. Великі файли

Завантаження файлу 10 MB на 64 кбіт/с — 25+ хвилин. Цього не уникнути технічно, але треба:

  • Дати користувачеві оцінку часу.
  • Підтримувати resume після обриву.
  • Дозволити «продовжити роботу, тримай завантаження у фоні».

Стратегії для адміністратора

Моніторинг якості каналу

Адміністратор повинен бачити, з якого каналу працюють користувачі. Метрики:

  • RTT (round-trip time) для кожного клієнта.
  • Ефективна швидкість завантаження (за останнім чанком).
  • Кількість timeout’ів за період.

Користувачі, у яких RTT >500 мс або >10% запитів timeout’ять — кандидати на перевірку каналу.

Кешування на стороні клієнта

Довідники, метадані моделі, статичні ресурси — кешуються на стороні клієнта на 24 години. На повільному каналі це різниця у 5-10 разів для повторних відвідувань.

Локальне проксі

Для територіального підрозділу з кількома користувачами — встановлюється локальне проксі-кеш. Воно один раз завантажує статичні ресурси з центру, всі користувачі підрозділу читають з локального кешу.

[ ПРАКТИЧНА РЕАЛІЗАЦІЯ ]
Тестування повільних каналів — частина QA

UBD тестується на 64 кбіт/с з 500 мс latency як обов’язкова частина QA при кожному релізі. Регресія продуктивності на повільному каналі — блокуючий дефект, не «оптимізація на потім». Це закладено у процес розробки з 2018 року, коли перші впровадження у розподілених структурах з територіальними підрозділами виявили цю потребу як критичну.

UnityBaseDefense — технічна довідка →

Мітки