smaple.tr
mikroservis

Monolitten Mikroservise Geçiş Stratejisi

Mehmet Kurtipek
January 5, 2026
7 min read
mikroservis
monolith
mimari geçiş
strangler fig
ddd
microservices

Monolitik Mimari: Niçin Başlıyor, Niçin Sona Eriyor

Yazılım projeleri neredeyse her zaman monolitik başlar. Tüm kod, bir uygulamada. Basit, hızlı, yönetilesi kolay.

Başlangıç aşamasında mükemmel. Bir geliştirici, tüm sistemi anlar. Veri tutarlılığı kolay. Dağıtım basit (bir dosya).

Ama yazılım büyüdükçe, monolitin sınırları ortaya çıkar.

Ölçekleme Sorunu: Bir özelliği yüksek trafiği işlemek için ölçeklemek istiyorsunuz. Ama monoliti ölçekleniyorsunuz—tüm uygulamayı. Kaynak israfı.

Dağıtım Sorunu: Her değişiklik, tüm sistemi etkileyebilir. Bir ekip, satış özellik geliştiriyor; başka ekip, rapor modülü. Beraber çalışmak, birbirinin kodunu kırma riski var. Dağıtım süreci, sıkı koordinasyon gerektirir.

Teknoloji Bağlılığı: Monoliti Java'da yazdıysanız, tüm yenilikler Java'ya bağlı. Python'da harika bir kütüphane varsa, kullanamazsınız.

Ekip Yapısı: "Bu modül, kimin sorumluluğu?" muğlak hale gelir. Her ekip, kodu birbirine sokan bağımlılıklar yaratabilir.

Bu sorunları çözmek için, kuruluşlar mikroservisleri düşünmeye başlıyor.

Monolitik vs Mikroservis: Karşılaştırma

Boyut Monolith Microservices
Mimarisi Tek parça Birçok küçük hizmet
Dağıtım Bir dosya Her hizmet, kendi dağıtımı
Skalabilite Tüm sistem ölçeklenir Gerekli hizmet ölçeklenir
Teknoloji Bir stack Her hizmet kendi stack'ı olabilir
Veri Yönetimi Merkezi DB Her hizmetin DB'si olabilir
İletişim In-process çağrısı Network/REST/gRPC
Öğrenme Eğrisi Basit Karmaşık
Operasyonel Karmaşıklık Düşük Yüksek
Network Hataları Az Daha fazla
Distributed Debugging Kolay Zor

Mikroservislerin avantajı: Esneklik, bağımsız ölçekleme, teknoloji çeşitliliği.

Dezavantajı: Operasyonel karmaşıklık, dağıtılmış sistem zorlukları, artan ağ gecikme.

Mikroservis Mimarisi Ne Zaman Mantıklı?

Mikroservislere geçme kararı, basit değil. Eğer sistem yeterince büyük ve karmaşıklıkla bağlı değilse, monolith daha iyidir.

Mikroservis mantıklı olabilir:

  1. Bağımsız Ekipler: En az 3-5 ekip, farklı özellikler üzerinde çalışıyor, birbirinin kodu kesişmemeleri gerekiyor.

  2. Farklı Skalabilite Gereksinimleri: Bazı modüller yüksek trafiği işlemeli (örneğin, arama), bazıları az (örneğin, admin paneli).

  3. Farklı Teknoloji Gereksinimleri: Bazı modüller Python'da iyi (data processing), bazıları Go'da (API sunucusu).

  4. Bağımsız Dağıtım: Bir özelliği, diğer özellikleri etkilemeden yayımlamak istiyorsunuz.

  5. Yüksek Güvenilirlik: Bir modülün hatası, tüm sistemi kırmamalı.

Eğer bu koşullar yok ise, monolith daha iyi.

Amazon'dan ünlü söz: "Microservices is a solution to an organizational problem, not a technical problem." Yani, eğer ekip sorununuz yoksa, teknoloji sorununuz da yoktur.

Strangler Fig Pattern: Güvenli Geçiş

Tüm monoliti bir anda mikroservislere dönüştürmek, çok riskli. Strangler Fig pattern, bu riski minimize eder.

