Yazılım Mimarileri #2 Mikro Servis Mimarisi

Bu yazımızda Yazılım Mimarilerinden Mikro Servis Mimarisini ele alacağız. Hadi başlayalım 🙂

Mikro Servis Nedir?

Mikro servis mimarisinin basitçe bir tanımını yapacak olursak; bir bütün olarak tasarlanmış bir sistemin her biri bağımsız bir şekilde çalışacak ve birbirleriyle iletişim kuracak şekilde küçük parçalara ayırmak şeklinde tanımlayabiliriz. Diğer yazımızda konu aldığımız Monolotik mimariye alternatif bir mimari yaklaşımdır. Yaptığımız mikro servis tanımı bu mimariyi tam olarak anlamanız için yeterli olmayabilir. Bunun için bir sistem ele alalım ve o sistemi önce Mmonolotik mimari ile daha sonra da mikro servis mimarisi ile yorumlayalım.

Basitçe bir kitap satın alma işlemi yapabildiğimiz bir sistemimiz olsun. Bileşenleri

  • Kitap Arama
  • Kitap Kataloğu
  • Stok Yönetimi
  • Sepet
  • Ödeme

Bu sistemi monolotik mimari ile gerçekleştirdiğimiz de aşağıda ki gibi akış ortaya çıkmaktadır.

Geleneksel Monolotik mimari ile geliştirilen bir uygulama da tüm olayalar bir arada bulunur. Ve tüm olaylar aynı çekirdek üzerinden veri tabanına bağlanır. Bu mimarinin avantaj ve dezavantajlarından bir önceki yazımızda bahsettik.

Örneğimiz içerisinde bulunan Arama özelliğini ElasticSearch ile geliştirmek istedik. Monolotik mimaride kapsamlı bir proje içerisine ElasticSearch eklemek istediğimizde bütün bağımlılıklar, destekleyici kütüphaneleri ana projeye eklememiz gerekir. Bu durumda bir süre sonra farklı farklı problemler ortaya çıkartacaktır. Yine benzer bir şekilde Sepet özelliği için Redis KeyValue şeklinde saklama yapan bir teknoloji ile çok daha hızlı ve basit bir modül geliştirilebilir. Monolotik mimaride ikinci bir teknoloji eklememiz durumunda birçok bağımlılık ve kütüphane ana projeye eklememiz gerekir. Kitap detaylarımızı document storage kullanan bir yapıda saklamak için MongoDB ile esnek bir şekilde saklayabiliriz. Yine bu durumda ek bağımlılıklar Monolotik Mimaride eklenmek zorunda. Bu şekilde geniş teknoloji yelpazesi ile geliştirme yapmaya çalıştığımız bir Monolotik Mimari uygulama bir süre sonra farklı problem çıkartırken aynı zamanda geliştirme, dağıtma konusunda da zorluklar yaşamamıza neden olacaktır. Codebase büyüdükçe Monolotik Mimaride ekibi küçük takımlara ayırarak geliştirme ortamı sağlamakta ayrı bir problem haline geliyor. Tüm bu örneklerimizi bir de Mikro Servis Mimarisi ile ele alalım.

Mikro Servis Mimarisi

Mikro Servis mimarisi tüm olayları ayrı ayrı küçük parçalar halinde geliştirme ve diğer katmanlar ile birleştirme işlemi diye tanımlanabilir. Arama, Sepet, Satın Alma, Detay gibi olaylarımızı ayrı modüller halinde istenilen ihtiyaç duyulan teknolojiler ile ana sistemden bağımsız olarak geliştirme işlemidir. Codebase her ne kadar büyük olursa olsun ekibi küçük takımlara ayırarak her bir özelliği ayrı ayrı geliştirme ve dağıtma mümkün olmaktadır. Tek bir ana proje yerine küçük projeler halinde sistem geliştirme işlemleri birçok anlamda avantaj ve kolaylık sağlamaktadır.

Mikro Servis Mimarisi Avantajları

  • Büyük bir codebase deploy süresi açısından zaman kazancı sağlar.
  • Ekibe yeni bir üye katıldığında tüm projeyi öğrenmek tanımak yerine kendisinden beklenen servisi geliştirmek için yeterli bilgileri öğrenmesi ile çabuk geliştirme sağlanabilir.
  • Uygulama Monolotik Mimari de olduğu gibi dikey olarak değil de yatay eksende scale edilebilmesini sağlar.
  • Birbirinden bağımsız ve tek bir işlemi gerçekleştirmek için odaklanmış uygulamalar sağlar.
  • Her bir servisi(modülü) farklı programlama dilleri ile geliştirilebilir. Bu da projenin dil bağımlılığını ortadan kaldırır.
  • Esneklik ve genişletilebilirlik kolaylığı sağlar.
  • Ekip organizasyonu ciddi bir katkıda bulunur.
  • Tekrar kullanılabilirlik konusunda yıllar sonra dahi optimize ve geliştirme imkânı sağlar.
  • Versiyonlama işlemi kolaydır.
  • Kolay test etme imkânı sağlar.
  • Projenin yeni ihtiyaçlarında hızlı genişletme yapabilme imkânı sağlar.

Mikro Servis Mimarisi Dezavantajları

  • Farklı diller veya farklı modüller ile geliştirme nedeni ile çok fazla kod tekrarına neden olur örneğin objeler
  • Modüller farklı cihazlar ve farklı platformlar üzerinde çalışabildiği için yönetim ve monitoring maliyetine sebep olur
  • Birden fazla teknoloji kullanımı nedeniyle yönetim ve takip zorlaşabilir
  • Birden çok veri tabanı ve transaction yönetimi zorlaşabilir
  • Her bir modül için ek bakım ve güvenlik maliyetleri ortaya çıkabilir
  • Teknoloji, Veri Tabanı, Programlama Dili vb. çeşitliliği nedeniyle geliştirme ekibinin nitelikli kişilerden oluşması gibi bir maliyet ortaya çıkarır
  • Her modülün geliştirme yapılması kolaydır ancak kendine özel business logice hakimiyet gerektirir
  • Unit test basittir ancak entegrasyon testleri zor hale gelir
  • Tüm modüller arası iletişim ve uyumlu çalışabilme zorlaşır
  • Güçlü bir loglama alt yapısına ihtiyaç vardır

Mikro Servis Mimarisi birçok şirket tarafından tercih edilmektedir. Büyük ölçekli yazılım projelerinden kullanılır. Birçok avantaj sağlamasının yanında ek maliyetlere sebep olan bir geliştirme mimarisidir. Buna rağmen sağladığı avantajlar nedeniyle bahsettiğimiz tüm dezavantajlar göz ardı edilebilirler.

Diğer yazılarında görüşmek üzere iyi geliştirmeler dilerim 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir