Nedir bu Serverless?

1290 Görüntülenme
0
0

Yakın zamanda yükseklisans derslerimden birinde ikinci defa Serverless hakkında sunum yapma fırsatı buldum. İlk sunumumda Serverless nedir konusu üzerinde durmama rağmen, sunum sonunda bunun yeterli olmadığını farkettim. İkinci sunumda ise bu kavramı anlatmaya daha fazla vakit ayırdım. Kavram özellikle ilk bakışta kafa karıştırıcı olabiliyor. Kodlamaya geçmeden önce öğrenmemiz gereken/faydalı olan bazı konu başlıkları şunlar.

  • Serverless ne demek? (IaaS, CaaS, PaaS, FaaS karşılaştırması)
  • Hangi problemleri çözer/kolaylaştırır?
  • Faydaları nelerdir?
  • Ne zaman kullanmalı, ne zaman kullanmamalıyız?

Bu başlıkları teker teker incelemeyi düşünüyorum. Bu blog yazısında ilk olarak Serverless ne demek sorusunu cevaplamaya çalışacağım. Bu soruyu cevaplarken Serverless’ın AWS’in terimi ile “computing” servisleri arasında nerede bulunduğunu karşılaştırmalı olarak anlatacağım.

Esas konuya girmeden önce şunu belirtmek istiyorum ki, çok fazla kullanılan bazı terimleri İngilizce olarak kullanacağım. Bunun için kusura bakmayın.

Serverless (Sunucu olmayan) ne demek?

İlk olarak belirtmem gereken şey Serverless kesinlikle programınızın çalışması için sunuculara ihtiyacınız olmadığı anlamına gelmiyor. Konu ile ilgili şöyle de bir tweet var.

Serverless mimarilerde kesinlikle sunucular kullanılıyor. Burada önemli olan nokta bu sunucuların yönetiminin, dolayısı ile oluşan birçok operasyonel işlerin artık bizim değil servis sağlayıcının sorunu olması.

Yani production’da bir yazılım çalıştırmanın en önemli zorluklarından olan operasyonel işleri de bir nevi outsource etmiş oluyoruz.

Serverless kavramının kelime anlamı itibari ile yanıltıcı olduğu açık. Serverless yerine kullanılan bir diğer terim ise FaaS yani Functions as a Service.

FaaS (Functions as a Service) vs diğerleri

FaaS’ı diğer cloud servis terimleri ile karşılaştırmak Serverless’ın (FaaS) tam olarak nerede bulunduğu hakkında daha güzel bir fikir verecektir.

Infrastructure as a Service (IaaS): Cloud sağlayıcı üzerinden bilgisayar kiralamak gibi düşünebiliriz. Burada işletim sistemi seviyesi dahil her türlü kontrölünün size ait olduğu anlamına geliyor. Örnek servisler: Amazon EC2, Azure VMs

Container as a Service (CaaS): Cloud sağlayıcı burada sizin containerlarınızı kolayca yönetebilmeniz için bir seviye daha abstraction koyuyor diyebiliriz. Örnek olarak Amazon EC2 Container Service (ECS)kullanırsanız Amazon sizin için docker containerlarınızı yönetiyor olacak. Örnek servisler: Docker Cloud, Amazon ECS

Platform as a Service (PaaS): Faas’a en çok benzeyen ve karıştırabilecek tip servis PaaS diyebiliriz. PaaS servislerinde sizin ilgineceğiniz şey programınız çalışacağı dili/framework’ü seçtikten sonra programınızı upload etmek. Burada servis sağlayıcı yine sizin için bir çok operasyonel işi halleder ancak siz yine örneğin bildiğimiz Spring Boot application’ı çalıştırırsınız. Uygulamanız için gerekli birçok konfigürasyonu yapmanız, bunları yönetmeniz gerekir. Ani bir yük geldiği zaman yeni bir sunucu açma işi otomatik olarak servis tarafından yapılsa bile (yine bazı konfigürasyonlar gerekecek) uygulamanızın ayağa kalkması süre alacaktır. Aslında uygulamamızın çalışma şekli en büyük değişiklik diyebiliriz PaaS ve FaaS arasında. PaaS uygulamaları alışık olduğumuz şekilde çalışırken (yani uygulama çalışır ve yeni bir versiyon gelene kadar işini yapmaya devam eder), FaaS uygulamaları gelen bir event sonucu çalışır ve fonksiyon işini bitirdikten sonra uygulamamız kapanır. Burada event ile kastım örneğin bu bir HTTP request olabilir, belirli aralıklarla çağırabilir veya AWS için düşünürsek AWS’in diğer birçok servisinden (S3, Kinesis, DynamoDB Streams gibi…) gelen eventler ile çalışabilir.
Örnek servisler: Heroku, Amazon Elastic Beanstalk