Desen, budak bitkilerinden ilham alır. Budak bitkisi, ağacı sararak, kademeli olarak onu denetim altına alır. Eski sistem, yavaş yavaş yeni sistem tarafından sarılır.

Adımlar:

  1. Yeni Mikservisi İnşa Et: Monoliti parçalamaya çalışmadan, yeni hizmet, monolite paralel olarak yazılır.

  2. Routing Ekle: İstek, ya monolite ya da yeni hizmete yönlendirilir. Başında, küçük oranda trafiği yeni hizmete gönder (yüzde 5 gibi).

  3. Yavaş Artır: Trafiği kademeli olarak artır. Yüzde 10, sonra yüzde 25. Sorun yoksa, yüzde 100'e çık.

  4. Monoliti Boş Bırak: Mikservis tüm trafiği aldığında, monolitin o kısmı devre dışı bırakılır.

  5. Tekrarlama: Sonraki mikservis, aynı pattern.

Avantaj: Düşük risk, tersine alma kolay, üretim ortamında test etme.

Dezavantaj: Paralel sistemler çalıştırmanın maliyeti, veri senkronizasyonu karmaşık.

Domain-Driven Design: Hizmet Sınırlarını Belirlemek

Mikroservislerin başarısı, hizmet sınırlarının doğru belirlenmesine dayanır. Kötü sınırlar, microservises'in avantajlarını kaybettirmektedir.

Domain-Driven Design (DDD), alan modelleme yöntemi. İşletme alanını çeşitli "bounded context"'lere ayırır.

Örnek: E-Commerce

Bounded Context'ler:

  • Ürün Katalog: Ürünler, kategoriler, fiyatlar
  • Sepet: Alışveriş sepeti, ödeme hazırlığı
  • Ödeme: Ödeme işleme, parasal işlemler
  • Kargo: Sipariş göndericileri, teslimat takibi
  • Kullanıcı: Hesap, profil, tercihler

