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

Serverless PHP

Serverless PHP

Eser Ozvataf

May 04, 2019
Tweet

More Decks by Eser Ozvataf

Other Decks in Programming

Transcript

  1. PHPKonf İstanbul
    04.05.2019
    eser özvataf
    serverless php
    /eserozvataf
    /eserozvataf

    View Slide

  2. Eser Özvataf
    › Süreç Lideri @ Setur
    › Sektörde 18 Yıl İş Deneyimi
    › Açık Kaynak Ekolünden
    › E. Bilgi ve İletişim Teknolojileri
    üzerine Yüksek lisans mezunu
    /eserozvataf
    /eserozvataf

    View Slide

  3. Yazılım üzerine Twitch Yayınları
    /laroux

    View Slide

  4. Bugün bahsedeceklerim
    › Cloud
    Ne vaad etti? Bizi nereye sürükledi?
    › Serverless
    Nedir? Nasıl? Ve neden?
    › Geliştirme
    PHP’de serverless geliştirmeye nasıl başlanılır?
    4

    View Slide

  5. Cloud
    Ne vaad etti? Bizi nereye sürükledi?
    1

    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

    View Slide

  7. Cloud’un iki iddiası
    ● Pay-as-you-go (Kullandığın kadar öde)
    ● Scalability (Ölçeklenebilirlik)
    Gerçekleşen: Kullanılacak kaynağı hazırda bekletmek, daha fazla
    kaynağa ihtiyaç olduğunda bunu önceden planlamak.
    «Önümüzdeki hafta 4 çekirdekli, 16 GB RAM’e sahip 3 cihaz’a ihtiyacım
    var, Haftasonu kaynakları bir üst pakete yükseltmeliyim.»
    7

    View Slide

  8. Geliştiricinin
    Cloud
    hizmetlerin
    den gerekli
    verimi
    alması için...
    8
    DevOps
    Vendor
    Specific
    KnowHow
    Virtualization
    and
    Orchestration
    Virtual
    Private
    Cloud
    Yatay
    Ölçeklenme

    View Slide

  9. Cloud ürün sınıfları
    9
    IaaS
    Infrastructure
    Fiziksel makine/altyapı
    ihtiyaçlarını bize bırak,
    OS ve yazılımları kur.
    Platform
    Uygulamanın
    çalışacağı OS ve
    yazılımların
    kurulumunu bize bırak.
    Uygulamanı kodla.
    PaaS
    Software
    Spesifik bir işi
    tamamlamayı/hizmeti
    sunmayı bize bırak.
    Kullanıcı ol.
    SaaS

    View Slide

  10. 10
    IaaS
    Infrastructure
    Fiziksel makine/altyapı
    ihtiyaçlarını bize bırak,
    OS ve yazılımları kur.
    Platform
    Uygulamanın
    çalışacağı OS ve
    yazılımların
    kurulumunu bize bırak.
    Uygulamanı kodla.
    PaaS
    Functions
    Uygulama mimarisi
    oluşturmayı bize bırak.
    Spesifik bir işlevi kodla.
    FaaS
    Software
    Spesifik bir işi
    tamamlamayı/hizmeti
    sunmayı bize bırak.
    Kullanıcı ol.
    SaaS
    Cloud ürün sınıfları

    View Slide

  11. Serverless
    Nedir? Nasıl? Ve neden?
    2

    View Slide


  12. Tasarladığınız yazılımın fiziksel olarak bir
    sunucu tarafından çalıştırıldığı gerçeğini
    unutmak.
    Ve bu yeni gerçeklik doğrultusunda
    yazılım geliştirmek...
    12

    View Slide

  13. Serverless uygulamaların
    farklılıkları nelerdir?
    ● Kod tabanı işlevler halinde tasarlanmıştır,
    ● İşlevler stateless olur, (hafızasızlık)
    ● Belirli sınırlarda çalışırlar, (örnek: 1 dakika limiti)
    ● Mümkün olduğunca diğer cloud ürünlerini kullanırlar,
    13

    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
    CODE BASE
    Katmanlı mimari ile izole edilmiş, uygulama olarak
    paketlenip deploy edilen kod tabanının öyküsü
    IOrderRegistry

    View Slide

  15. 15
    Domain
    Customer Product Order
    Repository
    OrderRegistry
    Business &
    Implementation =
    Function PaypalPaymentGateway.placePayment
    Client Request API Gateway Function Runtime
    Response
    CODE BASE
    İşlev olarak tasarlanmış ve deploy edilmiş kod
    tabanının öyküsü

    View Slide

  16. İşlevlerle bir
    uygulama nasıl
    inşa edilebilir?
    Ufak bir mühendislik örneği üzerinden
    problemi çözmeye çalışalım.
    16

    View Slide

  17. 17
    Problem
    ● 300m2 alan
    ● 1 aile barınacak
    Çözüm
    ● Müstakil ev inşaatı
    ● Garajı bulunuyor
    ● Bahçe bulunuyor
    ● Acil durumda tahliye kolay
    ● İnşaat kısa sürüyor/teknik kolaylık
    ● Planda değişiklik yapılabilir

    View Slide

  18. 18
    Problem
    ● 300m2 alan
    ● 12 aile barınacak
    Çözüm
    ● 6 kat, 12 daireli bina inşaatı
    ● Park sorunu
    ● Bahçe yok
    ● Asansör ihtiyacı
    ● Yangın merdiveni ihtiyacı
    ● Acil durumda tahliye zor
    ● İnşaat uzun sürüyor/teknik zorluk
    ● Planda değişiklik durumunda
    sıfırdan inşaat etmek daha mantıklı

    View Slide

  19. 19
    Problem
    ● Sınırsız alan
    ● 12 aile barınacak
    Çözüm
    ● 12x Müstakil ev inşaatı
    ● 12x Garaj olacak
    ● 12x Bahçe olacak
    ● Hepsinde acil durumda tahliye kolay
    ● İnşaatlar kısa sürüyor/teknik kolaylık
    ● Hepsinin planında değişiklik yapılabilir
    Kodun yatay ölçeklenmesi

    View Slide

  20. Kod tabanını işlevlere bölmek yapısal
    olarak geliştiriciye ne kazandırıyor?
    ● Proje kodu içerisinde tek domain/kavram bulunuyor,
    anlamsal hafiflik ve konsantrasyon sağlıyor,
    ● Kolay debugging, error handling, temiz stacktrace çıktıları,
    ● Prototiplemek kolay,
    ● Planda değişiklik yapmak ve refactor kolay,
    ● İşler daha net tanımlanabiliyor, teknik yeterlilik ihtiyacı
    azalıyor,
    20

    View Slide

  21. Serverless bir cloud çözümü olarak ne
    kazandırıyor?
    ● (1) İşlev bazında kaynak harcaması nedeniyle, size ayrılan kaynak
    üzerinden değil tüketim üzerinden ödeme yapıyorsunuz.
    ● (2) Ölçeklenebilirlik sınırsız ve servis tarafından sağlanıyor.*
    ● (2) 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.
    21

    View Slide

  22. Serverless mimari anlamda ne
    kazandırıyor?
    ● Her işlev farklı bir runtime, programlama dili ile geliştirilebilir.
    ● DDD 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.
    22

    View Slide

  23. Serverless bakım tarafında ne
    kazandırıyor?
    ● 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.
    23

    View Slide

  24. Serverless geliştiricilere ne
    kazandırıyor?
    ● Kendi kompleksitesine sahip kod tabanları ile vedalaşılıyor,
    tekrardan prosedürel’e yakın işlev kodları oluşuyor.
    ● Geliştiricileri DevOps süreçlerinin içerisine çeken durumlar
    ortadan kalkıyor, tekrardan koda konsantrasyon sağlıyor.
    24

    View Slide

  25. Geliştirme
    PHP’de serverless geliştirmeye nasıl başlanılır?
    3

    View Slide

  26. PHP’de nasıl geliştiririm?
    ● Birçok FaaS / Serverless çözümü var,
    ● Platform olarak AWS, OpenWhisk v.b. kullanılabiliyor,
    ● Ara katman olarak Serverless.js ve Bref kullanılabiliyor,
    ● Örnek: https://github.com/eserozvataf/serverless-php
    26

    View Slide

  27. 27

    View Slide

  28. 28

    View Slide

  29. 29

    View Slide

  30. Serverless ve PHP uyumu?
    ● AWS’de şu anda binary dahil ederek bir destek sağlanabiliyor,
    ● Azure desteğini maalesef kaldırdı, ama bazı yollar var...
    ● Daha fazla vendor desteği şart...
    ● Mevcut vendorların da olgunlaşması gerekiyor...
    30

    View Slide

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

    View Slide