Hangi ihtiyaçlarla serverless'a yöneldik?

Hangi ihtiyaçlarla serverless'a yöneldik?

D518bd56413643cbed1c8a02c25898cc?s=128

Eser Ozvataf

October 21, 2017
Tweet

Transcript

  1. Hangi İhtiyaçlarla Serverless’a Yöneldik? Eser Özvataf 
 https://eser.ozvataf.com @eserozvataf

  2. Tanışalım açıkkaynak http://acikkaynak.info

  3. Bir İhtiyaca Karşılık Çözümler Yazılım geliştirmeye başlamak için hangi programlama

    dilini öğrenmeliyim? Soru: - Python - JavaScript - Java - C# - C - Ruby - PHP - Objective-C - C++ - vs… Yanıt Kümesi: Bizim senaryomuz için en uygun çözüm hangisi?
  4. Bir İhtiyaca Karşılık Çözümler En uygun çözüme giderken sorular yanıtlamamız

    gerekecek
  5. Peki ya gerçek hayatta projelendirdiğimiz senaryolar? Çok farklı değil…

  6. Proje İhtiyaçlarına Karşılık Çözümler Çözüm A: Client/Server Proje Çözüm B:

    Serverless Proje “Kurumsal Çözüm” “Ürün Geliştirme” Aynı yıl geliştirilmiş ve müşteriye ulaştırılmış iki farklı proje Delivery Management • Takım Liderlerinden işe uygun niteliklerde yazılımcı kaynağını temin edilmesi
 • Projenin müşteriye ulaştırılmasına kadar olan süreçte teknik sorumluluğu
  7. Proje İhtiyaçlarına Karşılık Çözümler Çözüm A: Client/Server Proje Çözüm B:

    Serverless Proje “Kurumsal Çözüm” “Ürün Geliştirme” Önceden Planlama, UML Şemaları Agile Metodolojisi DDD, Monolithic mimari Microservisler Müşteriye ait DataCenter Amazon Web Services .NET Core ve yeni nesil Microsoft çözümleri node.js SQL Server + ORM MongoDB Atlas + ODM REST API + MVC Client Uygulamaları REST API + SPA Client Uygulamaları Yoğun Yazılım Prensipleri ve Desenleri Defansif Programlama .NET’e hakim, senior developerlar JavaScript’e aşina dev. + CodeReview Aynı yıl geliştirilmiş ve müşteriye ulaştırılmış iki farklı proje
  8. İhtiyaçları Kim Belirler? Diğer Paydaşlar Product Owner* * Tüm paydaşlar

    Serverless için hazır mı?
  9. Çözüm B (ürün.com) için İhtiyaçlar • Multi-tenancy modelinde SaaS bir

    ürün olacak
 (örnek: Slack, Gmail)
 • Cloud’da çalışacak
 • Ölçeklenme sorunu olmayacak ama kapasite tahmini yok
 • Bakım gereksinimi olmayacak
 • İleride başka yazılımcılarla devam edilebilecek Biz bu projeyi “serverless” yapmalıyız
  10. Serverless (FaaS) Ne Demek? 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.
  11. Serverless Geliştirme Nasıl Yapılır? •Kod tabanını Functions / İşlevler ile

    tasarlamak
 •Stateless İşlevler
 •Sınırları bilmek (1 dakika limiti)
 •Mümkün oldukça Cloud ürünlerinden yararlanmak Tüm Bunların Sonucunda Kodunuz Yatay Ölçekleniyor…
  12. Tek Daireli Müstakil Ev 1 aile barınabilir Garajı ve bahçesi

    var Afet Durumlarında: Kolay Tahliye
 İnşaası: Basit Planda Değişiklik Yapmak: Kolay Çift Katlı, 4 Daireli Bina 4 aile barınabilir Garaj yok, ortak bahçe Afet Durumlarında: Önlemler Alınmalı İnşaası: Orta zorluk Planda Değişiklik Yapmak: Daha zor 6 Katlı, 12 Daireli Bina 12 aile barınabilir Garaj yok, bahçe yok Afet Durumlarında: - Riskli, Yangın Merdiveni Gerekiyor - Alt Katlarda Oluşacak Sorun Üst Katları Etkiler İnşaası: Zor Planda Değişiklik Yapmak - Yeni Yapı Daha Ucuz - Destek Kolonunun Yerini Değiştiremezsiniz Kodun / işlevlerin dikey ölçeklenmesi
  13. Tek Kavrama Sahip Kod Tabanı: Dizi 1 kavram barınabilir, çeşitli

    işlevler olabilir
 Örnek: “Yayınlanmakta olan dizileri listele” Acil Durumlarda: Kolay Debug
 İnşaası: Basit Planda Değişiklik Yapmak: Kolay Birden Fazla Kavrama Sahip Kod Tabanı: Dizi, Kullanıcılar, Takip 3-4 kavram barındırabilir, bunların çeşitli işlevleri var Örnek: “Kullanıcılar dizileri takip ederler, özel bir liste alırlar”
 Acil Durumlarda: Önlemler Alınmalı İnşaası: Orta zorluk Planda Değişiklik Yapmak: Daha zor Çok Fazla Kavrama Sahip Kod Tabanı: Diziler, Sezonlar, Kullanıcılar,
 … Abonelik, Bildirimler, Arkadaşlar (trakt.tv) Çok fazla kavram barınabilir Acil Durumlarda: - Riskli, loglama ve test mutlaka gerekli - Sistem stabilitesi bozulursa (memory leak gibi durumlar) tüm sistemi etkiler İnşaası: Zor Planda Değişiklik Yapmak - Yeni bir kod tabanı inşaa etmek daha maliyetsiz olabilir - Her istediğiniz konuda refactor yapamazsınız Kodun / işlevlerin dikey ölçeklenmesi
  14. Nihai amaç 12 ailenin barınması…
 Peki ya bu problemi çözebilmemiz

    için bize sınırsız alan sağlanabilse?
  15. Tek Daireli Müstakil Ev 1 aile barınabilir Garajı ve bahçesi

    var Afet Durumlarında: Kolay Tahliye İnşaası: Basit Planda Değişiklik Yapmak: Kolay 1 2 3 4 5 6 7 8 9 10 11 12 12 X Kodun / işlevlerin yatay ölçeklenmesi 13 X 14 X … Tek Kavrama Sahip Kod Tabanı 1 kavram barınabilir, çeşitli işlevler olabilir
 Örnek: “Yayınlanmakta olan dizileri listele” Acil Durumlarda: Kolay Debug
 İnşaası: Basit Planda Değişiklik Yapmak: Kolay
  16. Günün sonunda…
 
 Neye ihtiyaç vardı? Serverless tercihi bizlere ne

    sağladı?
  17. Ürünleşmek Belirli bir kalite standartı sağlandı •Kullanıcı deneyiminin performans sorunlarıyla

    baltalanmadığı %99.9 uptime’a sahip bir yapı
 •Kapasite limitinin olmadığı, kapasite arttırılması için beklenilmediği bir yapı
  18. Bakımdan Kurtulmak Operasyon kaynaklı zahmet ve maliyeti azaltıldı •Containerlarla çalışsanız

    dahi sorununuz olan; OS ve Runtimelar için güvenlik açığı ve güncelleme takibi yapılmıyor
 •Bakıma ayrılan personel ve kaynak maliyeti yok
  19. Otomatik Ölçeklenme Sağlamak Ölçekleme problemleri düşünülmemeye başlandı •Development ve Test

    süreçlerinin yük hesapları ve dar boğazlarını hesaplamak zorunda kalmadık
 •Erken optimizasyon yerine agile pratiklerine yaklaştık
 •En kötü senaryoda dahi kullanıldığı kadar ödenecek, idle kalan sunucuların elektrik faturasını ödenmeyecek
  20. DevOps’a Geri Dönüş DevOps tasarlamak yerine ürüne ve koda odaklanmak

    • Farklı OS, Runtime tepkilerinin olmaması
 • Process çıktılarının loglarını cloud provider sağlanması
 • Temiz Stack Trace’ler
 • Her işlevin farklı runtime ile çalışabilir/değiştirilebilir olması

  21. Demo https://github.com/eserozvataf/webend-demo

  22. Sorular?

  23. Teşekkürler Eser Özvataf 
 https://eser.ozvataf.com
 Twitter: @eserozvataf açıkkaynak 
 http://acikkaynak.info


    Twitter: @acikkaynakinfo