Soft Ajans ®

Microservice Mimarisi Nedir? Avantajları ve Yapısı

Son Güncelleme: Yazar: admin Blog, Teknoloji
Microservice Mimarisi Nedir? Avantajları ve Yapısı

Yazılım uygulamaları büyüdükçe yeni özelliklerin geliştirilmesi, mevcut kodların güncellenmesi ve sistemin yüksek trafik altında çalıştırılması daha karmaşık hâle gelebilir. Tek bir uygulama içerisindeki küçük bir değişiklik, sistemin diğer bölümlerini etkileyebilir ve uygulamanın tamamının yeniden yayımlanmasını gerektirebilir.

Bu sorunları azaltmak amacıyla kullanılan yazılım geliştirme yaklaşımlarından biri microservice mimarisidir.

Microservice mimarisi, büyük bir yazılım uygulamasının belirli iş yeteneklerine odaklanan küçük, bağımsız ve birbiriyle iletişim kurabilen servislere ayrılmasıdır.

Türkçede bu kavram:

  • Mikroservis mimarisi
  • Microservices mimarisi
  • Mikro hizmet mimarisi

şeklinde kullanılabilir.

Microservice mimarisinde bir e-ticaret uygulaması tek parça olarak geliştirilmek yerine şu servislere ayrılabilir:

  • Kullanıcı servisi
  • Ürün servisi
  • Stok servisi
  • Sepet servisi
  • Sipariş servisi
  • Ödeme servisi
  • Kargo servisi
  • Bildirim servisi

Her servis kendi sorumluluk alanına odaklanır. Gerektiğinde bağımsız olarak geliştirilebilir, test edilebilir, yayımlanabilir ve ölçeklendirilebilir.

Ancak bir uygulamayı çok sayıda küçük parçaya ayırmak, tek başına başarılı bir microservice mimarisi oluşturmaz. Servis sınırlarının doğru belirlenmesi, iletişimin güvenli kurulması, verilerin yönetilmesi ve sistemin merkezi biçimde izlenebilmesi gerekir.

Microservice mimarisi özellikle hızlı büyüyen, yüksek trafik alan ve farklı ekipler tarafından geliştirilen uygulamalarda değerlendirilebilir. Küçük ve basit projelerde ise gereksiz teknik ve operasyonel karmaşıklık oluşturabilir.

Dijital sistemlerin işletme süreçlerine nasıl entegre edildiğini anlamak için dijital dönüşüm yaklaşımı incelenebilir.

Microservice Mimarisi Nedir?

Microservice mimarisi, bir uygulamanın bağımsız işlevlere sahip küçük servislerden oluşacak biçimde tasarlandığı yazılım mimarisi yaklaşımıdır.

Her mikroservis:

  • Belirli bir iş yeteneğini yerine getirir.
  • Kendi kod tabanına sahip olabilir.
  • Bağımsız olarak çalışabilir.
  • Ayrı biçimde yayımlanabilir.
  • Gerektiğinde bağımsız ölçeklendirilebilir.
  • Diğer servislerle API veya mesajlaşma sistemi üzerinden iletişim kurabilir.
  • Kendi verilerini yönetebilir.
  • Farklı programlama dili veya veri tabanı kullanabilir.

Örneğin bir sipariş servisi yalnızca sipariş oluşturma, sipariş durumunu takip etme ve sipariş bilgilerini yönetme görevlerinden sorumlu olabilir.

Ödeme işlemleri ise ayrı bir ödeme servisi tarafından yürütülebilir. Ödeme servisinde yapılan bir güncelleme, doğru tasarlanmış bir yapıda ürün veya kullanıcı servisinin yeniden yayımlanmasını gerektirmeyebilir.

Microservice Ne Demek?

“Microservice” kelimesi Türkçeye mikroservis veya mikro hizmet olarak çevrilebilir.

Buradaki “micro” ifadesi servisin mutlaka çok az kod içermesi gerektiği anlamına gelmez. Servisin sınırı, kod satırı sayısından çok yerine getirdiği iş sorumluluğuna göre belirlenir.

Bir mikroservis:

  • Tek bir ekip tarafından yönetilebilmeli
  • Belirli bir iş alanına odaklanmalı
  • Bağımsız biçimde geliştirilebilmeli
  • Diğer servislerden mümkün olduğunca az etkilenmeli
  • Açık bir arayüz üzerinden iletişim kurmalıdır

Servisleri gereğinden fazla küçültmek de iyi bir yaklaşım değildir. Çok küçük ve birbirine yoğun biçimde bağımlı servisler, dağıtık monolit olarak adlandırılabilecek karmaşık bir yapı oluşturabilir.

Microservice Mimarisinin Temel Özellikleri

Tek Bir İş Yeteneğine Odaklanma

Her mikroservis belirli bir iş yeteneğini yerine getirmelidir.

Örnekler:

  • Kimlik doğrulama
  • Ürün yönetimi
  • Ödeme
  • Sipariş
  • Kargo
  • Bildirim
  • Raporlama

Bir servisin birbiriyle ilgisiz çok sayıda görevi üstlenmesi servis sınırlarının doğru belirlenmediğini gösterebilir.

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

Mikroservislerin önemli özelliklerinden biri, diğer servisler yeniden yayımlanmadan bağımsız biçimde dağıtılabilmeleridir.

Örneğin bildirim servisindeki e-posta şablonu değiştirildiğinde uygulamanın ödeme ve sipariş servislerinin yeniden yayımlanması gerekmeyebilir.

Bağımsız Ölçeklendirme

Her servis aynı miktarda kaynak tüketmez.

Bir e-ticaret uygulamasında kampanya döneminde:

  • Ürün servisi
  • Arama servisi
  • Sepet servisi

yoğun trafik alabilir.

Muhasebe veya raporlama servisi ise daha düşük trafikle çalışabilir.

Microservice yapısında yalnızca yoğun kullanılan servisler ölçeklendirilebilir. Böylece bütün uygulama için aynı miktarda sunucu kaynağı ayırmak gerekmeyebilir.

Servislerin Kendi Verisini Yönetmesi

Microservice mimarisinde genel yaklaşım, her servisin kendi veri alanından sorumlu olmasıdır.

Örneğin:

  • Kullanıcı servisi kullanıcı verilerini
  • Ürün servisi ürün verilerini
  • Sipariş servisi sipariş verilerini
  • Ödeme servisi ödeme verilerini

yönetebilir.

Bir servisin başka servisin veri tabanına doğrudan erişmesi sıkı bağımlılık oluşturabilir. Bunun yerine servisler API veya olaylar üzerinden bilgi paylaşabilir.

Teknoloji Bağımsızlığı

Her servis aynı programlama dili veya veri tabanı teknolojisini kullanmak zorunda değildir.

Örneğin:

  • Kullanıcı servisi ilişkisel veri tabanı
  • Arama servisi arama motoru tabanlı veri deposu
  • Önbellek servisi bellek içi veri sistemi
  • Analitik servisi sütun tabanlı veri tabanı

kullanabilir.

Bu yaklaşım polyglot programming ve polyglot persistence kavramlarıyla açıklanır.

Ancak her servis için farklı teknoloji seçmek bakım, eğitim ve güvenlik maliyetini artırabilir. Teknoloji çeşitliliği yalnızca gerçek bir teknik ihtiyaç bulunduğunda kullanılmalıdır.

Hata Yalıtımı

Bir mikroserviste oluşan hata, doğru tasarlanmış bir sistemde uygulamanın tamamını durdurmamalıdır.

Örneğin tavsiye servisi geçici olarak çalışmıyorsa kullanıcılar ürünleri görüntülemeye ve sipariş vermeye devam edebilmelidir.

Bu durum için:

  • Zaman aşımı
  • Yeniden deneme
  • Circuit breaker
  • Yedek cevap
  • Kuyruklama
  • Hata sınırlandırma

gibi yöntemler kullanılabilir.

Monolitik Mimari Nedir?

Monolitik mimari, bir uygulamanın kullanıcı arayüzü, iş mantığı ve veri erişimi gibi temel bölümlerinin tek bir uygulama paketi içerisinde geliştirildiği yapıdır.

Bir monolitik e-ticaret uygulamasında:

  • Kullanıcılar
  • Ürünler
  • Siparişler
  • Ödemeler
  • Kargo
  • Bildirimler

aynı kod tabanında bulunabilir.

Uygulamanın tamamı tek bir birim olarak:

  • Geliştirilir
  • Test edilir
  • Yayımlanır
  • Ölçeklendirilir

Monolitik mimari her zaman kötü veya eski bir yaklaşım değildir. Küçük ekipler ve sınırlı kapsamlı projeler için daha kolay geliştirilebilir ve yönetilebilir.

Microservice ve Monolitik Mimari Arasındaki Fark

Kriter Monolitik mimari Microservice mimarisi
Uygulama yapısı Tek uygulama Bağımsız servisler
Kod tabanı Genellikle ortak Servis bazında ayrılabilir
Dağıtım Uygulamanın tamamı Her servis bağımsız
Ölçeklendirme Bütün uygulama İhtiyaç duyulan servis
Veri yönetimi Ortak veri tabanı olabilir Servis bazlı veri yönetimi
Teknoloji seçimi Ortak teknoloji yığını Servise göre değişebilir
Başlangıç kolaylığı Daha kolay Daha karmaşık
Operasyon Görece sade Dağıtık sistem yönetimi gerekir
Hata etkisi Uygulamanın tamamına yayılabilir Servis düzeyinde sınırlandırılabilir
Ekip yapısı Merkezi ekip Servis veya alan ekipleri
Test Tek uygulama üzerinden Servis ve entegrasyon testleri
İletişim gecikmesi Süreç içi çağrılar Ağ üzerinden çağrılar

Monolitik Yapının Avantajları

  • Başlangıçta daha kolay geliştirilebilir.
  • Yerel ortamda çalıştırılması daha kolaydır.
  • Servisler arası ağ iletişimi gerekmez.
  • Dağıtım süreci daha sade olabilir.
  • Dağıtık izleme altyapısı gerektirmez.
  • Küçük ekipler için daha düşük operasyon yükü oluşturabilir.
  • Veri tutarlılığı daha kolay yönetilebilir.

Monolitik Yapının Dezavantajları

Uygulama büyüdükçe:

  • Kod tabanı karmaşıklaşabilir.
  • Yeni geliştiricilerin projeye alışması zorlaşabilir.
  • Küçük değişiklikler bütün uygulamanın yayımlanmasını gerektirebilir.
  • Uygulamanın tamamı ölçeklendirilmek zorunda kalabilir.
  • Teknoloji yenilemesi zorlaşabilir.
  • Ekipler birbirinin çalışmalarını bekleyebilir.
  • Tek bir hata bütün sistemi etkileyebilir.

Microservice Mimarisi Nasıl Çalışır?

Microservice mimarisinde kullanıcı doğrudan bütün servislere bağlanmak yerine çoğunlukla ortak bir giriş noktası üzerinden sisteme ulaşır.

Basitleştirilmiş akış şu şekilde olabilir:

Kullanıcı
   |
API Gateway
   |
-----------------------------------------
|       |        |        |             |
Ürün   Sepet   Sipariş   Ödeme       Kullanıcı
Servisi Servisi Servisi  Servisi      Servisi

Kullanıcı bir sipariş oluşturduğunda:

  • API Gateway isteği karşılar.
  • Kimlik bilgileri doğrulanır.
  • Sipariş servisi sepet bilgilerini alır.
  • Stok servisi ürün uygunluğunu kontrol eder.
  • Ödeme servisi ödemeyi işler.
  • Sipariş kaydı oluşturulur.
  • Kargo servisine olay gönderilir.
  • Bildirim servisi müşteriye mesaj iletir.

Bu işlemler senkron veya asenkron iletişim yöntemleriyle yürütülebilir.

Microservice Mimarisinin Temel Bileşenleri

Mikroservisler

Sistemin belirli iş yeteneklerini yerine getiren bağımsız uygulamalardır.

Her servis için:

  • Sorumluluk
  • API sözleşmesi
  • Veri alanı
  • Ekip sahibi
  • Dağıtım süreci
  • İzleme metrikleri

açıkça belirlenmelidir.

API Gateway

API Gateway, kullanıcılar ile mikroservisler arasında ortak giriş noktası oluşturan bileşendir.

API Gateway şu işlemleri gerçekleştirebilir:

  • İstek yönlendirme
  • Kimlik doğrulama
  • Yetkilendirme
  • Trafik sınırlama
  • Yük dengeleme
  • Önbellekleme
  • Loglama
  • API sürüm yönetimi
  • Yanıt birleştirme

Kullanıcıların her servisin adresini ayrı ayrı bilmesi gerekmez.

API Gateway kullanılmadığında istemci uygulamalar çok sayıda servisle doğrudan bağlantı kurmak zorunda kalabilir. Bu durum güvenlik ve bağımlılık sorunları oluşturabilir.

Service Discovery

Microservice ortamlarında servislerin adresleri sabit olmayabilir. Servis örnekleri yük durumuna göre oluşturulabilir veya kaldırılabilir.

Service discovery, bir servisin iletişim kuracağı diğer servisin güncel ağ adresini bulmasını sağlar.

İki temel yöntem bulunur:

  • İstemci taraflı keşif
  • Sunucu taraflı keşif

Container orkestrasyon platformları servis keşfi özelliğini yerleşik olarak sunabilir.

Load Balancer

Load balancer, gelen trafiği aynı servisin farklı örnekleri arasında dağıtır.

Örneğin ürün servisinin beş örneği çalışıyorsa talepler bu örnekler arasında paylaştırılabilir.

Yük dengeleme:

  • Tek sunucuya aşırı yük binmesini önleyebilir.
  • Kullanılabilirliği artırabilir.
  • Servislerin yatay ölçeklenmesini destekleyebilir.
  • Hatalı örneklerin trafikten çıkarılmasını sağlayabilir.

Mesaj Kuyruğu ve Event Bus

Servislerin her zaman birbirine doğrudan ve eş zamanlı istek göndermesi gerekmez.

Mesaj kuyruğu veya event bus üzerinden olay tabanlı iletişim kurulabilir.

Örneğin sipariş tamamlandığında:

Sipariş oluşturuldu

olayı yayınlanabilir.

Bu olayı:

  • Stok servisi
  • Kargo servisi
  • Bildirim servisi
  • Analitik servisi

ayrı ayrı dinleyebilir.

Sipariş servisi bütün servislerin işlemi tamamlamasını beklemek zorunda kalmayabilir.

Veri Tabanları

Her mikroservis kendi veri tabanına veya veri şemasına sahip olabilir.

