Olay Sourcing ve Cqrs'ı uygulama Serverless Architectures

Event Sourcing ve CQRS'ye Giriş

Olay Sourcing ve Komut Sorgu Sorumluluk Segregation (CQRS) modern, dağıtık sistemler inşa etmek için temelsel desenler haline geldi, bu modeller, daha önce görülmemiş ölçeklenebilirlik, dayanıklılık ve denetimlenebilirlik sağlar. Bu makale, sunucusuz ortamlarda tedarik ve CQRS'yi kapsamlı bir araştırma sağlar, temel kavramları, pratik uygulama stratejileri, ortak pitfallları ve gerçek dünya en iyi uygulamaları kapsar.

Event Sourcing: Olay Eşitliği Olarak Değiştirin

Olay Sourcing, başvuru durumuna her değişimin bir hayal kırıklığı olduğu bir veri kalıcıdır. Bu yaklaşım, belirli bir tarihteki durumu saklamanın yerine, mevcut durumu, sistem olaylarının kronolojik bir logunu kaydeder.Mevcut durum bu olayları tekrar oynatarak yeniden yapılandırılabilir.Bu yaklaşım tam bir denetim izi sağlar, zaman sorguları (örneğin, “bir tarih üzerinde devlet nedir?”) ve bulama ve uyumluluk.

