MICROSERVICES
Bu yazımda sizlere eğitimini aldığım mikroservis mimarisinden bahsedip nerelerde neden kullanmamız gerektiğinden bahsedeceğim. Okumanın sıkmaması ve basitleştirme açısından konuyu partlar halinde ilerleteceğim. Mikroservisler konusunda türkçe kaynak sıkıntısı yaşayan herkese yazımın yararlı olucağını düşündüğüm için her part da github hesabımı ekleyeceğim. Keyifli okumalar dilerim…
Mikroservis nedir?
Mikroservisler, her uygulama işlevinin kendi başına bir hizmet olduğu ve bu hizmetlerin ayrık kapsayıcılarda dağıtıldığı ve bu kapsayıcıların API’ler aracılığıyla birbirleriyle konuştuğu mimari bir modeldir. İş gereksinimlerini karşılarken hızlı hareket etmek ve bu hızda hareket ederken bir şeyleri bozmamak prensibiyle hareket eder.
Kısacası biz monolith yapılarda tek sistem üzerinde her şeyi ekler onların haberleşmesini göndermelerini join ve servisler yardımıyla yapardık buradaki yapı ise tam tersi. Her yapı için ayrı bir servis açarız.
Karıştırmamanız için monolith RentACar projem ve mikroserviste çalıştığım rentACar projesi ile anlatmak istiyorum. Monolith yapıda kiralama, ödeme, faturalama gibi işlemleri ayrı entity dosyaları ayrı manager ayrı servis oluşturarak yapıyorduk. Kullanıcağımız kolonu joinle alıyorduk. Mikroservis kısmına geçtiğimizde ise biz her sistem için ayrı ayrı servisler tanımladık. Örneğin faturalama, ödeme, kiralama hepsi ayrı servislerde tuttuk. Birbirleriyle iletişimi senkron veya asenkron olarak sağladık.
Mikroservisi neden kullanırız?
“Peki ama neden monolith gibi basit yapı dururken mikroservis gibi karmaşık bir yapıyı kullanıyoruz?” diye soru sorduğunuzu duyar gibiyim. Biz bu yapıyı milyonlarca kişinin kullandığı karmaşık sistemlerde kullanırız. Monolith yapı güzel basit ama bir tarafta sıkıntı çıkarsa tüm sistem çalışmaz hale gelir. Örneğin faturalama işleminde sıkıntı yaşadın o zaman sistem hiç çalışmaz ama mikro servislerde öyle değil faturalamada sıkıntı yaşadığında diğer sistemler çalışmaya devam eder.
Uygulamalar 3 kısımdan oluşur ;
- Client->Kullanıcıya gösterilen, isterlerini girdiği kısım (web sayfası,mobil vs.)
- SUNUCU->tüm isteklerin yönetildiği ve gerekli algoritmaların bulunduğu kısım
- DATABASE->verilerin tutulduğu kısım
Monolitik projelerde bu kısımlar tek bir yapının içinde yer alır. Aynı server, aynı veritabanı kullanılır. Kısaca her şey ortaktır. Başlatılacağı zaman ya da durdurulacağı zaman ve hatta çöktüğü zaman uygulamanın tamamı bu durumdan etkilenir. Yani uygulama, yaşamı boyunca tek bir parça halinde hareket eder. Herhangi bir güncelleme, değişiklik ya da versiyon yükseltmesi işlemi için uygulamanın tümüne müdahale etmemiz gerekir.Monolitik mimarilerde, uygulamanın ölçeği büyüdükçe, geliştirme, test, kurulum ve ölçeklendirme süreçleri giderek zorlaşmakta ve belli zaman sonrasında idame edilemez hale dönüşmektedir. Büyük ölçekli uygulama geliştirmedeki belirtilen bu dar boğazlardan kurtulmanın yolu mikroservis mimarisiyle yazılım geliştirmektir. Büyük ve karmaşık projelerde mikroservis kullanmak zorunlu hale gelmiştir.
Mikroservis mimarisi hakkında paylaştığım ilk yazımı burada sonlandırıyorum. Yukarda bahsettiğim rentACar projemin monolith ve microservis halini ekledim merak eden okuyucularım bakabilir. ikinci partta görüşmek üzere.