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

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

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.

Eser Ozvataf

November 23, 2019
Tweet

More Decks by Eser Ozvataf

Other Decks in Technology

Transcript

  1. Yeni Başlayanlar için
    Fonksiyonlar(),
    Yeniden Başlamak için
    Fonksiyonlar()
    GDG DevFest İzmir 2019
    23.11.2019

    View Slide

  2. Tanışalım
    Eser Özvataf
    twitter: @eserozvataf
    twitch: twitch.tv/laroux
    2

    View Slide

  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

    View Slide

  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

    View Slide

  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ü

    View Slide


  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  10. Cloud’un
    Serverless
    kullanımı
    Gerçek “kullandığın kadar öde” ve
    “ölçeklenebilirlik” ulaşılamaz mı?
    FaaS ile ideale yaklaşabiliyoruz.
    10

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  20. FaaS bir platformda
    geliştirme yapmak
    Geliştirmeye nasıl başlanılır?
    ?

    View Slide

  21. 21

    View Slide

  22. 22
    Serverless framework kurulumu

    View Slide

  23. 23

    View Slide

  24. 24

    View Slide

  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

    View Slide

  26. Serverless
    geliştirme deneyimi
    ● Web: https://acik-kaynak.org
    ● GitHub: https://github.com/acikkaynak
    ● Telegram: http://t.me/acikkaynak
    26

    View Slide

  27. 27
    Teşekkürler!
    Sorular?
    Bana twitter.com/eserozvataf ve eser.ozvataf.com üzerinden ulaşabilirsiniz.

    View Slide