Mikroservis Nedir?


Mikroservis mimarisi; tek bir uygulamayı, her biri kendi başına çalışan, bağımsız olarak deploy edilebilen(yayımlanabilen) küçük hizmetlere(servislere) bölünmesini amaçlar.

Mikroservis Nedir?

Mikroservis Nedir?

Mikroservis mimarisi; tek bir uygulamayı, her biri kendi başına çalışan, bağımsız olarak deploy edilebilen(yayımlanabilen) küçük hizmetlere(servislere) bölünmesini amaçlar. Bu hizmetler, genellikle hafif HTTP(Hyper Text Transfer Protocol) tabanlı API(Web Servis)’ler veya mesajlaşma altyapıları(örneğin; RabbitMQ, Kafka vb.) üzerinden iletişim kurabilirler.

Neden Mikroservis Mimarisi?

Geleneksel monolitik uygulamalar yani bütün kodların tek bir uygulama içerisine yazılması, projenin bakımı, test edilebilmesi ve ölçeklendirilebilmesi gibi sorunları beraberinde getirmektedir. Yeni bir özellik eklemek veya bir modülü güncellemek tüm sistemi yeniden dağıtmayı(yayımlamayı) gerektirir. Mikroservis mimarisi, bu sorunları çözmek için uygulamanın her bir işlevini bağımsız, küçük ve tek sorumluluklu servislere böler. Böylece yazılım geliştiriciler paralel bir şekilde çalışabilir, her servis kendi yaşam döngüsünde deploy edilir(yayımlanır) ve yüksek trafikli modüller ayrı ölçeklenir.


Mikroservis Mimarisi Nedir?

  • Tek Sorumluluk Prensibi: Her mikroservis yalnızca bir işlevi yerine getirir (ör. ödeme işlemi).
  • Database per Service: Servisler kendi veritabanı örneklerine veya farklı veri teknolojilerine (SQL, NoSQL) sahip olabilir.
  • Bağımsız Teknoloji Seçimi: Java, Go, Python, Node.js, C# gibi dillerden en uygun olanı tercih edilebilir.
  • İzole Dağıtım: Her servis ayrı CI/CD sürecinden geçer; hata izole edilir ayrıca tüm sistem etkilenmez.
  • İleri C# Kursu eğitimlerinde Microservice Mimarisi oldukça detaylı ve uygulamalı olarak aktarılır.

Örnek Senaryo: Bir e-ticaret uygulaması mikroservis mimari yapısı kullanılarak geliştirildiğinde “Ürün Arama”, “Ödeme İşlemleri” ve “Kullanıcı Yönetimi” gibi servisler birbirlerinden ayrıdır. Ödeme servisi örneğin indirim döneminde yoğun yük altındayken yalnızca o servis ölçeklenir, diğer modüller kesintisiz çalışır.


Monolitik vs. Mikroservis Mimarisi

Özellik

Monolitik Mimari

Mikroservis Mimarisi

Kod ve Veri

Tek kod tabanı, tek veritabanı

Her servis ayrı kod tabanı ve veri deposu

Ölçeklenebilirlik

Tüm uygulama bir bütün olarak ölçeklenir

Sadece ihtiyaç duyulan servisler ölçeklenir

Dağıtım

Bir modül değişince tüm uygulama yeniden deploy(yayımlanır) edilir

Servis bazında bağımsız deploy(yayımlama)

Hata İzolasyonu

Bir hata tüm sistemi etkileyebilir

Servis hatası izole edilir, diğerleri çalışmaya devam eder


Temel Prensipler ve Bileşenler

Bağımsız Dağıtım

Her mikroservis kendi CI/CD hattına, sürüm yönetimine sahiptir. Amazon günde binlerce bağımsız servisi deploy eder.

Heterojen Teknoloji Seçimi

Servisler farklı yazılım dillerinde yazılarak her bir iş yüküne en uygun teknoloji seçilmiş olur. Netflix, veri işleme servislerini Java ile, kullanıcı arayüzü(UI) servislerini JavaScript ile geliştirir.

