Monolitik Mimari vs Microservice Mimari
Merhaba, bu yazımda Monolitik Mimari’nin ne olduğundan ve zamanla Microservice Mimari’ye evrilmesinden bahsedeceğim.
Monolitik Mimari
Projenin tek bir bütün altında bulunması diyebiliriz. Daha gerçekçi bir biçimde bahsetmek gerekirse, Monolitik Mimari
, Hepimizin Katmanlı Mimari olarak bildiği çalışma mantığının uygulanmasıdır. Zamanla bu Katmanlı Mimari bizlere yetmemeye başladı. Bunun sonucunda yukarıdaki görselde görüldüğü gibi iş katmanı(Business Layer) ve veri erişim katmanı(Data access Layer) küçük parçalara ayrılarak Microservice Mimari
yapısı ortaya çıktı. Söz konusu sistemin herhangi bir noktasında yaşanabilecek bir hata, insan müdahalesi olmadan onarılamıyor, donanım ya da kod hatası durumlarında uzun süreli kesintiler beraberinde geliyordu. Öte yandan, uygulama daha çok kişi tarafından kullanılmaya başladığında ve daha çok performans gerektiğinde, söz konusu yapıyı ölçeklendirmek için yeni bir sunucu satın almak, tek bir sunucu üzerinde çalışan Monolitik bir uygulama yapısını yeniden kurmak ve kullanıcıların bir kısmını yeni sisteme aktarmak gerekiyordu. Tüm bunlar, Monolitik Mimari
’nin daha kompleks ve çevikliğe daha çok ihtiyaç duyan modern uygulamaların ihtiyaçlarını karşılamamasıyla sonuçlandı.
Örneğin bir web sitesi için sunucu(Hosting) kiralayabiliriz, bu sunucunun çalışma mantığı Monolitik Mimari
’ye dayanıyor. Tek bir sunucudan web sitemize ulaşmak isteyen kullanıcılara buradan veri aktarımını sağlıyoruz.
Microservice Mimari
Microservice Mimari
için kısaca projemizi küçük parçalara ayırma olarak söyleyebiliriz. Projemizi küçük parçalara ayırıyoruz nedir bu küçük parçalar. Aşağıdaki görsel tam da buna yönelik.
Yukarıdaki görselde bulunan bileşenler;
“Client apps” view kısmı kullanıcının Microservice Mimarisini
, Monolitik bir şekilde gördüğü kısım. “Docker Host” Docker’ın uygulamayı kaldırdığı Katmanlı Mimaride Business Layer ve Data Access Layer’ın bulunduğu kısım.
En üstte kırmızıyla gördüğümüz kısım “Identity Microservice” kullanıcı ile ilgili bilgilerin SQL Database de tutulduğu kısım. Bu bilgiler kullanıcı adresi, kimlik bilgisi, kredi kartı bilgisi gibi özel bilgilerin bulunabileceği kısım.
Bir alt tarafında lacivert renkte bulunan “Catalog Microservice” kısmında yine aynı biçimde SQL Database de ürün bilgilerimiz bulunmakta.
Yeşil olan “Ordering Microservice” kısmında ise sipariş bilgileri alınmakta. Bu kısımda da örnekte görüldüğü üzere SQL Database kullanılmakta.
Mavi renkte olan “Basket Microservice” kısmında kullanıcıların oluşturduğu sepete ekle, sepetten çıkar kısmı bulunmakta. Bu kısımda sürekli bir hareketlilik bulunmakta. Bu sebepten dolayı SQL Database değil, NOSQL Database olan Redis kullanılmakta. Redis’in diğer NOSQL Databaselerden farkı ise verilerini cache de tutması.
Son olarak projemizin mesajlaşma ve mail gönderme gibi iş akışları için en sağ tarafta bulunan RabbitMQ veya Azure Service Bus teknolojilerinden birini kullanabiliriz.
Örnek
Mikroservice Mimarisi
’nin e-ticarette kullanımına dair bir örnek verelim. E-ticaret platformumuz ürün arama, ürün katalogu, alışveriş sepeti, yönetici arayüzü, ödeme ve sipariş değerlendirme olmak üzere 6 modülden oluşsun. Mikroservice Mimarisi
’nde tüm bu modüller küçük, bağımsız ve birbiriyle bağlantılı yazılım paketleri olarak çalışır. Her bir modülün geliştirme ve dağıtım süreçleri, sistemin genel işleyişi etkilenmeden gerçekleştirilebilir.
Mikroservis Mimarisinin Özellikleri
- Birbirinden ayırdığımız bu küçük uygulama parçaları, genel bir hizmette, büyük bir uygulamada birleşiyor ve son kullanıcının karşısında Monolitik bir yapıymış gibi çıkıyor. Bu sayede bir sürecin tam çalışmaması durumu sistemin tamamını olumsuz etkilemiyor ve SPoF ortadan kaldırılıyor.
Mikroservis Mimarisi
, insan müdahalesi olmadan da, sistemlerin kendi kendisini iyileştirmesini ve kod hatalarını gidermesini olanaklı kılıyor. Kubernetes gibi konteyner düzenleme araçları, bu işlemi kendi kendine gerçekleştirebiliyor.Mikroservis Mimarisi
, farklı ölçeklerdeki uygulamaların özel bulutlarda, veri merkezlerinde ya da hibrit çoklu bulut platformlarında çalışmasını olanaklı kılıyor. Uygulamalar bulutta çalışabilir biçimde, cloud-native geliştirildikçe, geliştirme süreçlerine erişilebilirlik artıyor.
Bu yazımda bir çok web sitesinden faydalandım bunlar;