Son zamanlarda
sıkça duyduğumuz bir terim olan Serverless,
ismi gibi sunucu gerektirmeyen bir şey midir? Bize sağlayacağı faydalar
nelerdir? Bu konulara değinmek istiyorum.
Öncelikle
serverless, sunucu gerektiren bir
kavramdır. Bu isim ile anlatılmaya çalışılan şey, sunucu ile
ilgilenmenizin gerekmediğidir.
Sunucu kapasitesi & donanım planlanması, işletim sistemi & yazılımların
kurulumu ve sunucu güncellemeleri gibi sistem yöneticiliği gerektiren işlemler,
üzerinde çalıştığınız “parlak” projenizi hayata geçirmeniz için ekstra zaman
gerektirecektir. Serverless kavramında tüm bu vakit alan işlemleri cloud
computing’e bırakarak, sunucular için endişelenmez sadece yazılıma odaklanmış
olursunuz. Serverless hizmeti veren servisler, sizin oluşturduğunuz fonksiyonları
(mesela video işleme gibi) kendi ortamlarında çalıştırarak sunucunuz üzerinde
oluşacak büyük yükleri üstlenirler.
Serverless fonksiyonları bulut
servis sağlayıcıları aracılığı ile sağlanır, Amazon’un AWS Lambda’sı bunlardan en popüler olanıdır. Azure tarafında ise Functions’ı
kullanabilirsiniz. Google ise Google Cloud Functions ile
konuya cevap vermiş.
Serverless
hizmetlerinde ücretlendirmeler “kullandığın kadar öde” mantığı ile komutların
çalıştığı süreye ve kullandığı network’e göre hesaplanır. Serverless
fonksiyonları trigger edildiklerinde, önceden belirlenmiş zamanlarda veya API
istekleri ile uygulamanızdan bağımsız olarak çalıştırılırlar. Bu fonksiyonlar,
hizmeti veren servisin verdiği SDK’lara göre ve destekledikleri programlama
dillerine göre yazılmaktadır.
Yani Cloud
Functions ile Lambda’nın SDK’ları birbirinden farklı olduğu için fonksiyonları
her servis için ayrı yazmamız gerekir. Buna çözüm olarak ise Serverless adında bir
framework bulunmaktadır. Bu sayede birçok serverless servisi için tek bir
framework ile fonksiyon yazabilmeniz mümkün hale geliyor.
Sonuç olarak
serverless’lar vaktimizi ve bütçemizi düşüren, faydası büyük servislerdir.
Bununla birlikte cloud computing’in hayatımızı her geçen gün daha da
kolaylaştırdığını bir kez daha görmüş oluyoruz.
Serverless’i FaaS (Function as a Service) ile Paas (Platform as a
Service) kavramları arasında bir noktada konumlandırabiliriz.
Sunucusuz bilişimin avantajları nelerdir?
- Sunucu Yönetimi Yok: Tedarik etmeniz veya bakımını yapmanız gereken bir sunucu
yoktur. Yüklemeniz, bakımını yapmanız veya yönetmeniz gereken bir yazılım veya
çalışma zamanı yoktur. (sunucu hazırlama, monitoring ,
yönetim ortadan kalkar)
- Esnek Ölçekleme: Uygulamanız otomatik olarak veya tek tek sunucu birimleri
yerine tüketim birimlerinin (ör. aktarım hızı, bellek) değiştirilmesi aracılığıyla
kapasitesi ayarlanarak ölçeklenebilir. (Siz uygulamanıza 1000 istek
yaptığınızda arkada sistem 10 container’a ihtiyaç duyuyor ise Siz 10000 istek
yaptığınızda hemen 90 container daha ayağa kaldırılır ve isteğinize aynı
performans ile cevap verir.)
- Değere Göre Ödeme: Sunucu birimi yerine sürekli performans veya yürütme süresi
için ödeyin. (Bazen küçük bir uygulama için bile koca bir sunucu
çalıştırırız , buna gerek yoktur)
- Otomatik Yüksek Erişilebilirlik:
Sunucusuz bilişim yerleşik olarak erişilebilirliğe ve hata
toleransına sahiptir. Bu özellikler uygulamayı çalıştıran hizmetler tarafından
varsayılan olarak sağlandığından, mimarinizi bunları sağlayacak şekilde
tasarlamanız gerekmez. (Uygulamanızın localinizde çalışması
ile bir bulut sağlayıcısında çalışması arasında tartışmaya kapalı yüksek
erişilebilirlik avantajı bulunmaktadır.)
Güvenlik
Sorunları ve Alınabilecek Önlemler
Sunucusuz
bilişim çalışma mekanizması, FaaS sağlayıcısı tarafından dizayn edilir; aynı
zamanda güvenlik altyapısı da bu sağlayıcı tarafından sunulur. Ancak sağlayıcı
tarafından sunulan güvenlik altyapısı veri merkezi, ağ, sunucular ve işletim
sistemlerinin güvenliği olarak tasarlandığı için büyük ölçüde donanımsal bir
yapıdadır.
Bu
nedenle sunucusuz uygulamayı geliştiren yazılımcı kodun güvenli bir şekilde
çalışmasını sağlamaktan sorumlu tutulan kişidir. Sunucusuz uygulamaların
birbirine bağlı modüler bir yapıya sahip olması; bulut depolama ve API’ler gibi
çeşitli kaynaklardan veri çekebilme özellikleri nedeniyle geniş bir atak
yüzeyinin oluşmasına neden olmaktadır. Geliştiricinin göz önünde bulundurması
gereken gerçekliklerden bir diğeri de verinin fonksiyonlar ve üçüncü parti
servisler arasında taşınması yani daha çok dolaşımda olması ve bunun sonucunda
ele geçirilmeye daha yatkın olmasıdır.
Aynı
zamanda sunucusuz uygulamalar üçüncü parti kütüphaneler ve API-bağlantılı uzak
web servisleri ile birlikte çalıştığı için karmaşık bir bağlantı kümesine
sahiptir, bu nedenle dağıtımı yapılmadan önce bütün bir güvenlik testinin
yapılması ve bağımlılıklarının tespiti zorlaşmaktadır.
Temel
olarak uygulanabilecek güvenlik önlemleri arasında girdilerin kontrolü, güvenli
bir şekilde devre dışı kalma(fail-safe), en az ayrıcalık kuralı(principle of least
privilege) gibi
politikalar önem arzetmektedir. Sunucusuz bilişimin
karmaşık bir yapısı izleme ve hata ayıklama süreçlerini de
karmaşıklaştırmaktadır, buna çözüm olarak sızma girişimlerini ortaya çıkaracak
aynı zamanda debug işlemlerini kolaylaştıracak detaylı bir loglama sistemi
yapılandırılabilir. Dış kütüphanalerin ve web kaynaklarının zafiyetlere karşı
taranması da tavsiye edilen önlemler arasındadır. Öte yandan FaaS sisteminde
fonksiyonların çalışmayı tamamladıktan sonra deaktive duruma geçmeleri DDoS
gibi uzun süren saldırıların etkisiz kalmasına imkân sağlamaktadır.
Kaynakça
Yorumlar
Yorum Gönder