Serverless Mimarisi: AWS Lambda, Vercel ve Cloud Functions
Serverless (sunucusuz) mimari, sunucu yönetimi olmadan kod çalıştırmanızı sağlar. Bu rehberde serverless kavramlarını, AWS Lambda, Vercel ve Cloud Functions kullanımını anlatıyoruz.
Son güncelleme:Serverless Nedir?
Serverless, sunucu yönetimi olmadan kod çalıştırmanızı sağlayan bir cloud computing modelidir. Sunucular hala var ama siz yönetmezsiniz.
FaaS (Function as a Service): Kodunuzu fonksiyon olarak deploy edersiniz. Cloud provider, fonksiyonu istek geldiğinde çalıştırır ve sonuç döner.
BaaS (Backend as a Service): Veritabanı, authentication, storage gibi backend servislerini managed olarak kullanırsınız. Firebase, Supabase gibi.
Avantajlar: Sunucu yönetimi yok, otomatik ölçekleme, pay-per-use (kullanım başına ödeme), sıfır idle maliyet.
AWS Lambda
AWS Lambda, AWS'nin serverless compute servisidir. Node.js, Python, Java, Go, .NET, Ruby runtime'larını destekler.
Handler: Fonksiyonun giriş noktası. exports.handler = async (event, context) => { ... } şeklinde tanımlanır.
Trigger: Lambda fonksiyonunu tetikleyen olaylar. API Gateway (HTTP), S3 (dosya yükleme), DynamoDB (veri değişikliği), SQS (mesaj kuyruğu).
Cold start: İlk çağrıda fonksiyonun başlatılması gerekir. Bu, 100ms-1s gecikme oluşturur. Provisioned concurrency ile cold start'ı azaltabilirsiniz.
Limits: Maksimum 15 dakika execution time, 10 GB memory, 10 GB ephemeral storage. Timeout ve memory ayarlarını optimize edin.
Vercel ve Netlify
Vercel: Next.js, Nuxt, SvelteKit gibi framework'ler için optimize edilmiş serverless platform. Edge Functions ve Serverless Functions desteği.
Netlify: Static site hosting + serverless functions. Netlify Functions (AWS Lambda tabanlı) ile backend logic ekleyin.
Edge Functions: Cloudflare Workers veya Vercel Edge Runtime ile edge'de çalışan fonksiyonlar. Ultra düşük latency.
Avantajlar: Git push ile otomatik deploy, preview deployments, global CDN, otomatik HTTPS. Developer experience çok iyi.
Kullanım: JAMstack uygulamaları, API endpoints, form handling, image optimization, authentication.
Cold Start ve Performans
Cold start: Fonksiyon ilk çağrıldığında container başlatılır. Bu, latency ekler. Warm function'lar daha hızlıdır.
Azaltma stratejileri: Provisioned concurrency (AWS Lambda), keep-alive (periyodik ping), smaller bundle, faster runtime (Node.js > Java).
Memory optimization: Daha fazla memory = daha fazla CPU. Memory artırarak cold start süresini azaltabilirsiniz.
Connection pooling: Database bağlantılarını fonksiyon dışında (global scope) oluşturun. Her çağrıda yeni bağlantı açmayın.
Monitoring: CloudWatch (AWS), Vercel Analytics ile cold start süresini ve error rate'i izleyin.
Serverless Best Practices
Stateless: Fonksiyonlar stateless olmalı. State'i external storage'da (DynamoDB, Redis) saklayın.
Idempotency: Fonksiyonu birden fazla çalıştırmak aynı sonucu vermeli. Retry ve duplicate event'ler için güvenli olmalı.
Error handling: Hataları yakalayın ve dead letter queue'ya (DLQ) gönderin. Retry mekanizması tanımlayın.
Security: Least privilege IAM roles. Environment variables ile secret yönetimi. Input validation.
Cost optimization: Memory ve timeout'u optimize edin. Gereksiz invocation'ları azaltın. Provisioned concurrency'yi dikkatli kullanın.
Serverless vs Container vs VM
Serverless: Sıfır yönetim, otomatik ölçekleme, pay-per-use. Kısa süreli, event-driven işlemler için ideal.
Container (Docker/K8s): Daha fazla kontrol, uzun süreli işlemler, stateful uygulamalar. Orchestration gerekir.
VM: Tam kontrol, legacy uygulamalar, özel donanım gereksinimleri. En yüksek yönetim maliyeti.
Seçim: Kısa, event-driven işlemler → Serverless. Uzun süreli, stateful uygulamalar → Container. Legacy, özel gereksinimler → VM.