Mikro hizmetlere geçmek, çalışma zamanı problemini nasıl yaratır?


104

Aşağıdaki yorumcu yazıyor :

Mikro servisler örgütsel işlev bozukluğunuzu derleme zamanı probleminden çalışma zamanı problemine kaydırır.

Bu yorumcu, şunları söyleyerek konuyu genişletiyor :

Özellik hata değil. Çalışma zamanı sorunu => eşya sorunları => daha güçlü, sorumlu olanların işlevsizliği hakkında daha hızlı geri bildirim

Şimdi almak ile microservices sen:

  • bir üretim ve çalışma zamanı kaygısı olan geçişinizin gecikme potansiyelini artırın.
  • Ayrıştırma işleminde olası çalışma zamanı hataları olabileceği kodunuzdaki “ağ arayüzleri” sayısını artırın.
  • potansiyel olarak mavi-yeşil dağıtımları yapabilir. Bunlar arayüz uyumsuzlukları tarafından tutulabilir (bkz. Ağ arayüzleri). Ancak mavi-yeşil dağıtımlar işe yararsa, bu daha çok bir çalışma zamanı kaygısıdır.

Sorum şu: Mikro servislere geçmenin çalışma zamanı problemi yaratması ne anlama geliyor?


13
A'nın bir monolitte B ile konuşması en azından gerçek ara yüzün uyumlu olduğu kanıtlanabilir (statik yazım yoluyla) ki bu da daha doğru olmasını sağlar. Genellikle mikro hizmetler, böyle bir derleme zamanı kontrolü olmayan bir şeyle iletişim kurar
Richard Tingle

Eğer mikro hizmetlerin kullanımıyla ilgili problemleri araştırıyorsanız, Fowler makalesi mutlaka okunmalıdır. martinfowler.com/articles/microservices.html @ Richard Tingle'ın dediği gibi çalışma zamanına göre sadece çalışma zamanı değil. Ve bir üretim sorununa sahip olmanın gelişme aşamasında olduğundan daha iyi olduğu konusunda hemfikir değilsiniz. Ancak, mikro hizmetler büyük projelerin başka şekillerde ölçeklenmesinde yardımcı olabilir. (Ve küçük projelerin çoğu için bir
abartılı

2
Bu yorumcu kısa görüşlü. Çalışma zamanı problemi => prod issues => mutsuz kullanıcılar => kayıp para.
Philipp

@Philipp: Mesele bu. Örgütsel işlev bozukluğunun neden olduğu zaman sorunlarını derleyin => kimse umursamıyor. Örgütsel işlev bozukluğunun yol açtığı kayıp => tam olarak söz konusu örgütsel işlev bozukluğundan sorumlu olanlara zarar verir. Umut: örgütsel işlev bozukluğu daha hızlı çözülüyor.
Jörg W Mittag

Yanıtlar:


194

Bir problemim var. Microservices kullanalım! Şimdi 13 dağıtılmış sorunum var.

Sisteminizi kapsüllenmiş, yapışkan ve ayrıştırılmış bileşenlere ayırmak iyi bir fikirdir. Farklı problemleri ayrı ayrı ele almanıza izin verir. Ancak bunu yekpare bir dağıtımda mükemmel şekilde yapabilirsiniz (bkz. Fowler: Microservice Premium ). Ne de olsa, OOP'un yıllardır öğrettiği şey bu! Bileşenlerinizi mikro hizmetlere dönüştürmeye karar verirseniz, mimari bir avantaj elde edemezsiniz. Teknoloji seçimi konusunda bir miktar esneklik kazanıyorsunuz ve muhtemelen (ancak zorunlu değil!) Bir miktar ölçeklenebilirlik elde ediyorsunuz. Ancak, (a) sistemin dağınık doğasından ve (b) bileşenler arasındaki iletişimden kaynaklanan bazı baş ağrıları garanti edilir. Mikro hizmetlerin seçilmesi, bu sorunlara rağmen mikro hizmetleri kullanmaya istekli olmanız için baskı yapan başka sorunlarınız olduğu anlamına gelir.

