39 lines
1.7 KiB
Markdown
39 lines
1.7 KiB
Markdown
# 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, который проявляется случайно?
|