MİMARİ ÖRÜNTÜLER

Serverless Mimari (FaaS)

FaaS yani (Function As a Service) Programlama mantıklarınızı çalıştıran kaynakların(CPU, Memory, I/O) tamamen Cloud Provider tarafından yönetilmesi , sizin sadece kodunuzu yazıp, hangi olaylar karşısından tetikleyeneceğinin bilgisini verdiğiniz, ödeme yöntemi olarak kullandığın kadar öde mantığındaki mimari yapılardır.

Onur Dayıbaşı
Cloud And Servers

--

Öncelikle bildiğimiz Bulut Hizmetlerini sıralarsak.

On-Premises: Yazılımlarınızın sizin veya firmanın bilgisayarlarına yüklendiği kısımda tüm katmanların sorumluluğu sizin ekibinizin üzerindedir. Bir sistem ekibiniz olması gerekir. Bu sistem ekibi sunucuları, veritabanlarını, güvenliği, network’ü bilmesi ve kurması gerekmektedir. Veritabanının yedeklerinin alınmasını sağlaması, işletim sisteminin güncel sürümlerinin yüklenmesini sağlaması gerekmektedir. Ayrıca sistem ekibinin JVM, dll, plugin gibi yazılımın ihtiyacı olan Run-Time sisteme kurmaları gerekmektedir.

Infrastructure As A Service: Size bulut üzerinden sanal Compute, Storage, Networking satıldığı, kiralandığı bulut hizmeti olarak düşünebilirsiniz. Bilgisayar, Disk ve Network kartları almak yerine bunları Sanal olarak bulut ’tan kiralayıp üzerine istediğiz işletim sistemini kurup yolunuza devam edebilirsiniz.

Platform As A Service: Bulut üzerinde direk bir java, ruby, node uygulaması geliştirmek istiyorsunuz ve işletim sistemi, network, sunucu gibi sistemler ile uğraşmak istemiyorsunuz, Sadece uygulamanızı geliştirmek ile uğraşıyorsunuz sonrada uygulamanızın run-time dosyalarını ilgili platforma atıp çalışmasını sağlıyorsunuz. (Tomcat, Jetty, Django, Express vb…)

Software As A Service: Uygulamaların bulut’ tan hizmet vermesine SaaS denir. Kullanıcılar ve geliştiriciler sadece uygulama arayüzlerine erişebilir. Bu servisler belli domain(Alanlarda özelleşmiştir) sizi bu domain detaylarından kurtararak size hizmet satar. Genelde her ay veya yıllık ödeme yöntemi ile işler . Örneğin Authentication uzmanlaşmış Auth0, İletişim’de uzmanlaşmış Twillo, veya Ödeme işlemlerinde uzmanlaşmış Stripe bu tür SaaS hizmetlerinden bazılarıdır.

Peki FaaS hizmeti ne oluyor. FaaS Managed Servisleri birbirine tutkal gibi bağlayacak olan sadece Functions yazarak işlemlerinizi halledebildiğiniz bir ortam sunuyor. Sizin yazdığınız Fonksiyon yeri gelince (ilgili event/olay ile) tetiklenerek ilgili işlemlerinizi gerçekleştiriyor.

Aşağıdaki resimde görüleceği gibi IaaS → PaaS → FaaS doğru ilerlerken yeşil alanlar artmış yani , yönetim sorumluluğu Cloud Provider üzerinde duruyor, bu bir anlamda iyi sizin ölçeklendirme, güvenilir ki vs… yönetme sorununuz ortadan kalkıyor , fakat başka bir problem var giderek Provider daha çok bağımlı hale geliyorsunuz.

Peki BaaS, MBaaS kavramları nedir ?

BaaS (Backend As A Service), MBaaS ise (Mobile Backend As A Service) bulut hizmetidir. Bir web veya mobil uygulama geliştirirken hızlı bir şekilde uygulama ortamını hazırlamak yerine Third Party provider ’lardan faydalanarak uygulamanızı geliştirmenizi sağlayan bulut hizmetleridir. Authentication, Database, Messaging, Analytics vb.. servisleri hazır olarak kullanmanızı sağlar.