Functions as a Service (Faas) — Serverless: Eğer uygulamanızı serverless bir servis üzerinde çalıştırırsanız yukarıda belirttiğim event driven bir mimariye geçmek zorunda kalıyorsunuz. Serverless bir mimariye geçmemiz kodunuzu yazıp upload ettikten sonra uygulamanın scale etmesi (ölçeklenmesi), deployment, işletim sistemi veya programlama dili güncellemeleri gibi daha birçok konuyu ya tamamen bizim sorunumuz olmaktan çıkıyor yada oldukça kolaylaştırıyor.

Bu kavramlar kafanızı karıştıyorsa https://www.linkedin.com/pulse/20140730172610-9679881-pizza-as-a-service şöyle ünlü diyebileceğim bir postu okumanızda fayda var.

Bu postta Pizza as a Service diye bir örnek üzerinden bu kavramlar anlatılıyor. Kısaca;

On-Premises: Pizzanın tüm malzemelerini alıyor ve kendiniz yapıyorsunuz.
IaaS: Bazı malzemeleri ve paketlenmiş hamuru satın alıyorsunuz.
PaaS: Pizzayı evinize sipariş ediyorsunuz.
SaaS: Tüm ailenizi de alıp pizzacıya gidiyorsunuz.

Tüm seçeneklerde işin sonunda pizza yemiş oluyorsunuz ama bazılarında pizzayı siz yaparken bazılarında tamamen başkasına yaptırıyorsunuz.

FaaS’ı pizza örneğine uydurursam da Pizzayı eve sipariş ediyorsunuz ve 30dk içerisinde gelme garantisi var :)

VM vs Containers vs Serverless (Faas)

Cloud servis tipleri karşılaştırmasından sonra Serverless’ı VM ve Container gibi sanallaştırma teknolojileri ile kısaca karşılaştırmak da yararlı olacaktır diye düşünüyorum.

VM: Sunucu, network, depolama, işletim sistemi sizin sorununuz.

Container: Uygulama, scaling, containerların yönetimi sizin sorununuz.

Serverless: Sadece kodunuzu upload etmek sizin sorununuz.

Kısaca Serverless sistemlerin amacı size gerçek anlamda kodunuza odaklanabileceğiniz bir ortam sağlamak

Tabi ki yazılımda her zaman olduğu gibi burada da işin içine girdiğinizde bu süslü lafların gerçeği tamamen yansıtmadığını göreceksiniz. Ancak burada kar/zarar analizi yapmak, mümkün olan en doğru çözüm ile başlamak veya hali hazırda elimizde bulunan çözümü değiştirmeye karar vermek bizim işimiz.

Serverless’ın bize işletme olarak birçok yararı olduğu ortada. Serverless mimarilerde daha önce “operasyonel işler” diye bahsettiğim servis sağlayıcısının problemi olarak adlandırdığım şeyler neler, Serverless bizim için tam olarak hangi problemleri çözüyor konusuna bir sonraki yazımda ayrıntılı şekilde değineceğim.

Konu ile ilgili benzer bir yazı okumak isterseniz Onur Dayıbaşı’nın https://medium.com/cloud-and-servers/serverless-architecture-faas-2e5804ececd9 yazısını okuyabilirsiniz.
İngilizce olarak https://serverless.zone/abstracting-the-back-end-with-faas-e5e80e837362 bu yazıyı önerebilirim.

Kaynak: https://medium.com/serverless-turkey/nedir-bu-serverless

Yorum Yap