Her bounded context, bir mikservis olabilir. İçinde tutarlı olmayı ("Ürün Katalog", kendi ürün ID'sini ve fiyatını yönetir). Arası, açık API aracılığıyla iletişim.

Sınırlar, teknoloji tarafından değil, işletme alanı tarafından belirlenmelidir. DDD eğitimi, bir investmentdir, ama bunu doğru yapmak uzun vadede tasarruf yaratır.

Veri Yönetimi: Dağıtılmış Sistem Zorlukları

Monolitte, tüm veri merkezi veritabanında. Bir işlem, atomik'tir—ya tümü başarılı, ya tümü başarısız.

Mikroservislerde, her hizmetin DB'si olabilir. İşlem, dağıtılır:

Senaryo: Müşteri, satın alıyor. Sepet -> Ödeme -> Envanter -> Kargo.

Sorun: Ödeme başarılı, ama envanter update başarısız? Tutarsızlık.

Çözüm 1: Saga Pattern

İşlemi adımlar halinde yönet. Her adım, başarılı veya başarısız olabilir. Başarısız olursa, geri alma (compensating transaction) yapıl.

Örneğin:

  • Ödeme başarılı -> Envanter update -> Başarısız -> Ödeme geri al.

Zorluğu: Geri almayı yönetmek karmaşık, asenkron işlemler.

Çözüm 2: Event Sourcing

Tüm değişiklikleri olaylar olarak kaydet. Herhangi bir hizmet, ilgilendiği olaylara subscribe olabilir.

Örneğin:

  • "Ödeme Alındı" olayı -> Envanter hizmeti bunu işle.

Avantaj: Veri tutarlılığı sağlanabilir, audit trail otomatiği.

Dezavantaj: Olay akış yönetimi karmaşık, veri tasarımı zor.

Veri yönetimi, mikroservislerin en zor kısmıdır.

Ekip Yapısı ve Conway's Law

"Sistem mimarisi, kuruluşun iletişim yapısını yansıtır." (Conway's Law)

Mikroservislere geçmekse, ekip yapısını da değiştirmek gerekebilir. İdeal model:

  • Her mikroservis, bir ekip tarafından sahiplenir
  • Ekip, kendi repo, kendi dağıtım, kendi hızlı geliştirme
  • Cross-team koordinasyon, minimal (API contracts üzerinden)

Bu yapı, "two-pizza rule" ile tanınır: Ekip, bir pizza ile beslenebilecek kadar küçük olmalı (yani, 5-10 kişi).

Eski monolitik ekip yapısında, bu değişiklik yapılmayıp mikservis alındıysa, sistem başarısız olacaktır.

Geçiş Planı: Gerçekçi Takvim

Monolitten Mikroservislere geçiş, yıllar alır:

Hazırlık Aşaması (3-6 ay): Domain modeling, ekip yapısını belirle, altyapı (container, orchestration) hazırlama.

Pilot Phase (3-6 ay): İlk 1-2 mikroservis, strangler fig ile, üretim ortamında test.

Genişleme (12-24 ay): Kalan microservices, kademeli olarak; monolit parçası parçası devre dışı bırakılır.

İyileştirme (Devam Eden): Monitoring, veri tutarlılığı, ekip yeterliliği iyileştirmeler.

Toplam: 18-36 ay, orta boylu sistem için.

Maliyeti: 500K - 2M USD, ekip saati, araçlar, altyapı.

Yaygın Hatalar: Nelerden Kaçınması Gerekir

  1. Çok Erken Mikroservise Gitme: Sistem yeterince büyük değilse, karmaşıklık üretim verimliliğini azaltır.

  2. Hizmet Sınırları Yanlış: DDD yapılmayıp, teknik gereksinimle sınırlar belirlenmesi, çok veri transferi yaratır.

  3. Veri Yönetimini Görmezden Gelme: Dağıtılmış işlem, sonradan eklenmediği, tutarsızlık problems.

  4. Operasyonel Altyapı Olmadan Başlama: Container orchestration, monitoring, logging olmadan, üretimde kaos.

  5. Ekip Yapısını Değiştirmemek: Halen monolitik ekipse, microservices başarısız.

  6. Tüm Özellikleri Hemen Dönüştürme: Pilot, başarılı proofs sonra genişletilmeli.

  7. Network Hataları Görmezden Gelme: Dağıtılmış sistem, network hataları artışlatır. Retry, timeout, circuit breaker gereklidir.

Alternatif: Monolith'i Modernize Etmek

Akılda tutması gereken: Mikroservislere geçmek, tek seçenek değildir. Modüler monolith, iyi tasarlanmış, çoğu yerde yeterlidir.

Amazon, Netflix gibi gigantlerin tümü ölçekte mikroservise gitti. Ama Basecamp gibi şirketler, monolitik Rails uygulamasıyla başarılı.

Seçim, ihtiyaca göre. Eğer monolitik iyi çalışıyorsa, "çöp olmayan şeyi düzeltme" uygulanmalı.

Ancak, sistem büyürse, ölçekleme sorunları ortaya çıkarsa, o zaman geçiş konuşmaya değerdir.

Microservices Başarısızlığı: Yaygın Nedenler

Mikroservisleri alan şirketlerin yüzde 30'u başarısız oluyor. Neden?

  1. Erken Geçiş: Sistem yeterince büyük değilken, mikroservislere gitmek, karmaşıklığı artırır, kazanç sağlamaz.

  2. Zayıf Mimari: Hizmetler, kötü şekilde sınırlandırılıyor. Çok veri transfer, network latency, tutarsızlık.

  3. Operasyonel Hazırlık: Container orchestration (Kubernetes), monitoring, logging altyapısı olmadan, kaos. Mikroservislerin sayısı arttıkça, işletme karmaşıklaşır.

  4. Ekip Yeterliği: Eğitim olmadan, geliştirici, asenkron iletişim, dağıtılmış sistem tasarımı hatası yapabilir.

  5. Veri Tutarlılığı Çözümsüzlüğü: Distributed transaction problemi çözülmediyse, tutarsızlık yaratır.

Başarının anahtarı: Doğru zamanında başla (sistem büyümüşse), iyi tasarla (DDD), altyapı hazırla (DevOps), eğit (ekip).

Başlangıç: Karar Almak

Mikroservislere geçme kararı:

  1. Mevcut Durumu Değerlendir: Sistem kaç sene?

Kaç ekip? Dağıtım zamanı kaç? Teknoloji sınırlamalar?

  1. Ihtiyaçları Tanımlama: Ölçekleme problemi mi? Ekip koordinasyonu mu? Teknoloji çeşitlilik mi?

  2. Alternatif Değerlendir: Monolitik refactoring, modülerleştirme. Mikroservislere gitme zorunlu mu?

  3. Pilot Planla: "Birinci hizmet nedir? Strangler fig nasıl uygulanır? Kaç aydır?"

  4. Altyapı Hazırla: Container, orchestration, monitoring, logging.

  5. Ekip Eğit ve Yapısını Değiştir: DDD, asenkron iletişim, dağıtılmış sistem tasarımı eğitimi.

Sonuç: Doğru Sorduğunuzda Doğru Cevap

Mikroservislerin cazip olması, herkesi "my system needs microservices" düşün yapar. Ancak bu, doğru soru sorulmadığında, pahalı bir hataya dönüşebilir.

Doğru soru: "İşletmemin sorunu nedir? Teknoloji sorunudur, yoksa organizasyon problemi midir? Mikroservisleri çözüm mü?"

Cevap, her kuruluş için farklı.

Daha geniş bağlam için, Kurumsal Yazılım Bakım ve Modernizasyon rehberimizi okuyun. Legacy Sistem Modernizasyonu, büyük sistem dönüşümü stratejilerini açıklar.

Yazılım mimarinizi değerlendirmek ve geçiş stratejisi planlı istiyorsanız, Smart Maple danışmanları yardımcı olabilir. Sistem analizi, DDD modelleme, geçiş planını oluşturabiliriz. Ziyaret edin smart-maple.com adresini daha fazla bilgi için.

Related Articles

August 10, 2026

MLOps Rehberi: Makine Öğrenmesi Modellerini Production'a Taşıma

Giriş: MLOps Nedir ve Neden Önemlidir? Makine öğrenmesi modelleri geliştirmek günümüzde nispeten kolaydır. Açık kaynak kütüphaneleri kullanarak son derece başarılı modeller oluşturabiliriz. Ancak bu modelleri production ortamına taşıyarak, ölçeklendirebilir, güvenilir ve sürdürülebilir şekilde çalıştırmak tamamen farklı bir hikayedir. Araştırmalara göre, veri bilimcileri tarafından geliştirilen makine öğrenmesi modellerinin %87'si hiçbir zaman production ortamına ulaşmaz. Bu başarısızlı

Read More
August 9, 2026

LLM Fine-Tuning ve Özel Model Eğitimi Rehberi [2026]

LLM Fine-Tuning: Kurumsal Yapay Zeka Stratejisinin Temel Taşı Büyük dil modelleri (LLM), genel amaçlı metin üretimi ve anlama konusunda etkileyici performans sergiliyor. Ancak kurumsal ortamlarda belirli bir alan, terminoloji veya iş sürecine uyum sağlamaları gerektiğinde, genel bilgileri çoğu zaman yetersiz kalıyor. Bu noktada fine-tuning, yani ince ayar süreci devreye giriyor. Fine-tuning sayesinde mevcut bir temel modeli, kendi verileriniz ve ihtiyaçlarınız doğrultusunda özelleştirmek

Read More
August 8, 2026

Bilgisayarlı Görü Uygulamaları: Nesne Tespiti, OCR ve Endüstriyel AI

Bilgisayarlı Görü Uygulamaları: Endüstriyel ve Medikal AI'nin Temel Teknolojisi Bilgisayarlı görü, makine öğrenmesinin en etkili alanlarından biridir. Türkiye'de yaşanan dijital dönüşüm sürecinde, özellikle üretim, sağlık ve lojistik sektörlerinde görü tabanlı otomasyon kritik hale gelmiştir. Smart Maple olarak Ankara'da geliştirdiğimiz çözümler, son beş yılda 150+ kuruluşunun üretim verimliliğini ortalama %35 oranında artırmıştır. Bu rehberde, bilgisayarlı görü teknolojisinin iş değeri

Read More