Serverless backend notları
~5 dkOpsBackendKararlı
API serverless geçiş analizi ve operasyon notları
Backend Serverless Gecis Notlari
Mühendislik notu
Bu sayfa entegratör yol haritasından çok ekip içi operasyon/backlog içeriği taşır. Entegrasyon için API Reference ve ilgili ürün rehberlerini kullanın.
Bu notlar, mevcut allmine-api backend koduna gore hazırlandı.
1) Mevcut Durum Ozeti (Koddan Tespit)
- HTTP API tek process olarak
NestFactory.create(...)ile acilipapp.listen(port)ile ayaga kalkiyor. - Ayni process içinde Socket.IO gateway'leri calisiyor:
/chat/balance/live-stream/live-stream-status/stream-chat
- Ayni process içinde cron job'lar calisiyor:
- 15 saniyede bir live-stream cron'lari
- 1 dakikada bir maintenance scheduler
- 1 dakikada bir thumbnail update
- Ayni process içinde BullMQ queue producer + consumer calisiyor.
- Bazi davranislar process memory uzerinde state tutuyor (Map/Set gibi).
- Stripe webhook raw body dogrulamasi istiyor.
- Upload akisinda backend'e multipart dosya geliyor (buffer ile isleniyor).
2) Serverless'e Gecerken Kritik Karar
Tam serverless'e gecis için once su karari netlestirmek gerekir:
- Full serverless mi? (HTTP + WS + worker + scheduler hepsi serverless)
- Hybrid mi? (HTTP serverless, websocket/worker container)
Bu repo için teknik risk en cok websocket ve 15 saniyelik cron/billing akislarinda.
3) Yapilacaklar Listesi
A. Runtime'lari Ayirma
- HTTP API runtime'ini ayir:
- Mevcut
main.tstek process yaklasimini serverless handler'a tasiyacak bir giris noktasi ekle. - Lambda uyumlu adapter kullan (
serverless-expressbenzeri).
- Mevcut
- Queue worker runtime'ini ayir:
- Consumer'lar HTTP runtime'dan ayrilmali.
- Scheduler runtime'ini ayir:
- Cron islerini ayri tetik mekanizmasina tasimak gerekir.
B. WebSocket Stratejisi
- Socket.IO serverless dogrudan tasinmaz; iki secenekten biri secilmeli:
- API Gateway WebSocket + connection store (Dynamo/Redis)
- Managed realtime servis (Ably/Pusher) veya Fargate uzerinde Socket.IO
- In-memory membership/state yapilari Redis/Dynamo gibi dis state store'a alınmali.
- Queue consumer -> websocket bildirimleri dogrudan gateway çağrısı yerine event bus/pub-sub uzerinden yapilmali.
C. Cron/Scheduler Donusumu
@Cronkullanan servisleri EventBridge Scheduler / Cloud Scheduler / queue-delay tabanli akislara cevir.- 15 saniye periyot isteyen cron'lar için:
- EventBridge minimum periyot kisiti nedeniyle queue tabanli self-reschedule veya surekli worker gerekir.
- Cron idempotency kilitleri ekle (tek tetik garantisi için distributed lock).
D. Queue Mimarisi (BullMQ)
- BullMQ + Redis yapisi serverless'te "surekli worker" ister; secenekler:
- BullMQ'yu koru, worker'i container/Fargate'te calistir.
- BullMQ'dan SQS + Lambda event-driven modele gec.
OnApplicationBootstrapile scheduler olusturan servisler ayri startup akisina alınmali.- Queue payload'lari için idempotency key ve duplicate-event korumasi standart hale getirilmeli.
E. Upload ve Buyuk Payload
- API Gateway/Lambda payload limitleri nedeniyle buyuk multipart upload backend uzerinden gitmemeli.
- Dosya yukleme için presigned URL akisina gec:
- Client -> R2/S3 direkt upload
- Backend sadece signed URL ve metadata yonetsin
- Image transform gerekiyorsa asenkron worker pipeline kur.
F. Stripe Webhook Uyumlandirma
- Raw body signature dogrulamasi serverless adapter'da korunmali.
- Webhook endpoint için timeout/retry/idempotency davranislari (zaten baslamis) production seviyesine çekilmeli.
G. Konfigurasyon ve Secret Yonetimi
.enviçindeki tüm secret'lar secret manager'a tasinmali.- Ortam bazli config (dev/staging/prod) IaC uzerinden yonetilmeli.
- Node runtime sürümu, hedef serverless platformunun destekledigi sürüme sabitlenmeli.
H. Build/Bundle ve Performans
- Cold start azaltmak için bundle optimize et (esbuild/swc tree-shaking).
- Lambda memory/timeout ayarlarini endpoint tipine gore ayir.
- DB ve Redis baglanti reuse stratejisi uygula (global scope connection caching).
I. Gozlemlenebilirlik ve Operasyon
- Request-id / trace-id tüm akislarda zorunlu hale gelsin.
- Queue lag, failed jobs, webhook retry, cron execution metrikleri dashboard'a tasinsin.
- Alarm kurallari:
- queue birikmesi
- webhook fail rate
- cron missed-run
- websocket delivery fail
J. CI/CD ve Altyapi
- IaC secimi yap (CDK/Terraform/Serverless Framework).
- Ayrik deploy pipeline:
- http-api
- workers
- schedulers
- Blue/green veya canary deployment plani ekle.
K. Test Stratejisi
- Serverless adapter ile e2e smoke test yaz.
- Queue-to-side-effect entegrasyon testlerini ayrik calistir.
- Webhook signature + retry + idempotency test matrix'i ekle.
- Realtime akislar için soak/load test senaryolari olustur.
4) Bu Repo Icin Oncelik Sirasi (Oneri)
- HTTP API'yi serverless'e al (websocket ve workerlari simdilik ayri tut).
- Upload akislarini presigned URL'e cevir.
- Cron/queue ayrimini tamamla.
- Son adimda websocket mimarisini serverless/managed realtime cozumune tas.
Bu siralama ile kesinti ve regress riskini azaltirsin.