Son dönemde yurt dışındaki teknoloji bloglarında gündem olan "Microservices Killed Our Startup. Monoliths Would’ve Saved Us" başlıklı yazıyı okuyunca, hem çok can yakıcı hem de fazlasıyla tanıdık geldiği için özetini paylaşmak istedim.
En yeni teknolojileri sorgusuz sualsiz benimsemenin ne kadar tehlikeli olabileceğini gösteren iyi bir "yanlışlar defteri" gibi.
1. Olayın başlangıcı: "Biz de Netflix gibi yapalım"
- Durum: $2.5M seed yatırım alınmış, aylık gelir %40 büyüyor, 50 bin kullanıcı var. Rails monolitiyle gayet iyi çalışan bir startup.
- Sorunun başlangıcı: Lead architect ortaya çıkıp "ölçeklenebilirlik(Scalability)" diyerek MSA dönüşümünü öneriyor.
- Mantık: "Şu anki yapı fazla sıkı bağlı. Netflix’e, Uber’e bakın. Bizim de onlar gibi olmak istiyorsak mikroservislere geçmemiz lazım."
- Gerçek: 4 geliştirici ve 1 DevOps’tan oluşan bir ekip, Netflix mimarisini benimsemeye karar veriyor.
2. Cehennem gibi geçen 6 ay (MSA geçiş zaman çizelgesi)
[1. ay: Balayı]
- Bildirim servisi başarıyla ayrılıyor. "Bak! Gayet iyi çalışıyor, değil mi?" diye kutlama yapılıyor.
- Ama deploy süresinin uzaması, repository sayısının artması gibi öncü belirtiler başlıyor.
[2~3. ay: Çatlakların başlaması]
- Faturalama(Billing) servisi ayrılıyor. Ama bu servis kullanıcı, envanter ve sipariş servislerinin hepsiyle iç içe geçmiş durumda.
- Sonuç: Ağ gecikmesi nedeniyle yanıt süresi 200ms → 800ms’ye çıkıyor. Bir servis çökünce zincirleme arızayla her şey çöküyor.
[4~5. ay: Dağıtık transaction kâbusu]
- Monolitte tek bir DB transaction ile çözülecek iş için, dağıtık ortam yüzünden Saga pattern bile devreye alınıyor.
- Envanter düşüyor ama ödeme başarısız oluyor, rollback karışıyor... Veri tutarsızlığı yüzünden müşteri desteği talepleri patlıyor.
- Basit bir kolon eklemek için bile 6 servise dokunmak gerekiyor; 2 saatte bitecek iş 3 gün sürüyor.
[6. ay: Ekibin dağılması]
- Geliştiriciler özellik geliştirmek yerine tüm zamanlarını altyapı yönetimine harcıyor.
- Altyapı maliyeti $3,000 → $12,000 (4 kat artış).
- Kilit geliştirici ekipten ayrılıyor ("Ben ürün geliştirmeye geldim, bütün gün Kubernetes kurcalamaya değil")
3. Karar anı: "Biz Netflix değiliz"
Mimar hâlâ "Service Mesh ekleyelim ve monitoring araçlarını artıralım" diye ısrar etse de, yazının yazarı sonunda patlıyor.
> "Biz Netflix değiliz! Netflix’in 500 mühendisi var ama biz 4 kişiyiz!"
Sonunda mimar ayrılıyor ve ekip monolite geri dönme(rollback) kararı alıyor.
4. Monolite dönüş ve yeniden ayağa kalkış
- 8 hafta boyunca kod yeniden birleştirilip monolite taşınıyor.
- Sonuç:
- Özellik çıkarma hızı toparlanıyor (ayda 4 → 20)
- Yanıt süresi 220ms’de dengeleniyor
- Altyapı maliyeti düşüyor
- Hepsinden önemlisi geliştirici mutluluğu artıyor
5. Temel dersler (yazının vardığı sonuç)
- MSA, 'teknik bir sorunu' değil, 'organizasyonel bir sorunu' çözme aracıdır.
- Geliştirici sayısı 50’yi geçip ekipler birbirinin ayağına basmaya başladığında, deploy döngüleri aşırı farklılaştığında kullanılmalıdır.
- Netflix/Google sizin rol modeliniz değil.
- Onlar da başlangıçta monolitti. Ölçek büyüdüğü için değiştirdiler; en baştan böyle kurulmadılar.
- Karmaşıklık bir vergidir.
- Servis sayısı arttıkça yönetim maliyeti bileşik şekilde büyür.
- Ağ çağrıları bedava değildir.
- Bellek içi fonksiyon çağrısı (nanosaniye) ile ağ çağrısı (milisaniye) aynı ligde değildir.
Tek cümlelik özet:
"Monolit düşman değil. Kötü mimari düşmandır. 4 kişilik ekipler, lütfen gidip monolit kullanın."
14 yorum
Tamam. Şimdi de MSA fanatikleri üşüşür.
"Ağ çağrıları bedava değildir" sözü gerçekten doğru galiba. Fonksiyon çağrısıyla API çağrısı kesinlikle aynı şey değil.
Ben ürün geliştirmeye geldim, bütün gün Kubernetes kurcalamaya değil —> Duyduğum en aptalca laflardan biri bu
Neden? Amaç
k8solduğu içink8syapılan bir durumda, bence söylenen doğru gibi duruyor?bungker adlı kullanıcının yorumlarını beğendiğim için tek tek tıklayıp okuyorum ama sadece bu yorumunuza pek katılamadım, hmm biraz daha açıklayabilir misiniz
İçi boş bir yapay zeka yazısı olmuş; bu yüzden son zamanlarda Medium'a neredeyse hiç bakmıyorum
Hizmeti 4 kişi yaptıysa, MSA ile bölmek için bir neden yok gibi görünüyor.
MSA yapmak istiyorsanız organizasyonun da MSA'ya uygun olması gerekir...
Sanırım aşağıdaki özette 4. maddenin anlatmak istediği asıl nokta bu. Ayrıca genel olarak içeriğin kendisine de katılıyorum.
Hmm... Bir şeyler garip görünüyor.
Bu yazı sanki yapay zekayla yazılmış gibi.
Ben de bunu bu aralar çok hissediyorum..
Birçok blog yazısının, yazarın kendi deneyimi + yapay zekanın yardımıyla
yazıldığını tahmin ediyorum.
Yazılar fazla mantıklı ve düzenli, ayrıca okunması çok kolay yazılmış gibi geliyor bana.
Benim söylemek istediğim şey, bunun fazlasıyla yapay zeka işi gibi durduğu ve herhangi bir referans da içermediği için böyle bir yazının paylaşılmamasının daha iyi olacağı yönündeki görüştür.
Bu, Hacker News'te paylaşılan bir yazı. Benim paylaştığım yazıların çoğu Hacker News'te yer alan içeriklerdir.
https://news.ycombinator.com/item?id=46469845
Dediğiniz gibi... sanırım Hacker News referansını eklemem gerekecek.
1) Yazının güvenilirliğine dair şüphe: pazarlama/AI üretimi kokuyor
Özet
Sert alıntı (çeviri)
Tek cümlelik yorum
2) Liderlik/mimar eleştirisi: sorun teknoloji değil, ‘karar alma yapısı’ydı
Özet
Can yakan alıntı (çeviri)
Tek cümlelik yorum
3) İş perspektifi: startup’ın başarısızlık nedeni gerçekten MSA mıydı?
Özet
Sert alıntı (çeviri)
Tek cümlelik yorum
4) Teknik içgörü: monolith vs MSA konusunda deneyime dayalı tavsiyeler (gerçekten faydalı kısım)
Özet
Can yakan alıntı (çeviri)
Tek cümlelik yorum
“Monolith ile başlayın, ancak sınırlar ‘doğal olarak’ oluştuğunda servisleri ayırın.”
Topluluk genel değerlendirmesi, tek cümleyle
Çoğu kişi “Biz Netflix değiliz” fikrine katıldı; ama aynı anda “bu yazının kendisi de Netflix hastalığını pazarlayan bir anlatı (= pazarlama/AI) olabilir” şüphesi de oldukça güçlüydü.