Kullanılabilecek sistemler:

  • İlişkisel veri tabanı
  • Belge tabanlı veri tabanı
  • Anahtar-değer deposu
  • Grafik veri tabanı
  • Arama motoru
  • Zaman serisi veri tabanı

olabilir.

Seçim servisin veri yapısına ve sorgu ihtiyacına göre yapılmalıdır.

Merkezi Yapılandırma

Servislerin:

  • Veri tabanı adresleri
  • API anahtarları
  • Ortam değişkenleri
  • Özellik bayrakları
  • Servis adresleri

kod içerisine sabit biçimde yazılmamalıdır.

Merkezi yapılandırma sistemi, geliştirme, test ve üretim ortamlarındaki ayarların daha güvenli yönetilmesini sağlar.

Loglama ve İzleme

Dağıtık sistemlerde bir kullanıcı isteği birden fazla servisten geçebilir.

Sorun oluştuğunda:

  • Hangi serviste hata meydana geldiği
  • İsteğin hangi servislerden geçtiği
  • Hangi işlemin geciktiği
  • Hangi veriyle çalışıldığı

belirlenmelidir.

Bu nedenle:

  • Merkezi loglama
  • Metrik toplama
  • Distributed tracing
  • Alarm sistemleri
  • Sağlık kontrolleri

kurulmalıdır.

Container Orkestrasyonu

Container sayısı arttığında bunların manuel olarak yönetilmesi zorlaşır.

Orkestrasyon platformları:

  • Container dağıtımı
  • Otomatik yeniden başlatma
  • Yatay ölçeklendirme
  • Servis keşfi
  • Yük dengeleme
  • Güncelleme
  • Gizli bilgi yönetimi

gibi görevleri yerine getirebilir.

CI/CD Sistemi

CI/CD, kod değişikliklerinin otomatik test, paketleme ve dağıtım süreçlerinden geçirilmesini sağlar.

Microservice mimarisinde her servisin bağımsız dağıtım hattına sahip olması değerlendirilebilir.

CI/CD süreci:

  • Kod kontrolü
  • Birim testleri
  • Güvenlik taraması
  • Container oluşturma
  • Entegrasyon testleri
  • Test ortamına dağıtım
  • Üretime dağıtım

aşamalarından oluşabilir.

Service Mesh

Service mesh, servisler arasındaki ağ iletişimini yöneten altyapı katmanıdır.

Service mesh:

  • Trafik yönetimi
  • Karşılıklı kimlik doğrulama
  • Şifreleme
  • Yeniden deneme
  • Zaman aşımı
  • Gözlemlenebilirlik
  • Canary dağıtımı

gibi yetenekler sunabilir.

Küçük sistemlerde service mesh gereksiz karmaşıklık oluşturabilir. Servis ve trafik sayısı arttığında değerlendirilmelidir.

Microservice İletişim Yöntemleri

Mikroservisler iki temel yöntemle iletişim kurabilir:

  • Senkron iletişim
  • Asenkron iletişim

Senkron İletişim

Senkron iletişimde servis bir istek gönderir ve yanıt gelmesini bekler.

Kullanılabilecek yöntemler:

  • REST API
  • gRPC
  • GraphQL
  • HTTP
  • WebSocket

olabilir.

Örnek:

Sipariş servisi, ürünün stokta bulunup bulunmadığını öğrenmek için stok servisine istek gönderir ve yanıt bekler.

Senkron İletişimin Avantajları

  • Uygulaması ve anlaşılması daha kolay olabilir.
  • İşlem sonucu anında alınabilir.
  • Basit sorgular için uygundur.
  • Hata yanıtı doğrudan döndürülebilir.

Senkron İletişimin Dezavantajları

  • Servisler birbirine bağımlı hâle gelebilir.
  • Zincirleme çağrılar gecikmeyi artırabilir.
  • Bir servisin çökmesi diğer işlemleri durdurabilir.
  • Trafik yoğunluğunda darboğaz oluşabilir.

Asenkron İletişim

Asenkron iletişimde servis bir mesaj veya olay gönderir ancak işlemin tamamlanmasını beklemek zorunda değildir.

Örnek:

Sipariş servisi, sipariş tamamlandığında bir olay yayınlar. Bildirim servisi bu olayı daha sonra işleyerek müşteriye e-posta gönderir.

Asenkron İletişimin Avantajları

  • Servisler arasındaki bağımlılığı azaltabilir.
  • Yoğun trafik kuyrukta bekletilebilir.
  • Sistem dayanıklılığını artırabilir.
  • Uzun süren işlemler arka planda yürütülebilir.
  • Bir olayı birden fazla servis tüketebilir.

Asenkron İletişimin Dezavantajları

  • Hata takibi zorlaşabilir.
  • Mesajların sırası önem kazanabilir.
  • Aynı mesaj birden fazla kez işlenebilir.
  • Nihai tutarlılık yaklaşımı gerekebilir.
  • Test ve hata ayıklama karmaşıklaşabilir.

Senkron ve Asenkron İletişim Karşılaştırması

Kriter Senkron iletişim Asenkron iletişim
Yanıt Anında beklenir Daha sonra işlenebilir
Bağımlılık Daha yüksek olabilir Daha düşüktür
Gecikme Zincirleme çağrılarda artabilir Kuyruk üzerinden yönetilebilir
Hata yönetimi Doğrudan yanıt alınır Ayrı hata ve tekrar sistemi gerekir
Kullanım Anlık sorgular Olaylar ve arka plan işlemleri
Örnek Stok sorgulama Bildirim gönderme

REST API ve gRPC Arasındaki Fark

Kriter REST API gRPC
Protokol Genellikle HTTP/HTTPS HTTP/2
Veri biçimi Çoğunlukla JSON Protocol Buffers
Okunabilirlik İnsan tarafından daha kolay okunur İkili format kullanabilir
Performans Genel web API’leri için uygundur Servisler arası iletişimde yüksek performans sunabilir
Tarayıcı desteği Yaygındır Ek çözümler gerekebilir
Sözleşme OpenAPI kullanılabilir Güçlü şema tanımı vardır
Akış desteği Sınırlı olabilir İki yönlü akış desteği bulunur

Teknoloji seçimi ekip deneyimi, performans ihtiyacı ve istemci türüne göre yapılmalıdır.

Microservice Mimarisinde Veri Yönetimi

Microservice mimarisinin en zor konularından biri dağıtık veri yönetimidir.

Monolitik sistemlerde birden fazla tablo tek işlem içerisinde güncellenebilir. Mikroservislerde ise veriler farklı servislerde bulunabilir.

Örneğin sipariş oluştururken:

  • Sipariş kaydı
  • Stok düşümü
  • Ödeme
  • Kargo kaydı

farklı servislerde gerçekleşebilir.

Bu işlemlerden biri başarısız olduğunda sistemin tutarlı durumda kalması gerekir.

Database per Service Yaklaşımı

Database per service, her mikroservisin kendi veri deposuna sahip olmasıdır.

Avantajları:

  • Veri bağımsızlığı sağlar.
  • Şema değişiklikleri diğer servisleri daha az etkiler.
  • Servise uygun veri tabanı seçilebilir.
  • Bağımsız ölçeklendirme kolaylaşabilir.

