Serverless Mimari nedir? Neden Serverless? Kimler Serverless kullanmalı?
Son dönemde yoğun bir şekilde Azure servisleri ve serverless konularında çalışıyorum. Azure servisleri ile serverless yaklaşımlar için bir yazı dizisi oluşturmaya karar verdim. Makale serisinin başlangıcında serverless mimariye göz atıyor olacağız. Devam eden süreçte Azure servislerini inceleyip Azure Functions ile demo’lar yapacağız.
Serinin devamında inceleceğimiz konu başlıkları;
- Serverless mimari nedir? Neden Serverless? Kimler serverless kullanmalı.
- Azure Functions Nedir? Trigger ve Bindings Nedir? Nasıl kullanılır?
- Azure Service Bus nedir? Queue ve Topic kullanımı?
- Azure Functions ile Serverless Sipariş Uygulaması Geliştirme
- Azure Functions Dependency Injection (DI) kullanımı
- Azure Functions Rest API ile Müşteri Talepleri Uygulaması
- Azure Storage Nedir? Blob Storage, File Storage, Table Storage, Queue Storage
- Azure Key/Vault Nedir?
Not: Yeni makaleler geldikçe bu bölümü güncelleyeceğim.
Haydi başlayalım…
Neden Serverless?
Teknolojik gelişmeler beraberinde ihtiyaçlarıda değiştirdi. Artan talep, yük ve maliyetler yeni yöntemlerin geliştirilmesini hızlandırdı. Bunun yanında gelişen Cloud teknoloji ve yenilikler ile farklı servisler hayatımıza girdi. Bunları şimdi sırası ile inceleyelim.
Tabloda sola doğru gittikçe daha fazla kontrole sahip ve altyapıyı yönetecek bir ekibe ihtiyaç duyarız. Sağa doğru gittiğimizde ise altyapıdan soyutlanırız ve altyapı hizmetleri Cloud sağlayıcılar tarafından karşılanır.
(On-Premise) Geçmiş yıllarda şirketler fiziksel sunucular (On-Premise) için ciddi donanım yatırımları yapıyordu. Donanım, İşletim sistemi, network, güvenlik konularını altyapı ekibinin sorumluluğundadır. Bulut teknolojilerinin gelişmesi ile birlikte sanallaştırma teknolojileri ile sanal sunucular oluşturulup donanım hizmeti kiralama modeli alınmaya başlandı.
IaaS (Infrastructure-as-a-Service) Tüm altyapı Cloud’a taşınıyor fakat ekipler yine sunucu kurulumları vb. işlerle uğraşmak durumunda kalmaktadır. Değişen ihtiyaçlar ve Container teknolojilerinin gelişmesi ile birlikte Bulut sağlayıcıları container’ların yönetilmesi için hizmet sağlamaktadır.
CaaS (Container as a Service) Bu servis ile container’larımız host edilip yönetilmektedir. Misafir işletim sistemine ihtiyaç duyulmaz ve gereksiz maliyet kalemleri azalmaktadır. Cloud sağlayıcılar sizin yerinize container’ları yönetir.
Paas (Platform as a Service) Devam eden süreçte sunucu operasyonlarından bir nebze kurtaran Paas ortaya çıktı. İşletim sistemi, veritabanı, network gibi sorumlulukları Bulut sağlayıcıların sorumluluğundadır. Siz sadece geliştirme yapacağınız dili seçip uygulamanızı yükleyebilirsiniz.
Faas (Function as a Service) 2014 de ise Serverless veya Faas duyuruldu. Geliştiricilerin sunucudan tamamen soyutlandığı ve sadece business’a odaklanılan bir yapı hayatımıza girdi. Serverless yaklaşımda functionlar event driven olarak çalışırlar. Bu nedenle bir tekiklemeye ihtiyaç duyarlar.
Serverless Nedir?
Serverless, uygulamaların Bulut sağlayıcılar tarafından barındırıldığı ve geliştiricilerin sunucu, yazılım ve donanım yönetimi ihtiyacını ortadan kaldıran bir yapıdır.
Serverless yani “Sunucusuz” terimi sanki kodlarımızın sunucusuz bir şekilde çalışacağı algısını veriyor. Oysaki buradaki kasıt altyapı sorumluluğu (sunucuların satın alınması/kiralanması/yönetimi, ölçeklendirme, network, işletim sistemi bakımı gibi ihtiyaçlar) geliştiricinin sorumluluğu yerine Bulut sağlayıcılarınındır. Bu bize altyapı yönetimi olmadan uygulama ve hizmet oluşturmanın önünü açar.
Serverless mimari geliştiricilerin daha çok business’a odaklanmalarını sağlar. Genellikle bir fonksiyon event driven bir yaklaşımla çalışmaktadır. Bu tetikleme bir http çağrısı olabileceği gibi timer, servise bus, queue ya da file upload sonucunda bir tetiklemede olabilir.
Microsoft Azure, Amazon Web Services (AWS) Lambda, Google Cloud Functions, IBM OpenWhisk sunucusuz çözümlerde en bilinen sağlayıcılardan bir kaçıdır.
Serverless çözümleri;
Serverless mimaride yoğun istekleri karşılanabilmesi için geliştiricilerin ölçeklendirme endişesi duymasına gerek yoktur. Bu işlem talep doğrultusunda otomatik olarak yapılır. Maliyet tarafında ise kullandığın kadar öde (Pay as you go) esasına dayanır. Buna gerçek hayattan örnek vermek gerekirse GSM operatörlerinden aylık paketler satın alırız konuşma, sms internet gibi. Bu limitlere ulaşamasakta hatta hiç Sms dahi atmasakta önceden paket ücretini öderiz. Fakat serverless yaklaşımda ne kadar tüketim yaptıysak o kadar fatura çıkar. Bu şekilde bizden kullanmadığımız hizmetin ücreti alınmaz. Mesela ay sonu 15gb internet ve 300dk konuşma yaptığınızı düşünün. Sadece bunlar için sizden ücret alındığını…
Bu arada Serverless mimari yaklaşımında farklı bakış açısı ile uygulama geliştirilmesi gerekir. Her sorun için doğru tercih olmayabilir. Buna geliştiriciler olarak bizim karar vermemiz gerekir.
Neden serverless mimari?
Uygulamalarımızı barındırabilmek için altyapı ihtiyacını karşımamız gerekir. Bu yönetilmesi gereken sanal veya fiziksel bir sunucu olabileceği gibi uygulamanın çalışması için gerekli işletim sistemi ya da web sunucu barındırma işlemleri anlamına gelir. Örneğin cloud provider’lardan almış olduğumuz bir vm için işletim sistemi ve gerekli yazılım ihtiyaçlarını bizim karşılamamız gerekiyor. Bu bize zaman ve yönetim maliyeti çıkarmaktadır.
Oysa ki Serverless mimaride ise sadece kodunuza odaklanırız. Servis sağlayıcıları ise bizim yerimize donanım ihtiyaçlarını, işletim sistemi, yazılım yönetimi gibi konuları çözer. Biz sadece yazacağımız kod’a odaklanırız.
Kimler serverless kullanmalı?
Serverless mimariye geçmek her proje için doğru olmayabilir. Eğer barındırılmaya ihtiyaç duyduğunuz az sayıda business işleminiz varsa serverless mantıklı olabilir. Kompleks bir uygulamayı serverless mimaride geliştirmek isterseniz mimariyi kurgularken serverless’e uygun tasarlamanız gerekir. Bazen hatalı tasarımlar yüksek maliyetler çıkarabilir. Hali hazırda bir uygulamanız varsa uygulayı Lift and shift mantığında taşıyıp küçük parçalarını adım adım serveless’e geçirmek projenin taşınmasında daha etkili olacaktır.
Bir sonraki makalede görüşmek üzere…
Sorularınız için lütfen yorum yapmaktan ve bana ulaşmaktan çekinmeyin.
Twitter: https://twitter.com/ufukaytas
Linkedin: https://www.linkedin.com/in/ufukaytass/
Github: https://github.com/ufukaytas/