9 Ekim 2020 Cuma

Yazılım Mimarisi - Monolithic Architecture (Tek Parça/Yekpare Mimari)

Giriş
Günümüz dünyasında microservice mimarisinin o kadar fazla reklamı yapılıyor ki, sanki tüm eski mimariler ve yaklaşımlar çöpmüş gibi düşünülüyor.

Aslında bu yazılımlar da çalışıyordu ve iş görüyordu. Eğer yukarıya doğru ölçeklendirme problemi yoksa bu mimariler halen daha kullanılabilir şeyler.

Monolithic Architecture Arap Saçı (Big Ball of Mud) Değildir
Big ball of mud yazılımlar aslında mimariden bağımsızdır. Microservice mimari kullanan çamur topu yazılımlar da olabilir. Aslında Monolithic mimarinin bu keşmekeş olmasının sebeplerinden birisi global nesnelerin çok fazla kullanılması olabiliyor. İşlevsel olarak bölünmüş (modular) yapı ile bölünmemiş yapı aradaki farkı gösteren bir şekil burada. Modular olmayan yapıda bir bileşeni bir sürü farklı alt modül de kullanıyor. Bileşende yapılan bir değişiklik bir sürü yeri de etkiliyor.


Proje Yapısı
Tek parça yazılımlar genellikle şu yapıdadır. Burada catalog, delivery, order modülleri temsil eder. application altında da uygulamayı ilgilendiren şeyler vardır
myshop/
+- application/
+- catalog/
+- delivery/
+- order/
...
Microservice mimariye geçince yapı şuna benzer. Burada her service bağımsız bir uygulama gibi olduğu için kendi altında gerekli şeyleri toplamıştır. 
myshop/
+- catalog/
|  +- application/
|  +- domain/
|  +- jdbc/
|  +- rest/
|  \- spring-boot-starter/
+- delivery/
|  +- application/
|  +- domain/
|  +- events/
|  +- jdbc/
|  +- rest/
|  \- spring-boot-starter/
+- order/
|  +- application/
|  +- domain/
|  +- events/
|  +- jdbc/
|  +- rest/
|  \- spring-boot-starter/
...
Monolith Yapıdan Microservice Yapıya Geçmek
Monolith Yapıdan başka bir yapıya geçmeye başlamadan önce ilk yapılması gereken şey kimilerinin "Horizontal Layering", kimilerinin de "Domain" dedikleri yapıyı çıkartmak. Bu yapı şeklen şöyle

Dikey yapı yani Vertical Layering genellikle daha anlaşılır oluyor, ancak Domain'leri çıkartmak veya kimin kiminle yatay olarak iletişim kurduğunu çıkartmak daha zor ve her şeyden önce bu mutlaka yapılmalı
Şeklen şöyle

Ortak Kullanılan Kendi Kütüphanelerimiz - Shared Custom Library
Ortak kullanılan kendi kütüphanelerimiz olsun diyenler ve olmasın diyenler diye iki grup var.
1. Eğer varsa kütüphaneler mutlaka sürüm numarasın ile kullanılmalı
2. Eğer ortak kütüphane istemiyorsak, kütüphane kodlarını bir servise taşımak ta bir diğer çözüm

Monolith Yapıdan Microservice Yapıya Geçmek
Bu iş için Strangler (Sarmaşık) Örüntüsü kullanılabilir. Açıklaması şöyle

Hiç yorum yok:

Yorum Gönder