2024-03-04Marc Campora

AWS Lambda vs Konteynerler: Modern Cloud Mimarilerinde Doğru Tercih

KubernetesAWSDevOpsServerlessContainersLambdaEKSDocker
A

AWS Lambda vs Konteynerler: Modern Cloud Mimarilerinde Doğru Tercih

Birçok Kubernetes (K8s) kullanıcısı gibi siz de belki yakın zamanda karmaşık operasyonel süreçlerden ve yüksek maliyetlerden şikayetçi olmuşsunuzdur. Teknolojinin işletilmesinin zorluğu, maliyetli olması ve ince ayarlı kontrollere her zaman ihtiyaç duyulmaması, alternatif arayışlarını tetikliyor.

Bu yazıda, AWS Lambda'nın (veya genel olarak Serverless mimarinin) konteynerlere kıyasla uygulanabilir bir alternatif olup olmadığını inceleyeceğiz. Çalışma AWS üzerine odaklansa da, bulgular diğer Bulut Servis Sağlayıcıları (CSP) için de geçerlidir.

Lambda vs Container

Giriş

Bir konteyner, esasen hafif bir Sanal Makine (VM) işlevi görür. Uygulama kodunuzu, gerekli İşletim Sistemi (OS) ve ara katman paketleriyle bir araya getirir. Yerel makinenizde test ettiğiniz Docker imajı, prodüksiyonda çalışanla aynıdır. Prodüksiyon ortamında, Kubernetes, bu konteynerlerin ölçeklenmesinden ve yönetiminden sorumludur.

Ancak bu yaklaşım ciddi bir mühendislik eforu gerektirir. Host havuzunu tanımlamak, dayanıklılık için farklı erişilebilirlik bölgelerine (Availability Zones) dağıtmak ve maliyetleri kontrol etmek için havuz boyutunu optimize etmek gerekir.

Öte yandan AWS Lambda, sunucusuz (serverless) bir uygulama modelidir. Uygulamanızı fonksiyonlara böler, kodu ve bağımlılıkları sıkıştırıp AWS'e yüklersiniz. AWS, altyapıyı talep üzerine dağıtır, OS ve ara katman yazılımlarını güncel tutar ve yükü otomatik olarak dengeler. En önemlisi, sadece fonksiyonlarınız çalıştığında ödeme yaparsınız.

Maliyet Perspektifi

Konteyner kullanırken, gelen trafiği karşılamak için yeterli kapasiteyi sağlamanız gerekir. Kubernetes talebe göre otomatik ölçeklendirme yapsa da, her zaman belirli bir "atıl kapasite" maliyeti vardır.

Lambda ise kullanıma göre ücretlendirilir. Trafik eğrinizi birebir takip eder; trafik yoksa maliyet sıfırdır. Bu, test sistemleri veya gece trafiği düşük olan ortamlar için büyük avantaj sağlar.

Maliyet Analizi

Ancak, CPU kullanımı düşük ama çağrı hacmi çok yüksek ve sürekli olan fonksiyonlar için (örneğin ayda milyarlarca çağrı), konteynerler daha maliyet etkin olabilir. Örneğin, yapılan bir analizde, prodüksiyon ortamındaki servislerin Lambda'ya taşınmasının maliyeti %50 artırabileceği, ancak test ortamında 3 kat azaltabileceği görülmüştür.

Cold Start (Soğuk Başlangıç) ve Çözüm Stratejileri

Lambda ile ilgili en büyük çekincelerden biri "Cold Start" sorunudur. İstek geldiğinde hazır bir çalıştırma ortamı yoksa, AWS yeni bir ortam başlatır ve kodunuzu yükler. Node.js veya Python gibi dillerde bu süre ihmal edilebilir düzeydedir (birkaç yüz milisaniye).

Ancak Java ve Spring kütüphaneleri kullanıldığında, bu süre saniyelere çıkabilir. AWS, Java için 'SnapStart' özelliğini sunarak bu süreyi önemli ölçüde (örneğin 6 saniyeden 200 milisaniyeye) düşürmüştür.

Cold Start

Garanti edilmiş bir yanıt süresi istiyorsanız, "Provisioned Concurrency" (Sağlanmış Eşzamanlılık) seçeneğini kullanabilirsiniz, ancak bu durumda kullandığın kadar öde modelinden uzaklaşmış olursunuz.

Operasyonel Kısıtlamalar

AWS, Lambda'nızın ölçeklenebilirliğini yönetir, ancak bu sınırsız değildir. Paylaşılan bir altyapı üzerinde çalıştığınız için, AWS belirli kotalar (Quotas) uygular.

  • Eşzamanlı Yürütme Kotası: Varsayılan olarak bölge başına 1000'dir (artırılabilir).
  • Oluşturma Hızı: Her 10 saniyede 1000 yeni yürütme ortamı.

Bu limitlerin aşılması durumunda istekler kuyruğa alınır veya zaman aşımına uğrar.

AWS Kotaları

Dikkat Edilmesi Gerekenler

Mevcut mikroservislerinizi Lambda modeline taşırken şunlara dikkat etmelisiniz:

  • Paket Boyutu: Lambda paket boyutunda sınırlar vardır (örn. 250MB). Sadece gerekli bağımlılıkları ekleyin.
  • Veritabanı Bağlantıları: Fonksiyonlar her istek için ayrı çalıştığından, geleneksel bağlantı havuzları verimsiz kalabilir. Bir veritabanı proxy'si (örneğin Amazon RDS Proxy) kullanmak gerekebilir.
  • Yürütme Süresi: Maksimum çalışma süresi (timeout) 15 dakikadır. Uzun süreli işlemler veya HPC (Yüksek Performanslı Hesaplama) için uygun değildir, bu durumlarda EC2 tercih edilmelidir.

Sonuç

AWS Lambda ve serverless modeli, özellikle yeni başlayan projeler (greenfield) için operasyonel basitlik ve düşük başlangıç maliyeti sunar. Ancak, ince ayarlı kontrol gerektiren, yüksek ve sürekli yüke sahip veya eski (legacy) uygulamalar için Konteynerler ve Kubernetes hala daha uygun olabilir. Doğru aracı doğru iş için seçmek, modern bulut mimarisinin anahtarıdır.