Yan yana
ServerlessvsKonteyner
Serverless ile konteynerler arasındaki fark nedir?
Güncellendi 3 dk okuma8 fark
Kısaca
Serverless, kodunuzu sağlayıcının yönettiği sunucularda talep üzerine çalıştırır; konteyner ise uygulamanızı bağımlılıklarıyla paketler, denetim sizde kalır.
Serverless
Serverless, sağlayıcının kodu talep üzerine çalıştırıp sunucuları yönettiği, otomatik ölçeklediği ve yalnızca gerçek kullanıma ücret aldığı bulut modelidir.
Serverless sayfasını okuKonteyner
Konteyner, bir uygulamayı bağımlılıklarıyla paketleyip ana makinenin paylaşılan işletim sistemi çekirdeği üzerinde çalıştıran hafif, yalıtılmış bir pakettir.
Konteyner sayfasını okuServerless ve Konteyner karşılaştırması
| Özellik | Serverless | Konteyner |
|---|---|---|
| Ne dağıtılır | Kod olarak bir fonksiyon ya da küçük bir servis | Uygulamayı, çalışma zamanını ve kütüphaneleri içeren bir imaj |
| Sunucular | Tamamen sağlayıcı yönetir | Siz ya da Kubernetes gibi bir platform yönetir |
| Ölçekleme | İstek başına otomatik; boştayken sıfıra iner | Siz ya da bir orkestratör ayarlar; genellikle hep çalışan kopyalar olur |
| Ücretlendirme | İstek ve yürütme süresi başına; boştayken ücret yok | Makineler ya da ayrılmış kapasite için; yoğun da olsa boş da olsa |
| Başlatma | On milisaniyelerden birkaç saniyeye kadar süren cold start'lar | Yaklaşık bir saniye ya da daha az; çoğu zaman sürekli açık tutulur |
| Çalışma süresi | Her çağrı için süre ve bellek sınırları | Süreçler gerektiği kadar çalışabilir |
| Taşınabilirlik | Sağlayıcının olaylarına ve servislerine bağlı | Aynı imaj her bulutta ya da sunucuda çalışır |
| En uygun olduğu yer | Olay güdümlü işler ve dalgalı ya da öngörülemeyen trafik | Uzun süre çalışan servisler, sabit yük ve ortam üzerinde tam denetim |
Fark, açıklamalı
Serverless, kodunuzu çoğu zaman fonksiyonlar hâlinde sağlayıcıya teslim ettiğiniz bir bulut modelidir: sağlayıcı bu kodu HTTP istekleri, dosya yüklemeleri ya da kuyruk mesajları gibi olaylara yanıt olarak çalıştırır, otomatik olarak ölçekler ve istek sayısı ile yürütme süresi başına ücret alır. Konteyner ise bir yazılım paketleme biçimidir: uygulamanız; çalışma zamanı, kütüphaneleri ve ayarlarıyla birlikte bir imajda durur ve ana makinenin paylaşılan işletim sistemi çekirdeği üzerinde yalıtılmış olarak çalışır. Bir konteyner imajı dizüstü bilgisayarda, sunucuda ya da herhangi bir bulutta aynı şekilde davranır.
Asıl fark, ortamın ne kadarını sizin denetlediğinizdir. Konteynerlerde temel imajı, çalışma zamanını, portları ve süreçlerin ne kadar yaşayacağını siz seçersiniz; nerede çalışacaklarına ve kaç kopya tutulacağına da siz ya da Kubernetes gibi bir orkestratör karar verir. Serverless'te bu kararları sağlayıcı verir: fonksiyonlar boştayken sıfıra iner, yük altında hızla çoğalır; ama süre ve bellek sınırları, cold start'lar ve ortam üzerinde daha az denetim de beraberinde gelir.
İkisi arasındaki çizgi bulanıklaştı. Serverless platformlar kodunuzu perde arkasında çoğu zaman konteynerlerin ya da hafif sanal makinelerin içinde çalıştırır; AWS Lambda ve Google Cloud Run gibi servisler de dağıtım birimi olarak bir konteyner imajını kabul eder. Gerçek sistemlerin çoğu ikisini harmanlar: uzun süre çalışan servisler ve arka plan işçileri konteynerlerde, webhook'lar, zamanlanmış işler ve dosya işleme gibi olay güdümlü yapıştırıcı kod ise fonksiyonlarda çalışır.
Sık yapılan bir yanlış, serverless'in sunucu olmadığı anlamına geldiğini düşünmektir; sunucular vardır, ama onları sağlayıcı yönetir. Bir diğeri, serverless'in her zaman daha ucuz olduğu düşüncesidir: boştayken hiçbir şeye mal olmaz ve dalgalı trafiğe çok uyar, ama günün her saati yoğun çalışan bir servis, sabit kapasitede çalışan konteynerlerde çoğu zaman daha ucuza gelir. Fonksiyonlar sizi bir sağlayıcının olaylarına ve servislerine de daha sıkı bağlar; bir konteyner imajı ise her bulutta ya da kendi sunucularınızda çalışır.
Hangisini kullanmalısınız?
Serverless şu durumlarda doğru seçim:
- Trafik dalgalı, öngörülemez ya da çoğu zaman sıfıra yakın.
- İş; webhook'lar, dosya işleme ya da zamanlanmış görevler gibi kısa, olay güdümlü görevlerden oluşuyor.
- Hiç sunucu, yama ya da kapasite planlamasıyla uğraşmak istemiyorsunuz.
- Bir prototip geliştiriyorsunuz ve yalnızca gerçek kullanım için ödemek istiyorsunuz.
Konteyner şu durumlarda doğru seçim:
- Servisler sürekli çalışıyor ya da sabit, yoğun trafik karşılıyor.
- İşler fonksiyonların süre sınırlarından uzun sürüyor ya da özel çalışma zamanları gerektiriyor.
- İşletim sistemi, ağ ve bağımlılıklar üzerinde denetime ihtiyacınız var.
- Bulutlar arasında geçiş yapmak ya da kendi sunucularınızda çalıştırmak istiyorsunuz.
Aynı endpoint, bir serverless fonksiyon ve bir konteynerdeki sunucu olarak
// Serverless: export a handler; the platform calls it once per event
export const handler = async (event) => {
const name = event.queryStringParameters?.name ?? "world";
return {
statusCode: 200,
body: JSON.stringify({ message: `Hello, ${name}!` }),
};
};
// No server and no port: scaling and billing happen per request// Container: a long-running process that listens on a port
import http from "node:http";
http.createServer((req, res) => {
const url = new URL(req.url, "http://localhost");
const name = url.searchParams.get("name") ?? "world";
res.setHeader("Content-Type", "application/json");
res.end(JSON.stringify({ message: `Hello, ${name}!` }));
}).listen(8080);
// Built into an image with a Dockerfile, it runs until it is stoppedSık sorulan sorular
Serverless, konteynerlerden daha mı iyi?
Genel olarak hiçbiri daha iyi değildir. Serverless, olay güdümlü işlere ve düzensiz trafiğe az operasyon emeğiyle uyar; konteynerler ise uzun süre çalışan servislere, sabit yüke ve ortamı üzerinde denetim isteyen iş yüklerine uyar.
Serverless platformlar konteyner çalıştırabilir mi?
Evet. Google Cloud Run ve AWS Fargate gibi servisler, sunucuları sizin yönetmenize gerek kalmadan konteyner imajlarını çalıştırır; AWS Lambda da konteyner imajı olarak paketlenmiş fonksiyonları çalıştırabilir. Bu seçenekler konteyner paketlemesini serverless ölçekleme ve ücretlendirmeyle birleştirir.
Serverless, konteynerlerden daha mı ucuz?
Düşük ya da dalgalı trafikte genellikle evet, çünkü boşta geçen süre hiçbir şeye mal olmaz. Günün her saati yoğun çalışan servislerde ise sabit kapasitedeki konteynerler çoğu zaman daha ucuzdur, çünkü istek başına ödeme yüksek hacimde hızla birikir.