Microservice Mimarisi Nedir ? Microservice Mimarisine Giriş

Microservice mimarisine dair

Microservice Nedir ?

Adından da anlaşılacağı gibi,microserviceler temelde bir yazılım uygulamasında belirli özellik yada fonksiyonu sağlayan, tek bir amaca hizmet eden, birbirinden bağımsız yazılım servislerdir. Bu hizmetler bağımsız olarak bakımı yapılabilir, izlenebilir ve dağıtılabilir yapıya sahip olmalıdır..

Microservice Mimarisi

Son yıllarda birçok projenin microservice mimarisi kullandığını gördük, duyuyoruz ve şu ana kadarki sonuçlar genelde olumlu olduğu aşikar, bu yüzden de kullanımı her geçen gün daha da artıyor. Durum öyle bir hal aldı ki artık bir proje geliştirilmek istendiğinde neden nasıl sorularını irdelemeden “microservice mimarisinde yapalım” cevapları veriliyor. Bunun cevabını vermeden önce microservice mimarisi nedir, avantajları nelerdir gibi soruların cevabını öğrenmekte fayda var.

Microservice Mimarisi Nasıl Olmalıdır ? Microservice Mimarisinin Avantajları Nelerdir ?

Her servis büyük bir uygulamanın, mini projeleri olarak düşünülebilir!

  • Microserviceler farklı makinelerde çalışabilir ve tüm servisler birbirleriyle kendi başlarına iletişim kurabilir olmalıdır. Yeni bir servis diğer servislerde bir değişikliğe neden olmadan geliştirilebilir ve deploy edilebilir olmalıdır.
    Bağımsız Deployment — Servisler birbirinden bağımsız olarak, herhangi bir platformda ayrı ayrı deploy edilebilir.
  • Microserviceler, otomatize bir biçimde gerekli aşamalardan geçerek (Unit Tests, Integration Tests, Sonarqube,Automation Tests) deploy edilmelidir. Bu mekanizma, projede kaliteyi artırır.
  • Her bir servis bağımsız olarak geliştirilebilmeli, test edilebilmeli, deploy edilebilmelidir. Böylece uygulamanın kalitesi ve esnekliği artar.
  • Bağımsız Geliştirme — Tüm microservice kendi işlevselliğine göre kolayca geliştirilebilir.
  • Herhangi bir servisteki sorun, diğer servisleri etkilemez, böylece kullanıcılar diğer servisleri kullanabilir konumda olur.
  • Hata İzolasyonu — Projenin herhangi bir servisinde oluşacak bir sorun, projenin diğer servislerini etkilemeyeceği için, sistem hala çalışmaya devam eder.
  • Herhangi bir serviste oluşacak trafik tüm sistemin scale olmasını gerektirmeden, trafik altındaki servis çoklanarak sorun ortadan kaldırılabilir.
  • Ölçeklenebilir — Her bir bileşen kendi ihtiyacına göre ölçeklenebilir, tüm bileşenleri ölçeklendirmeye gerek yoktur.
  • Her geliştirici kendi ilgilendiği servis üzerinde bağımsız olarak geliştirme yapabilmelidir, yeni bir servisi kendi geliştirebilmeli ve diğer servisleri etkilenmeden bu hizmetler deploy edilebilir olmalıdır.
  • Bir servis için geliştirme yapıldığında, o servisteki geliştirme projenin tümünü etkilememeli böylece diğer özellikler halen çalışır konumda olmalıdır.
  • Gereksinimleri karşılamak için en son yada en uygun teknoloji kullanılabilir. Her bir servis farklı dil veya farklı database kullanabilir. Her farklı özellik, diğer özelliklerden bağımsız olarak farklı bir ekip tarafından farklı bir teknoloji kullanılarak gerçekleştirilebilir.
  • Tüm servisler, alanlarına, görevlerine ve özelliklerine göre farklı microservice ayrılmalıdır.
    Teknoloji Çeşitliliği — Aynı projenin farklı servislerini geliştirirken farklı diller ve teknolojiler kullanılabilir.
  • Bu microserviceler, fonksiyonlarını yerine getirmek için kendi yük dengeleyici(load balancing) ve uygulama ortamlarına sahiptir ve aynı zamanda kendi veritabanlarında veri saklamalıdır.
  • Tüm microserviceler birbirleriyle REST veya Message Bus üzerinden haberleşmelidir. İkisi birden de kullanılabilir.
  • Microserviceler tarafından gerçekleştirilen tüm işlevler API Gateeway üzerinden istemcilere iletilebilir olmalıdır. Tüm iç end-pointler API Gateway’e bağlanır. Böylece, API Gateway’e bağlanan herhangi biri otomatik olarak tüm sisteme bağlanabilmelidir.