Dezavantajları:

  • Servisler arası raporlama zorlaşabilir.
  • Dağıtık işlemler karmaşıklaşır.
  • Veri tekrarları oluşabilir.
  • Tutarlılık yönetimi gerekir.

Ortak Veri Tabanı Kullanımı

Bütün servislerin aynı veri tabanını paylaşması başlangıçta daha kolay görünebilir.

Ancak servislerin birbirinin tablolarına doğrudan erişmesi:

  • Sıkı bağımlılık
  • Şema değişikliği riski
  • Bağımsız dağıtımın bozulması
  • Veri sahipliği belirsizliği
  • Performans sorunları

oluşturabilir.

Geçiş döneminde ortak veri tabanı kullanılabilir ancak uzun vadeli hedef ve sınırlar açıkça belirlenmelidir.

Saga Pattern Nedir?

Saga pattern, birden fazla mikroservisi kapsayan iş süreçlerinin küçük ve yerel işlemler hâlinde yürütülmesini sağlar.

Her adım başarılı olduğunda sonraki işleme geçilir. Bir adım başarısız olursa önceki işlemleri geri alan telafi adımları çalıştırılabilir.

Örnek sipariş süreci:

  • Sipariş oluşturulur.
  • Stok ayrılır.
  • Ödeme alınır.
  • Kargo kaydı açılır.

Ödeme başarısız olursa:

  • Ayrılan stok geri bırakılır.
  • Sipariş iptal edilir.
  • Kullanıcı bilgilendirilir.

Saga iki yöntemle uygulanabilir:

  • Koreografi
  • Orkestrasyon

CQRS Nedir?

CQRS, veriyi değiştiren komutlarla veriyi okuyan sorguların ayrılmasını ifade eden mimari yaklaşımdır.

Sistemde:

  • Yazma işlemleri ayrı model
  • Okuma işlemleri ayrı model

üzerinden yönetilebilir.

CQRS:

  • Karmaşık iş kurallarında
  • Okuma ve yazma yükünün farklı olduğu sistemlerde
  • Olay tabanlı yapılarda
  • Yüksek ölçek ihtiyacında

kullanılabilir.

Basit uygulamalarda CQRS gereksiz karmaşıklık oluşturabilir.

Event Sourcing Nedir?

Event sourcing, sistemin güncel durumunu doğrudan saklamak yerine meydana gelen olayları kaydeden yaklaşımdır.

Örneğin hesap bakiyesi yalnızca son tutar olarak değil:

  • Hesap açıldı
  • Para yatırıldı
  • Ödeme yapıldı
  • İade gerçekleşti

olayları şeklinde saklanabilir.

Bu olaylar yeniden işlenerek güncel durum oluşturulabilir.

Avantajları:

  • Ayrıntılı işlem geçmişi
  • Denetlenebilirlik
  • Geçmiş durumu yeniden oluşturma
  • Olay tabanlı entegrasyon

sağlayabilir.

Dezavantajları:

  • Veri modeli karmaşıklaşabilir.
  • Olay sürümleme gerekebilir.
  • Hata düzeltme zorlaşabilir.
  • Depolama ihtiyacı artabilir.

Nihai Tutarlılık Nedir?

Microservice mimarisinde bütün servislerin aynı anda tamamen güncel olması her zaman mümkün olmayabilir.

Nihai tutarlılık, sistemdeki verilerin belirli bir süre sonra tutarlı hâle gelmesini ifade eder.

Örneğin sipariş tamamlandığı anda:

  • Sipariş servisi durumu kaydedebilir.
  • Analitik raporu birkaç saniye sonra güncellenebilir.
  • Bildirim servisi daha sonra e-posta gönderebilir.

Her işlem için güçlü tutarlılık gerekmez. Finansal ve kritik işlemlerde ise daha sıkı kurallar uygulanmalıdır.

Container Nedir?

Container, bir uygulamanın kodunu ve bağımlılıklarını taşınabilir bir paket içerisinde çalıştırmayı sağlayan teknolojidir.

Container içerisinde:

  • Uygulama kodu
  • Çalışma zamanı
  • Kütüphaneler
  • Yapılandırma bağımlılıkları

bulunabilir.

Container sayesinde uygulama geliştirme, test ve üretim ortamlarında daha tutarlı biçimde çalıştırılabilir.

Microservice ile Container Aynı Şey mi?

Hayır. Microservice bir yazılım mimarisi, container ise uygulamaları paketleme ve çalıştırma yöntemidir.

Kriter Microservice Container
Türü Mimari yaklaşım Çalıştırma teknolojisi
Amacı Uygulamayı bağımsız servislere ayırmak Uygulamayı taşınabilir paket hâline getirmek
Zorunluluk Container olmadan kullanılabilir Monolitik uygulama da çalıştırabilir
Odak İş yetenekleri ve servis sınırları Çalışma ortamı ve bağımlılıklar

Mikroservisler:

  • Container
  • Sanal makine
  • Fiziksel sunucu
  • Serverless platform

üzerinde çalıştırılabilir.

Container kullanımı yaygındır ancak microservice mimarisi için zorunlu değildir.

Uygulamaların barındırıldığı altyapının temel yapısını öğrenmek için hosting nedir rehberi incelenebilir.

Kubernetes Nedir?

Kubernetes, container tabanlı uygulamaların dağıtılması, ölçeklendirilmesi ve yönetilmesi için kullanılan orkestrasyon platformudur.

Kubernetes:

  • Container’ları çalıştırabilir.
  • Hatalı container’ları yeniden başlatabilir.
  • Trafiği dağıtabilir.
  • Servis keşfi sağlayabilir.
  • Otomatik ölçeklendirme yapabilir.
  • Güncellemeleri aşamalı gerçekleştirebilir.
  • Gizli bilgileri yönetebilir.

Kubernetes kullanmak bir uygulamayı otomatik olarak microservice yapmaz. Monolitik uygulamalar da Kubernetes üzerinde çalıştırılabilir.

Küçük projelerde Kubernetes’in operasyon maliyeti sağladığı faydadan daha yüksek olabilir.

Serverless ile Microservice Arasındaki Fark

Serverless, geliştiricinin doğrudan sunucu yönetmeden fonksiyon veya uygulama çalıştırmasını sağlayan bulut hizmet modelidir.

Microservice bir mimari yaklaşım, serverless ise çalıştırma modelidir.

Mikroservisler serverless fonksiyonlar olarak uygulanabilir.

Kriter Microservice Serverless
Tanım Servis tabanlı mimari Altyapı yönetimini sağlayıcıya bırakan model
Çalıştırma Container, VM veya serverless Yönetilen platform
Ölçeklendirme Platforma göre yönetilir Genellikle otomatik
Ücretlendirme Ayrılan kaynağa göre olabilir Kullanım veya çağrı bazlı olabilir
Kontrol Daha yüksek olabilir Platform sınırlamaları bulunabilir

SOA ile Microservice Arasındaki Fark

SOA, yani servis odaklı mimari, uygulama yeteneklerinin yeniden kullanılabilir servisler olarak sunulmasını amaçlar.

Microservice mimarisi, SOA ile benzer ilkeler taşısa da daha küçük, bağımsız ve merkezi olmayan servis yapısına odaklanır.

