top of page

Web Uygulama Mimarileri: Blockchain, Serverless, Microservices, Monolith


Mobil uygulamalar, web siteleri ya da genel olarak internet ile iletişim kuran programlar, hangi katmanlar halinde çalışırlar basit bir şekilde anlamaya çalışacağız. Web uygulamalarının nasıl tasarlanacağı, nasıl yapılandırılacağı ve nasıl dağıtılacağına dair bilgi edineceğiz.


Kişisel fikrim; bir yazılım geliştirici olmadan önce topolojik taraf hakkında bilgi sahibi olmak, öğrenme sürecinin ciddi şekilde hızlanmasını sağlayacaktır. Bu bilgiler ile birlikte uygulamaların tasarımı, geliştirilmesi ve dağıtımı sırasında karşılaşılabilecek engelleri önceden tespit etmenize ya da sorunları gidermenize yardımcı olacaktır. Ayrıca performans, ölçeklendirilme ve kullanılabilirlik konusunda topolojik detaylara ihtiyaç duyacaksınız. Güvenlik açısından bakıldığında ise atak yüzeylerini tanıma imkanı bulacaksınız.

Monolithic Mimari



Monolithic Basit Web Uygulama Mimarisi



Monolithic mimari, bir web uygulamasının tüm fonksiyonlarının bir arada bulunduğu basit yapılardır. Monolithic web uygulamaları, temel olarak birbirleri ile bağlantılı olan şekildeki katmanlardan oluşur.


Kullanıcının etkileşime girdiği frontend ve uygulamanın çalışma mantığını ve altyapısını içeren backend olarak 2 parçada değerlendirebiliriz. Kod parçacıkları, medya dosyaları dosya sisteminde yer alır. Veriler ise belirli formlarda veritabanı içerisinde bulunur. Programların çalıştırıldığı ortam, dosya servisleri, veritabanı servisleri tek bir sunucu üzerinde bulunur.


Bir web sunucusuna erişim talebi gönderdiğinizde, sunucu size hangi frontend dosyası ile cevap vereceğini bilir, buna karşılık yüklenen sayfa için frontend backend’e isteklerde bulunur. Backend isteklere cevap verir. Bu istekler çıktı olarak frontend’ten kullanıcılara sunulur.




Microservices Mimari

Microservices Mimari Web Uygulama Örneği


Microservices mimarisi, bir yazılım sisteminin büyük parçalarını küçük, özelleştirilmiş servislerden oluşan bir tasarım şekline böler. Bu tasarım, yazılımın hızlı ve esnek bir şekilde geliştirilebilmesine ve ölçeklendirilebilmesine yardımcı olur, aynı zamanda çoklu ortamda (örneğin, mobil cihazlar, masaüstü bilgisayarlar ve web tarayıcıları gibi) çalıştırılabilmesine olanak verir. Microservices mimarisi, servisler arasındaki iletişimi API (Application Programming Interface) aracılığıyla gerçekleştirir, bu sayede bir servisin hatalı çalışması diğer servislerin çalışmasını etkilemez. Servisler farklı programlama dilleriyle yazılabilir ve farklı ortamlarda (örneğin, farklı sunucularda veya bulut ortamlarında) çalıştırılabilir. Microservices mimarisi, doğada bir ekosisteme benzetilebilir, çünkü farklı parçaları oluşturan servisler bir arada bulunurlar ve birbirleriyle etkileşim halindedirler.


Örneğin, bir e-ticaret uygulaması, ürünlerin listelenmesi, ödeme işlemlerinin gerçekleştirilmesi ve müşteri hizmetleri gibi farklı işlevleri olan servisleri içerebilir. Bu servisler, uygulamanın farklı parçalarının geliştirilmesi ve bakımı için farklı takımlara dağıtılabilir ve her bir takımın sadece kendi servisiyle ilgilenmesi gerekir. Bu, uygulamanın hızlı bir şekilde geliştirilebilmesine ve bakımına yardımcı olur ve aynı zamanda takımlar arasında işbirliğini ve koordinasyonu kolaylaştırır.


Serverless Mimari

Serverless Mimari Web Uygulama Örneği


Serverless, bir yazılım sisteminin çalışması için gerekli olan sunucuların kullanımını azaltır ve yerine, bir işlev çağrısına dayalı bir şekilde ölçeklendirilebilir işlemler sağlar. Bu sayede, yazılım sisteminizin işlevleri için sunucuların önceden yapılandırılması, yönetimi ve bakımı gerekmez, bu da daha az maliyet ve daha az yönetim gerektirir.


Örneğin yukarıdaki örneğe baktığımızda, e-ticaret uygulamasında arama ve satın alma özellikleri farklı birer fonksiyon olarak çalıştırılmış. Örneğin siz bir Python kod parçacığı şeklinde aranan string değerini ürün veritabanında arayabilir, Frontend’ten gelen bir API isteği ile istenen cevabı dönebilirsiniz.


