Files
loadtest/History/sonnet-question-contradiction.md
naeel 4a09038f96
Deploy loadtest / validate (push) Waiting to run
feat: Gunicorn + gevent (keepalive), bump 1.0.8→1.0.9
2026-07-10 23:42:54 +04:00

1.7 KiB
Raw Permalink Blame History

Sonnet: противоречие — nginx 10/10, Flask raw то 10/10 то 2/10

Данные без интерпретаций

Тест 1: nginx:alpine через тот же VIP/ingress/порт

100KB raw binary POST, 10 запросов, таймаут 2с: стабильно 10/10

Тест 2: Flask (тот же ingress/VIP) — raw binary

100KB raw binary POST, те же параметры:

  • Первый прогон: 10/10
  • Второй прогон (после редеплоя): 2/10
  • Третий прогон: 2/10

Тест 3: Flask — URL-encoded form (base64)

100KB base64 → 136KB POST: стабильно 2-5/10

Тест 4: Flask изнутри кластера

pod → VIP: 10/10 всегда pod → ingress service: 10/10 всегда

Что пробовали

  • debug=False: 5/10
  • Gunicorn: 1/10 (хуже)
  • proxy_request_buffering on/off: 3-5/10
  • kube-vip nodeSelector/taint: не влияет
  • MSS clamping: не влияет
  • raw binary вместо form: то 10/10, то 2/10

Инфра

  • Shturval 2.12.1, Cilium CNI
  • Flask 3.1.3, Werkzeug 3.1.8
  • nginx ingress, http2 on, proxy_request_buffering off
  • kube-vip ARP mode, 4 ноды, ingress hostPort на 2

Вопрос

Почему nginx:alpine через тот же ingress стабильно 10/10, а Flask raw binary — то 10/10, то 2/10? Что именно в цепочке ingress→Flask даёт такую нестабильность, если тело одно и то же (raw 100KB)? Может ли Werkzeug dev server иметь скрытый баг с keepalive/connection reuse, который проявляется случайно?