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. 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?
  2. 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
  3. 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
  4. Çö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
  5. 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.
  6. 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…
  7. 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
  8. 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
  9. 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
  10. Ü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ı
  11. 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
  12. 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
  13. 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ı