Serverless Computing: Azure Functions ve AWS Lambda
Serverless computing (sunucusuz hesaplama), geliştiricilerin sunucu sağlama, ölçeklendirme veya bakım gibi altyapısal görevlerle uğraşmadan yalnızca kod yazmaya odaklanmasını sağlayan bir bulut modelidir . "Sunucusuz" terimi, sunucuların olmadığı anlamına gelmez; aksine, bu sunucuların yönetimi tamamen bulut sağlayıcısına aittir . Kullanım modeli, "tahsis edilen kaynak" yerine "gerçekleşen çalışma" üzerinden ücretlendirilir .
1. Serverless Computing Nedir?
Serverless, olay odaklı (event-driven) ve durumsuz (stateless) fonksiyonların çalıştırıldığı bir hesaplama modelidir. Temel özellikleri:
| Özellik | Açıklama |
|---|---|
| Kullanıma Göre Ödeme (Pay-as-you-go) | Yalnızca kod çalıştığı süre için ödeme yapılır; boşta kalma ücretsizdir . |
| Otomatik Ölçeklendirme | Talep arttığında otomatik olarak yeni instance'lar eklenir; talep düştüğünde sıfıra iner . |
| Sunucu Yönetimi Yok | İşletim sistemi yamaları, güvenlik güncellemeleri, donanım bakımı sağlayıcı tarafından yapılır . |
| Olay Tabanlı | HTTP isteği, kuyruk mesajı, zamanlayıcı, dosya yükleme gibi olaylarla tetiklenir . |
| Durumsuz (Stateless) | Her çalıştırma bağımsızdır; durum harici bir depoda (Redis, veritabanı) tutulur . |
Serverless'in Avantajları:
-
Maliyet Tasarrufu: Kullanılmayan kapasite için ödeme yapılmaz. Gecede bir kez çalışan bir yedekleme işi için aylık 100$ yerine birkaç dolar ödenir .
-
Operasyonel Yükün Azalması: Geliştirici yalnızca iş mantığına odaklanır .
-
Anında Ölçeklenme: Ani trafik artışlarına saniyeler içinde yanıt verir.
Serverless'in Dezavantajları:
-
Cold Start (Soğuk Başlangıç): Uzun süre kullanılmayan bir fonksiyon ilk çağrıldığında başlatma gecikmesi yaşanır .
-
Kontrol Kaybı: Altyapı üzerinde tam kontrol yoktur .
-
Sağlayıcı Bağımlılığı (Vendor Lock-in): Bir bulut sağlayıcısının servislerine bağımlı hale gelme riski .
-
Test Zorluğu: Entegrasyon testleri karmaşıktır .
2. Azure Functions ve AWS Lambda: Karşılaştırma
İki platform da FaaS (Function-as-a-Service) sunar ancak yaklaşımları farklıdır.
| Kriter | AWS Lambda | Azure Functions |
|---|---|---|
| Fonksiyon Gruplama | Her Lambda fonksiyonu bağımsız bir varlıktır . | Fonksiyonlar bir "Function App" içinde gruplanır; ortak yapılandırma ve yaşam döngüsü paylaşılır . |
| Maksimum Çalışma Süresi | 15 dakika (900 saniye) . | Varsayılan 30 dakika; üst sınır esnek, ancak ölçekleme sırasında 60 dakika . |
| Yapılandırılabilir Bellek | 128 MB – 10.240 MB (64 MB artışlarla) . | 2 GB ve 4 GB instance boyutları . |
| Durum Yönetimi | S3, DynamoDB, SQS ile harici durum . | AzureWebJobsStorage (Blob, Queue, Table) ile harici durum . |
| Durumlu Orkestrasyon | AWS Step Functions ile . | Durable Functions ile native destek . |
| Secret Yönetimi | AWS Secrets Manager, Parameter Store . | Azure Key Vault, Managed Identity . |
| Özel Container Desteği | Lambda Container Images ile . | Azure Container Apps ortamında . |
| Özel Alan Adı | API Gateway üzerinden . | Function App üzerinden doğrudan veya Azure API Management ile . |
3. Cold Start (Soğuk Başlangıç) Davranışı
Cold start, yeni bir instance'ın oluşturulması, runtime'ın yüklenmesi ve bağımlılıkların başlatılması sürecidir . Bu gecikme, ilk istekte yaşanır; sonraki istekler warm start ile hızlıdır .
Azure Functions Cold Start Yönetimi:
-
Consumption Plan: Ölçek sıfıra iner; cold start kaçınılmazdır .
-
Flex Consumption Plan: "Always Ready" instance'ları ile cold start azaltılabilir .
-
Premium Plan: En az bir önceden ısıtılmış worker ile cold start tamamen ortadan kalkar .
-
.NET Isolated Placeholder: .NET 8+ için başlangıç süresini azaltır .
-
ReadyToRun: Ahead-of-time compilation ile startup süresini kısaltır .
AWS Lambda Cold Start:
-
Lambda, cold start yönetiminde daha etkili olarak değerlendirilmektedir .
-
Provisioned Concurrency ile önceden ısıtılmış instance'lar tutulabilir.
Araştırma Bulgusu: Cold start, warm start'a göre yanıt sürelerini 5-6 kat uzatabilir. Java tabanlı deployment'lar en uzun gecikmeyi yaşar .
4. .NET Ekosisteminde Serverless
Azure Functions ile .NET:
csharp
// HTTP Tetiklemeli Fonksiyon (.NET 8 Isolated)
[Function("HttpTrigger")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
return new OkObjectResult($"Merhaba, {req.Query["name"]}!");
}
Durable Functions ile Stateful Workflow:
csharp
[Function("OrderOrchestrator")]
public async Task RunOrchestrator(
[OrchestrationTrigger] TaskOrchestrationContext context)
{
var orderId = context.GetInput<string>();
await context.CallActivityAsync("ProcessPayment", orderId);
await context.CallActivityAsync("ReserveStock", orderId);
await context.CallActivityAsync("CreateShipment", orderId);
}
AWS Lambda .NET Desteği:
-
AWS, .NET için Lambda desteği sunar (C# ve F#) .
-
Amazon.Lambda.AspNetCoreServerile ASP.NET Core uygulamaları Lambda'ya deploy edilebilir. -
Amazon.Lambda.ToolsCLI ile deployment yapılır.
5. Ne Zaman Hangisi?
| Senaryo | Öneri |
|---|---|
| Microsoft/Azure ekosistemi ağırlıklı | Azure Functions |
| AWS ekosistemi ağırlıklı | AWS Lambda |
| Karmaşık stateful workflow | Azure Durable Functions |
| Basit, bağımsız fonksiyonlar | AWS Lambda |
| .NET 8+ ve modern C# | Azure Functions (Isolated Worker) |
| Maksimum 15 dakika içinde biten işler | AWS Lambda |
| Uzun süren işler (30+ dakika) | Azure Functions (Premium/Flex) |
| GPU gerektiren AI inference | Azure Container Apps |
6. En İyi Pratikler
| Pratik | Açıklama |
|---|---|
| Cold Start'ı Kabul Edin | Latency kritik değilse, Consumption plan yeterlidir . |
| Latency Kritikse Premium/Flex Kullanın | Always Ready instance'lar ile cold start'ı sıfıra indirin . |
| Fonksiyonları Küçük Tutun | Tek sorumluluk prensibi; bağımlılıkları minimize edin . |
| Harici Durum Kullanın | Redis, veritabanı veya Durable Functions ile state yönetimi . |
| Idempotency Sağlayın | Aynı olayın birden fazla kez tetiklenmesi durumunda güvenli olun. |
| Secret'ları Güvenli Yönetin | Azure Key Vault veya AWS Secrets Manager kullanın . |
| Monitoring Kurun | Application Insights (Azure) veya CloudWatch (AWS) ile izleyin . |
| IaC Kullanın | Terraform, Bicep veya AWS SAM ile altyapıyı kod olarak yönetin . |
Sonuç
Serverless computing, altyapı yönetimini ortadan kaldırarak geliştiricilerin iş mantığına odaklanmasını sağlar. Azure Functions ve AWS Lambda, bu alandaki iki lider platformdur. Azure Functions, Durable Functions ile stateful workflow'lar, Function App gruplama modeli ve .NET entegrasyonu ile öne çıkar. AWS Lambda ise bağımsız fonksiyon modeli, cold start yönetimindeki etkinliği ve olgun AWS ekosistemi ile güçlüdür . Seçim, mevcut bulut ekosisteminize, iş yükü desenlerinize ve latency gereksinimlerinize bağlıdır. Unutmayın: Serverless, her iş yükü için uygun değildir; uzun süren, stateful veya düşük latency gerektiren işler için hibrit yaklaşımlar (Container Apps, Premium plan) değerlendirilmelidir.