Kriter SOA Microservice
Servis boyutu Daha geniş olabilir Belirli iş yeteneğine odaklanır
İletişim Merkezi servis veri yolu kullanılabilir Hafif API ve mesajlaşma
Veri yönetimi Ortak veri modeli olabilir Servis bazlı veri sahipliği
Dağıtım Birbirine bağlı olabilir Bağımsız dağıtım hedeflenir
Yönetim Merkezi yaklaşım Merkezi olmayan ekipler
Teknoloji Kurumsal standartlar baskın olabilir Servis bazlı seçim yapılabilir

Microservice Mimarisinin Avantajları

Bağımsız Geliştirme

Farklı ekipler ayrı servisler üzerinde çalışabilir.

Örneğin:

  • Ödeme ekibi ödeme servisini
  • Sipariş ekibi sipariş servisini
  • Arama ekibi arama servisini

geliştirebilir.

Hızlı Dağıtım

Küçük değişiklikler uygulamanın tamamı yerine yalnızca ilgili servis üzerinden yayımlanabilir.

Bu durum dağıtım süresini kısaltabilir ve değişiklik riskini azaltabilir.

Esnek Ölçeklendirme

Yoğun kullanılan servisler bağımsız ölçeklendirilebilir.

Kaynakların bütün uygulamaya eşit dağıtılması gerekmez.

Teknoloji Esnekliği

Her iş alanı için uygun programlama dili, framework veya veri tabanı kullanılabilir.

Ancak teknoloji çeşitliliğinin ekip kapasitesiyle uyumlu olması gerekir.

Hata Yalıtımı

Bir servisteki hata, doğru dayanıklılık tasarımıyla diğer servislerden izole edilebilir.

Ekip Bağımsızlığı

Ekipler kendi servislerinin:

  • Kodundan
  • Testlerinden
  • Dağıtımından
  • İzlenmesinden
  • Operasyonundan

sorumlu olabilir.

Büyük Uygulamaların Yönetimi

İş alanlarına göre ayrılan servisler, büyük uygulamaların daha anlaşılır bölümlere ayrılmasını sağlayabilir.

Microservice Mimarisinin Dezavantajları

Dağıtık Sistem Karmaşıklığı

Tek uygulama yerine çok sayıda ağ bağlantılı servis yönetilir.

Aşağıdaki sorunlar ortaya çıkabilir:

  • Ağ gecikmesi
  • Paket kaybı
  • Servis kesintisi
  • Zaman aşımı
  • Mesaj tekrarı
  • Veri tutarsızlığı

Operasyon Maliyeti

Her servis için:

  • Dağıtım
  • İzleme
  • Loglama
  • Güvenlik
  • Sürüm
  • Altyapı

yönetimi gerekebilir.

Veri Tutarlılığı

Farklı veri tabanlarındaki işlemlerin aynı anda tutarlı tutulması monolitik sisteme göre daha zordur.

Test Karmaşıklığı

Bir servisin tek başına çalışması yeterli değildir. Servisler arasındaki sözleşmeler ve entegrasyonlar da test edilmelidir.

Hata Ayıklama

Bir kullanıcı işlemi çok sayıda servisten geçtiğinde hatanın kaynağını bulmak zorlaşabilir.

Ağ Maliyeti

Monolitik uygulamadaki süreç içi fonksiyon çağrıları, microservice sisteminde ağ çağrılarına dönüşür.

Bu durum:

  • Gecikme
  • Bant genişliği
  • Güvenlik
  • Hata yönetimi

gereksinimlerini artırır.

Nitelikli Ekip İhtiyacı

Microservice mimarisi:

  • DevOps
  • Bulut
  • Container
  • Dağıtık sistem
  • Güvenlik
  • Gözlemlenebilirlik

konularında yetkinlik gerektirir.

Microservice Mimarisi Ne Zaman Kullanılmalıdır?

Microservice yaklaşımı şu durumlarda değerlendirilebilir:

  • Uygulama kapsamı büyükse
  • Birden fazla bağımsız ekip çalışıyorsa
  • Servislerin trafik ihtiyaçları farklıysa
  • Sık ve bağımsız dağıtım gerekiyorsa
  • Yüksek erişilebilirlik önemliyse
  • İş alanları açık biçimde ayrılabiliyorsa
  • Güçlü DevOps altyapısı bulunuyorsa
  • Uygulama uzun vadede büyüyecekse
  • Farklı teknoloji ihtiyaçları bulunuyorsa

Microservice Mimarisi Ne Zaman Kullanılmamalıdır?

Aşağıdaki durumlarda monolitik veya modüler monolit daha uygun olabilir:

  • Proje küçükse
  • Ürün fikri henüz doğrulanmamışsa
  • Ekip birkaç kişiden oluşuyorsa
  • İş alanı sınırları belirgin değilse
  • DevOps deneyimi bulunmuyorsa
  • Trafik ve ölçek ihtiyacı düşükse
  • Uygulama kısa süreli kullanılacaksa
  • Operasyon bütçesi sınırlıysa

Başlangıçta microservice kullanmak her zaman geleceğe yatırım anlamına gelmez. Gereksiz dağıtık sistem karmaşıklığı ürün geliştirme hızını azaltabilir.

Modüler Monolit Nedir?

Modüler monolit, tek bir uygulama olarak dağıtılan ancak kod içerisinde iş alanlarına göre güçlü modüllere ayrılan mimaridir.

Örneğin:

  • Kullanıcı modülü
  • Ürün modülü
  • Sipariş modülü
  • Ödeme modülü

aynı uygulama içerisinde bulunur ancak birbirinden açık sınırlarla ayrılır.

Modüler monolit:

  • Microservice’e göre daha kolay işletilebilir.
  • Tek dağıtım birimine sahiptir.
  • Servisler arası ağ gecikmesi oluşturmaz.
  • Gelecekte microservice’e ayrılmayı kolaylaştırabilir.

Birçok yeni proje için önce modüler monolit tasarlamak, sistem büyüdükçe gerekli modülleri servislere ayırmak daha dengeli bir yaklaşım olabilir.

Microservice Mimarisinde Servis Sınırları Nasıl Belirlenir?

Servis sınırlarının doğru belirlenmesi mimarinin başarısını doğrudan etkiler.

Servisler:

  • Teknik katmanlara göre değil
  • İş yeteneklerine göre

ayrılmalıdır.

Zayıf ayrım örneği:

  • Veri tabanı servisi
  • İş mantığı servisi
  • Doğrulama servisi

Bu servisler her işlemde birbirine bağımlı olabilir.

Daha uygun ayrım:

  • Sipariş yönetimi
  • Ödeme yönetimi
  • Stok yönetimi
  • Kargo yönetimi

Her servis uçtan uca belirli bir iş yeteneğini yerine getirir.

Domain-Driven Design ve Bounded Context

Domain-Driven Design, karmaşık iş alanlarının iş kuralları ve kavramlar üzerinden modellenmesini sağlayan yaklaşımdır.

Bounded context, belirli bir iş modelinin ve kavramların geçerli olduğu açık sınırı ifade eder.

Örneğin “müşteri” kavramı:

  • Satış sisteminde potansiyel alıcı
  • Faturalama sisteminde borçlu
  • Destek sisteminde talep sahibi

anlamına gelebilir.

Her alan kendi müşteri modelini kullanabilir.

Servis sınırlarını bounded context’lere göre belirlemek, gereksiz bağımlılıkları azaltabilir.

Microservice Mimarisinde Güvenlik

Microservice yapısında güvenlik yalnızca dışarıdan gelen trafiği korumakla sınırlı değildir. Servisler arası iletişim de güvenli olmalıdır.