En popüler serverless servisleri şu şekildedir: AWS Lambda, Azure Functions ve Google Cloud Functions.


Amazon Web Services (AWS), AWS Lambda servisiyle desteklediği yazılım dilleri arasında JavaScript (Node.js), Python, C#, Go, PowerShell, Ruby, C++ ve Java bulunur. Bu yazılım dillerinin yanı sıra, AWS Lambda servisi, Go ve Java dillerine özel olarak optimize edilmiş runtime'lar sunar.


Microsoft Azure, Azure Functions servisiyle desteklediği yazılım dilleri arasında C#, F#, JavaScript, Python ve Java bulunur. Ayrıca, Azure Functions, .NET Core, .NET Framework ve Java runtime'larını destekler.


Google Cloud, Google Cloud Functions servisiyle desteklediği yazılım dilleri arasında JavaScript (Node.js), Python, Go ve Java bulunur. Ayrıca, Google Cloud Functions, çeşitli runtime'ları destekler, bu runtime'lar arasında Node.js, Python ve Go bulunur.


Bu üreticilerin serverless servisleri, destekledikleri yazılım dillerine özel olarak optimize edilmiş runtime'lar sunarak, bu dillerde yazılmış kodların daha hızlı ve daha verimli bir şekilde çalıştırılmasını sağlar. Ancak bu servisler aynı zamanda, çeşitli runtime'ları desteklediğinden, diğer yazılım dilleriyle yazılmış kodları da çalıştırabilirler. Bu sayede, istediğiniz yazılım dilini kullanarak serverless uygulamalar oluşturabilirsiniz.



Blockchain - Web 3.0 Mimarileri



Blockchain Altyapısında Çalışan Bir Web Uygulama Mimarisi


Web 3.0, bir takım teknolojilerin bir araya gelmesiyle oluşan bir kavramdır ve bu teknolojiler arasında blockchain teknolojisi de bulunmaktadır. Web 3.0 uygulamaları, internetteki verilerin ve bilginin daha etkin bir şekilde paylaşılmasını, daha güçlü, esnek ve daha güvenli bir şekilde depolanmasını amaçlamaktadır.


Blockchain teknolojisi, web 3.0 uygulamalarının geliştirilmesinde önemli bir role sahip olmaktadır. Blockchain, bir veri yapısıdır ve birçok farklı bilgisayar tarafından paylaşılan bir veri defteridir. Bu veri defterinde, birçok farklı bilgisayar tarafından yapılan işlemler kaydedilir ve bu işlemler birbirleriyle ilişkilidir. Uygulama katmanlarından biri olarak değerlendirdiğimizde güvenli bir veritabanı gibi düşünebiliriz.


Smart Contracts, Blockchain teknolojisi üzerinde çalışan yazılımlardır ve bu yazılımlar sayesinde, blockchain ağı üzerinde otomatik olarak işlemler gerçekleştirilmesini sağlar. Programlanan koşullar yerine getirildiğinde işlemleri otomatik olarak gerçekleştirir ve bu işlemler için merkezi bir otoriteye ihtiyaç duymaz.


Web 3.0 uygulamaları, çeşitli alanlarda kullanılabilir. Örneğin, bir müşteri ile bir şirket arasında yapılan tüm işlemlerin kaydını tutan bir uygulama, müşterilerin alışveriş geçmişlerinin doğru bir şekilde tutulmasını ve şirketlerin müşteri ilişkilerini düzenleme konusunda yardımcı olabilir. Benzer şekilde, bir sağlık kuruluşu tarafından hastaların sağlık verilerinin tutulması için bir uygulama da geliştirilebilir. Bu uygulama sayesinde, hastaların sağlık verileri doğru bir şekilde paylaşılır ve depolanır, bu sayede de sağlık hizmetleri daha etkin bir şekilde sunulabilir.


Yukarıdaki topolojiye bakarak toparlarsak eğer, Web 3.0 uygulamaları Frontend üzerinden yapılan istekleri merkezi olmayan bir Backend’den karşılar. Ethereum altyapısı örneğinde, Smart Contract’lar yani Backend kodları, EVM’ler üzerinde çalışır. Veriler blockchain’de sağlıklı bir şekilde barındırılır.



Sonuç Olarak: Gelişmiş ve Modern Bir Web Uygulaması Neler İçerir?


Modern ve karmaşık uygulamalar genellikle bu mimari konseptleri hibritleyerek beraber kullanır. Aşağıdaki diyagramda adım adım hem bazı terimlerden hem de o aşamada neler yapıldığından bahsedeceğiz.




Modern ve Gelişmiş Bir Uygulama Mimarisi


1. DNS İsteği

DNS isteği yapıldı. Browser hangi IP’ye sahip sunucudan veri çekeceğini artık biliyor.


