From 0856fbc4546e972cf06d3af8d47d26075d617310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sat, 7 Mar 2026 11:10:37 +0400 Subject: [PATCH] =?UTF-8?q?doc:=20decisions=20=E2=80=94=20scale-to-zero=20?= =?UTF-8?q?v2,=20replicas=20todo,=20postgres=20optional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/decisions/log.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/doc/decisions/log.md b/doc/decisions/log.md index 44057e8..61b70b6 100644 --- a/doc/decisions/log.md +++ b/doc/decisions/log.md @@ -77,3 +77,29 @@ **Решение:** Атрибут `code_hash` в `sless_function` — пользователь задаёт через `filemd5("./handler.zip")`. Изменение hash → провайдер перезагружает zip и запускает пересборку. **Причина:** Terraform не отслеживает содержимое файлов автоматически. Это стандартный паттерн (аналогично `aws_lambda_function.source_code_hash`). + +--- + +## 2026-03-07 — Scale-to-zero откладываем до v2 + +**Решение:** В v1 функции работают как Deployment с постоянно живым подом (always-on). Scale-to-zero — в v2 через KEDA HTTP Add-on. + +**Причина:** Scale-to-zero меняет архитектуру контроллера и routing. Для MVP это несоразмерная сложность. Пользователь может управлять ресурсами вручную через `replicas = 0/1/N` (планируется в v1.1). + +**v2 план:** Заменить Deployment на `HTTPScaledObject` (KEDA), минимальные реплики = 0. KEDA буферизует запросы во время cold start (~1-3 сек). + +--- + +## 2026-03-07 — replicas как ручное управление масштабом (TODO v1.1) + +**Решение:** Добавить поле `replicas *int32` в `FunctionSpec`. Пользователь задаёт через Terraform: `replicas = 0` (выключить), `replicas = 1` (включить), `replicas = N` (масштабировать). + +**Причина:** Без этого функция жрёт ресурсы 24/7 даже если не нужна. Это минимальный механизм контроля потребления до реализации scale-to-zero. + +--- + +## 2026-03-07 — PostgreSQL опционален для базового Function Hosting + +**Решение:** Postgres нужен только для логов вызовов (`invocations`). Для базового деплоя функций — не нужен. Оператор работает без него (просто не пишет логи). + +**Минимальные зависимости для production:** k8s кластер + S3 + Docker registry + Ingress.