Yazılım Tasarım Mimarileri Serisi
1- Monolitik Mimari
Projelerimizi geliştirirken ilk olarak düşünülmesi gereken konulardan birisi projenin mimari yapısı olmalıdır. Bir binayı inşa ederken ilk önce o binayı taşıyacak yapılar yapılır, yazılım geliştirirken de projemizin ayakta kalması ve idame ettirilebilmesi için projenin büyüklüğüne göre mimari bir karar verilmelidir.
Birden fazla yazılım mimarisi vardır. Bu yazı serisinde en çok tercih edilen 3 farklı mimari tasarımı kaleme alacağım. Serinin birinci yazısı olarak “Monolitik Mimari” den başlayalım. Serinin devamında ise SOA ve Mikroservis mimarileri ile devam edeceğiz.
Monolitik Mimari Nedir?
Monolitik mimari küçük/orta düzey yazılım projelerinde en çok kullanılan ve tercih edilen yazılım mimarisidir. İsminden de anlaşılacağı üzere tek katmanlı (single-tiered) bir mimaridir. Yani projede kullanılan tüm modüller aslında birbiri ile bağımlıdır ve tüm proje tek bir kalemde derlenir. Derleme sonucunda ise çalışabilir tek bir dosya oluşmaktadır.
Aşağıda görselleştirilmiş olası bir monolitik mimari ile geliştirilmiş projenin yapısı üzerinden devam edelim:
Yukarıda görüldüğü gibi proje 3 farklı aşamadan oluşmaktadır. Kullanıcının isteklerde bulunabileceği bir istemci(reactjs, flutter, android, ios vb.), isteklere cevap vermesi için tasarlanmış, algoritmaların ve tüm işlemlerin çalıştığı sunucu(java, python, nodejs, c++ vb.) ve tüm verilerin saklandığı veritabanı(mysql, oracle, mongodb, firestore vb.).
Aşamaları inceleyecek olursak;
1- İstemci sunucuya ihtiyaç duyduğu veriyi sağlaması için istekte bulunur.
2- Sunucu gelen isteği algoritmaları ile çözümler ve geri cevap olarak göndermesi gereken veriyi, veritabanından ister.
3- Veri tabanı talep edilen veriyi sunucuya geri gönderir.
4- Sunucu veritabanından dönen veriyi istemciye gönderir.
5- İstemci gelen veriyi arayüz vasıtası ile kullanıcıya gösterir.
İşte bu yapı monolitik mimari olarak adlandırılır. Sunucu tarafında tüm işlemleri gerçekleştiren tek bir programlama dili ile yazılmış tek bir program bulunur. Bu program hata verdiğinde, çöktüğünde tüm proje erişilemez olacaktır. Fakat daha sonra değineceğim mikroservis mimarisinde ise sadece çöken modül servis sağlayamayacaktır, diğer modüller servis sağlamaya devam edecektir.
Monolitik Mimarisinin Avantajları
1- Projenin tüm modülleri tek bir katmanda bulunacağı için hata ayıklama, test ve geliştirme kolay olacaktır.
2- Tek bir proje altyapısı olduğu için, idame ettirmesi, bakımı, konfigürasyon süreçleri ve yönetimi kolaydır.
3- Projenin deployment süreci oldukça kolaydır çünkü birden fazla modülün deploy edilmesi gerekmeyecektir, tek bir deployment süreci olacaktır.
4- Her bir modülün mikroservis mimarisindeki gibi ayrı servisler olarak yazılması gerekmeyeceği için kodun kapladığı alan daha azdır, yani geliştirme süreci daha hızlı ve kolaydır.
Monolitik Mimarisinin Dezavantajları
1- Bu mimari ile geliştirilen bir proje, ilerleyen süreçlerde büyümesi ve gelişmesi durumunda çok karmaşıklaşabilir. Büyüyen kod her zaman için hata yönetimini, test yönetimini ve geliştirme sürecini zorlaştıracaktır.
2- Zamanı geldiğinde bir servisin güncellenmesi veya tamamen değiştirilmesi gerekiyorsa, tüm kodun etkilenmesi çok muhtemel olacaktır. Bu da süreci zorlaştıracaktır. Geliştirme ekibine bir maliyet olarak yansıyacaktır.
3- Birinci madde ile bağlı olarak büyüyen bir yazılımın kaynak yönetimi de önemli olacaktır. Ölçeklenebilirliği zor bir proje halini alabilir.
4- Küçük bir değişiklik yapılsa bile tüm projenin tekrar derlenmesi ve deploy edilmesi gerekecektir.
Bu yazıda kısaca, en sık kullandığımız Monolitik Mimari den bahsettik, sonraki yazılarda SOA ve Mikroservis mimarileri ile devam edeceğiz.
Herkese iyi çalışmalar.