Microservicelerin Temel Özellikleri Nelerdir ?

  • Decoupling — Bir sistemdeki servisler büyük ölçüde birbirinden bağımsızdır.
  • Componentization — Microserviceler, kolayca değiştirilebilen ve versiyonları artırılabilen bağımsız bileşenlerdir.
  • Business Capabilities — Bir microservice basit bir yapıdadır ve tek bir göreve odaklanır.
  • Autonomy — Geliştiriciler ve ekipler birbirlerinden bağımsız olarak çalışabilir, böylece hızlıca geliştirme ve test süreçleri yürütülebilir.
  • Continuous Delivery — Yazılım geliştirme, test etme ve onaylama sistematik otomasyonu ile sık sık yazılım sürümlerini canlıya almaya otomatik bir biçimde izin verir. Servisler ayrı ayrı deploy edilebileceği için, deployment süresi kısalır ve maliyet zamanla azalır.
  • Decentralized Governance — Odak, doğru iş için doğru aracı kullanmaktır. Bu, standart bir teknoloji veya yapıyı zorunlu kılmadığı anlamına gelir. Geliştiriciler, sorunlarını çözmek için en iyi teknolojiyi seçme özgürlüğüne sahiptir.
  • Agility — Microserviceler çevikliği destekler. Herhangi bir yeni özellik hızla geliştirilip sisteme adapte edilebilir.

Microservicelerin eksiklikleri ve dikkat edilmesi gereken noktaları nelerdir ?

Eksik yönlerini çözümleriyle birlikte inceleyebiliriz.

  • Her bir microservice için ayrı bir derleme, dağıtım ve sürüm iş akışı gerekir. Bu nedenle, kurulum iş akışının otomatik hale getirilmesini sağlamak önemlidir, aksi takdirde operasyon ekipleri için artan iş yükü demektir.
  • Her bir servisi ayrı ayrı izlenebilir ve bakımı yapılabilir olmalıdır. Prometheus bunun için iyi bir araçtır.
  • Microserviceler, yapılandırma sistemindeki iş yükünü arttırır. Harici servislerin yapılandırılması genellikle servisler arasında paylaşılır ve servis sayısı arttıkça zaman alıcı bir iş haline gelebilir.
  • Servisler arasındaki REST trafiği performans açısından olumsuz bir yön alabilir. Bu sorunu çözmek amacıyla önbelleğe alma ve eşzamanlılık genellikle performansı artırılabilir.
  • Microserviceler üzerinde güvenlik, parallellik karmaşıklığı artıran etmenlerdir. Bu karmaşıklığı iyi yönetmek gerekir.
  • Yeni özelliklerin mevcut hizmetlerin işlevselliği bozulmadığından emin olmak için uygulama düzeyinde testler önem vermek gerekir.
  • Her hizmetin kendi sürümleri, yayın planı ve yayın döngüleri olduğu için dokümantasyon çalışması daha fazladır.
  • Uygulamaların ve kod tabanlarının sayısı arttığında, onu düzgün bir şekilde korumak ve yönetmek için çaba harcanır.
  • Bağımlılığı azaltmak için kod tekrarı yaşanabilir, ancak performans göz önüne alındığında bu kod tekrarları göz ardı edilebilir.

--

--

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Gökhan Ayrancıoğlu

Gökhan Ayrancıoğlu

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev