En Çok Kullanılan Yazılım Mimarileri
- Olya Yusupova
- 16 Şub 2024
- 4 dakikada okunur

Merhaba, Bu yazımda en çok kullanılan yazılım mimarileri ve yazılım dünyasında çok tercih edilen beş mimariden bahsederek kısaca temel özellikleri hakkında bilgiler paylaşmak istiyorum. Öncelikle yazılım kodlarınızın her bölümünü en iyi mimari ile optimize etmek için tek bir sistemde birden fazla kalıbı kullanabileceğinizi hatırlatmak isterim.
En çok kullanılan yazılım mimarileri:
1. Layered (n-Tier) Architecture – Katmanlı (n-Katmanlı) Mimari.
Mimari desenlerinden en çok kullanılanı katmanlı mimaridir. n-Tier adıyla da duymuş olabilirsiniz. Sektörde bulunan bir sürü yazılım projesi bu mimari ile yapıldığı veya internette bulabileceğiniz programlama dilleri eğitimlerinde örneğine daha çok rastlandığı için yazılım uzmanları arasında çok popülerdir.

Hızlı ayağa kaldırılması gereken projeler için uygundur. Nispeten sınırlı mimari desen bilgisine sahip daha deneyimsiz geliştiriciler için de uygun denebilir. Çünkü tutorial veya kaynak bakımından daha zengindir. Sürdürülebilirlik ve test edilebilirlik standartları içermesi de daha çok tercih edilmesi nedenlerindendir.
Temelde yapılması gereken değişikliklerin uygulamanın tamamen yeniden planlanmasını gerektirebilmesi negatif yönleri arasında sayılabilir. Java EE, Express, Laravel ve daha bir çok framework bu yapı ile inşa edilmiştir. Doğal olarak bu frameworkler ile oluşturulan uygulamalar bu mimaride ortaya çıkmaktadır.
Temel olarak dört katmandan oluşmaktadır. Presentation-Application-Business(Logic) ve Data Access katmanları bulunmaktadır. Bazen üç katman da kullanılmaktadır. Presentation-Busines-Data Access’in kullanıldığı 3 katmanlı mimari bir Client-Server Mimari deseni de sayılabilir.
Örnek vermek gerekirse MVC, MVVM, VIPER yapıları bu mimari desenini kullanmaktadır.
1. Event-Driven Architecture - Olay Güdümlü Mimari
Olay odaklı mimari (EDA), bir sistemin durumundaki önemli değişikliklerin (olaylar olarak bilinir) üretimini, algılanmasını ve bu sisteme tepki göstermesini ve buna tepki verilmesini teşvik eden bir yazılım mimarisidir. Bu, birbirine kısmen bağlı yazılım bileşenleri ve hizmetleri arasında olayları ileten uygulamalar ve sistemlerin tasarımı ve uygulanması yoluyla gerçekleştirilir.

Bu mimariyi kullanan yazılımları programlama tekniğinde, olayları dinleyen fonksiyonlar yazılır. Beklenen olay numarası algılandığında, o olaya ilişkin alt işlev çağrılır. Beklenen olay karşısında bir fonksiyonun icra edilmesine olay yakalama (event capture) ya da sadece yakalama (capture) adı verilir. Beklenmeyen bir olay kodu geldiğine ise hiçbir işlem yapılmaz.
3. Microkernel Architecture - Mikro Çekirdek Mimarisi
İnternet tarayıcılarını ele aldığımızda bir çok eklenti eklenip çok fonksiyonel bir şekilde kullanılabildiklerini biliyoruz. Farklı işlemler için farklı eklentiler bulunmaktadır. Her işlem farklı çekirdek olarak düşünülür. Bu çekirdekler farklı modellerde tekrar tekrar kullanılabildiği gibi bir model de aynı anda birden fazla çekirdek kullanabilir.

Eklenti eklenebilen VSCode veya Eclipse gibi IDE’ler en iyi örnek aslında. İlk kurulduklarında kodu çalıştırmak için minimum özelliklere sahiptirler. Kodumuzun derlenirken çalışmasını istediğimiz özellikleri eklentiler yardımıyla ekleyebiliyoruz. Bu IDE’lerde dosya açar, kod yazarız ve bu esnada arka planda çalışan bir sürü mikro işlem gerçekleşir.
Katmanlı mimariden daha fazla esneklik ve modülerlik istiyorsanız iyi bir seçim olabilir. Ama performans açısından daha kötü sonuçları vardır. Performanstan ziyade sabit bir dizi çekirdek rutine ve sık sık güncellenmesi gereken dinamik bir kural dizisine sahip bir uygulama geliştiriyorsanız muhtemelen seçebileceğinin en uygun mimari bu olacaktır.
4. Microservices Architecture - Mikroservis Mimarisi
Küçük projeler her zaman en güzel yazılımlardır. Çünkü anlaması, modifiye edilmesi veya test edilmeleri her zaman daha kolaydır. Ama büyüyen yazılım projelerinde karmaşık fonksiyonlar, işlemler ve modüller işin içine girince işler zorlaşmaktadır. Sevimli olan küçük yazılımlar büyüdüğünde o kadar sevimli olmuyorlar:) Çünkü artık değişimleri kolay kabul etmezler. Değişiklikler zor ve karmaşık olacaktır.