Aşağıda bahsettiklerim size nasıl bir App geliştirmeniz gerektiğini kendi Backend yapıları ile nasıl entegre olabileceğini anlatan sağlam Kod Üretme altyapıları ve örnek dokümanları bulunmaktadır.

FaaS (Function As A Service) nedir ?

Biraz daha derine inerek Eventlere takılabilen Fonksiyonları Function As A Service olarak sunacak Provider’ lar çıkmaya başladı.

Bunlar provider kendi ortamlarının eventlerine bağımlı fonksiyonlar oluşturmanızı sağlayarak kendi içerisinde sundukları servisler üzerinde programlama yababilecek, servisleri birbirine bağlayabilecek altyapıyı kurmuş oldular.

  • Tomcat, Apache sunucusu yerine APIGateway kullanabilirsiniz ama APIGateway , DynamoDB/RDS servisi ile bağlayacak iş mantığını nerede kodlayacaksınız. İşte bunu FaaS/Lambda sağlıyor.
  • SES(Email), Kinesis(Stream), iOT(Telemetry),S3(File),CloudWatch(Log), SNS(Topic) gelen ne olursa olsun bu verinin işlenebilmesi için bu iş mantığının kodlanabileceği bir ortam gerekiyor. İşte bunu FaaS/Lambda sağlıyor.

Serverless Mimari

Serverless mimari demek;

  • her hizmetin servis olarak kullanılması,
  • BaaS ve FaaS servislerini bir araya getirerek uygulamalar geliştirmek
  • Managed Servisleri kullanarak yüksek ölçeklenebilirlik, güvenlik vb birçok konuyu hazır olarak Lego’lar şeklinde bir araya getirerek kullanmak

anlamına geliyor.

Kullanım Alanları

  • Image Processing alanında bu worker’ ları kullanabilirsiniz. ImageMagick , GraphicsMagicks, LibGD kütüphaneleri kullanarak resimler üzerinde farklı düzenlemeleri batch olarak gerçekleştirebilirsiniz.
  • Web Crawling / Data Extraction alanında bu worker’ ları kullanabilirsiniz. PhantomJS, CasperJS, Nutch, ve Nokogiri kütüphaneleri kullanarak web crawling işlemlerini sağlayıp bu sayfalar üzerinden veri çıkarabilirsiniz.
  • Bildirim (Push Notification, SMS, Email) alanında worker’ ları kullanabilirsiniz. Push Notificationda iOS için APN, Android’de GCM servislerini kullanmanız gerekebilir. Bu işlemleri bir kademe daha soyutlaştıran AWS SNS(Simple Notification Service) veya Parse altyapısını kullanabilirsiniz. Parse kapandı. Çok sayıda kullanıcıya eposta atmak istediğinizde SendGrid, Mailgun, ve Mandrill platformlarını kullanabilirsiniz. Çok sayıda kullanıcıya SMS göndermek için Nexmo ve Twilio altyapılarını kullanabilirsiniz.
  • Data Processing : Paralel işlenmesi gereken veriniz var ise bunlar için Worker altyapılarını kullanabilirsiniz. Bu veriler webhook ile başka sistemlerden trigger edilebilir, cronjob ile belli alanlar belli süreler ile taranabilir. Mobil cihazlardan eventler arka planda sizin sisteminize gönderilebilir. Sonuç itibari ile PDF, HTML, Image, JSON, XML , Ses, Video vb verileri paralel olarak işleme ihtiyacı duyabilirsiniz.

PaaS bu işin neresinde kalıyor ?

PaaS servisleride benzer bir amaçla çalışır. Server kurma, yönetme, ölçeklendirme, güvenlik maliyetlerinden sizi kurtarıp sadece uygulamanızı,iş mantıklarınızı kurmanıza odaklamanızı sağlar.

PaaS ile FaaS arasındaki farkı aşağıdaki Twitter’daki aşağıdaki post özetlemiş aslında

FaaS Hakkında Makaleler

http://martinfowler.com/bliki/Serverless.html
http://martinfowler.com/articles/serverless.html

FaaS Frameworkleri