Kontrol edilmesi gerekenler:

  • Kimlik doğrulama
  • Yetkilendirme
  • API güvenliği
  • Servisler arası şifreleme
  • Gizli bilgi yönetimi
  • Trafik sınırlama
  • Güvenlik duvarı
  • Loglama
  • Veri şifreleme
  • Güvenlik güncellemeleri
  • Container imaj taraması
  • Bağımlılık kontrolleri

Zero Trust Yaklaşımı

Zero Trust yaklaşımında hiçbir kullanıcı, cihaz veya servis yalnızca ağ içerisinde bulunduğu için güvenilir kabul edilmez.

Her istek için:

  • Kimlik
  • Yetki
  • Cihaz
  • Bağlam
  • Erişim kapsamı

kontrol edilebilir.

Servisler arası karşılıklı TLS kullanılarak her iki tarafın kimliği doğrulanabilir.

API Güvenliği

API’lerde şu önlemler alınabilir:

  • Token tabanlı kimlik doğrulama
  • Yetki kapsamları
  • Rate limiting
  • Giriş doğrulama
  • İstek boyutu sınırı
  • Güvenli hata mesajları
  • API sürümleme
  • Şüpheli trafik tespiti

API Gateway ortak güvenlik politikalarının uygulanmasını kolaylaştırabilir.

Microservice Mimarisinde Test Türleri

Birim Testleri

Servis içerisindeki fonksiyon ve sınıfları izole biçimde test eder.

Entegrasyon Testleri

Servisin:

  • Veri tabanı
  • Mesaj kuyruğu
  • Harici API
  • Önbellek

gibi bileşenlerle çalışmasını kontrol eder.

Contract Testleri

Servislerin birbirinden beklediği API sözleşmelerini test eder.

Bir servis yanıt biçimini değiştirdiğinde tüketici servislerin bozulup bozulmayacağı belirlenebilir.

Uçtan Uca Testler

Kullanıcı işleminin bütün servisler üzerinden doğru ilerleyip ilerlemediğini kontrol eder.

Uçtan uca testler değerlidir ancak yavaş ve kırılgan olabilir. Bütün test stratejisi yalnızca uçtan uca testlere dayandırılmamalıdır.

Yük Testleri

Servislerin yüksek trafik altındaki:

  • Yanıt süresi
  • Kaynak tüketimi
  • Hata oranı
  • Ölçeklenme davranışı

ölçülür.

Dayanıklılık Testleri

Servis kesintisi, ağ gecikmesi veya veri tabanı hatası gibi durumlarda sistemin davranışı test edilir.

Microservice Mimarisinde Gözlemlenebilirlik

Observability, sistemin dış çıktılarından iç durumunun anlaşılabilmesini ifade eder.

Üç temel bileşeni bulunur:

  • Loglar
  • Metrikler
  • İzler

Loglar

Serviste gerçekleşen olayların ayrıntılarını gösterir.

Metrikler

Sayısal performans verileridir:

  • İstek sayısı
  • Hata oranı
  • Yanıt süresi
  • CPU kullanımı
  • Bellek kullanımı
  • Kuyruk uzunluğu

Distributed Tracing

Bir isteğin farklı servislerden geçişini takip eder.

Her isteğe benzersiz bir kimlik verilerek zincirin hangi bölümünde gecikme veya hata oluştuğu belirlenebilir.

Microservice Mimarisinde Performans

Microservice mimarisi otomatik olarak daha hızlı bir uygulama oluşturmaz.

Servisler arasındaki ağ çağrıları gecikme ekleyebilir.

Performansı geliştirmek için:

  • Gereksiz servis çağrıları azaltılmalı
  • Uygun önbellek kullanılmalı
  • Yanıt boyutları küçültülmeli
  • Asenkron işlemler tercih edilmeli
  • Veri sorguları optimize edilmeli
  • Timeout değerleri belirlenmeli
  • Yoğun servisler ayrı ölçeklendirilmeli
  • API Gateway darboğazı izlenmelidir

Web uygulamasının kullanıcıya yansıyan hızını ölçmek için Google PageSpeed Insights kullanılabilir.

Microservice Mimarisinin SEO’ya Etkisi

Microservice mimarisi doğrudan bir arama motoru sıralama faktörü değildir.

Ancak uygulamanın:

  • Sayfa hızı
  • Kullanılabilirliği
  • Kesinti oranı
  • Sunucu yanıt süresi
  • HTML oluşturma biçimi
  • URL yapısı
  • JavaScript işleme süreci

üzerinde etkili olabilir.

SEO açısından dikkat edilmesi gerekenler:

  • Arama motorlarına eksiksiz HTML sunulması
  • Sayfaların hızlı açılması
  • URL’lerin tutarlı kalması
  • Yönlendirmelerin doğru yapılması
  • Canonical etiketlerinin korunması
  • Hata durumlarında doğru HTTP kodlarının dönmesi
  • Site haritalarının güncel tutulması
  • JavaScript bağımlılığının kontrol edilmesi

Microservice’e geçiş sırasında URL’lerin veya sayfa oluşturma sisteminin değişmesi organik performansı etkileyebilir.

Bu nedenle mimari değişikliklerde teknik SEO gereksinimleri geliştirme sürecine dâhil edilmelidir.

E-Ticaret Microservice Örneği

Bir e-ticaret sistemi şu mikroservislerden oluşabilir:

Servis Sorumluluk
Kullanıcı servisi Üyelik ve kullanıcı bilgileri
Kimlik servisi Giriş ve yetkilendirme
Ürün servisi Ürün bilgileri
Arama servisi Ürün arama ve filtreleme
Stok servisi Stok miktarları
Sepet servisi Kullanıcı sepetleri
Sipariş servisi Sipariş oluşturma ve durum
Ödeme servisi Tahsilat ve iade
Kargo servisi Gönderi ve takip
Bildirim servisi E-posta ve SMS
Kampanya servisi Kupon ve indirim
Analitik servisi Raporlama ve olay analizi

Kullanıcı sipariş verdiğinde farklı servisler ortak bir iş akışı içerisinde çalışır.

E-ticaret uygulamasının kullanıcı arayüzü ve satış altyapısı planlanırken e-ticaret web sitesi nasıl kurulur rehberinden yararlanılabilir.

Microservice Mimarisi Geçiş Süreci

Monolitik bir uygulamanın tek seferde tamamen microservice’e dönüştürülmesi yüksek risk oluşturabilir.

Aşamalı geçiş daha kontrollü olabilir.

Mevcut Sistemi Analiz Edin

  • Kod bağımlılıkları
  • Veri tabanı tabloları
  • İş alanları
  • Trafik yoğunluğu
  • Sık değişen bölümler
  • Hata kaynakları
  • Ekip sorumlulukları

incelenmelidir.

İş Alanlarını Belirleyin

Uygulama teknik katmanlara değil, iş yeteneklerine göre bölümlere ayrılmalıdır.

Öncelikli Servisi Seçin

İlk ayrılacak servis:

  • Sınırları açık
  • Diğer alanlardan görece bağımsız
  • Sık değişen
  • Ayrı ölçek ihtiyacı bulunan

bir bölüm olabilir.

Strangler Pattern Uygulayın

Strangler pattern, monolitik uygulamanın belirli özelliklerinin aşamalı biçimde yeni servislere taşınmasını ifade eder.