API Gateway

Tüm clientlar isteklerini tek noktadan alır, yetkilendirme, rate limiting(belirli bir sürede yapılabilecek istek sınırı) ve load balancing(ağ trafiğini birden fazla sunucu kullanarak bölüp, gelen client isteğini ilgili sunuya iletip sunucu trafiği yönetimini sağlayarak yük dengeleme işlemini gerçekleştirme) sağlar. Örneğin “sepete ürün ekle” isteğini doğru mikroservise yönlendirir.

Service Discovery

Servislerin IP ve port bilgilerini dinamik olarak yönetir. Kubernetes ortamında pod’lar otomatik keşfedilir, manuel konfigürasyona gerek kalmaz.

Veri Yönetimi

Database per Service” modeliyle (yani her servisin kendisine ait bir veritabanının olması) veri izolasyonu sağlanır. Kullanıcı servisi SQL tercih ederken log servisi NoSQL kullanabilir.

İletişim Modelleri

  • Senkron (REST/HTTP): JSON tabanlı, anlık istek/yanıt.
  • gRPC: Protobuf tabanlı, düşük gecikmeli ikili protokol.
  • Asenkron (Kafka, RabbitMQ): Event-driven mimari; servisler olayları kuyruğa yayınlar ve dinler.

Gerçek Hayat Örnekleri

Yemek Çarşısı Analojisi

Bir yemek çarşısında döner, içecek, tatlı tezgâhları bağımsız çalışır. Merkezi ödeme noktası API Gateway, tezgâhlar mikroservislere benzer: Her tezgâh kendi işini yapar, ödeme servisi hatası diğer tezgâhları durdurmaz.

Netflix

Kullanıcı profili, öneri algoritması, video akışı gibi modüller ayrı mikroservislerdir. Yüksek trafikte bile her servis birbirinden ayrı çalıştığı için kesintisiz yayın sağlar.

E-Ticaret Uygulaması Akışı

Servis

Teknoloji

Görev

User Service

Node.js

Kullanıcı kaydı ve kimlik doğrulama

Product Service

Java + Spring

Ürün kataloğu yönetimi

Order Service

Go

Sipariş oluşturma ve takibi

Payment Service

Python

Ödeme entegrasyonları

Inventory Service

.NET

Stok takibi

Akış:

  1. Kullanıcı REST API’den sipariş talebi gönderir.
  2. Order Service, REST ile stok kontrolü yapar.
  3. Stok onayı gelirse Payment Service’e gRPC ile ödeme isteği gider.
  4. Ödeme başarılı ise Kafka üzerinden “OrderCreated” eventi yayınlanır.
  5. Inventory Service, event’i dinleyip stoğu günceller.

Karşılaşılan Zorluklar ve Çözümler

Zorluk

Önerilen Çözüm

Karmaşıklık

Kubernetes & Docker ile servis orkestrasyonu

Veri Tutarsızlığı

Saga Pattern, CQRS ile dağıtık transaction yönetimi

Ağ Gecikmesi

Redis cache, CDN kullanımı

İzlenebilirlik

Jaeger(dağıtık uygulamaların izlenmesi), Prometheus(veri toplama) + Grafana(veri görselleştirme) ile monitoring


Sonuç

Mikroservis mimarisi; bağımsız geliştirme, esnek ölçeklenebilirlik ve hata izolasyonu avantajlarıyla modern yazılım dünyasında öne çıkar. Dağıtık sistem karmaşıklığı, veri tutarlılığı ve izleme zorlukları ise ancak doğru araç Kubernetes, Docker, Saga Pattern, Prometheus ve kültürle aşılabilir. Başarılı bir mikroservis dönüşümü, ekiplerin organizasyonel yapısından teknolojik seçimine kadar bütünsel bir strateji gerektirir.

Diğer Yazılar
SolidWorks Tasarım Eğitimi ile Profesyonel Becerileri Geliştirin
12.07.2023