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
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.
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
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
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
• 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?
bırak. OS ve yazılımı kur. Platform Uygulamanın çalışacağı OS ve yazılımların kurulumunu bize bırak. Uygulamanı kodla. Software Spesifik bir işi tamamlamayı/hizmeti sunmayı bize bırak. Kullanıcı ol.
bize bırak. OS ve yazılımı kur. Platform Uygulamanın çalışacağı OS ve yazılımların kurulumunu bize bırak. Uygulamanı kodla. Software Spesifik bir işi tamamlamayı/hizmeti sunmayı bize bırak. Kullanıcı ol. Functions Uygulama mimarisi odaklı kaygıların çözümünü bize bırak. Spesifik bir işlevi kodla.
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)
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
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
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
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