Temiz bir şekilde bileşenlere bölünmüş bir monolit tasarlayamıyorsanız, bir mikro hizmet sistemi tasarlayamazsınız. Yekpare bir kod tabanında, ağrı oldukça belirgin olacaktır. İdeal olarak, kod çok bozuksa derlenmeyecektir. Ancak mikro hizmetlerde, her hizmet ayrı ayrı, muhtemelen farklı dillerde bile geliştirilebilir. Bileşenlerin etkileşimindeki herhangi bir sorun, siz bileşenlerinizi bütünleştirene kadar belli olmaz ve bu noktada genel mimariyi düzeltmek için çok geç.

No 1 hata kaynağı, arabirim uyuşmazlığıdır. Eksik bir parametre gibi göze batan hatalar veya bir hata kodunu kontrol etmeyi unutmak veya bir yöntemi çağırmadan önce bir ön koşulu kontrol etmeyi unutmak gibi daha ince örnekler olabilir. Statik yazma, bu tür sorunları olabildiğince erken tespit eder: IDE'nizde ve derleyicide, kod çalıştırılmadan önce . Dinamik sistemlerde bu lüks yoktur. Bu hatalı kod yürütülene kadar patlamaz.

Mikro hizmetler için uygulamalar korkunçtur. Mikro servisler doğal olarak dinamiktir. Resmi bir hizmet açıklama diline geçmezseniz, arayüz kullanımınızın herhangi bir doğruluğunu doğrulayamazsınız. test et, test et, test et! Ancak testler pahalıdır ve genellikle ayrıntılı değildir; bu, üretimde problemlerin hala mevcut olabileceği ihtimalini bırakır. Bu problem ne zaman ortaya çıkacak? Yalnızca bu hatalı yol alındığında, çalışma zamanında, üretimde. Ürün meselelerinin daha hızlı geri bildirime yol açacağı fikrihilariously tehlikeli bir şekilde yanlış, eğer veri kaybı olasılığınızla eğlenmiyorsanız.


13
@JacquesB “Örgütsel işlev bozukluğunun” bir sistemin geliştirilememesi anlamına geldiğinden eminim. Cevabımın çoğunluğu, böyle bir sonuca nasıl varabileceğimizi gösterme bağlamıdır, ancak benim profesyonel görüşümdür ve tweetten alınmamıştır.
amon

10
"temiz bir şekilde bileşenlere ayrılan monolit" - bu ne anlama geliyor?

10
Ve arayüzlerin versiyonlanmasından bahsetmiyorum bile (zamanla değişen arayüzler).
Peter Mortensen

12
@mobileink Monolith burada “mimarlık yok” önerdiği için ideal bir terim değil. Ancak aktarmaya çalıştığım, sistemin parçalarının bağımsız olarak konuşlandırılabileceği hizmet odaklı bir mimarinin aksine, tek bir sistem olarak geliştirilmiş ve yerleştirilmiş bir sistemdir. Lütfen daha iyi bir terim biliyorsanız
gönderiyi

7
@ amon Monolith kelimesini duymak derhal "mimarlık yok" fikrini ortaya çıkarmaz. Çoğu bina, Mısır'ın Büyük Piramitleri gibi Monolitler ve diğer birçok eşyadır. Açıkçası onlar mimarlık ettiler ve bir bütün olarak teslim edildiler. Pek çok yazılım sistemi iyi bir mimariden yoksundur; ancak iyi mimarinin olmayışı, nasıl konuşlandırıldıklarından bağımsız görünüyor. Başka bir projenin iskelesini ödünç alabilir ve bunu mimari olarak adlandırabilir (3 katmanlı, 2 katmanlı, n katmanlı, mikro hizmet vb.), Ancak bunu yapmanız iyi yapmamızı sağlamaz.
Edwin Buck

215

