Yeni Başlayanlar icin Fonksiyonlar(), Yeniden Başlamak için Fonksiyonlar()

D518bd56413643cbed1c8a02c25898cc?s=47 Eser Ozvataf
November 23, 2019

Yeni Başlayanlar icin Fonksiyonlar(), Yeniden Başlamak için Fonksiyonlar()

Bu oturumda serverless mimari ile birlikte tekrar yükselişe geçen FaaS yaklaşımının, yazılımcıları uygulama mimarisinin karmaşasından ve problemlerinden soyutlayarak bugün backend'e başlamak veya her şeye yeniden başlamak için neden iyi bir alternatif olduğunu konuşuyor olacağız.

D518bd56413643cbed1c8a02c25898cc?s=128

Eser Ozvataf

November 23, 2019
Tweet

Transcript

  1. 3.

    Bugün bahsedeceklerim › Yazılım Mimarisinin Dönüşümü Yazılım mimarisi geliştirme süreçlerini

    nasıl evrimleştirdi? › Cloud’un Serverless kullanımı Bu kavramlar nedir, ne işe yararlar, neler vaad ederler? › FaaS bir platformda geliştirme yapmak Geliştirmeye nasıl başlanılır? 3
  2. 4.

    Yazılım Mimarinin Dönüşümü 4 1989 Hedef: İşlemci • Prosedürel •

    Veri disketle taşınıyor int main() { char* a = readline() print(a) … } Hedef: OS + GUI • Nesne yönelimli • Disklere kaydediliyor void button1_click(e) { string a = input.show() messagebox.show(a) … } 1999 Hedef: Web Server • Client/Server, MVC • Network iletişimi [http('GET', '/')] function index(req) { let a = req.query.a return json(a) … } 2009 Hedef: Cloud • Client/Server, MVC • Network iletişimi ? 2019
  3. 5.

    5 1989 Hedef: İşlemci • Prosedürel • Veri disketle taşınıyor

    int main() { char* a = readline() print(a) … } Hedef: OS + GUI • Nesne yönelimli • Disklere kaydediliyor void button1_click(e) { string a = input.show() messagebox.show(a) … } 1999 Hedef: Web Server • Client/Server, MVC • Network iletişimi [http('GET', '/')] function index(req) { let a = req.query.a return json(a) … } 2009 Hedef: Cloud • Fonksiyonlar • Serverless ^ Başlangıç noktası 2019 Yazılım Mimarinin Dönüşümü
  4. 6.

    “ Cloud computing, often referred to as simply “the cloud,”

    is the delivery of on-demand computing resources over the internet on a pay-for-use basis. IBM 6 Cloud
  5. 7.

    Cloud’un iki iddiası • Pay-as-you-go Gerçekleşen: Önden tahminleme ile kaynak

    tahsis etmek «Önümüzdeki ay 4 çekirdekli, 16 GB RAM, 4 cihaz’a ihtiyacım var» • Scalability Gerçekleşen: Sistemin mevcut durumunu izleyerek, kaynak ihtiyacının artıp/azalacağına karar vermek (programlanabiliyor) 7
  6. 8.

    Cloud ürünleri 8 Infrastructure Fiziksel makine/altyapı ihtiyaçlarını unut, OS ve

    yazılımları kur. Platform Uygulamanın çalışacağı OS ve yazılımların kurulumunu unut, Uygulamanı kodla. Software Spesifik bir işi tamamlamayı/hizmeti programlamayı unut, Kullanıcı ol. IaaS PaaS SaaS
  7. 9.

    Ancak… IaaS ve PaaS ile hayatımıza birçok kavram dahil oluyor.

    9 DevOps Vendor Specific KnowHow Virtualization and Orchestration Virtual Private Cloud Horizontal Scaling
  8. 11.

    Cloud ürünleri 11 Infrastructure Fiziksel makine/altyapı ihtiyaçlarını unut, OS ve

    yazılımları kur. Platform Uygulamanın çalışacağı OS ve yazılımların kurulumunu unut, Uygulamanı kodla. Functions Uygulama mimarisi oluşturmayı unut, Spesifik bir fonksiyonu kodla. Software Spesifik bir işi tamamlamayı/hizmeti programlamayı unut, Kullanıcı ol. IaaS PaaS FaaS SaaS
  9. 12.

    Fonksiyonlarla bir uygulama nasıl geliştirilir? • Kod tabanı fonksiyonlar halinde

    tasarlanır, • Fonksiyonlar stateless olur, (hafızasızlık) • Fonksiyonların hangi durumlarda tetikleneceği belirlenir, • Sınırların farkında olunur, (örnek: dakika limitleri) • Mümkün olduğunca cloud ürünleri kullanılır, 12
  10. 13.

    13 Codebase’e Yatay Yaklaşım 12 ailenin barınacağı bir yapı kurgulanacaksa,

    en büyük problem alandır. Alanımız sınırsızsa… vs Uygulama Fonksiyonlar
  11. 14.

    14 Domain Customer Product Order Repositories Business ICustomerRegistry IProductRegistry IPriceCalculator

    INotificationService IPaymentGateway IOrderProcessor Implementations ... ... ... ... ... PaypalPaymentGateway IyzicoPaymentGateway SmsNotificationService Client Request Web Server Controller Response View Model App Server Req. Router View UYGULAMA Katmanlı mimari ile izole edilmiş codebase IOrderRegistry
  12. 15.

    15 Domain Customer Product Order Repository OrderRegistry Business & Implementation

    = Function PaypalPaymentGateway.placePayment Client Request API Gateway FaaS Runtime Response FONKSİYON Katmanlara sahip bir fonksiyon
  13. 16.

    Kod tabanını fonksiyonlara bölmek yapısal olarak geliştiriciye ne kazandırıyor? •

    Kod içerisinde anlamsal hafiflik ve konsantrasyon sağlıyor, • Kolay debugging, temiz stacktrace çıktıları, • Prototiplemek kolay, DevOps süreçlerinden uzaklaşılıyor, • Planda değişiklik yapmak ve refactor kolay, • İşler daha net tanımlanabiliyor, teknik yeterlilik ihtiyacı azalıyor, 16
  14. 17.

    Serverless bir cloud çözümü olarak ne kazandırıyor? • Fonksiyon bazında

    kaynak harcaması hesaplanabiliyor, size ayrılan kaynak üzerinden değil tüketim üzerinden ödeme yapıyorsunuz. • Ölçeklenebilirlik sınırsız ve servis tarafından sağlanıyor. • Hangi şartlarda ölçekleme yapılacağını düşünmüyorsunuz. • Birçok provider’ın free tier’ları sayesinde ücretsiz başlangıç. • Çoğu provider’ın size taahhüt edeceği %99.9 uptime. 17
  15. 18.

    Serverless mimari anlamda ne kazandırıyor? • Her fonksiyon farklı bir

    runtime, programlama dili ile geliştirilebilir. • DDD benzeri katmanlar yerine defansif programlama dahi yeterli. • Loglamayı düşünmeye gerek yok, process çıktıları cloud provider tarafından toplanıyor. • Darboğazların yaratılması çok zor. Her birim bağımsız, stateless yapı avantaj sağlıyor. Bu da geliştirme ve test aşamalarında maaliyet azaltıyor. 18
  16. 19.

    Serverless mimari anlamda ne kazandırıyor? (2) • Maintenance maliyeti az,

    memory leak durumunda dahi worst case günü kurtarabiliyor. (worst case = kötü kod) • Containerlarla çalışsanız dahi sorununuz olan; OS ve Runtimelar için güvenlik açığı ve güncelleme takibi yapılmıyor. 19
  17. 21.

    21

  18. 23.

    23

  19. 24.

    24

  20. 25.

    Serverless Framework’da neler deneyimledim? • Vaad ettiği kadar vendor agnostik

    değil, • AWS’de CloudFormation kullanıyor, belirli limitleri var, (1MB) • Production’a çıkmadan önce API Gateway’i iyi bilmek gerekiyor. 25