Files
loadtest/History/session-2026-08-18-msg-delay.md

46 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Сессия 2026-08-18 — Диагностика задержки приёма сообщений /messages
_Стенд: ТЕСТ, iot-naeel. LoadTest `loadtest.pythonk8s.dev.nubes.ru` (instanceUid
`bb9ed30b-1794-44ff-81a2-6ff2731200c9`). k8s-доступ только через ВМ `ssh remote-dev`._
## Контекст
- LoadTest расширен: помимо загрузки файлов добавлен `POST /messages` (сырое тело,
случайное содержимое заданного размера) — v2.0.0.
- Цель: выяснить, почему на общем кластере сообщения >~50-64КБ не грузятся,
а на iot-naeel грузятся, но медленно.
## Гипотеза пользователя
«Данные буферизуются где-то (браузер/сервис), занимают ресурсы, но уже не нужны?»
→ Проверено. В БРАУЗЕРЕ НЕТ: прямой curl без браузера даёт ту же задержку (~51.5 с).
## Подтверждённый факт: НЕ приложение, НЕ Flask, НЕ кластерная сеть
Внутри кластера (kubectl exec, python в поде) — ВСЁ мгновенно:
- 100 КБ localhost:5000 = 0.11 с; ClusterIP 10.109.26.82:80 = 0.18 с; IP пода = 0.09 с;
- 10 МБ localhost = 0.20 с.
На внешнем URL `loadtest.pythonk8s.dev.nubes.ru`:
- 100 КБ = 51.5 с (200), 10 МБ = 61.7 с, 50 МБ = 102.5 с.
→ Ровно ~51 с добавляет ВНЕШНИЙ ШЛЮЗ/БАЛАНСИРОВЩИК платформы на входе в кластер
для тел крупнее ~64-68 КБ. Фиксированная пауза ~50 с (не пропорционально размеру).
## Ступенчатый порог (случайный в зоне 64-84 КБ)
| Размер | быстр/медл |
|---|---|
| 1-64 КБ | быстро (0.2-0.4 с) |
| 68 КБ | медленно 51.4 с (3x) |
| 72 КБ | медленно 51.4-51.5 (3x) |
| 84 КБ | 51.5 / 0.58 / 51.5 (случайно) |
| 100-512 КБ | 51.4-52 с |
Вывод: это не «лимит размера», а таймаут-механизм внешнего шлюза, упирающийся в ~50 с;
на общем кластере с меньшим таймаутом он, вероятно, ДАЁТ ОБРЫВ до ответа → «не грузится».
## Решения / что дальше
1. Дождаться редеплоя нагрузки на общий кластер и повторить замеры там.
2. Если на общем кластере ошибка — сравнить http-код и время, подтвердить обрыв на том же шлюзе.
3. Возможный обход: чанковая передача (как в contracts-saga) для гарантированного прохода.
## Результаты сохранены
- `History/diag-2026-08-18-msg-delay.md` (замеры, тайминги, внутрикластерные тесты) — запушено `9e201a3`.