DNS (Domain Name System) yazdığımız domain adını mesela Google.com’un hangi IP’den cevap vereceğini çözmemize yardımcı olan bir sistemdir. Bu şekilde, bir kullanıcı tarafından gönderilen bir istek belirli bir sunucu tarafından alınır. DNS'i İnternet web siteleri için bir telefon rehberi gibi düşünebiliriz.


2. Load Balancer

LB tarafından ilk istek karşılanır. Kullanıcının hangi coğrafyadan geldiğine göre ya da bulunduğu yerdeki trafik yoğunluğuna göre en uygun web serveri belirleyip, kullanıcının isteğini doğru sunucuya yönlendirir.


3. Web Uygulama Sunucuları

Arkaplanda Microservices ya da Serverless yapılar bulunabilir. Herşeyin toparlandığı ana uygulama sunucusudur. İsteğe cevap verir.


4. Veritabanı Sunucuları

E-ticaret sitesi örneğini ele alalım. Ürünlerin, kullanıcı bilgilerinin, sayfa içeriklerinin bulunduğu yer. Çok farklı yapılarda bulunabilir, tek bir yerde ya da sunucu cluster’ı olarak ya da SaaS dediğimiz modelde hizmet olarak alınabilir.


AWS içerisinde 15 adet farklı amaçlara yönelik veritabanı servisi bulunuyor.


5. Cache’leme

Diyelim ki kullanıcı e-ticaret sitesinde boks eldiveni arattırdı ve karşısında ona boks eldiveni ile ilgili ürünler getirildi. Bu isteği belirli zaman dilimi içerisinde tekrar yaparsa, tekrar sunucu kaynaklarını sorgu yapmakla yormayalım istediğimiz zaman, hazır olarak önceki sorgusu kullanıcıya cache’lenmiş çıktı sunulur.


Çeşitli konularda cache’leme olabiliyor. Kullanıcının browser’ına bazı içerikler geçici olarak da yüklenebilir.


6. İş Akışlar ve Yönetilmesi

Diyelim ki uygulamanızda çok fazla trafik var. Bazı sorgular çok performans harcayacak ama önem derecesi düşük sorgular, bazıları ise az kaynak tüketecek ama kritik düzeydeki sorgular. Bunu yönetip, yüksek önemli işleri önceliklendirmeyi yapmanız gerekecektir.


Örnek servis: RabbitMQ.


7. Arama Sorguları

Modern uygulamalar arama sorgularına hızlıca cevap verebilmek için dışarıdan SaaS hizmeti de alabilirler ya da gelişmiş AWS Elasticsearch gibi bir altyapı da kullanabilirler.


Örnek SaaS servis: Algolia


8. Microservices ya da Serverless Fonksiyonlar

E-ticaret örneğinde satın alma işlemleri bir mikroservisin çalıştığını düşünelim. Ama aynı zamanda araya Fraud Detection için bir fonksiyon koyulduğunu düşünelim. Mikroservis ya da serverless fonksiyon arka planda bir veritabanına bağlanıp sorgu yapabilir de yapamayabilir de.


9. Data Warehouse İşlemleri

Kullanıcının işlemlerinden, davranışlarından, sorgularından toplanılan veriler başka işlemlerde kullanılmak üzere toplanabilir. Örneğin her kullanıcıya kendi ilgi alanlarına ait ürünlerin çıkarılması buralardaki verilerden çalışılarak yapılabilir. İstatistiki analizler buradaki veriler ile yapılabilir, yapay zekalar eğitiler gelişmiş fonksiyonlar sağlanabilir.


10. Cloud Depolama

Cloud’ta çeşitli veriler kullanılma sıklığına göre sınıflandırılarak depolanabilir. Örneğin uygulamanın logosu, ürün fotoğrafları sürekli olarak kullanılacaktır. Farklı lokasyonlardaki isteklere en hızlı cevap verebilecek şekilde çoğaltılıp saklanabilir.


Bunların yanında yedekleme dosyaları gibi nadiren ihtiyaç duyulan veriler de farklı bir planda depolanabilir. Cloud servis sağlayıcıları kullanım sıklığına göre farklı depolama servisleri verir. Örneğin senede 3-4 defa ihtiyaç duyulan 100 GB büyüklüğündeki dosyayı saklama bedeli, sürekli ihtiyaç duyulan 1 GB büyüklüğündeki dosyayı saklama bedeli ile aynı olabilir.


11. CDN - Content Delivery Network

Şöyle ki, uygulama içerisindeki resim video gibi büyük boyutlu dosyalar CDN sunucularından kullanıcıya sunulabilir. Böylece ana web sunucunuzu resim dosyasını yayımlamak için yormamış olur aynı zamanda kullanıcınıza daha hızlı bir deneyim sunmuş olursunuz.


Örneğin büyük bir e-ticaret sitesine girdiğinizde resim dosyalarını yeni sekmede açmayı deneyin. Muhtemelen resimler sitenin bulunduğundan daha farklı bir URL’de açılacaktır.


Kommentare


©2022 by msdoschip.

bottom of page