Sunucusuz bir bağlamda, olay mağazası oldukça dayanıklı, ölçeklenebilir ve düşük çözünürlükte olmalıdır. Common Choice includeETHFLT:0)AWS DynamoDB), [[Uygunluk Stüdyosu:2|Navige Cosmos DB[D][D][D][3][D][D][/FONT][/FONT=D][/FONT=D][/FONT=D][/FONT=D][/FONT=D][/FONT=FONT=TRNT=FONT=TRNT=FONT=FONT=FONT=FONT=STRNT=S][/FONT=FONT=FONT=FONT=FONT=FONT=FONT=S][/FONT=S][/FONT=STRNT=STRNT=STRNT=STRNT=FONT=FONT=STRNT=S FONT=STRNT=STRNT=I=STRNT=FONT=I=FONT=I=I=STRNT=S FONT=I=S FONT=S FONT=S FONT=FONT=

Martin Fowler'in kanonikü:0. madde üzerinde madde ([Dönetici) bir referans, desenin nüanslarını anlamak için kesin bir referans olarak kalır.

Event Structure and Schema

Her olay minimumda içermelidir: bir olay türü, bir zaman notu, bir toplam tanımlayıcı, bir versiyon numarası ve bir ödeme yükü, bir şema kayıt (örneğin, [[Görünge Kayıt:0)Google Cloud Schema Kayıt[Dönetici:2).AWS EventBridge Schema Sicili), olaylar olarak geri uyumluluk sağlar.

CQRS: Yazlardan Okunma Oku

CQRS (Command Query Sorumluluk Segregation), sorguları işlemek için kullanılan modeller (kitaplar) ile ilgili olarak kullanılan modeller (kitaplar) ayrı işlevleri veya hizmetleri dağıtmak anlamına gelir: eller sürecine genellikle, sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sıkılmış tablolar, malzemeleştirilmiş manzaralar veya arama indeksleri.

Bu ayrılık önemli faydalar getiriyor: İş yükleri yalın kalıyor ve geçerlilik ve olay devam ediyor, ancak okunan modeller hızlı geri dönüş için ayarlanabilir, pre-joins, aggregations ve tam metin arama yetenekleri dahil.İki taraf, Google Tasks gibi bir senkronizasyon ile iletişim kurar.

Greg Young'ın orijinali:0)CQRS belgeleri) desen için temel bağlam sağlar.

Event Sourcing ve CQRS'yi Serverless

Birlikte kullanıldığında, Event Sourcing ve CQRS güçlü bir ikili oluşturur: Olayda saklanan olayları döndürür ve projeksiyonlar (veya aboneler) bu olay odaklı paradigmadaki varsayılan platformlar.

Aşağıda tipik bir sunucusuz etkinlik-kaynakd sistem akışı:

  1. [FONT:0] Kullanıcı eylemi[DÜT:1] bir komut işlevi (örneğin, API Gateway'nin arkasındaki bir AWS Lambda).
  2. Komut işlevi girdiyi doğrular, bir veya daha fazla alan etkinlikleri üretir ve onları etkinlik mağazasına (DynamoDB, Cosmos DB vs.) uygular.
  3. Olayları takip ettikten sonra, işlev bir mesaj yayınlar (örneğin Amazon EventBridge, Azure Event Grid veya Google Pub /Sub) yeni olayların mevcut olduğunu gösteren.
  4. [FONT=0)Projeksiyon işlevleri[[Dönetici:0) Etkinlik akışına abone olmak ve okuma modelini güncellemek (örneğin, normalleştirilmiş DynamoDB tablosu, bir Elasticsearch indeksi veya Redis gibi önbellek).
  5. Sorgu işlevleri doğrudan okuma modelinden taleplere hizmet eder, asla etkinlik mağazasını sorgulayamaz.

Bu tasarım, CQRS'nin temel ticaret alanı olan yaz ve okuma tarafı arasında, normal tutarlılık ve hatta arzu edilen bir şekilde, CQRS'nin temel ticaret alanı olan bir sonraki tutarlılık olduğunu garanti eder.

Örnek: E-Ticaret Order Management

Bir sipariş sistemi düşünün. Bir kullanıcı siparişi (komün) yerleştirir ve kullanıcı daha sonraki istekler sipariş tarihi başlatırsa, bu olay ve güncellemeyi bir sipariş özeti okuma modelini okur ve ürün adı, miktar ve mevcut durumu içeren bir başka projeksiyonu güncelleyebilir.If the user later requests order history, the query function reads from the pre- built summary model, avoid joins or reads from the raw event.

Event Store'u Serverless Databases'te uygulama

Olay mağazası için tasarım seçenekleri doğrudan performans ve maliyetle. DynamoDB ile, ortak bir yaklaşım tek bir masada kompozit birincil anahtarla kullanmaktır: 03.Bölüm anahtarı) ve [[Dönetici:2) Bu, tüm olayların hızlı geri dönüşüne olanak sağlar.

Pasif sorgular gerektiren iş yükleri için, olay türü veya zaman notamp üzerinde ikincil bir indeks kullanmayı düşünün. Ancak, tüm olayı taramaktan kaçının; bu tür ihtiyaçlar özel okuma modellerine göre daha iyi hizmet edilir.

Azure'da Cosmos DB, yapılandırılabilir tutarlılık düzeyleri ve otomatik endeksleme ile benzer yetenekler sunuyor.TheurFLT:0)Azure Architecture Center'ın Olayı (Dönetici)) bu platforma rehberlik etmek için özel bir yol sunuyor.

Eşitlik ve Idempotency

Aynı agregade aynı anda yazılması gerekir.UseETHFLT:0Conoptimistic concurrency control[[Dönetici 1 ) (e.g., koşullu güncelleme DynamoDB'de sadece bir komutun artmasını sağlar ve onları tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrar tekrarlayabilir.

Yapı, Projections ile Modelleri Oku

Projekler olayları tüketerek ve bir veya daha fazla okuma modellerini güncellemek için uygundur.In serverless, onlar en iyi şekilde uygulanmalıdır:0)event-güdümlü fonksiyonlar[Döneticiler[Döneticiler 1) olay otobüsü tarafından tetiklenen her projeksiyon fonksiyonu idempotent olmalıdır: Bir olay bir kez daha işlenirse (örneğin, yeniden deneme nedeniyle).

Bina okuma modelleri için ortak stratejiler şunları içerir:

Sıkı darbeden kaçınmak için, projeksiyonlar devletsiz olmalıdır ve sadece olay yükleri tarafından yönlendirilmelidir. Ayrıca, kaldırılabilir veya komut tarafını etkilemeden değiştirilebilirler.

Olaysal Yeterlik ve SAGAs

CQRS/ES sisteminde en büyük zorluklardan biri, olaysal tutarlılığı yönetmek ve çok adımlı iş işlemlerini koordine etmektir. Bir kullanıcı bir sipariş yerine getirebilir, ancak okuma modeli birkaç yüz milisaniye için bu değişikliği yansıtamaz.For senkronizasyonkous user beklentilerini (örneğin, bir onay sayfası göster), komut eller hemen olayı geri dönebilir.

Dağıtım işlemleri gerektiren çok fazla adım için, en iyi şekilde tamamlanmış olan işlemler için, a)-FLT:0)SAGA modeli[Döneticileri, Azure işlevleri, Google Workflows) her adım, uzun süreli kilitler olmadan güvenilir bir şekilde uygulanabilir.

Hata işleme ve Ödempotency at Scale

Serversız ortamlar geçici başarısızlıklara ve tekrarlara tabidir. Etkinlik handler, idempotency için tasarlanmalıdır. Mağaza aurFLT:0) Pencere) (örneğin, DynaDB TTL veya Redis set) kullanarak, bir olay tekrar pencere içinde gelirse sessiz bir şekilde görmezden gelinir.

Bir komut mağazaya olayları aldıktan sonra başarısız olduğunda, olaylar zaten yazılmıştır. Bu tür durumlarda, işi geri getiren bir projeksiyona ihtiyacınız olabilir.

Ayrıca, DLQ'ların sorunu düzeltmeden sonra tekrar tekrar denemenize ve tekrar oynamanıza izin verdiği olaylar için ).

Performans ve Maliyet Optimizasyonu Serverless Event Systems

Sunucusız ölçekler otomatik olarak, bakımsız olarak tasarlanmış bir olay kaynağı yüksek maliyetlere sahip olabilir. Anahtar optimizasyon alanları şunları içerir:

Örnek: DynamoDB'de Snapshot Stratejisi

Sayfa anahtarı ile bir anlık depolayın = agret ve sıralama anahtarı = "SNAP#[Dön:0)" Ödeme yükü, mevcut durumu yeniden yapılandırırken, olayları görüntü sürümden daha büyük bir şekilde sorgulayın, anlık frekansın her 50-100 olay veya zamana dayanarak (örneğin, her 5 dakika).

Test ve Debugging Event-Kaynakd Serverless Systems

Olaya dayalı mimarileri test etmek, geleneksel C-RUD sistemlerinden farklı stratejiler gerektirir. Birim testleri, CI/CD boru hatlarında testlerin doğru şekilde güncellendiğini doğrulayın. Çünkü sunucusuz fonksiyonlar devletsizdir, yerel emülatörleri kullanmayı düşünün (örneğin, AWS SAM yerel, DynamoDB Local, EventBridge yerel test kütüphanesi) CI/CD boru hatlarında testlerin yürütülmesi için doğru güncellemeleri doğrulayın.

Etkinlikten yararlanan üretim sorunları, kendi başına yarar sağlar - hizmetlerin karşısındaki karar verme sürecindeki olayları yeniden canlandırabilirsiniz.AWS X-Ray) veya ).

Ortak Pitfalls ve Them'dan Nasıl Kaçırmak

  • [FONT:0)Inappropriate domain modelleme: Her işletme domaini, herhangi bir denetim gereksinimleri olmadan basit CRUD'ye ihtiyacınız varsa, üst haklı olmayabilir.
  • [FONT:0) Tamamen büyük olaylar:[Dönetici:[Dönetici:0) Büyük maaş yüklerini (örneğin, tüm belgeleri) tek bir olay performansı azaltır.Decompose olayları anlamlı, granular değişiklikleri.
  • [FONT:0)Projeksiyon sürüklenme:[Dönetici:[Dönetici:0)Projeksiyon sürüklenme:[Dönemli olaylar veya böcekler nedeniyle, tekrar oynat mekanizmasına ihtiyacınız olduğunda, tüm olayları zamanında yeniden işlemeye yarayan bir yeniden oyun işlevine ihtiyacınız var.
  • [FONT=0]Görüntüyü görmezden gelmek:[Dönetici:[Dönetici:0)[Döneticileri) Etkinlikleri taklit etmek, ancak şemaları değiştirmek. Her etkinlik türünde bir kayıt ve versiyon kullanın. Tasarım yeni projeksiyonlar birden çok versiyon işlemek için.
  • [FONT:0)Cold projeksiyonları etkilemeye başlar: Projeksiyon işlevleri, soğuk başlangıç gecikmelerinden acı çekebilir. kritik projeksiyonlar veya toplulaştırma olayları için geçici olarak kabul edilebilir.

Gerçek Dünya Mimari Örnek

AWS Lambda, DynamoDB ve EventBridge her ticaret siparişini kaydetmek için yapılan bir finansal ticaret uygulaması. Komut işlevleri satın / satış siparişlerini ve yaygınlaştırması için satın alındı.) ve [[Döneticileri 7) etkinlikleri için Projections, kullanıcının portföy ve bir Elasticsearch kümesi için gerçek zamanlı piyasa analizi için DynamoDB tablosunu güncelledi. Sistem, üst saatler boyunca% 99.99 oranındaki erişilebilirlik ve alt saniye geç kaldı.

Bu ekip, katı olay şemasını kullanarak ortak tuzaklardan kaçındı ( Apache euro’ya karşı) ve tüm okuma modellerini 30 dakika içinde sıfırdan yeniden inşa edebilecek özel bir yeniden oyun hattını uygulama.

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

Olay Sourcing ve CQRS'yi sunucusuz mimarilerde uygulamaktadır, gelişim ekiplerine son derece ölçeklenebilir, denetim edilebilir ve kullanılabilir sistemler inşa edebilme yeteneği verir.Bu uygulamalar için tam olarak yönetilen hizmetler, mesaj yönlendirme ve hesaplama, platformda karmaşık iş alanları için güçlü araçlar haline gelebilir. Anahtar başarı faktörleri dikkatli olay modelleme, idem projeksiyonları, anlık optimizasyon ve sağlam hata işleme.