Serverless Mimariye Giriş

☁️ Ümit Eroğlu 🌍🛰
5 min readDec 7, 2021
https://unsplash.com/photos/zFYUsLk_50Y

Bulut, temel olarak çeşitli tedarikçilerin hizmet sağladığı, herkese açık bir altyapıdır. Bulutu kullanan şirketler ve bireyler, bir veri merkezinin getirdiği fiziksel ve donanım sorunları ile ilgilenmeden bu hizmetlerden faydalanmaktadırlar. Bulut servis sağlayıcıları, donanım kaynaklarından çok daha fazlasına ulaşma imkanı sağlamaktadır. Bunların arasında iş değeri sağlayan birçok servis ve ürün bulunur.

Fiziksel açıdan bakarsak Bulut, Ağ (Network) ve Sunuculardan (Servers) oluşur. Tüm diğer elemanlar bu fiziksel yapı üzerine inşa edilir.

Serverless

Serverless, kelime olarak “sunucusuz” anlamına gelsede, Serverless’ı anlatmak için önce bazı kavramlardan bahsetmek gerekir. Bunlardan ilki, Multi-Tier Architecture denilen çok katmanlı mimaridir. Çok katmanlı mimari, client-server (istemci-sunucu) uygulamaları için katmanlardan oluşan bir işletim zamanı (runtime) mimarisidir. Genel olarak katmanlar; sunum, (presentation) uygulama (application ya da business logic) ve veriden (data) oluşur.

Presentation katmanından bahsettiğimizde, sistemin etkili bir grafik kullanıcı arayüzünden (GUI — Graphical User Interface) söz etmiş oluruz. Presentation katmanını basitçe özetlersek “bir http sunucusundan servis edilen statik web içeriği” diyebiliriz.

Application katmanı ise uygulamanın işlendiği (processing) katmandır. İş mantığı (business logic) kod haline getirilir ve çalıştırılır.

Kalıcı olan veri depolama kısmı ise Veri katmanını oluşturur. Dosya depolama ve ya Veritabanı olarak özetlenebilir. Veritabanı, kullanıcı kimlikleri ve sipariş bilgisi vb. gibi uygulama bilgilerinden oluşur.

BaaS — Backend as a Service (Bir servis olarak Arkayüz)

Sunucu-taraflı (server-side) mantığın, bir bulut sağlayıcı tarafından barındırıldığı (hosted) bir servis modelidir. Müşteri uygulamaları, bir web tarayıcı (browser) ve ya mobil arayüz ile çalıştırılabilir.

Bu model, mobil telefon uygulamalarının artmasıyla yaygınlaşmıştır. Backend, bulutta barındırılarak uygulama arayüzleri (APIs) ile web tarafından erişilebilir hale getirilir. API’ler; kimlik doğrulama, veritabanı yönetimi ve veri depolama gibi temel özellikler sağlayarak birçok geliştirme döngüsünden tasarruf edilmesini sağlar.

BaaS modeline bağlı olarak çalışan ancak tamamen serverless olmayan uygulamalar mevcuttur. Bununla birlikte BaaS modeli, serverless için bir temel oluşturur ve uygulamalar için önemli bir rol oynar.

FaaS — Function as a Service (Bir servis olarak Fonksiyon)

İş mantığının, olay-tetikli (event triggered) ve kısa ömürlü konteynerler ile işlendiği bir bulut servis modelidir. FaaS, BaaS’tan birçok açıdan farklılık gösterir. Kendi kodunuzu kendiniz sağlayabilir ve onu bir konteyner aracılığı ile çalıştırabilirsiniz. Olay-tetikli olması, kodun sadece tetiklendiği zaman çalışmasına olanak sağlar. Tetik (trigger) sizin belirlediğiniz bir olaydır. Uygulamanız, bir talep (request) için beklemek zorunda kalmaz, dolayısıyla sürekli çalışmasına gerek kalmaz.