Yeni istekler yönlendirme katmanı üzerinden ilgili microservice’e gönderilir. Eski monolit zaman içinde küçültülür.

Veri Sahipliğini Ayırın

Yeni servisin hangi verilerden sorumlu olduğu belirlenir.

Doğrudan ortak tablo kullanımından servis kontrollü veri erişimine aşamalı geçiş yapılabilir.

İzleme Altyapısını Kurun

Servis sayısı artmadan önce:

  • Merkezi log
  • Metrik
  • İzleme
  • Alarm
  • Dağıtık tracing

altyapısı hazırlanmalıdır.

CI/CD Oluşturun

Her servisin güvenli ve tekrar edilebilir biçimde yayımlanması sağlanmalıdır.

Geçiş Sonuçlarını Ölçün

Geçişin:

  • Dağıtım sıklığı
  • Hata oranı
  • Yanıt süresi
  • Geliştirme süresi
  • Altyapı maliyeti
  • Ekip verimliliği

üzerindeki etkisi ölçülmelidir.

Microservice Geçiş Yol Haritası

Aşama Yapılması gereken
Analiz Monolitik sistemin bağımlılıklarını belirlemek
Alan modelleme İş yeteneklerini ve sınırları tanımlamak
Öncelik İlk ayrılacak servisi seçmek
API tasarımı Servis sözleşmelerini hazırlamak
Veri ayrımı Veri sahipliğini belirlemek
Altyapı CI/CD, loglama ve izleme kurmak
Pilot İlk servisi üretime almak
Ölçüm Teknik ve operasyonel sonuçları takip etmek
Yaygınlaştırma Uygun modülleri aşamalı ayırmak

Microservice Mimarisinde Yapılan Hatalar

  • Küçük projeyi gereksiz yere servislere bölmek
  • Servis sınırlarını teknik katmanlara göre belirlemek
  • Çok fazla küçük servis oluşturmak
  • Bütün servislerin aynı veri tabanını doğrudan kullanması
  • Her işlemde uzun senkron çağrı zinciri kurmak
  • API sözleşmelerini sürümlememek
  • Merkezi loglama oluşturmamak
  • Distributed tracing kullanmamak
  • Hata senaryolarını test etmemek
  • Timeout belirlememek
  • Sınırsız yeniden deneme yapmak
  • Güvenliği yalnızca API Gateway’e bırakmak
  • Her servis için farklı teknoloji seçmek
  • CI/CD olmadan servis sayısını artırmak
  • Ekip sorumluluklarını belirlememek
  • Monolitik uygulamayı tek seferde dönüştürmek
  • Operasyon maliyetini hesaplamamak
  • Container kullanmayı microservice sanmak
  • Kubernetes’i her proje için zorunlu görmek
  • Kullanıcı deneyimi ve SEO etkisini değerlendirmemek

Microservice ve Monolitik Mimari Seçim Tablosu

Proje durumu Önerilebilecek yaklaşım
Yeni ve küçük ürün Monolitik veya modüler monolit
Ürün fikri henüz doğrulanmadı Basit monolit
Küçük geliştirme ekibi Modüler monolit
Birden fazla bağımsız ekip Microservice değerlendirilebilir
Servislerin trafik ihtiyacı farklı Microservice avantaj sağlayabilir
Sık bağımsız dağıtım gerekiyor Microservice uygun olabilir
DevOps altyapısı bulunmuyor Önce operasyon kabiliyeti geliştirilmelidir
Büyük ve karmaşık iş alanı Domain analiziyle microservice değerlendirilebilir
Düşük trafik ve sabit ürün Monolitik yapı yeterli olabilir

Microservice Mimarisi Kontrol Listesi

Mimari Tasarım

  • Uygulamanın iş alanları belirlendi mi?
  • Servis sınırları açık mı?
  • Her servis tek bir iş yeteneğine odaklanıyor mu?
  • Servislerin bağımsız dağıtılması mümkün mü?
  • Servis sahipleri belirlendi mi?
  • API sözleşmeleri hazır mı?
  • Sürümleme stratejisi oluşturuldu mu?
  • Senkron ve asenkron iletişim ayrıldı mı?
  • Hata senaryoları tasarlandı mı?
  • Dağıtık monolit riski değerlendirildi mi?

Veri Yönetimi

  • Her verinin sahibi olan servis belli mi?
  • Servisler birbirinin veri tabanına doğrudan erişiyor mu?
  • Veri tutarlılığı gereksinimleri belirlendi mi?
  • Dağıtık işlemler planlandı mı?
  • Saga gerekli mi?
  • Veri tekrarları yönetiliyor mu?
  • Raporlama yapısı hazır mı?
  • Yedekleme planı oluşturuldu mu?
  • Veri geçişi test edildi mi?

Altyapı ve Dağıtım

  • Her servis için CI/CD bulunuyor mu?
  • Container kullanımı gerekli mi?
  • Orkestrasyon platformu belirlendi mi?
  • Service discovery çalışıyor mu?
  • Load balancing hazır mı?
  • Yapılandırmalar dışarıdan yönetiliyor mu?
  • Gizli bilgiler güvenli saklanıyor mu?
  • Otomatik ölçeklendirme kuralları hazır mı?
  • Geri alma planı bulunuyor mu?
  • Canary veya blue-green dağıtım değerlendirildi mi?

Dayanıklılık

  • Timeout değerleri belirlendi mi?
  • Yeniden deneme kuralları sınırlı mı?
  • Circuit breaker kullanılıyor mu?
  • İdempotent işlemler tasarlandı mı?
  • Mesaj tekrarları yönetiliyor mu?
  • Servis kesintisi senaryoları test edildi mi?
  • Kritik olmayan servisler için yedek cevap var mı?
  • Kuyruk dolulukları izleniyor mu?
  • Hatalı mesaj kuyruğu bulunuyor mu?

Güvenlik

  • Kimlik doğrulama merkezi mi?
  • Yetkilendirme servis bazında uygulanıyor mu?
  • Servisler arası trafik şifreli mi?
  • API rate limiting bulunuyor mu?
  • Gizli bilgiler koddan ayrıldı mı?
  • Container imajları taranıyor mu?
  • Bağımlılıklar güncel mi?
  • Güvenlik olayları loglanıyor mu?
  • En az yetki ilkesi uygulanıyor mu?

İzleme ve Operasyon

  • Merkezi loglama çalışıyor mu?
  • Metrikler toplanıyor mu?
  • Distributed tracing aktif mi?
  • Servis sağlık kontrolleri bulunuyor mu?
  • Hata oranları izleniyor mu?
  • Yanıt süreleri takip ediliyor mu?
  • Alarmlar tanımlandı mı?
  • Olay müdahale planı hazır mı?
  • Servis sahipleri belli mi?
  • Altyapı maliyetleri ölçülüyor mu?

Microservice Mimarisi Hakkında Sıkça Sorulan Sorular

Microservice mimarisi nedir?

Büyük bir uygulamanın belirli iş yeteneklerine odaklanan küçük ve bağımsız servislere ayrıldığı yazılım mimarisidir.

Mikroservis ne işe yarar?

Uygulamanın farklı bölümlerinin bağımsız geliştirilmesini, dağıtılmasını ve ölçeklendirilmesini sağlayabilir.

Monolitik mimari nedir?

Uygulamanın temel bileşenlerinin tek bir uygulama paketi içerisinde geliştirildiği mimaridir.

