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

Hangi ihtiyaçlarla serverless'a yöneldik?

Hangi ihtiyaçlarla serverless'a yöneldik?

Eser Ozvataf

October 21, 2017
Tweet

More Decks by Eser Ozvataf

Other Decks in Programming

Transcript

  1. Hangi İhtiyaçlarla Serverless’a
    Yöneldik?
    Eser Özvataf


    https://eser.ozvataf.com

    @eserozvataf

    View Slide

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

    View Slide

  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?

    View Slide

  4. Bir İhtiyaca Karşılık Çözümler
    En uygun çözüme giderken sorular yanıtlamamız gerekecek

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  8. İhtiyaçları Kim Belirler?
    Diğer Paydaşlar
    Product Owner*
    * Tüm paydaşlar Serverless için hazır mı?

    View Slide

  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

    View Slide

  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.

    View Slide

  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…

    View Slide

  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

    View Slide

  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

    View Slide

  14. Nihai amaç 12 ailenin
    barınması…

    Peki ya bu problemi
    çözebilmemiz için bize
    sınırsız alan sağlanabilse?

    View Slide

  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

    View Slide

  16. Günün sonunda…


    Neye ihtiyaç vardı?
    Serverless tercihi bizlere
    ne sağladı?

    View Slide

  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ı

    View Slide

  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

    View Slide

  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

    View Slide

  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ı


    View Slide

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

    View Slide

  22. Sorular?

    View Slide

  23. Teşekkürler
    Eser Özvataf


    https://eser.ozvataf.com

    Twitter: @eserozvataf
    açıkkaynak


    http://acikkaynak.info

    Twitter: @acikkaynakinfo

    View Slide