Serverless | FaaS

Hilal Erkan
Turk Telekom Bulut Teknolojileri
3 min readMar 21, 2022

Merhaba, bu yazıda Function as a Service’in ne olduğundan ve hangi durumlarda kullanılabileceğinden bahsetmeye çalıştım. Keyifli okumalar!

Serverless Nedir?

Kelime anlamına bakacak olursak Serverless, sunucusuz anlamına gelmektedir. Fakat bu şekilde adlandırıldığında bazı yanlış anlaşılmalara yol açmaktadır. O yüzden bunun yerine FaaS yani Function as a Service terimini kullanmak daha doğru olabilir. Peki nedir bu FaaS? PaaS ya da diğer servis hizmetlerinden farkı nedir?

FaaS’ı daha kısa süreli, daha basit ve sadece gerekli anlarda çalışıp ihtiyaç duyulmadığında kapanan ve sadece çalıştığı sürece ödeme yapılan fonksiyonların bulut üzerinde çalıştırılması olarak açıklayabiliriz. Daha detaylı anlatmak gerekirse,

Serverless altyapısında bir fonksiyona, servis sağlayıcıların sundukları referanslara bağlı olarak bir input ve istenen şekilde bir output tanımlanır. Input ve output arasında da yapılması istenilen iş tanımlanır. Fonksiyonlar serverless altyapısında scaled to zero olarak bekler ve ne zaman bir request alırlarsa o zaman çalışır, yapılması istenen iş yapılır ve tamamlandığında da kapanır.Ödeme ise fonksiyonların aktif olarak çalıştığı zaman dilimi üzerinden yapılır. Yani Cloud’daki “pay-per-instance” mantığı yerine “pay-per-request” mantığını benimser.

Diğer servis hizmetleriyle arasındaki fark bu görselde net olarak görülebilir.

Neden Serverless?

-Operasyonel karışıklığın en aza indirgenmesi,

Herhangi bir uygulama çalıştırabilmek için uygulamanın kodunun yazılması dışında; kodun çalışacağı ortamın hazırlanması, kodun deploy edilmesi, monitoring aşaması, kapasite ve kaynak kullanımının yönetilmesi ve yazılım versiyonlarının güncellenmesi gibi birçok adım vardır. Serverless ya da başka bir deyişle FaaS buna bir çözüm olarak düşünülebilir. FaaS sisteminde uygulama geliştirici sadece kodun serverless ortamına aktarılmasından ve geliştirilmesinden sorumludur.

-Pay-per-request,

Tam olarak kullanılan kadar ödeme yapılıyor denilebilir. Birçok serverless ortamı kodun çalıştığı her 100ms için ödeme talep ediyor. Fakat burda ödemenin diğer servis hizmetlerine göre (özellikle PaaS hizmetine göre) avantajlı olması tamamen bu ortamın kullanımına göre değişiklik gösterir. Eğer kullanılan uygulama dış dünyadan sürekli olarak request alıyorsa maliyet açısından daha pahalı bile olabilir. Ayrıca AWS’de lambda hizmeti ucuzken, bu hizmeti tetikleyen API gateway oldukça pahalı bir hizmettir.

-Hızlı geliştirme yapabilmek,

Ortamda geliştirme yapıp prototip hazırlama süreci oldukça hızlı ilerlemektedir.

-Autoscaling,

Uygulama için gelen requestlere bağlı olarak kaynakların azaltılıp arttırılması tamamen otomatik olarak yapılır ve teoride ne kadar request geldiği önemli değildir. Bu sayede kullanılmayan kaynak için herhangi bir ödeme yapılmaz ve kaynak arttırımı için gereken zaman dakikalar seviyesinden saniyeler seviyesine düşer. Bu da çok fazla request alındığında bazı kullanıcılar için down olma durumunu en az seviyeye indirger.

Serverless Hangi Durumlarda Kullanılmalıdır?

-Operasyonel süreçlerde,

Kodun yazılması ve geliştirilmesi dışında herhangi bir şeyle ilgilenilmek istenmediğinde ya da tüm bu süreçlerin hızlı bir şekilde halledilmesi gerektiği durumlarda FaaS önemli bir kolaylık sağlar.

-Farklı hizmetlerle birlikte kullanılmak isteniyorsa,

Serverless, servis sağlayıcıların diğer hizmetleriyle de entegre olarak çalışabildiği için bu noktada iyi bir tercih olabilir.

-Uygulamanın sürekli çalışması gerekmiyorsa,

Uygulamanın sürekli ayakta kalması gerekmiyorsa ve gün içersinde genelde az request alınıyorsa serverless ideal bir çözümdür. Uygulama sadece request alındığında çalışır ve çalıştığı süre boyunca ödeme yapılır.

-Uygulama microservis mimarisindeyse,

Eğer uygulama microservis mimarisindeyse serverless ortamına geçmek oldukça kolaydır.

Serverless Hangi Durumlarda Kullanılmamalıdır?

-İstemciye cevap dönme süreci için bir SLA varsa,

Fonksiyona her request geldiğinde yeni bir container ayağa kaldırılmaz, eğer boşta bir container varsa o kullanılır (container reuse). Fakat eğer ortamda boşta container yoksa yeni bir tane oluşturulması gerekir. Bunun süresi de fonsiyonun paket büyüklüğüne göre değişiklik gösterir, gecikmeler yaşanabilir.

-Fonksiyonun çalışması gereken süre kısa değilse,

Fonksiyonda input ve output arasında yapılması gereken iş ortalama 5 dakikadan daha uzun sürüyorsa serverless ortamı kullanılmaz. Örneğin, AWS lambda hizmeti bu süre 5dk’yı geçtiği zaman fonksiyonun çalışmasını otomatik olarak durdurur.

-Fonksiyonun networke erişmesi isteniyorsa,

Bir fonksiyonun networke erişmesi isteniyorsa, fonksiyonun çalıştığı ortama bir IP Adresi atanması gerekir. Bu da fonksiyonun çalışmaya başlama süresini arttırır ve yönetimsel olarak ek yükler gerektirir. Bu yüzden bu durumda serverless sistem kullanılması önerilmez.

Serverless frameworklerinden biri olan Knative hakkında olan yazım için : https://medium.com/@hilal-erkan/serverless-knative-7a9ed9630060

--

--