https://github.com/serverless/serverless
https://github.com/apex/apex
https://github.com/lambadaframework/lambadaframework

AWS Bulut Sağlayıcının Serverless Yaklaşımı

Email gönderme, Kuyruk sistemi, Media transcoding, Loglama, Makine Öğrenmesi ve yazılım ile ilgili genel ihtiyaçlar tüm projelerde benzerlik göstermektedir. Bu kısımdaki iş mantıklarını tekrar tekrar kodlamak veya sunucu kurup ayağa kaldırmaya gerek yoktur. High Available, Scalable ve Fault-Tolerant bir sistemi AWS App Service olarak sunmaktadır. Serve-less kısmında yer alan temel servislerden bahsedecek olursak.

Compute Layer (Hesaplama Katmanı)

Lambda: Sunucu olmadan farklı runtime kod çalıştırmayı sağlar. (Event ile tetiklenir)

APIGateway: REST API oluşturmanızı, Lambda ile Entegrasyonların yapılıp iş mantıklarının işletilmesini , Request/Response trafik yönetimi , yetkilendirme, görüntüleme , API versiyonlamayı kontrol edip yönetmenizi sağlar.

StepFunctions: Server-less akışı orkestra etmenizi sağlar, işletilmesinin çok uzun süren parça parça işlerin zincir şeklinde fonksiyonların çağrılması ve sistemin state ve koordinasyonunu sağlar

Data Layer (Veri Katmanı)

DynamoDB: Server-less uygulamalar için kalıcı Managed NoSQL veritabanı sağlar.

S3: Server-less Web uygulamaları için Object storage ve Web sayfayaları için key/value şeklinde objeleri tutabilme ve bu kaynaklara HTTP ile erişebilme imkanı sunar.

ElasticSearch: Log analitiği, full-text arama, görüntüleme(monitoring) sağlayacak arama motoru ve analitik araçlar sağlar.

AppSync: Managed GraphQL servisi sağlar. DynamoDB, ES, S3 üzerinden güvenli, gerçek zamanlı GraphQL çalıştırmayı sağlar.

Messaging and Stream Layer

SQS: Managed Kuyruk Servisi

SNS: Managed pub/sub mesaj servisi , async event notification, mobile push notifications

Kinesis: Real-time streaming verisini basit şekilde toplama, işleme ve analiz etmeyi sağlar. Amazon Kinesis Data Analytics, bu stream üzerinde SQL çalıştırmanısı sağlar.

Firehose: Verinin yakalanması, dönüştürülmesi, Kinesis Data Analiytics, S3, Redshift, ES gerçek zamanlı olarak yüklenmesini sağlar.

User Management And Identity Layer

Cognito: Basit bir şekilde kullanıcı girişi, üyelik, Serverless uygulamalar ile veri senkronizasyonu sağlar. Ayrıca kullanıcı havuzları ile Facebook, Google, Amazon sistemleri ile giriş imkanı sunar.

Edge Layer

CloudFront: Web uygulama içerikleri ve verilerinin uç/istemci makinelere daha yakın olacak şekilde az gecikme ve hızlı veri transferi sağlayacak CDN hizmetidir.

System Monitoring And Development

CloudWatch: AWS Servisleri ile ilgili tüm sistem metriklerine , uygulama seviyesi log, kendi oluşturabileceğiniz KPI, metric , dashboard ve alarmlar oluşturmanızı sağlar.

X-Ray: Serverless ve microservis yapıların oluşturduğu distributed tracing ve service map görüntüleyip, problem oluşturan kısımları tespit etmenizi sağlar.

SAM: AWS Cloudformation Serverless uygulamaları deploy için özellemiş bir extension’ıdır. Bu sayede serverless uygulamalar CLI üzerinden daha basit ve otomatik olarak kurulabilir.

Senaryolar

1. Restfull Microservices

Restfull Microservices from Serverless Application Lens

2. Alexa Skills

Alexa Skills from Serverless Application Lens

3. Mobile Backend

Mobile Backend from Serverless Application Lens

4. Stream Processing

Stream Processing from Serverless Application Lens

5. Web Application

Application from Serverless Application Lens

Referanslar

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--