Cloud Computing & Serverless Mimariler 4 dk okuma 4 okunma

Serverless Computing: Azure Functions ve AWS Lambda

Serverless computing, sunucu yönetimini ortadan kaldırarak yalnızca kod çalıştığında ödeme yapılan bir bulut modelidir. Azure Functions ve AWS Lambda, bu alandaki iki lider platformdur. Bu yazıda, iki platformun özellikleri, farkları, cold start davranışları, .NET entegrasyonu ve seçim kriterleri ele alınır.

Serverless Computing: Azure Functions ve AWS Lambda

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.AspNetCoreServer ile ASP.NET Core uygulamaları Lambda'ya deploy edilebilir.

  • Amazon.Lambda.Tools CLI 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.

Tüm yazılar Soru ya da yorumun mu var? Yaz