Aslında konteyner teknolojisi, gerçekten serverless bir modele doğru gidildiğinin bir göstergesidir. Veri merkezinde çalışan ve kodunuzu yürüten bir sunucu yoktur ve tetiklendiği zaman konteyner kodunuzu çalıştırır. Dinamik özelliği sayesinde bu modelde, uygulamanız için belirli sayıda “instance” seçmeniz gerekmez, bulut sağlayıcı bu ölçeklemeyi sizin yerinize yapar. (Makul ölçüde) Eğer trafik artışı mevcut ise daha fazla “instance” getirilir. Kısa ömürlü olması ise başka bir avantajdır. İş tamamlandığı zaman konteynerler gider. Uygulamanız sadece ihtiyaç olduğunda çalışır.

Serverless Mimari

Birkaç konsepti açıkladıktan sonra şimdi Serverless Mimariden bahsedebiliriz. Bir tanım yaparsak Serverless, altyapının tamamen bir bulut servis sağlayıcı tarafından yönetildiği ve kaynakların dinamik bir biçimde, belirli bir iş mantığı birimi için talebe göre şekillendiği bir işletim zamanı (runtime) mimarisidir.

Serverless bir uygulamanın anahtarı, uygulamanın sanal olarak var olduğu görünen bir altyapı üzerinde çalışmasıdır. Aslında serverless mimari sunucu kullanır ancak işin güzel kısmı o sunucular ile sizin uğraşmanız gerekmez. Bir özel sanal bulut ortamı (Virtual Private Cloud) oluşturmanıza gerek olmaz. Karmaşık ağ yönlendirme kuralları gibi problemlerle uğraşmanıza gerek kalmaz. Sağlam, ölçeklenebilir, yüksek permormansla çalışan bir uygulama için metrelerce kablo çekmenize gerek kalmaz. Bu işleri bulut sağlayıcı sizin için halleder ve size sadece kodla uğraşmak kalır.

Serverless Multi-Tier Karşılaştırma

Beceriler açısından bakarsak Serverless, sadece geliştirme ile ilgilidir. Bulut servis sağlayıcı, altyapı ile ilgilendiği için gereken personel sayısı azalır. Multi-tier’de ise operasyona ihtiyaç olduğundan altyapıyı yönetecek birine gereksinim vardır.

Maliyet açısından serverless, başlangıç maliyetlerini düşük hale getirir. Ancak bu avantaj kötü bir iş mantığı ve DDOS atakları ile tersine dönebilir. Multi-tier ise işe başlamak için mutlaka bir donanıma gereksinim duyar. Başlangıçta maliyetli görünse bile uzun vadede ve büyümeye yönelik bir yatırım olarak düşünüldüğünde oldukça avantajlı hale gelebilir.

Kullanım bakımından Serverless, ara sıra gerçekleşen ya da sezonsal işler için daha uygun olabilir. (Bu iş modeline göre değişir) Dalgalı bir trafik için uygun bir seçim olabilir. Multi-tier yaklaşımda ise, iş yükleri bulut modeline uygun olmayabilir. Özellikle hassas veri ile çalışıyorsanız, küçük ama sürekli bir iş yüküne sahipseniz geleneksel model size daha fazla fayda sağlayabilir.

Serverless Faydaları

- Altyapı yönetiminden kurtarır.
- Sunucu ve diğer bileşenleri sağlayıcı karşılar.
- Mevcut ölçeklendirme — işleme gücü, ihtiyaç oldukça otomatik eklenir.
- Operasyonel maliyeti azaltır.
- Deployment (dağıtım/canlıya alma) daha kolay bir hale gelir.
- Çevreden bağımsız olarak dağıtım yapılabilir.

Kullanım Alanları

- Sezonsal bir iş mantığı gibi düşünülebilir. Ör: Bir ay içerisinde sadece birkaç defa yüksek kullanım alan bir uygulama için. Bir bilet satma uygulaması bu konsept için güzel bir örnektir.

- Düz ve direkt görevleri olan hafif uygulamalar için. Bazen uygulama o kadar küçük olur ki tek bir sunucu bile aşırı güç kullanma gibi gelebilir.

- Altyapı yönetiminden kaçınmak isteyen Küçük IT işletmeleri için. Bir veri merkezi yürütmek yerine ürüne odaklanmak isteyenler için.

Dezavantajları