Microservis mimarisinin amacı büyük bir program oluşturmak yerine bir sürü küçük program oluşturup sonrasında bunları tek bir projeye hizmet edecek şekilde dizayn etmektir. Böyle bir durumda yeni küçük programlar eklemek veya var olan bir tanesi üzerinde işlemler yapmak daha kolay olacaktır.
Sorumluluklarına göre ayrılan bu microservisler tek başlarına çalışabilirler. Mikro çekirdek yaklaşımıyla karıştırılmamalıdır. Burada farklı görevleri yapan farklı servisler kolayca ayrılabilirler. Örneğin Black Friday indirim günlerinde e-ticaret siteleri çok yoğun olmaktadır. Sadece o günlere özel servisler yazılabilir. Sadece ihtiyaç anında o kadar sunucu gücü gerektiren servisler çalıştırılır. Diğer günlerde daha az masraf gerektiren servislere geri dönülür. Micro çekirdek mimarisinden bir diğer farkı da tüm küçük parçaların bir araya gelip tek amaca hizmet etme gereğidir.
Tüm görevlerin kolayca ayrılmasını gerektiren bu mimaride iletişim maliyetleri artabilir. Bir web sitesinin görsellerinin çekilmesi için yazılan bir hizmet, sitenin yüklenmesine göre çok ağır çalışıyor ise sitede resimler yüklenene kadar görsellik bozulabilir. Genellikle remote çalışan uluslararası firmaların en çok tercih ettiği mimaridir. Netflix gibi firmaların tercihidir.
5. Space-Based Architecture - Uzay Tabanlı Mimari
Uzay Tabanlı Mimari iki temel bileşenden oluşmaktadır. İşlem birimi ve sanallaştırılmış bir ara katman.

İşlem birimi: Backend işlemleri, web tabanlı bileşenler ve uygulama bileşenlerini içerir. Küçük çapta projeler için tek işlem birimi yeterli olurken büyüyen projeler ile beraber işlem birimleri artabilir. İşlem birimleri kendi kendine yeten yapıları bakımından microservis mimarisini andırmaktadır.
Sanallaştırılmış ara katman: Veri senkronizasyonunu ve istekleri kontrol eder. Yapılan yazılımların en önemli bileşeni her zaman veri tabanlarıdır.
Veri tabanlarında meydana gelen herhangi bir sorun tüm uygulamanın çökmesine sebep olabilir. Uzay tabanlı mimaride dağıtılmış veri tabanı işlemleri yapılarak bu sorun giderilmeye çalışılmıştır. Dağınık veri tabanı kısmında işler birden çok sunucuya atanabildiği için bu mimari için “bulut mimarisi” terimi de kullanılır.
Kullanıcı loglarının veri tabanını çok yormaması adına RAM’den çok faydalanır. RAM’de depolanan bir çok iş bu mimari ile yapılan yazılımların daha hızlı çalışmasını sağlar. Ancak RAM veri tabanlarında işlem desteğinin zor yapısı kullanımı zorlaştırmaktadır.
Bağımsız modüllerin bağımsız test edilebilmesi mimarinin avantajları arasında sayılırken bazı analiz türleri gerektiren işlemleri içeren yazılımlar için uygun olmayabilir. Örneğin ortalama bulma gerektiren bir işlem için tüm dağıtılmış verilere erişmek gerekecektir. Böyle işlemler alt işlemlere bölünür ve düğümlere yayılır. Tüm işlemler tamamlandığında ortalamanın hesaplanması gerekir. Bu da performans sorunlarına sebep olur. Bunun dışında bireysel işlem gerektiren fonksiyonların yoğunlukta olduğu yazılımlar için çok uygundur. Bu işlemler veri tabanına ulaşmadan RAM’de halledilebildiği için işlem çok hızlı gerçekleşir. Sosyal ağlar gibi projelerde çokça tercih edilir.
Yazılıma yeni başlamış birisi şimdi “Hangi mimariyi seçmeliyim?”, “Nasıl seçim yapacağım?” gibi sorular ile karşı karşıya kalabilir. Eğer yeni başlamışsanız veya hala junior seviyesinde iseniz ilk başlangıç için katmanlı mimari desenlerinden MVC ile başlayabilirsiniz. Daha ileri aşamalarda diğer seçenekleri de öğrenip sıradaki projeniz için en doğru olanı kendiniz seçebilirsiniz.
Bu makale kapsamında en çok kullanılan mimari desenlerden 5 tanesinden bahsettim. Tabi yazılım mimarileri bunlarla sınırlı değildir. Daha bir çok mimari bulunmakla beraber bu kadar kısa anlatımlar ile bir mimariye hakim olmak mümkün değildir. Bu makale serisi bittikten sonra bu mimari desenler hakkında daha ayrıntılı yazmaya çalışacağım.
Eğer faydalı olduğuna inanıyorsanız beğenmeyi unutmayın :)
Olya Yusupova
Sürekli görüp duyup tam olarak nasıl davrandıklarını tam olarak ne işe yaradıklarını bilmediğim mimarileri derinlemesine okumak biraz ilginçti:) Emeğine sağlık
çok açıklayıcı ve güzel bir yazı olmuş, ellerine sağlık.
Ellerine sağlık çok güzel bir yazı.
Bilgilendirici bir içerik olmuş, eline sağlık.
Güzel yazı olmuş ellerine sağlık.