feat: Gunicorn + gevent (keepalive), bump 1.0.8→1.0.9
Deploy loadtest / validate (push) Waiting to run

This commit is contained in:
2026-07-10 23:42:54 +04:00
parent 99e7113459
commit 4a09038f96
6 changed files with 130 additions and 2 deletions
+38
View File
@@ -0,0 +1,38 @@
# 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, который проявляется случайно?