İlk tweet benimdi, bu yüzden genişleyeceğim:

Monolitik bir uygulama üzerinde çalışan 100 geliştiriciniz olduğunu varsayalım. Bu, birbirleri arasında etkili bir şekilde iletişim kuramayacak kadar çok insan var, bu yüzden şirket onları daha küçük takımlara bölmek ve aralarında iyi iletişim kalıpları oluşturmak için çok çalışmak zorunda. Organizasyon "işlevsiz" olduğunda, ekipler muhtemelen birbirleriyle konuşmuyorlar, daha büyük bir hedefe uymuyorlar, öncelikler vb. Konusunda aynı fikirde değiller - sonuç olarak bir şeyleri göndermeleri sonsuza dek sürüyor. Yazılım üretilmeden önce işlev bozukluğunun açık olması anlamında bir "derleme zamanı problemi". Proje muhtemelen bir ölüm yürüyüşüdür veya hiçbir zaman gemiye gidemez ("derleme").

Birçok insanın mikro hizmetlerden etkilendiğini ve içsel teknik / mimari yararları nedeniyle değil, örgütsel işlev bozukluğunu görmezden gelmelerine izin verdiği için onlara hareket ettiğini düşünüyorum. 100 geliştiriciyi hizalamaya çalışmak yerine, her biri kendi küçük mikro hizmetlerine odaklanan silolarda çalışan küçük ekiplere sahip olabileceklerini umuyorlar. Eğer böyle işlevsiz bir organizasyondaysanız, bu çok çekici: hoşunuza gitmeyen insanlardan kaçınmak, iletişim kurmamak için size daha fazla izin verir.

Ne yazık ki, bu "çalışma zamanı sorunu" olur, çünkü yazılım bir kez üretime geçtiğinde, iyi iletişim aynı derecede önemlidir. Örgütlenme ile ilgili problemler - ekipler ve nasıl hizalanıp iletişim kurdukları - "çalışma zamanında" tezahür eder.

Tweet'imin amacı şuydu: Sahip olduğunuz insan sorunu ise, yeni bir mimari yardımcı olmayacak. Sadece sorunun etkilerini geciktirecektir. Mikro hizmetlerin birçok insana çekiciliğinin, bu insanların sorunlarını sihirli bir şekilde çözeceği umuduyla olduğunu düşünüyorum.


67
+1. Bu bir Stack Exchange cevabı olarak tweetten çok daha iyidir. :-)
ruakh

3
Aynısı her dinamik sistem için de geçerlidir. Dinamik yazma çok faydalıdır, ancak yalnızca doğru kişilere sahipseniz. "Serbest biçimli veritabanları" çok yararlıdır, ancak yalnızca doğru kişilere sahipseniz. Doğru insanlara sahip değilseniz, sadece sorunları çözmek için delegasyon yapıyorsunuz.
Luaan

2
Bunun bir totoloji olduğunu düşünüyorum. İnsanlar sorun olduğunda, sorunlar her yerde ortaya çıkabilir. Uygun entegrasyon testleri ile bir dizi mikro hizmet olarak çalışan bir çözüm göndermeyi hayal edemiyorum. Böyle bir durumda, desteklenen bir çalışma akışına sahip bir çözüm göndermenin yolu yoktur. Herhangi biri akış testiyle mikro hizmetlere taşınırsa, özellikle problemleri gizlemek için problem onlardır. Test edilmemiş / kırılmış ikili dosyaları da gönderebilir. Sorunu, asker seviyesindeki programcılardan, bulunduğu yere yükseltir.
luk32

10
@ luk32 Kısmen, evet, ama onu kötü takımlar için çekici kılan mikro hizmetlerin özü, beceri ve iletişim açığınızı daha uzun bir süre fark edilmeden bırakmanızdır. Sorunların olup olmaması meselesi değil, ne zaman ortaya çıkacakları hakkında
T. Sar

