Olay odaklı mikro hizmetler, gerçek iş domaininin dil ve kısıtlamalarının nasıl mimarlandığı konusunda temel bir değişim temsil eder.DDDD ilkeleri kullanarak, her şeyi sınırlanmış bağlamdan çıkarmak için gerçek iş alanının temelleri ile birleştirin.

Event-Driven Microservices

Geleneksel bir istek odaklı mimaride, hizmetler senkronizasyon yoluyla senkronizele iletişim kurarlar. Bu, sıkı zaman zaman zaman zaman darbesi yaratır - çağrıcı bu modele yönelik olarak aramayı beklemeli: hizmetler olayları yayınlayın (sonuçta olan bir şeyi temsil eder) bir mesaj brokerine ve diğer hizmetler bu olayları bir senkronizasyonu kullanmalıdır.

Bir etkinlik odaklı mikro hizmet mimarisinin temel bileşenleri şunlardır:

  • [FONT:0] Event Yapımcılar [[DÜDÜT:1)[Döneticiler: Olayları tespit eden ve yaylayan hizmetler (e.g., "OrderPlaced")
  • [FONT:0] bile Tüketiciler [DÜT 1: 1): Olaylara abone olan ve buna göre tepki veren hizmetler
  • [FONT Broker[[Dönetici: 0/01/2012)[[[FONT|0]))]]: Apache Kafka, TavşanMQ veya Amazon EventBridge gibi mağazaları ve rotaları olayları
  • [FONT:0) Event Schema Sicili[Dönetici: Etkinlik sözleşmeleri için merkezi bir mağaza, sürüm ve evrimleşme ve evrimleşmeye izin veren bir tasarım

Bu model ölçeklenebilirliği artırır, çünkü her hizmet kendi yüklerine bağımsız olarak ölçeklenebilir. Resilience geliştirir, çünkü bir tüketici başarısızlığı üreticiyi engellemez - daha sonra yeniden işlemeye devam edilir ve daha sonra tekrarlanabilir. Ek olarak, etkinlik odaklı sistemler doğal olarak geniş ölçekli sistemler için dağıtılan işlemlerden daha uygun.

Domain-Driven Design

Domain-güdümlü tasarım Eric Evans ve DDD topluluğu tarafından on yıllar boyunca rafine edilmiştir. Hedef, işletme alanını altyapı kaygılarında somutlaştırmak yerine sadık modeller oluşturmak için yazılım oluşturmaktır. DDDDD'nin temel bina blokları doğrudan mikro hizmet tasarımı için geçerlidir:

Bounded Contexts

Bir sınırlı bağlam, belirli bir alan modelinin geçerli olduğu mantıksal bir sınırdır. Örneğin, "müşteri" kavramı, satış bağlamı arasında farklılık gösterebilir (bir müşteri iletişim bilgileri ile bir liderliktir) ve nakliye bağlamı (bir müşteri bir adres ve tercihleri vardır).

Varlıklar ve Değer Objects

Entities, zaman içinde devam eden eşsiz bir kimlikle nesnelerdir (örneğin, bir sipariş kimliği ile bir siparişle bir siparişle bir sipariş). Değer nesneler, belirli bir kimlik olmadan alanın yönlerini tanımlayan eşsiz nesnelerdir (örneğin, Adres, Para).

Aggregates

Bir işlem sınırı, bir araya gelen bir alan nesnelerin bir kümesidir. Bir etkinlik odaklı bir mimaride, olaylar bir araya geldiğinde yayınlanır[Döneticileri değiştirmiş).Örneğin, agregale[Dönder)[Döneticileri değiştirilen) veya hangi olaylardan meydana gelen toplu geçişler, sistem bir şekilde yapılır.

Domain Events

Bunlar, etkinlik odaklı sistemlerin temel taşıdır. bir alan olayı, alan uzmanlarının dikkat ettiği alanda meydana gelen bir şeyi yakalar. Etkinlikler geçmişteki gergin olarak adlandırılır (örneğin, [[0)In billPaid).

DDDDDD ile Mikro Servisler Tasarlamak

DD'yi mikro hizmet tasarımına uygulamak sadece küçük hizmetlere bir monolith bölmekle ilgilidir. İş alanının sınırlı bağlamlara bağlı olarak, her biri bir mikro hizmet için aday haline gelir.

Stratejik Tasarım: Bounded Contexts

Bir çalışma ile başlayın:0)Domain Storytelling[Dönetici:0) Workshop veya |Sing Fırtınası) Oturumu, alan uzmanları ve geliştiricileri bir araya getirerek olayları ve komutları tanımladığınız gibi, onları bağlamlara göre şekillendirebilirsiniz.

  • [FONT:0)Order Yönetimi: araba ile idare, kontrol, sipariş devlet makinesi
  • [FONT:0)Inventory[[[DÜT:1]: stok seviyelerini, rezervasyonları, restocking
  • [FONT:0)Billing[DÜT:1]: Faturalar, ödemeler, geri ödemeler
  • [FONT:0]Fulfillment[DÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜŞÜNÜ: nakliye, takip, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat, teslimat
  • [FONT:0)Müşteri Yönetimi: Profiller, tercihler, kimlik doğrulama, kimlik doğrulama

Bu bağlamların her biri mikro hizmet olacaktır.TheETHFLT:0)Context Map[DDD)[[Döneticiler arasındaki ilişkileri göz önünde bulunduracaktır -özellikle hangi bağlamlar yukarı doğru (produce olaylar) ve hangi aşağı uç (konsu olaylar) bu harita sizin etkinlik topolojiniz için mavi baskı haline gelir.

Taktik Tasarım: Bir Sınırlı Bir Context içinde Modeling

Her sınırlı bağlamda, varlık, değer nesneleri, agresyonları ve alan etkinlikleri kullanarak zengin bir alan modeli inşa edin. Örneğin, Order Management context'de, tanımlayabilirsiniz:

  • [FONT:0)Order[DÜT:1) (geçmiş kök): Maddeler, statü, nakliye adresi içeriyor
  • [FONT:0)OrderItem[[[Dönetici: Bir ürün, miktar, fiyat, fiyat, fiyat, fiyat referansları)
  • [FONT:0)ShippingAddress[[DÜDÜDÜDÜDÜDÜDÜDÜDÜDÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜ: 0:1)
  • [FONT:0)OrderPlaced[Dönetici: 1 ) (bölge olayı): sipariş verildiğinde ortaya çıktı.
  • [FONT:0)OrderShipped[Dönetici: 1) (domain event): sipariş geçişleri gönderilen zaman yükseltti.

Toplam kök tüm değişmezlerin (örneğin, toplam hesaplama, durum geçişleri) yayınlanmadan önce uygulanır.Bu, [[Düzücük|0)Aggregate modeli) ile uyumlu bir şekilde durum engelleyicidir.

Event Modeling: Etkinlikler ve Choreography

Bağlanmış bağlamlar tanımlanır, aralarında akrep olan olayları modelle yapılır.Her olay için hangi bağlamları tükettiğine karar verin.Bir sipariş akışı için ) (Adammit tarafından oluşturulan) Bir zaman çizelgesi ile başlayın: bir kullanıcı yolculuğunda meydana gelen olaylar.

  1. [FONT=0)Yader Yönetim[Dönetici:0)[Dönder)[Dönder)[Dönetici:0)
  2. [FONT:0)[[Dönemli)[Dönemli) ►[Dönemli) · · 3|Dönemli (ya da)) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
  3. [FONT:0)Billing[DÜT:1] [Döntilmişler [Dönemliler[Döntilmişler için)[Dönemliler[Dönemliler, [[Dönemliler, [[Dönler, [[Dönler, [[Dönler)
  4. [FONT:0)Order Yönetimi ← Egzersizler [Dönemli) · 2|Döntilmiş [Dönemli) · 3|Demekli, "uygun", yayınlar.
  5. [FONT:0]Fulfillment[DÜDÜDÜDÜDÜDÜDÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜ

Bu koreografi merkezi bir orkestra için ihtiyaç ortadan kaldırır. Her hizmet olaylara tepki verir ve yeni etkinlikler üretebilir. Tüm başarılabilir tutarlılık olarak sistem. Başarısızlıklarla başa çıkmak için, hizmetler idempotent ve yeniden işlenme olayları yapabilmelidir.

Event-Driven Architecture ve DDDDD

Olaya dayalı mimari ve DDDD arasındaki sinerji, geleneksel hizmet tasarımlarında birkaç ölçülebilir avantaj sağlar:

Loose Coupling

Hizmetler sadece olaylar yoluyla iletişim kurar, doğrudan API aramaları yapmaz. Bir olay yangın ve geri bildirimdir: yapımcı senkronize yanıt beklemiyor.Bu ortadan kaldırım zamanı darbesi. Bir tüketici, bir hizmetin içsel modeline etki etmeden eklenebilir veya kaldırılabilir.

Scalability

Asynchronous event processing, her hizmetin kendi yüklerine göre yatay olarak ölçeklendirmesine izin verir. sipariş yerleştirmelerinde bir artış, mevcut hizmetleri değiştirmeden Inventory hizmeti zorlamaz; olaylar brokerde rahatsız edilir.

Resilience

Başarısızlıklar izole edilir. Billing servisi aşağılandığında, Order Management hala her hizmetin düşük hizmet beklemeden tutarlı kalmasını sağlar.Bu, bir süre boyunca kalibre edilen zincirlerden çok daha sağlamdır.

Domain Sorgulama Domain

Belki de en güçlü fayda: mimarlık aynaları iş. Etkinlikler, birden fazla ustaya hizmet etmeye çalışan ve hiçbir şekilde hizmet etmeye çalışan tüm çok-çok-kommon "genik hizmet"i ortadan kaldırır.

Meydanlar ve En İyi Uygulamalar

Etkin mikro hizmet ve DDDD'nin kombinasyonu güçlü olsa da, disiplinli mühendislik uygulamaları gerektiren yeni kompleksleri tanıtmaktadır.

Olaysal Yeterlik Yönetimi

Servisler olaylarla tamamen ikiye ayrılırken, sistem sonunda tutarlıdır. Bir kullanıcı, bu şekilde bir "önemli" statüsüne kısaca bakabilir.[DDD:0)PaymentSucceed) etkinliğine son verdi.Örneğin, Inventory hizmeti birçok alan için kabul edilebilir, ancak sipariş verme işlemine tepki göstermelidir.

Event Versioning and Schema Evolution

Olaylar geçmişin hayal edilemez kayıtlarıdır, ancak şemaları evrimleşmeli, bir GÜNDÜNCÜS Kayıt Sistemi[Döneticiler: 1)En İyi Uygulamalar: Confluent Schema Kayıtları veya özel bir çözüm gibi) uyumluluk kontrollerini uygulamak için.

  • Her zaman varsayılanlarla ilgili olarak yeni alanları ekleyin.
  • Bir deprecation olmadan alanları kaldırmayın.
  • Algoritma seviyesindeki sürüm olayları (örneğin, [[0)OrderPlacedV2).
  • Tüketicileri eski versiyonlardan (eski uyumluluk) uzak tut.

Olay Sourcing vs. Event Bildirims

Tüm olaylar gerçek kaynağı olarak depolanmalıdır. Birçok uygulama )event bildirimleri) - DD arsaları olmadan başka bir değişikliği bilgilendirmede bulunmak için diğer hizmetleri bildirmek gerekir, aksine, [[D:2|t|event) her devlet yeniden yapılandırması için sürekli sorguya ihtiyaç duyduğunuzda veya karmaşık bir devlet yeniden yapılandırması için mevcut durumu yeniden başlatmanız gerekir. Olay kaynağı çiftleri doğal olarak DD arsaları ile ilişkilendirir.

Idempotency ve Tam Olarak Bir Kez İşleme

Dağıtılmış sistemler genellikle olayları en az bir kez sunar. Tüketicilerinizi idempotent olmak için tasarlayın: Aynı olayı iki kez işleme aynı sonucu üretmelidir.DDDD'de, etkinlik numarasıyla bir araya gelen toplam kimlik, tekrar tekrar tekrarlama anahtarı olarak hizmet edebilir.

İzleme ve gözlemlenebilirlik

Olay odaklı sistemler, her olayla seyahat eden bir korelasyon kimlikleri ve tüketim etkinlikleridir. ImplementurFLT:0) çoklu zaman işlemeyen olaylar için).En uygun şekilde işlem yapan bir korelasyon ID ile birlikte (her olay yayın ve tüketim etkinliklerine her zaman damgalı olarak giriş yapın.) ve gecikmiş mektuplar kullanın.

Başlamaya Başlamaya Başlamaya Yönelik Pratik Adımlar

  1. [FONT:0]Run an Event Storming Workshop[[Döneticileri tüm alan olayları, komutları ve sınırları bağlı bağlamları tanımlamak için alan uzmanları ile).
  2. [FONT=0) Context Map[[Döneticileri) Tanımlayın ve üst düzey / aşağı ilişkileri çizin.
  3. [FONT:0)Choose your event broker[[Dönetici: 1 ) (Kafka yüksek devir için, TavşanMQ, AWS EventBridge gibi daha basit bir routing veya bulut-native için).
  4. [FONT=0] Tasarım olayı şemaları[[Dönetici: 1 ) bir kayıt kullanarak işbirliği içinde. Birkaç temel olayla başlayın.
  5. [FONT:0] Bir hizmet[DDDD taktik desenleri takip eden ilk domain etkinliğini ele alalım.
  6. [[Düzg:0) Bir tüketiciyi [Dönetici 1) başka bir hizmette inşa edin. async flow end-to-end test edin.
  7. [FONT:0)Gradually genişlet[[[Dönetici: 1 ). Daha fazla olay, daha fazla tüketici ve kritik akışlar için bilgeleri uygulayın.

Gerçek Dünya Örneği: E-Ticaret Order Fulfillment

Bir başarı hesabının (örneğin,) veya diğer tüm kişilerin (veyan) veya diğer kişilerin (veyan) bir araya gelmesi gerekir.

Dış Kaynaklar

Bu kavramların anlayışını derinleştirmek için, aşağıdaki yazar kaynakları keşfedin:

  • [FONT=0)Martin Fowler'in Mikro hizmetler üzerindeki makalesi[[Döneticiler)[[Döneticiler üzerinde temel okumalar:)
  • [FONT:0]Domain Language – Eric Evans' DDD site[[DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD)[DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD)
  • [FONT:0] Modelleme web sitesi[[[Dönetici: 1) Uygulamaya dayalı sistemler tasarlamak için pratik kılavuz ve araçlama
  • [FONT:0)Apache Kafka Streams Belgeleri[Dönem: 1)

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Alanına yönelik tasarım ilkeleri ile ilgili olarak tasarlanmış mikro hizmet, hem teknik olarak sağlam hem de iş odaklı sistemler oluşturmak için kanıtlanmış bir yaklaşımdır. Sınırlanmış bağlamların birleşimi, agresyon, alan etkinlikleri ve bir senkronizasyon, sağlam olay sözleşmeleri ve esneklik sağlar.Sonuçta olduğu gibi sorunlar, olay dışı tutarlılık ve olay versiyonu gibi bir süreçtir, ancak ilk sınıf teknik borç olmadan iş ile gelişebilecek bir sistemdir.