Mvc Kalıplarının Rolü Mikroservices Architecture Entegrasyonu
Giriş: Modern Dağılım Sistemlerindeki MVC'nin Sonlanması
Model-View-Controller (MVC) modeli, on yıllardır yazılım mühendisliğinde temel bir mimari konsept olmuştur. – Küçüktalk-80 tarafından popülerleştirildi ve daha sonra Rails, Spring MVC ve ASP.NET MVC, desenin temel prensibi – dikkat çekici olan veri yönetimi?
Kısa cevap evet, ancak mikro hizmet mimarisinde uygulanan bir şekilde değil, MVC ilkelerinin mikro hizmetlere entegrasyonu, her bir bileşenin sınırlarını yeniden düşünmek ve hizmet sınırlarını nasıl haritaladıklarını anlamak gerekir. Bu makale, MVC modellerinin mikro hizmet mimarisindeki rolünün derin bir analizi sağlar ve her iki teorik uyum ve pratik uygulama zorluklarını araştırır.
Sonunda, MVC'nin güçlülerinden nasıl faydalanılacağına dair daha net bir resime sahip olacaksınız, mikro hizmetlerin özerkliğine ve ölçeklenebilirlik gereksinimlerini saygı duyarsınız.
MVC Deseni: Hızlı Bir Yenileme
Dağıtılmış sistemlere girmeden önce, monolithic web uygulamalarında anlaşıldıkları gibi klasik MVC bileşenleri tekrarlamak faydalı.
- [FONT:0) Model[Dönetici:0)[Dönetici:0) Model[Dönetici:0)[Dönetici:0) Model[Döneticileri ve iş mantığını, uygulama alanını tanımlayan bir devlet aracılığıyla tanımlamaz.
- [FONT:0]View[DÜT:1) - Sunum katmanını işe alın. Modelin verilerini bir kullanıcı arayüzüne dönüştürür, tipik olarak bir web sayfası veya mobil ekran. görünüme göre model güncelleştirmeleri ve yeniden kazananlar.Modern ön çerçevede, görüşler kendi durumunu yöneten reaktif bileşenlerdir.
- [[Döneticiler[Döneticiler)[Döneticiler:0)Denetler[Döneticiler[Döncüler)) - Gelen kullanıcı girişi (HTTP talepleri, form teslimleri, tıklamalar) Bu, girişleri yorumlar, işlemleri gerçekleştirmek için modelle etkileşimler ve yanıt göstermek için uygun bir görünüm seçin.
MVC'nin gücü, endişelerin geri alınması için [Dönetici:0) yalan söylüyor. Kullanıcılar arayüzüne değişiklikler (görüş) iş mantığını (model), ve kontrol mantığını (kontrolcü) bağımsız olarak güncellemiyor. Bu modülerlik MVC'yi bina edilebilir, test edilebilir uygulamaları için kullanılabilir hale getirdi.
Ancak, mikro hizmet mimarisinde, sınırların değiştiği. Her mikro hizmet kendi verilerini ve mantığına sahiptir ve kullanıcı arayüzü genellikle birden fazla hizmetle iletişim kuran ayrı bir ön uygulama olarak inşa edilir.Bu soruyu gündeme getirir: MVC'yi bölmek için tek bir uygulama olmadığında nasıl uygularsınız?
MVC'yi Microservices'a haritalayın: The Mountained View
Doğal tepki, her mikro hizmete kendi MVC uygulaması olarak davranmaktır. Bu bağlamda, özellikle bir kullanıcı arayüzü doğrudan ortaya koyan hizmetler için geçerli bir yaklaşımdır ( mikro hizmette nadir olmasına rağmen). daha yaygın, mikro hizmetler API'leri ortaya çıkarır ve ön uçları ayrı bir tüketicidir.
Servis-Tamamlanmış Data
Bir monolithic MVC uygulamasında, model tüm kod tabanında paylaşılır. Mikro hizmette, model isüFLT:0) Merkezileştirilmiş) Her hizmet, veri domaininin tek sahibidir. Örneğin, Domain-Driven Design (DDDD) ile uyumlu bir şekilde bir veri tabanıdır.
Sonuç, tüm veriler için tek bir “gerçek kaynağı” yoktur. Hizmetler API'ler veya olaylar yoluyla senkronize etmek için iletişim kurar.Bu, veri tutarlılığını korumak için dikkatli bir tasarım gerektirir, genellikle en bilge orkestra veya olay kaynağı gibi desenler kullanın.Daha derin bir görünüm için mikro hizmetlerde veri yönetimine bakın, bakınız.
API Gateways ve Service Endpoints olarak denetçiler
Klasik MVC'de, kontrol bir istek alır ve ne yapılacağına karar verir. Mikro hizmetlerde, eşdeğer bir rol, [[0)API kimlik doğrulama ve sınır ötesini kontrol eder.Her mikro hizmette, küçük bir kontrol katmanı, gelen istekler (HTTP, gRPC, veya mesaj) ve hizmetin iş mantığına (model) ile devre dışı bırakılır.
Bu ayrılık, "kontrol" sorumluluğun ağ geçidi (bu iş orkestrası ve routing) ve hizmet (ki bu MVC'nin doğal bir uzantısıdır: Kontrol katmanı kullanıcı girişi ve alan işlemleri arasında arayüz kalır, ancak şimdi altyapıya dağıtılır.
Frontend Micro Frontends olarak Görüntüleme
Mikro hizmet ortamındaki görüş neredeyse her zaman müşteri odaklı bir uygulamadır.Bu uygulama MVC desenleri kullanılarak inşa edilebilir (örneğin, Redux veya Angular ile birlikte), ancak alternatif olarak, her iki arka ve ön uçları için ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı bir hizmet ekibi ile uyumludur.
Örneğin, ürün arama, Kataloğu Servisi ekibi tarafından sahip olunan bir mikro ön uç olabilir, kontrol edilen sipariş servisi ekibi tarafından sahiplenirken, her parça kendi UI'sini oluşturur ve karşılık gelen API ile iletişim kurar. Bu, MVC'nin doğrudan uzantısıdır: her mikro ön uç, kendi hizmetinin modeli için bir görüş olarak yapılır ve ebeveyn (veya kabuk) onlar arasındaki bir kontrol cihazı olarak çalışır.
Mikro ön uçlarda daha fazla, makaleyi bakınız:0)Mikro Frontends[[Dönder] tarafından Martin Fowler'in blogunda Cam Jackson tarafından.
MVC İlkelerini Mikro Servislere Uygulatmanın Faydaları
Doğru yapıldığında, MVC'nin dağıtılmış bir ortamda düşünmesi basit kod organizasyonunun ötesine geçen birkaç avantaj sağlar.
Geliştirilmiş modülerlik
Her mikro hizmet doğal olarak iç bileşenleri arasında açık bir ayrıma sahiptir. Bu bileşenleri Model, View (eğer geçerliyse), ve denetçi, takımlar tüm hizmetleri tutarlı tutabilir. Bu modülerlik, uygulamalarını değiştirmek için daha kolay hale getirir. Örneğin, API'sini etkilemeden bir hizmetin modelinin kalıcılığını değiştirebilirsiniz (kontrolcü) veya önend (görüler).
Bağımsız Scalability
Her mikro hizmet ayrı bir dağıtım ünitesi olduğundan, "kontrolcü" bölümünü (API ağ geçidi örneklerini) ölçekleyebilirsiniz ve "model" kısmı (servis kopyaları) bağımsız olarak kullanılabilir. Örneğin, bir flash satış sırasında, Order Service modelini yatay olarak genişletebilirsiniz, Inventory Service modeli farklı bir ölçeklendirme stratejisine ihtiyaç duyarken.
Team Autonomyy
MVC'nin endişelerin ayrılması, takım organizasyonuna iyi bir şekilde çevirmektedir. Bir takım Ödeme Servisi'nin "model"ine sahip olabilir, başka bir ekip "görüşme mikro ön uç"una sahip olabilir ve bir platform ekibi API ağ geçidine sahip olabilir (ürücük) Bu uyumluluğa sahip olabilir.
Geliştirilmiş Testability
Yedekleme bileşenleri test etmeyi kolaylaştırır. Servis modelleri HTTP endişeleri olmadan test edilebilir. kontrolörler (API uç noktaları) kriminal modeller ile test edilebilir. Görüntüleme (önen fazla bileşen) kriminal yanıt kullanarak izolasyonda test edilebilir. Bu tabakalı test stratejisi, monolithic MVC ve ölçeklerden doğal olarak dağıtılır.
MVC-Mikroservices in Eleştirel Challenges in MVC-Mikroservices Integration
Yararlılar önemli olsa da, mikro hizmetlerin dağıtılmış doğası tek işlemli MVC uygulamasında mevcut olmayan karmaşıklıkları ortaya koyar. Bu zorlukların tespit edilmesi, monolithic alternatiften daha zor olan kırılgan sistemlere yol açabilir.
Dağıtılmış İşlem Yönetimi
Bir monolithic MVC uygulaması, model genellikle tek bir veritabanı kullanır, ACID işlemleri basit hale getirir. Mikro hizmetlerde, her hizmet kendi veritabanına sahiptir. Bu, birden çok hizmeti içeren bir işletme işlemidir: orkestra bilgeleri, bir kredi kartı yüklemek) birden çok hizmet modelini koordine eden bir kontrol cihazıdır.
Takımlar genellikle bilgeleri doğru bir şekilde uygulamak için gereken çabayı hafife alır. pratik bir rehber için, bkz.Daga pattern[[Döneticiler için 1) mikro hizmetlerde.io.
Veri Konsolidasyonu ve Latency
MVC'de, görüş, paylaşılan hafıza veya veritabanı tetikleyicisi nedeniyle model değişiklikleri hemen yansıtabilir. Mikro hizmetlerde, olaylar bir şekilde senkronizasyonu önerebilir. Bir kullanıcı ön ön önbellek yanıtları veya olay yayılımı gecikmiş gibi durumlarda sabit bir modele dikkat edilmelidir.Bu son olarak tutarlı bir şekilde UX tasarımı gerektirir - yükleme spinnerleri, iyimser güncelleştirmeler veya zamansal durum göstergeleri.
Dahası, API ağ geçidi kontrolleri kısmi başarısızlıkları özenle ele almalıdır.Eğer bir alt uç hizmet başarısız olursa, ağ geçidi kısmi bir yanıt veya bir degraded görüş geri dönebilir. Bu, başarılı veya başarısız bir atomik kontrolden çok daha karmaşıktır.
Servis Keşif ve İletişim Overhead
Monolithic MVC uygulamasında, kontrol katmanı aynı süreçte model yöntemleri doğrudan çağırmaktadır. Mikro hizmetlerde, bu çağrılar ağ çağrıları haline gelir. Bu, geç saatlerde potansiyel başarısızlıkları (zamanlar, yeniden kurullar, devre kesiciler) sunar.
Versioning and Evolution
MVC'nin kontrol edici, model ve bir monolith'deki sıkı darbesi, kontrol edilebilir bir ünitede olduğu için kolay bir şekilde değişebilir. Mikro hizmetlerde, her hizmet bağımsız olarak uyumluluk gerektirir.Bir hizmet modelinde bir değişiklik (örneğin, yeni bir alan veya kaldırılmış uç nokta) kontrol cihazı veya görünümü ( mikro ön uç noktası) veya onun görüşü ( mikro uçlu sözleşmelerde) API sürümleme ve tüketici odaklı sözleşmeler önemli bir şekilde kullanılabilir.
MVC-Aware Microservices için Pratik Desenler
Zorlukları azaltmak için, birkaç mimari desen, MVC'yi mikro hizmetlerle uyumlu hale getiren ortaya çıktı.
Frontend için geri dön (BFF)
Bu model, her müşteri türü için ayrı API ağ geçidi oluşturmakla kontrol konseptini genişletir (web, mobil, IoT).Her BFF belirli görüş ihtiyaçlarına göre bir kontrol cihazı olarak çalışır. Birden fazla hizmet modellerinden veri toplar ve basit bir yanıt gönderir.Bu, ön uçlu takımların karmaşık veri dönüşümleri ile başa çıkma problemini önler.
BFF modeli MVC için doğal bir uyum: BFF kontrol cihazıdır, alt akım hizmetleri modellerdir ve müşteri UI, her BFF ekibinin kontrol ve görüşlerine sahip olduğu görüşüdür.
Komutan Sorgu Sorumluluk Segregation (CQRS)
CQRS, MVC açısından, model bir yazı modeline bölünmüştür (komünler) ve bir okuma modeli (köpekler) Kontrollü bir istek veya sorgu ve rotalar uygun bir hizmet için karar verir. Görüntülemeler genellikle optimize edilmiş API veya olay kaynaklı projeksiyonlar ile okunabilir.Bu model özellikle mikro hizmette yararlıdır, çünkü görünümde okunabilir ve ölçeklenebilirlik sağlar. Örneğin, Order Servicen yaz modeli, işlemsel bütünlüğü için normalleştirilebilir.
Event-Driven İletişim
Doğrudan senkronizasyon çağrıları yerine, hizmetler olaylar yoluyla iletişim kurabilir. Bir kontrolör (API Gateway veya BFF) bir komut olayı yayabilir ve model hizmetleri bunu tüketebilir ve sonuç olayları yayabilir. Görüntülemeler gerçek zamanlı olarak UI'yi güncellemeye abone olabilir. Bu, MVC'nin orijinal gözlemcisi ile uyumludur - görüş olayları gözlemler, ancak şimdi bu olaylar saldırganlar aracılığıyla ortaya çıkabilir.
API Kompozi vs. Komut Mesaj
Bir kontrolör birden fazla modelden veriye ihtiyaç duyduğunda, iki strateji var: API kompozisyonu (kontrolü doğrudan hizmet aramaları) veya komut mesajları (kontrolü bir hizmet koreografisine bir istek gönderir). API kompozisyonu daha basit ama gecikmeli artırır; komut mesajları veri akışından daha karmaşıktır, ancak kontrol cihazını seçin.
MVC+Mikro hizmet Kabul Edilmiş Takımlar için En İyi Uygulamalar
Gerçek dünya deneyimine dayanarak, aşağıdaki yönergeleri düşünün:
- [FONT:0)Explicitly, Domain-Driven Design ) kullanarak hizmet sınırlarını tanımlamak için bir bağlantıya karşılık olmalıdır. Birden çok alan içeren genel "model hizmetleri" oluşturmaktan kaçının.
- [FONT:0) Bir API ağ geçidi veya BFF birincil kontrol olarak kullanın.[[Döneticileri doğrudan birden fazla hizmet aramalarına izin vermeyin – arka üstolojiye sıkıca çiftleşirler.
- [FONT:0) İletişim protokolleri ve veri sözleşmeleri üzerine standartlaştırın.[DÜT:1) Bu kontrol model etkileşimlerinin iyi tanımlanmış ve sürümlenmiş olmasını sağlamak için OpenAPI'ı kullanın.
- [FONT:0]Günden itibaren gözlemlenebilirlik sağlar.[DÜDÜT:1] Dağcılık, giriş ve ölçümler, MVC katmanlarında işler yanlış gittiğinde debug sorunları yardımcı olur.
- [FONT:0]Limit, bilgelerin temel çapraz hizmet iş akışlarına yönelik kullanımı.[[DK:1) Mümkün olan yerde, hizmet sınırları tasarlayabilmeleri için tek bir komut bir hizmet tarafından ele alınabilir (saga karmaşık bir maliyettir).
- [[D:0) Görüşleri basit bir şekilde tut.[Dönder: 1) Önde servis içleri hakkında bilmeniz gerekir. BFFs, görüş ihtiyaçlarını karşılamak için veri toplayabilir.
- [FONT:0) Otomatik sözleşme testlerinde en üst düzeydedir.). Pact gibi araçlar kontrol (BFF) ve model (serv) birbirlerini kırmadan evrimleşebilir.
Sonuç: MVC bir Rehberlik Felsefesi olarak, Bir Depres
MVC modeli mikro hizmet çağında yok değildir. Aksine, temel prensibi - ilgi alanlarının belirlenmesi - bileşenler ağlarda dağıtıldığında daha da önemlidir. Ancak, MVC'yi mikro hizmetlere uygulamak, modellerin hizmet verileri olduğu bir mimari felsefe olarak düşünmek için bir değişim gerektirir, kontrolörler ağ geçidi ve orkestralama katmanlarıdır ve görüşlerin ağ geçididir.
Uygulamalı olarak MVC-inspired mikroservices mimarlıkları modülerlikten, bağımsız ölçeklenebilirlikten ve takım özerkliğinden faydalanmaktadır. Zorluklar - dağıtım işlemleri, etkinlik tutarlılığı ve iletişim üst düzeylerine - gerçek anlamda, ancak BFF, CQRS ve etkinlik odaklı tasarım gibi desenlerle yönetilebilirler. anahtar, MVC'yi karmaşıklığa hitap etmeden dağıtılmış bir ortama yönlendirmektir.
Sonuçta, hedef elli yıl önce olduğu gibi aynı kalır: Mikro hizmetler inşa edilebilir ve dirençli MVC, mimari düzeyde uygulanan zaman, mikro hizmetlerdeki bu hedefe ulaşmak için kavramsal çerçeveyi sağlar.).