18
Çok güzel cevap. İnsanları kızdırmaktan başka bir şey için Twitter fikrimi tamamen yararsız olarak kabul ettiğiniz için teşekkür ederiz.
Robert Harvey

43

Sorum şu: Mikro servislere geçmenin çalışma zamanı problemi yaratması ne anlama geliyor?

Bu tweetlerin söylediği bu değil ! Mikro hizmetlere geçiş hakkında hiçbir şey söylemezler , ayrıca sorun yaratma hakkında hiçbir şey söylemezler . Sadece değişen problemler hakkında bir şeyler söylüyorlar .

Ve iddialarına bağlamsal bir kısıtlama koymuşlar, yani kuruluşunuzun işlevsizliği.

Yani, ilk tweet'in temelde söylediği iki şeydir:

  • "eğer kuruluşunuz şu anda mikro hizmetler olmadan karmaşık sistemler tasarlayamıyorsa, karmaşık bir şekilde mikro sistemler içeren karmaşık sistemleri tasarlayamaz" ve
  • "derleme sırasında, yani geliştirme sırasında şu anda ortaya çıkan bu yetersizlikten kaynaklanan problemler daha sonra çalışma sırasında, yani üretimde ortaya çıkacak" (teknik olarak test sırasında da gösterilebilir, ancak hatırlayın, alıntı kendiliğinden sınırlanır) Muhtemelen bir alt-standart test rejimi olan disfonksiyonel örgütlere

İkinci tweet müşterilerin gördüğünüz yerde müşterilerin şikayet olduğunda, o zaman bir yapı sonları daha farklı yerlerde duyulmasını eğilimindedir, çünkü sorunlar yalnızca üretimde kendini gösterecektir olması, yani, yani, bir özellik değil, bir hata olduğunu söyler Örgütsel işlev bozukluğu hakkında bir şeyler yapabilen yerlerde (örneğin üst düzey yönetim). Örgütsel işlev bozukluğu genellikle üst düzey bir yönetimin başarısızlığı olduğu için bu, tatmin edici olmayan müşterilerin bu tatminsizlikten sonuçta sorumlu olanlara kötü bir şekilde yansıttığı anlamına gelirken, üst düzey yönetim başarısızlıklarından kaynaklanan düşük kod kalitesi genellikle yalnızca geliştiricilere kötü şekilde yansımaktadır. Ancak, hatalı değil ve bu konuda bir şeyler yapamıyorum.

Bu nedenle, ilk tweet, mikro hizmetlerin kötü yönetimden kaynaklanan sorunları derleme zamanından yalnızca geliştiricilerin gördüğü çalışma zamanına, müşterilerin gördüğü çalışma zamanına yönlendirdiğini söylüyor. İkinci tweet bunun iyi bir şey olduğunu söylüyor, çünkü o zaman problemler onlardan sorumlu olanları incitiyor.


6
@Michael Kod kalitesini nasıl etkilediklerini göremiyorsanız, belki de - yönetimin, işletmelerinin yarattığı ürünlerin kalitesinin herhangi bir bölümünde ne tür bir etkiye sahip olduğunu düşünün .
13'te

30
@Michael: Her şey sonuçta üst düzey yönetimden kaynaklanıyor. Düşük kod kalitesi imkansız son tarihlerden mi kaynaklanıyor? Bu son tarihleri ​​kim belirler? Bu tarihleri ​​belirlemek için bu tarihleri ​​belirleyenlere kim söyler? Düşük kod kalitesi yetersiz geliştiricilerden kaynaklanıyor mu? Bu yetersiz geliştiricileri kim işe aldı? Beceriksiz geliştiricileri kiralayanları kim işe aldı? Yetersiz takımdan mı kaynaklanıyor? Bu araçları kim alıyor? Bu araçları satın almak için bütçeyi kim onaylıyor? Aptal mimariden mi kaynaklanıyor? Mimarı kim kiraladı? Onu kim görevlendirdi? Bu tweet'ler özellikle bağlamdaydı…
Jörg W Mittag

