“Architecture has become a very slippery word in the software business. It's hard to come up with any solid definition of what it means. I see it as a fundamentally subjective term.
When people describe their software architecture they select the important parts of their systems, how these parts fit together, and the key decisions they made in designing their systems. Martin Fowler
Uygulama Mimarisi Nasıl Tarifleyebiliriz? •Tanımı muğlaktır*. •Uygulamanın kuşbakışı* haritasıdır. •Uygulamaya ait parçaları soyut ele alıp, sistem içerisindeki davranışlarını belirler. •Uygulama için kilit noktadaki kararları etkiler. Örneğin uygulamanın kullanacağı veritabanı tipi.
Restoranlar Yemekler Siparişler Kullanıcılar Domain (Kavramlar, Nesneler) Application (İş akışları) Restoran’dan Sipariş Verme Kullanıcı Olarak Kaydolma Geçmiş Siparişi Yorumlama Infrastructure (Altyapı bağlantıları) Veritabanı -> MongoDB Arama -> ElasticSearch Presentation (Kullanıcı Arabirimi) iOS Mobil Client Android Mobil Client React Web Client Örnek Uygulama YemekSipariş Projesi Uygulama Mimarisi
Örnek Uygulama Presentation Katmanı iOS Mobil Client Android Mobil Client React Web Client Kullanıcı Web Server Sunucu (Server) İstemci (Client) Uygulama Front-End Kodu YemekSipariş Projesi Client/Server Mimari Uyarlaması - 1 Uygulama Prosesi* Uygulama Back-End Kodu
Örnek Uygulama Web Server Sunucudaki Uygulama Prosesi Application Katmanı* Restoran’dan Sipariş Verme Kullanıcı Olarak Kaydolma Geçmiş Siparişi Yorumlama Request Router Restoranlar Yemekler Siparişler Kullanıcılar Domain Katmanı MongoDB Bağlantısı Infrastructure Katmanı YemekSipariş Projesi Client/Server Mimari Uyarlaması - 2
Kontrol Listemiz • Uygulama gereksinimleri nelerdir, nasıl bir sunucuda çalışacak? • Uygulama hangi platformda, hangi işletim sistemiyle çalışacak, nasıl bir kurulum gerekecek? • Sunucudaki uygulama çalışmayı sonlandırır veya bir problem yaşarsa ne olacak? • Sunucudaki uygulamaya karşılayabileceğinden fazla istek gelirse ne olacak? • Uygulamanın kapasitesini arttırmak istersek nasıl hareket edeceğiz? • Uygulamanın canlı ortama aktarımı ve güncellemeler nasıl olacak?
Cloud Computing Vendor Specific KnowHow Virtualization and Orchestration Virtual Private Cloud Scalability FaaS da çoğumuzun hayatına cloud ile birlikte girdi
Nasıl tasarlanmalı? •Kod tabanı işlevler halinde hazırlanır. •Hangi olay sonucu tetikleneceği seçilir. •HTTP Request •Timer •Diğer eventler (kuyruğa bir şey eklendi) •Stateless olmalıdır. •Sınırların farkında olunmalı (örneğin 1 dakika limiti)
Örnek Uygulama Presentation Katmanı iOS Mobil Client Android Mobil Client React Web Client API Gateway Uygulama Front-End Kodu YemekSipariş Projesi FaaS Mimari Uyarlaması - 1 İşlev Uygulama Back-End Kodu Kullanıcı İşlev Listesi Restoran’dan Sipariş Verme Kullanıcı Olarak Kaydolma Geçmiş Siparişi Yorumlama İşlevin yüklü olduğu bir hedef
Örnek Uygulama İşlevin yüklü olduğu hedef “Restoran’dan Sipariş Verme” İşlevi Application Katmanı İşlev Kodu Restoranlar Yemekler Siparişler Kullanıcılar Domain Katmanı MongoDB Bağlantısı Infrastructure Katmanı YemekSipariş Projesi FaaS Mimari Uyarlaması - 2
Client / Server FaaS Kod Tabanı Monolitik İzole Hata Tespiti Geniş kod tabanı nedeniyle daha zor Daha kolay, temiz stacktraceler Refactoring Göz korkutucu Sorun değil, parça parça gerçekleşebiliyor Memory Leak Uzun çalışma süresi nedeniyle sorun oluşturuyor Daha az zarar veriyor Bottleneck Çözülmesi gereken bir problem Stateless olduğu için oluşmuyor Birden fazla dil kullanımı Çok çok zor Mümkün Prototipleme Taban kurmak gerekiyor Hemen başlanılabilir Geliştirme anlamında karşılaştırmalar
Client / Server FaaS Loglama Merkezleştirmek için Logstash benzeri çözümler gerekiyor Birçok platformda stdout yeterli Uygulama Sağlığı Sürekli kontrol edilmek zorunda Güvenilir Ölçeklenebilirlik Zor olabiliyor, mühendislik problemleriyle dolu Doğası gereği Maliyet Açık kaldığı sürece Çalıştığı kadar Bakım İşletim sistemi, bağımlılık güncellemeleri yapılmalı Yok Ücret Fiziksel sunucu şart Free tier kapsamında bedava, Yine de dikkatli olunmalı Operasyon anlamında karşılaştırmalar