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?
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
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
ü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
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…
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
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
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
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
• 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ı