13
… Örgütsel işlev bozukluğu. Eh, organizasyonunun işlevini hemen hemen üst düzey yönetimin iş. Yönetim budur .
Jörg W Mittag

4
Muhtemelen uzun vadede işe yarayacak olsa da, şirketinizin sorunlarını müşterileri etkileyerek çözme fikri doğru görünmüyor.
Stijn de Witt

1
@ JörgWMittag Kötü geliştiriciler tarafından yazılmış kötü kodun, kötü geliştiricileri değil, bu kötü geliştiricileri işe alanların suçu olduğunu iddia etmenin makul olduğunu sanmıyorum. Nihayetinde yönetimin sorumluluğu olabilir, ancak geliştiricilerden kaynaklanıyor .
Miles Rout

9

Derleme zamanı probleminin aksine, çalışma zamanı problemi yaratır .

Bir monolitik uygulama derlemek zor ve pahalıdır. Ancak bir kez derlediğinde, bileşenler arasında aşırı salak bir uyumsuzluk bulunmadığından oldukça emin olabilirsiniz, çünkü tip sistemi onları yakalayabilir. Bir mikro hizmet sistemindeki aynı hata, iki belirli bileşen gerçekten belirli bir şekilde etkileşime girene kadar görünmeyebilir .


9
Bu, "monolitik" uygulamaların her zaman statik olarak yazıldığını varsaymaktadır. Peki ya dinamik olarak yazılmış diller? Peki ya statik olarak yazılmış servis arayüzleri?
JacquesB

1
@ JacquesB OTOH, dinamik olarak yazılmış derlenmiş dilleri tamamen sıfır olarak düşünebilirim.
immibis

2
@JacquesB JavaScript ve Python derlenmedi. İç tercüman yapılarını bir derleme hedefi olarak saymazsanız, bu durumda her dil derlenir.
immibis

3
@ immibis: şu anda mevcut olan her ECMAScript uygulamasının en az bir derleyicisi vardır. Örneğin V8, iki derleyiciye ve kesinlikle sıfır tercümana sahiptir, asla yorumlamaz, her zaman ikili yerel makine kodunu derler. SpiderMonkey'de dört derleyici var, inanıyorum ve bir tercüman var ama bu tercüman ECMAScript'i yorumlamıyor. SpiderMonkey hiçbir zaman ECMAScript'i yorumlamaz, daima ilk önce SpiderMonkey bytecode'una derler, bu daha sonra ikili yerel makine kodunu derleyebilir. Şu anda mevcut olan tüm Python, Ruby ve PHP uygulamalarının derleyicileri vardır.
Jörg K Mittag

12
@LieRyan Eğer tür çıkarımının dinamik olarak yazılmış ile aynı olduğunu ve / veya Haskell'in dinamik olarak yazılmış olduğunu düşünüyorsanız, aklınız karıştı .
Derek Elkins

2

Hem monolitik sistemlerde hem de mikro hizmetlerde alt sistemler arasındaki arayüzleri tanımlamanız gerekir. Arabirimler iyi tasarlanmış, iyi belgelenmiş ve mümkün olduğunca kararlı olmalıdır. Bu, OOP ile aynıdır.

Kuruluşunuz bunu yapamıyorsa, mikro hizmetler de sorunu çözmez. Mikro hizmetlerde genel Web arayüzlerine sahipsiniz. Bu yüzden arayüz tasarımı için daha fazla çaba harcamak zorundasınız.

Arayüz düzgün tasarlanmadıysa, iki tür çalışma zamanı sorunu yaşarsınız:

  1. Arayüz doğru kullanılmazsa, derleme zamanında değil, çalışma zamanında bir hata alırsınız.
  2. Web arayüzü aramak oldukça yavaştır, bu nedenle performans sorunları yaşayabilirsiniz.

Bence çalışma zamanı sorunları üretmek, sorumlu olanlarla örgütsel sorunlar arasında iletişim kurmak için doğru bir yol değil.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.