Son yılların popüler konularından Microservices, beraberinde yeni problemleri ve ihtiyaçları da geliştirme hayatımıza sokuyor. Bu senenin sıcak kavramlarından “Serverless” da bunların başında geliyor. Dağıtık sistemlerin, günümüz yazılım alt yapılarının vaz geçilmez sistemler olması “Serverless” kavramını daha da ilginç hale getiriyor. “Nasıl yani, uygulamalar sunucularda çalışmıyor mu artık?” ya da “Sunuculara gerek yok mu artık?” gibi sorular ne yazık ki ilk aklımızdaki beliren sorular oluyor. Ama tabi ki olay, bu değil.

Açıkcası “Serverless” isminin, -ne yazık ki tüm IT sektörünün isimlendirme konusundaki zaafının en yeni ürünü olarak düşünüyorum. Her türlü karmaşık probleme çözümler üretebiliyor olmamıza rağmen, hala şu isimlendirme olayını çözemiyor olmamız da bizim ayıbımız olsun. Neyse…

There are only two hard things in Computer Science: cache invalidation and naming things.

Phil Karlton

“Serverless” tabi ki, artık sunuculara gerek yok ya da uygulamalar sunucularda çalışmayacak gibi bir yaklaşım değil. Yazılım geliştirme ve yönetme açısından, daha az, sunucu kavramına kafa yormamızı sağlayan bir yaklaşım ya da mimari kalıp diyebiliriz. Ölçeklendirme, yük dağıtımı, sunucu konfigürasyonları, hata yönetimi, deployment ve hatta run-time gibi konuları dert etmeyin temeline dayanıyor aslında.

serverless-architecture“Serverless” için bir başka bakış açısı da, başka sağlayıcılardan alınan servisler ile uygulama mantığını oluşturan ya da destekleyen bir mimari kalıp olması. Yetkilendirme için bir sağlayıcı, e-mail için başka farklı bir sağlayıcı, persistence için başka bir sağlayıcı ile bir logic oluşturmak ve uygulamaları bu şekilde tasarlamak için düşünebileceğimiz bir kalıp olarak da düşünebiliriz. Bu bakış açısında sağlayıcıları basit olarak fonksiyonlar; Functions as a Service(FaaS) olarak düşünmek bazı şeyleri daha iyi anlamamızı sağlayabilir.

Bu iki yaklaşımın da öne çıkan ve önemli olan noktası ölçeklendirmenin önemli olması ve “serverless” çatısı altında otonom bir şekilde yapılması. Ölçeklendirme ve maliyet konuları, dağıtık sistemlerde önemli konular olduğu için bu tarz farklı mimari yaklaşımlar, tasarımlar ve kalıplar gündeme geliyor. Tartışılıyor, geliştirilip uygulanıyor ve zamanla literatürdeki yerini alıyor. “Serverless” ile ilgili daha kapsamlı ve ayrıntılı olarak Martin Fowler’ın sitesindeki yazıyı başlangıç olarak tavsiye ederim.

Peki neden?

Bazı kavramları anlamak için çözdüğü problemlerin farkında olup, problemleri iyi anlamak önemli diye düşünüyorum. “Serverless” kavramını da daha iyi anlamak için problemi önce anlamamız lazım. Geliştirme yaparken, çözmeye çalıştığımız problem logic’i dışında başka şeyleri de düşünmek durumundayız. Çalışacağı sunucu konfigürasyonu, sunucu yetkilendirmesi, oturum yönetimi, yük dağıtımı gibi konular bunlardan sadece bir kaçı. Bir CRM uygulamasının problem domain’i dışında bu tarz konular ile de ilgilenmek, hızlı ve çevik çözüm üretme konusunda günümüzde bir engel artık. Çünkü ne yazık ki hiç birimiz Ninja değiliz ve tüm bu konulara yüksek bir kalitede hakim olamayız. Dolayısıyla bu tarz konuları ya da fonksiyonları başka sağlayıcılardan alabiliriz. Aynı şekilde kendi çözümlerimizi de ihtiyacı olacak sistemlere sunabiliriz. Cloud Computing, servis odaklı mimariler, PaaS ve FaaS gibi konular aslında bunlara çözüm olarak geliştirilen kavramlar. Peki “Serverless” bu noktada nasıl konumlanıyor? Uygulama geliştiren kişiler için yukarda bahsettiğim tüm konular birer maliyet. Sadece maddi anlamda değil tabi ki.

Efor, zaman, yönetim gibi konular da geliştirilen sistemler büyüdükçe artan maliyetler olarak bizlerin karşısına çıkıyor. Verim ve maliyet oranları gündeme geldiğinde “Serverless” yaklaşımı önemli bir konu haline geliyor. “Serverless” yaklaşımında maliyet olabilecek konuları başka sağlayıcılardan alıp, kendi ihtiyaçlarınıza göre ölçeklendirmek mümkün. Bu ölçeklendirmenin de otomatik olarak sağlanması, sadece tüketilen kaynakların maliyet olarak karşımıza çıkması da “Serverless”ın önemli bir avantajı. Uygulamalar açısından, ödeme özelliklerinin kullanılan ya da çalışan fonksiyona kadar indirgenmesi ve bunun maliyet açısından avantaj sağlaması, “Serverless” kavramını daha fazla duymamızın en büyük sebeplerinden biri olacak.

AWS Lambda ve Azure Functions, “Serverless” uygulamalar geliştirebileceğiniz Cloud’daki sistemler. İlginizi çekiyorsa bunlara göz atmanızı tavsiye ederim. Şimdilik bu kadar, bir sonraki yazıda görüşmek üzere.