Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Uygulama Mimarisinde Fonksiyonların Yükselişi

Uygulama Mimarisinde Fonksiyonların Yükselişi

Developer Summit İzmir 2018

Eser Ozvataf

March 17, 2018
Tweet

More Decks by Eser Ozvataf

Other Decks in Programming

Transcript

  1. Uygulama Mimarisinde
    Fonksiyon()ların
    Yükselişi
    Developer Summit İzmir, 2018

    View Slide

  2. Tanışalım
    Eser Özvataf
    twitter.com/eserozvataf

    github.com/eserozvataf

    View Slide

  3. Uygulama Mimarisi
    Nedir? Nelere etki eder?
    1

    View Slide

  4. “Architecture has become a very slippery word in the
    software business. It's hard to come up with any
    solid definition of what it means. I see it as a
    fundamentally subjective term.


    When people describe their software architecture
    they select the important parts of their systems,
    how these parts fit together, and the key decisions
    they made in designing their systems.
    Martin Fowler

    View Slide

  5. Uygulama Mimarisi Nasıl
    Tarifleyebiliriz?
    •Tanımı muğlaktır*.
    •Uygulamanın kuşbakışı* haritasıdır.
    •Uygulamaya ait parçaları soyut ele alıp, sistem
    içerisindeki davranışlarını belirler.
    •Uygulama için kilit noktadaki kararları etkiler.
    Örneğin uygulamanın kullanacağı veritabanı tipi.

    View Slide

  6. Ne kadar kuşbakışı?
    • Bölgeler
    • Komşular
    • Sınırlar
    • İçerikten bahsetmiyor
    • Tüm fiziksel yapılar
    Coğrafi Bölgeler Haritası
    Fiziki Harita

    View Slide

  7. Restoranlar Yemekler
    Siparişler Kullanıcılar
    Domain (Kavramlar, Nesneler) Application (İş akışları)
    Restoran’dan Sipariş Verme
    Kullanıcı Olarak Kaydolma
    Geçmiş Siparişi Yorumlama
    Infrastructure (Altyapı bağlantıları)
    Veritabanı -> MongoDB
    Arama -> ElasticSearch
    Presentation (Kullanıcı Arabirimi)
    iOS Mobil Client
    Android Mobil Client
    React Web Client
    Örnek Uygulama
    YemekSipariş Projesi Uygulama Mimarisi

    View Slide

  8. Client/Server Mimarisi
    Yaygın mimari anlayış
    2

    View Slide

  9. Örnek Uygulama
    Presentation Katmanı
    iOS Mobil Client
    Android Mobil Client
    React Web Client
    Kullanıcı Web Server
    Sunucu (Server)
    İstemci (Client)
    Uygulama
    Front-End Kodu
    YemekSipariş Projesi Client/Server Mimari Uyarlaması - 1
    Uygulama Prosesi*
    Uygulama
    Back-End Kodu

    View Slide

  10. Örnek Uygulama
    Web Server
    Sunucudaki Uygulama Prosesi
    Application Katmanı*
    Restoran’dan Sipariş Verme
    Kullanıcı Olarak Kaydolma
    Geçmiş Siparişi Yorumlama
    Request
    Router
    Restoranlar Yemekler
    Siparişler Kullanıcılar
    Domain Katmanı
    MongoDB Bağlantısı
    Infrastructure Katmanı
    YemekSipariş Projesi Client/Server Mimari Uyarlaması - 2

    View Slide

  11. Kontrol Listemiz
    • Uygulama gereksinimleri nelerdir, nasıl bir sunucuda çalışacak?
    • Uygulama hangi platformda, hangi işletim sistemiyle çalışacak,
    nasıl bir kurulum gerekecek?
    • Sunucudaki uygulama çalışmayı sonlandırır veya bir problem
    yaşarsa ne olacak?
    • Sunucudaki uygulamaya karşılayabileceğinden fazla istek gelirse
    ne olacak?
    • Uygulamanın kapasitesini arttırmak istersek nasıl hareket edeceğiz?
    • Uygulamanın canlı ortama aktarımı ve güncellemeler nasıl olacak?

    View Slide

  12. Functions as a Service
    Nedir? Ne önerir?
    3

    View Slide

  13. Cloud
    Computing
    Vendor
    Specific
    KnowHow
    Virtualization
    and
    Orchestration
    Virtual
    Private
    Cloud
    Scalability
    FaaS da
    çoğumuzun
    hayatına
    cloud ile
    birlikte girdi

    View Slide

  14. Cloud ürünleri
    IaaS PaaS SaaS
    Interface
    Fiziksel makine/altyapı

    ihtiyaçlarını bize bırak.


    OS ve yazılımı kur.
    Platform
    Uygulamanın çalışacağı
    OS ve yazılımların
    kurulumunu bize bırak.


    Uygulamanı kodla.
    Software
    Spesifik bir işi
    tamamlamayı/hizmeti
    sunmayı bize bırak.


    Kullanıcı ol.

    View Slide

  15. Cloud ürünleri
    IaaS PaaS FaaS SaaS
    Interface
    Fiziksel makine/altyapı

    ihtiyaçlarını bize bırak.


    OS ve yazılımı kur.
    Platform
    Uygulamanın çalışacağı
    OS ve yazılımların
    kurulumunu bize bırak.


    Uygulamanı kodla.
    Software
    Spesifik bir işi
    tamamlamayı/hizmeti
    sunmayı bize bırak.


    Kullanıcı ol.
    Functions
    Uygulama mimarisi
    odaklı kaygıların
    çözümünü bize bırak.


    Spesifik bir işlevi kodla.

    View Slide

  16. AWS Lambda

    View Slide

  17. İşlevlerle bir
    uygulama
    nasıl inşa
    edilmeli?

    View Slide

  18. Örnek C# İşlevi

    View Slide

  19. Nasıl tasarlanmalı?
    •Kod tabanı işlevler halinde hazırlanır.
    •Hangi olay sonucu tetikleneceği seçilir.
    •HTTP Request
    •Timer
    •Diğer eventler (kuyruğa bir şey eklendi)
    •Stateless olmalıdır.
    •Sınırların farkında olunmalı (örneğin 1 dakika limiti)

    View Slide

  20. Örnek Uygulama
    Presentation Katmanı
    iOS Mobil Client
    Android Mobil Client
    React Web Client
    API Gateway
    Uygulama
    Front-End Kodu
    YemekSipariş Projesi FaaS Mimari Uyarlaması - 1
    İşlev
    Uygulama
    Back-End Kodu
    Kullanıcı
    İşlev Listesi
    Restoran’dan Sipariş Verme
    Kullanıcı Olarak Kaydolma
    Geçmiş Siparişi Yorumlama
    İşlevin yüklü olduğu
    bir hedef

    View Slide

  21. Örnek Uygulama
    İşlevin yüklü olduğu
    hedef
    “Restoran’dan Sipariş Verme” İşlevi
    Application Katmanı
    İşlev Kodu
    Restoranlar Yemekler
    Siparişler Kullanıcılar
    Domain Katmanı
    MongoDB Bağlantısı
    Infrastructure Katmanı
    YemekSipariş Projesi FaaS Mimari Uyarlaması - 2

    View Slide

  22. Client / Server FaaS
    Kod Tabanı Monolitik İzole
    Hata Tespiti
    Geniş kod tabanı nedeniyle
    daha zor
    Daha kolay, temiz stacktraceler
    Refactoring Göz korkutucu
    Sorun değil, parça parça
    gerçekleşebiliyor
    Memory Leak
    Uzun çalışma süresi nedeniyle
    sorun oluşturuyor
    Daha az zarar veriyor
    Bottleneck Çözülmesi gereken bir problem Stateless olduğu için oluşmuyor
    Birden fazla dil kullanımı Çok çok zor Mümkün
    Prototipleme Taban kurmak gerekiyor Hemen başlanılabilir
    Geliştirme anlamında
    karşılaştırmalar

    View Slide

  23. Client / Server FaaS
    Loglama
    Merkezleştirmek için Logstash
    benzeri çözümler gerekiyor
    Birçok platformda stdout yeterli
    Uygulama Sağlığı Sürekli kontrol edilmek zorunda Güvenilir
    Ölçeklenebilirlik
    Zor olabiliyor, mühendislik
    problemleriyle dolu
    Doğası gereği
    Maliyet Açık kaldığı sürece Çalıştığı kadar
    Bakım
    İşletim sistemi, bağımlılık
    güncellemeleri yapılmalı
    Yok
    Ücret Fiziksel sunucu şart
    Free tier kapsamında bedava,

    Yine de dikkatli olunmalı
    Operasyon anlamında
    karşılaştırmalar

    View Slide

  24. Nasıl ve Nerede Kullanılır?
    AWS Lambda (cloud)
    Azure Functions (hybrid)
    Apache OpenWhisk (on-premise)

    View Slide

  25. Teşekkürler
    Sorular?
    Bana twitter.com/eserozvataf veya eser.ozvataf.com
    üzerinden ulaşabilirsiniz.

    View Slide