Microservice ile monolitik mimari arasındaki fark nedir?

Monolitik uygulama tek birim olarak dağıtılır. Microservice yapısında servisler bağımsız olarak dağıtılabilir.

Microservice mimarisi her proje için uygun mudur?

Hayır. Küçük projelerde ve sınırlı ekiplerde gereksiz teknik ve operasyonel karmaşıklık oluşturabilir.

Microservice için container zorunlu mu?

Hayır. Container kullanımı yaygındır ancak mikroservisler sanal makine, fiziksel sunucu veya serverless platformlarda da çalışabilir.

Docker ile microservice aynı şey mi?

Hayır. Docker bir container teknolojisidir; microservice ise yazılım mimarisi yaklaşımıdır.

Kubernetes microservice midir?

Hayır. Kubernetes container uygulamalarını yöneten orkestrasyon platformudur.

Microservice mimarisinde her servisin ayrı veri tabanı mı olmalıdır?

Genel yaklaşım her servisin kendi verisinden sorumlu olmasıdır. Fiziksel olarak tamamen ayrı veri tabanı zorunluluğu proje koşullarına göre değerlendirilebilir.

Servisler birbiriyle nasıl iletişim kurar?

REST, gRPC, mesaj kuyruğu veya olay tabanlı sistemler üzerinden iletişim kurabilir.

API Gateway ne işe yarar?

İstemciler için ortak giriş noktası oluşturur; yönlendirme, güvenlik ve trafik yönetimi yapabilir.

Service discovery nedir?

Servislerin iletişim kuracağı diğer servislerin güncel ağ adreslerini bulmasını sağlayan mekanizmadır.

Service mesh nedir?

Servisler arası ağ iletişimini güvenlik, izleme ve trafik yönetimi açısından yöneten altyapı katmanıdır.

Saga pattern nedir?

Birden fazla servisi kapsayan işlemleri yerel adımlara ve gerektiğinde telafi işlemlerine ayıran tasarım yaklaşımıdır.

CQRS nedir?

Veriyi değiştiren komutlarla veriyi okuyan sorguların ayrı modellerde yönetilmesini sağlayan yaklaşımdır.

Event sourcing nedir?

Sistemin durumunu yalnızca son değer olarak değil, gerçekleşen olayların sırası şeklinde saklayan yöntemdir.

Nihai tutarlılık nedir?

Dağıtık verilerin anında değil, belirli bir süre sonunda tutarlı hâle gelmesidir.

Microservice mimarisi daha hızlı mıdır?

Otomatik olarak daha hızlı değildir. Ağ çağrıları gecikme oluşturabilir. Doğru ölçeklendirme ve optimizasyonla performans avantajı sağlanabilir.

Microservice mimarisi daha güvenli midir?

Doğru tasarlanırsa güvenlik sınırları oluşturabilir. Ancak servis ve API sayısının artması saldırı yüzeyini de genişletebilir.

Microservice mimarisi maliyetli midir?

Altyapı, izleme, DevOps ve operasyon gereksinimleri nedeniyle başlangıç ve işletme maliyeti monolitik yapıya göre daha yüksek olabilir.

Microservice SEO’yu etkiler mi?

Doğrudan sıralama faktörü değildir. Sayfa hızı, kesintiler, URL yapısı ve HTML oluşturma süreçleri üzerinden dolaylı etki oluşturabilir.

Microservice’e nasıl geçilir?

Mevcut sistem analiz edilir, iş alanları belirlenir ve uygun modüller aşamalı olarak bağımsız servislere taşınır.

Strangler pattern nedir?

Monolitik uygulamanın özelliklerinin aşamalı olarak yeni servislere taşındığı geçiş yöntemidir.

Modüler monolit nedir?

Tek uygulama olarak dağıtılan ancak kod içerisinde bağımsız iş modüllerine ayrılan mimaridir.

Microservice ile SOA aynı mı?

Hayır. Benzer servis ilkeleri taşısalar da microservice daha bağımsız, küçük ve merkezi olmayan servis yapısına odaklanır.

Microservice ekipleri nasıl çalışmalıdır?

Her ekip sorumlu olduğu servisin geliştirme, test, dağıtım ve operasyon süreçlerini uçtan uca yönetebilir.

Microservice mimarisi hangi uygulamalarda kullanılır?

E-ticaret, finans, medya, lojistik, SaaS, haberleşme ve yüksek ölçekli kurumsal uygulamalarda kullanılabilir.

Doğru Mimariyi Projenin Gerçek İhtiyaçlarına Göre Belirleyin

Microservice mimarisi, büyük ve karmaşık yazılım sistemlerinin bağımsız iş yeteneklerine odaklanan servislere ayrılmasını sağlayan güçlü bir mimari yaklaşımdır.

Bu yapının temel özellikleri:

  • Bağımsız servisler
  • Ayrı dağıtım süreçleri
  • Servis bazlı ölçeklendirme
  • API ve olay tabanlı iletişim
  • Servis kontrollü veri yönetimi
  • Ekip bağımsızlığı
  • Hata yalıtımı

olarak sıralanabilir.

Microservice mimarisi doğru uygulandığında:

  • Geliştirme ekiplerinin daha bağımsız çalışmasını
  • Yeni sürümlerin daha hızlı yayımlanmasını
  • Yoğun servislerin ayrı ölçeklendirilmesini
  • Farklı teknolojilerin ihtiyaç doğrultusunda kullanılmasını
  • Hataların belirli servislerde sınırlandırılmasını

sağlayabilir.

Bununla birlikte bu yaklaşım:

  • Dağıtık veri yönetimi
  • Ağ gecikmeleri
  • Servis güvenliği
  • Merkezi loglama
  • Dağıtık izleme
  • CI/CD
  • DevOps
  • Container orkestrasyonu

gibi ek gereksinimler oluşturur.

Bu nedenle microservice mimarisi yalnızca popüler olduğu için tercih edilmemelidir.

Küçük bir ekip tarafından geliştirilen, düşük trafik alan ve iş sınırları henüz net olmayan bir uygulamada modüler monolit daha verimli olabilir. Uygulama ve ekip büyüdükçe ihtiyaç duyulan modüller aşamalı olarak bağımsız servislere ayrılabilir.

Mimari karar verilirken şu sorular cevaplanmalıdır:

  • Uygulama gerçekten bağımsız ölçeklendirmeye ihtiyaç duyuyor mu?
  • Servis sınırları açık biçimde belirlenebiliyor mu?
  • Ekipler bağımsız çalışabilecek büyüklükte mi?
  • CI/CD ve izleme altyapısı bulunuyor mu?
  • Dağıtık sistemlerin operasyon maliyeti karşılanabilir mi?
  • Microservice yaklaşımı ölçülebilir bir iş faydası sağlayacak mı?

En iyi mimari en fazla teknoloji içeren yapı değildir. Projenin büyüklüğüne, ekip kapasitesine, trafik ihtiyacına ve ticari hedeflerine en uygun yapıdır.

Kullanıcıların farklı cihazlardan erişebileceği modern uygulama arayüzleri oluşturmak için responsive web tasarım ilkeleri uygulanabilir.

Web uygulaması, yazılım altyapısı ve kullanıcı deneyiminin birlikte planlanması için profesyonel web tasarım çalışmaları yürütülebilir.

Yorum yazın

E-posta adresiniz yayınlanmaz. Gerekli alanlar işaretlendi.