Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

“ 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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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ı

Slide 11

Slide 11 text

Serverless Nedir? Nasıl? Ve neden? 2

Slide 12

Slide 12 text

“ 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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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ü

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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ı

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

27

Slide 28

Slide 28 text

28

Slide 29

Slide 29 text

29

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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