Faydalarından bahsettik, şimdi zararlı olabilecek kısımlara bakalım.

- Bir sağlayıcıya bağlı kalmak zorunda olmak. İyi bir iş modeli olsa bile her sağlayıcı farklı şekillerde çalışmakta. Bu durum sizin iş mantığınıza uymayabilir.

- Veri güvenliği bir problem olabilir. Ne kadar güvenli olduğu söylense de bulut servislerinin birçok açığı olduğu haberlerini sosyal medyadan izliyoruz. Kaynakların bölünmesi ise başka bir sorun olabilir.

- Özellikle FaaS uygulamaları için düşünürsek, belirli bir süre boşta kalan uygulamanız tamamen kapanabilir.

- Bazen kod dışında altyapıya müdehale etmenizi gerektiren durumlar olabilir. Bir sağlayıcı ile çalıştığınızda bu optimizasyon olanağından mahrum kalmazsınız ama araya başka engeller girebilir ve gecikmeler kolayca yapabileceğiniz bir ayar için daha fazla beklemenize yol açabilir.

- İzleme (monitoring) karmaşık bir hal alabilir. Bulutta işlenen her kod aynı zamanda bir maliyettir. Sadece bir izleme işi için olsa bile. Bu nedenle başta kullandığınız kadar ödeyin modeli cazip gelse dahi orta ve uzun vadede maliyetinizi, siz farkında olmadan arttırabilir.

Burada bahsedilen dezavantajlar, duruma göre azaltılabilir hatta tamamen ortadan kaldırılabilir. Size özel olan bu durumun artılarını ve eksilerini değerlendirmelisiniz.

API Proxy ve Gateway

API Gateway, bulut ortamları için yeni bir kavram değildir. Hatta kurum içi (on-premise) diyebileceğimiz modern uygulamalar için bile. Serverless ile ilişkilidirler.

API Proxy: Çeşitli son noktalara, yönlendirme çağrıları ile backend servislerinden bağlantıya (decoupling) olanak sağlayan bir http sunucusudur.

API Gateway: Kimlik doğrulama, girdi validasyonu, izleme ve talep yönlendirme (advanced request routing) gibi ileri seviye özellikler sunan bir API Proxy’dir.

Bazı kişiler bu iki kavramı birbiri yerine kullanırlar. Bunda aslında bir hata yoktur çünkü benzer anlamları paylaşırlar. Ancak bulut API’lerinin gelişmesiyle birlikte API Gateway kavramı, Proxy’den daha akıllı bir çözüm haline gelmiştir denilebilir.

Üç büyük bulut sağlayıcısının serverless himetlerine bakarsak:

Amazon Web Services

Lambda, Amazonun birincil serverless hizmetidir. Birçok dili desteklemektedir. FaaS odaklıdır diyebiliriz.

API Gateway: API çağrılarını yönlendiren temel özelliği sağlar.

Amplify: Amazonun BaaS çözümüdür. Aslında mobil için geliştirilmiş olsada Amplify, cloud native denilen serverless uygulamaları dahi destekler.

Microsoft Azure

Azure Functions servisi ile Microsoft FaaS çözümünü sağlar.

Azure App Services ve Azure Web Apps ile de backend hizmetlerini sunar. Azure App Services, aslında serverless teknolojileri ile ilgili birçok ürünü altında barındırır.

Google Cloud Platform

Google, Cloud Functions ile FaaS ve BaaS çözümleri sunar. diğerlerinden farklı olarak “Functions” altında backend çözümleri sağlarlar.

Ayrıca bir MBaaS (Mobile) örneği olan Google Firebase servisi bulunmaktadır. Sadece mobil geliştirmeye odaklanmıştır.

Bu üç bulut servis sağlayıcısı dışında serverless teknolojisi sunan birçok firma bulunmaktadır. Hatta sizin iş modelinize daha uygun olabilirler.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

☁️ Ümit Eroğlu 🌍🛰
☁️ Ümit Eroğlu 🌍🛰

Written by ☁️ Ümit Eroğlu 🌍🛰

Software, Cloud, DevOps, IoT, GIS, Remote Sensing.

No responses yet

Write a response