Allmine API

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 acilip app.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:

  1. Full serverless mi? (HTTP + WS + worker + scheduler hepsi serverless)
  2. 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

  1. HTTP API runtime'ini ayir:
    • Mevcut main.ts tek process yaklasimini serverless handler'a tasiyacak bir giris noktasi ekle.
    • Lambda uyumlu adapter kullan (serverless-express benzeri).
  2. Queue worker runtime'ini ayir:
    • Consumer'lar HTTP runtime'dan ayrilmali.
  3. Scheduler runtime'ini ayir:
    • Cron islerini ayri tetik mekanizmasina tasimak gerekir.

B. WebSocket Stratejisi

  1. 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
  2. In-memory membership/state yapilari Redis/Dynamo gibi dis state store'a alınmali.
  3. Queue consumer -> websocket bildirimleri dogrudan gateway çağrısı yerine event bus/pub-sub uzerinden yapilmali.

C. Cron/Scheduler Donusumu

  1. @Cron kullanan servisleri EventBridge Scheduler / Cloud Scheduler / queue-delay tabanli akislara cevir.
  2. 15 saniye periyot isteyen cron'lar için:
    • EventBridge minimum periyot kisiti nedeniyle queue tabanli self-reschedule veya surekli worker gerekir.
  3. Cron idempotency kilitleri ekle (tek tetik garantisi için distributed lock).

D. Queue Mimarisi (BullMQ)

  1. 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.
  2. OnApplicationBootstrap ile scheduler olusturan servisler ayri startup akisina alınmali.
  3. Queue payload'lari için idempotency key ve duplicate-event korumasi standart hale getirilmeli.

E. Upload ve Buyuk Payload

  1. API Gateway/Lambda payload limitleri nedeniyle buyuk multipart upload backend uzerinden gitmemeli.
  2. Dosya yukleme için presigned URL akisina gec:
    • Client -> R2/S3 direkt upload
    • Backend sadece signed URL ve metadata yonetsin
  3. Image transform gerekiyorsa asenkron worker pipeline kur.

F. Stripe Webhook Uyumlandirma

  1. Raw body signature dogrulamasi serverless adapter'da korunmali.
  2. Webhook endpoint için timeout/retry/idempotency davranislari (zaten baslamis) production seviyesine çekilmeli.

G. Konfigurasyon ve Secret Yonetimi

  1. .env içindeki tüm secret'lar secret manager'a tasinmali.
  2. Ortam bazli config (dev/staging/prod) IaC uzerinden yonetilmeli.
  3. Node runtime sürümu, hedef serverless platformunun destekledigi sürüme sabitlenmeli.

H. Build/Bundle ve Performans

  1. Cold start azaltmak için bundle optimize et (esbuild/swc tree-shaking).
  2. Lambda memory/timeout ayarlarini endpoint tipine gore ayir.
  3. DB ve Redis baglanti reuse stratejisi uygula (global scope connection caching).

I. Gozlemlenebilirlik ve Operasyon

  1. Request-id / trace-id tüm akislarda zorunlu hale gelsin.
  2. Queue lag, failed jobs, webhook retry, cron execution metrikleri dashboard'a tasinsin.
  3. Alarm kurallari:
    • queue birikmesi
    • webhook fail rate
    • cron missed-run
    • websocket delivery fail

J. CI/CD ve Altyapi

  1. IaC secimi yap (CDK/Terraform/Serverless Framework).
  2. Ayrik deploy pipeline:
    • http-api
    • workers
    • schedulers
  3. Blue/green veya canary deployment plani ekle.

K. Test Stratejisi

  1. Serverless adapter ile e2e smoke test yaz.
  2. Queue-to-side-effect entegrasyon testlerini ayrik calistir.
  3. Webhook signature + retry + idempotency test matrix'i ekle.
  4. Realtime akislar için soak/load test senaryolari olustur.

4) Bu Repo Icin Oncelik Sirasi (Oneri)

  1. HTTP API'yi serverless'e al (websocket ve workerlari simdilik ayri tut).
  2. Upload akislarini presigned URL'e cevir.
  3. Cron/queue ayrimini tamamla.
  4. Son adimda websocket mimarisini serverless/managed realtime cozumune tas.

Bu siralama ile kesinti ve regress riskini azaltirsin.

On this page