top of page

Microservices 1: Mikroservis ve Monolitik Uygulama Karşılaştırma

  • Yazarın fotoğrafı: yusuf sarıkaya
    yusuf sarıkaya
  • 13 Eki 2021
  • 3 dakikada okunur

Güncelleme tarihi: 15 Eki 2021

Monolitik Uygulamlar geleneksel bir yöntem ile yazılan tüm ihtiyaçların ve isteklerin bir uygulamada barındıran yazılımlardır. Monolitik uygulamalarda bir ekip tamamen bir ürüne veya bir ürünün farklı iş süreçlerine yönelir. Geliştirme süreci daha kolay ve geliştirme süresi daha az olan uygulamalardır. Tüm talepler bir uygulamaya gelir ve genellikle bu uygulama bir data yapısına bağlıdır.




Resim 1: Örnek Bir Monolitik Yazılım Akışı (Kaynak: https://martinfowler.com/articles/microservices.html)



Microservis uygulaması en yalın tabiri ile server uygulamasının küçük servislere bölünerek yapılandırılması yaklaşımıdır. Genel itibari ile bir backend yaklaşımı olsa bile son zamanlarda frontend uygulamaları içinde kullanılmaya başlandı. Özellikle büyük projelerde birden fazla teknolojinin kullanılabileceği frontend uygulamalarında “micro frontend” kullanılmaya başlanmıştır. Biz bu yazıda backend mimarisinde kullanılan microservis merkezli geliştirme yaklaşımına odaklanacağız. Microservislerde her bir servis diğer servisler ile Http/Https, Web Socket veya AMQP(Active Message Queuing Protocol) protokolleri ile haberleşirler.


Bir mikroservis tasarlarken dikkat edilmesi gereken en önemli nokta her mikroservisin kullanacağı Domain’i veya Business katmanınında yapılacak işleri iyi yapılandırmak olacaktır. Çünkü bir mikroservis diğerlerinden olabildiğince bağımsız geliştirilebilmeli ve yayınlanabilmelidir. Ayrıca burada dikkat edilmesi gereken diğer bir husus ise her mikroservis kendi domainini yani kendi entitylerini taşıyacağı için bağımsız bir veri depolama sistemine sahip olmalıdır(SQL,NOSQL,Cache vs).



Resim 2: Örnek bir microservis uygulaması akışı

(Kaynak: https://martinfowler.com/articles/microservices.html)


Ayrıca diğer önemli bir konu mikroservisin boyutunun ne olmasıdır. Aslında başlangıçta bir mikroservisin boyutu çok önemli olmayacaktır. Önemli olan o mikroservisin düşük bağımlılığa sahip olması ve bağımsız bir şekilde deploy edilip yayınlanabilmesidir.


Peki Neden Mikroservice Mimarisi

Agile(çevik) yazılım geliştirme metodu bugünün yazılım dünyasında çok önemli bir kavramdır. Microservis mimarisinin kullanılmasının altında yatan en önemli etmenlerden birtanesi çevikliği arttırdığıdır. Ayrıca bu mimaride kompleks büyük sistemlerde bakımı kolaylaştırdığı için tercih edilir. Mikroservislerin her birinin diğerlerinden ayrı bir özerk yaşam döngüsü olduğu için ayrı geliştirme, ayrı yayınlama ve bağımsız ölçekleyebilme olanakları da tanıması büyük ve orta ölçekli projelerde kullanılmasının en önemli nedenlerindendir.

Mikroservis ile Monolitik Uygulamalar Arasındaki Farklar

  1. Geliştirme : Geliştirme esnasında Monolitik uygulamalarda tek bir teknoloji kullanılmasına imkan sağlarken mikroservis uygulamalar ise birden farklı backend yazılım dilinin farklı mikroservislerde kullanılmasına olanak sağlıyor. Örneğin büyük bir E-Ticaret projesinde birden fazla takımların olduğunu ve bu takımların herbirinin farklı diller ile mikroservislerini inşa ettiklerini düşünün. Bir ekibin yetkinliği ve arzusu Go dili ile Basket servisi yazmak iken diğer ekip Catalog servisini C# ile yapmak isteyebilir. Böylece her bir mikroservis bağımsız geliştirilebilir.

  2. Deploy Etme: Öncelikle yine stabil bir uygulama hayal edin. Bu uygulamaya her hafta veya her ay yeni feature eklendiğini düşünün. Eklenen bu yeni özelliklerden birkaçının bittiğini diğerlerinin ise devam ettiğini düşünün. Doğal olarak uygulamalarda kırılmalara ve veri yapısında değişikliğe sebep olabileceği için uygulamanın deploy edilebilmesi tüm featureların bitirilip kontroller yapıldıktan sonra majör veya minör versiyonlama yapılmasına bağlıdır. Fakat mikroservis uygulamalarında sadece featurenin yani özelliğin veya yeni geliştirmenin yapılacağı mikroserviste geliştirme yapılabilir ve bu geliştirme diğer mikroservislerden bağımsız olarak yapılıp deploy edilebilecektir. Çünkü her mikroservisde geliştirme yapılmayabilir veya geliştirmelerin süreleri birbirinden bağımsız olabilir. Doğal olarak bağımsız deploy olabilir.

  3. Kaynak Tüketimi ve Yapılandırma: Geleneksel monolitik mimarisinde birkaç işi yapan uygulama tek bir paket veya tek bir uygulama olarak içindeki tüm library ile birlikte yayınlanması gerekmektedir. Doğal olarak bir Monolitik uygulamasını yayınlamak için o uygulamanın gerektirdiği tüm bileşenleri ayarlamak ve ayağa kaldırmak gerekmektedir. Mikroservis uygulamalarında bu durum daha farklı olabilmektedir. Örneğin bir "Basket" mikroservisi tasarladığınızı ve bunun için de redis cacheleme kullandığınızı hayal edelim. Bu mikroservis için bir serverda sadece cache bir uygulamaya ihtiyaç duyacaksınız ve sadece minimal düzeyde bir yapılandırma yeterli olacaktır. Ayrıca bir mikroservise bağımsız bir yayınlama ve farklı kaynak tüketimi ayarlayabilirsiniz. Çünkü her mikroservis diğerinden daha fazla veya daha az kaynak tüketimine sahip olabilir.

  4. Geliştirme Süresi: Uygulamaların geliştirme sürelerine baktığımız zaman burada monolitik uygulamalarının daha fazla avantajlı olduğunu söyleyebiliriz. Bir Mikroservis uygulamasını ayağa kaldırmak için yetkin birkaç ekibe ve farklı Boundeded Context’i olan yapılara bu yapıların birbiri ile ilişkisini ayarlamak gerçekten zor olabilir. Özellikle mikroservisleri ayağa kaldırırken farklı Bounded Context arasındaki ilişkili domainleri belirleme veya bu ilşkili domainlerde data bütünlüğünü sağlamak için mikroservisler arasında hangi iletişim araçlarının kullanılacağını (Http, WebSocket, Grpc, , AMQP) belirleme ve bunları yapılandırma gerçek manada zor olabilecektir.

  5. Ölçekleme: Ölçekleme temel anlamıyla bir uygulamayı ihtiyaç duyulması ve talepte bulunulması ölçüsünde onu ayarlamaktır. Bir uygulama birbirinden bağımsız mikroservislerden oluştuğu zaman ölçekleme daha kolay olacaktır. Özellikle kullanıcıların çok sık ihtiyaç duydukları mikroservisleri bağımsız server, VM(Sanal Makine) vb instancelar ile çoğaltmak veya configurasyonlarını yapılandırmak daha kolay olacaktır. Yine bir E-Ticaret uygulamasından örnek verecek olursak her gün kullanıcılar yüzlerce, binlerce ve hatta milyonlarca arama yapıp ürünleri listeleyeceklerdir. Doğal olarak bir "Catalog" mikroservisini farklı instancelarda ölçekleme daha iyi olacaktır.

Resim 3: Mikroservis ve Monılitik Uygulama Ölçekleme Örneği


Mikroservis yönetimi ile geliştirilen uygulamalarda aşağıdaki yöntemlere dikkat edilmesi gerekmektedir.
  • Servisin veya data kaynağının monitörlemesi ve kontrolü

  • Data kaynağının (sql,nosql,cache) ölçeklenebilmesi

  • Authentication and Authorization işlemlerinin yapılması ve farklı mikroservisler arasında yayınlanması

  • Uygulamaların hızlı teslimi (genellikle takımın farklı mikroservisler üzerinde çalıştığında önemlidir)

  • DevOps ve CI/CD süreçlerinin uygulanması

Kaynaklar:

תגובות


Drop Me a Line, Let Me Know What You Think

Thanks for submitting!

© 2023 by Train of Thoughts. Proudly created with Wix.com

bottom of page