Olay odaklı mimariler, üreticilerin ve tüketiciler arasındaki verilerin güvenilir, tutarlı akışına güveniyor. Sistem geliştikçe, olay verilerinin yapısı -özellikle de değişiklikler. Yeni alanlar eklendi, eski alanlar ve şema evrimi, bu karmaşıklığı yönetmek için kasıtlı bir strateji olmadan, bu değişiklikleri yönetmek için kasıtlı olarak, etkinlik odaklı sistemler, etkinlik odaklı sistemler, dönüşüm hataları, veri kaybı veya sessiz yanlış anlama stratejilerinizi uygulamak için bir üretim biçimini sağlayarak, bilgi kaybınızı teşvik etmek.

Event Version Versioning

Olay versiyonu, bir olayın farklı versiyonlarını tanımlamak ve takip etmek, böylece üreticilerin ve tüketicilerin farklı evrim aşamalarında ortak olabilirler.Ana amaç, olayların, bir üretici tarafından üretilen veya hangi sürümde üretilebileceğine dair doğru yorumlanabilir.

Çeşitli düzeylerde sürüm uygulanabilir:

  • [FONT=0]Schema versioning[[Dönetici: 1) [Dönetici:0) Bu, şemalarla iyi çalışır ve şemalar ile iyi çalışır.
  • [FONT=0)Payload sürüm[[[Dönetici:0)[0)|Dönlendirme[Dönlendirme için kullanılan tüketiciye (örneğin, $ 1) dahildir.
  • [FONT=0]Metadata versioning[[Dönetici: 0 3) - Versiyon bilgileri mesaj başlığında veya zarf metada depolanır, ödeme yükünden ayrı tutar, ancak tüketicinin vücut okumadan önce başlıkta parsemasını gerektirir.

Her yaklaşım, bir kayıt olmadan sistemlerde ticaret yapmak için uygundur. Schema sürümleme merkeziizes şema yönetimi yapar ve uyumluluk kontrollerini kolaylaştırır, ancak genellikle runtime şema kayıt aramalarını gerektirir. Payload sürümleme, kayıt olmadan sistemlerde uygulamaları ve işleri birleştirmek basit, ancak her iki dünyanın en iyi şekilde kullanmak için makyaj yapmak için dikkatli bir şekilde gerekir. Metadata versiyonu, tüketicinin ilk parsing mantığına 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 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 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 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 kullanılan şemalar.

Schema Evolution için Stratejiler

Schema evrimi, şemaların uyumluluk korumak için zaman içinde nasıl değiştiğini yöneten kurallar ve uygulamalar kümesidir. Aşağıdaki stratejiler sağlam bir şema evrim planının temelini oluşturur.

Schema Validation

Veri yapısını uygulamak için resmi bir şema tanımı dili ve geçerlilik aracı kullanın.En popüler seçimler israfFLT:0)JSON Schema), [[Dönemli veri bozulması (Protobuf) Buffers (Protobuf) Bu diller, varsayılan değerler, opsiyonlar ve uyumluluk modları gibi yerleşik mekanizmalar sağlar.

Backward Compatability

Yeni şema için yazılmış bir tüketicinin eski şema tarafından üretilen olayları hala okuyabildiği konusunda bir şema değişikliği geri uyumludur: En yaygın teknikler şunlardır:

  • [FONT:0] Teklif Seçmeli alanlar[[[Dönetici:0)[[Döneticiler)[[Döneticiler) ve tüketici varsayılan olarak kullanır.
  • [FONT:0] Yeni enum değerleri[[Dönetici: 1) Yeni enum değerleri mevcut mantığı bozmadığı sürece eklenebilir. Tüketiciler bilinmeyen değerleri ele almalıdır.
  • [FONT:0]Making alanları değiştirilebilir[[Dönetici: 1)) – Seçmeli olarak gerekli bir alan değiştirmek geri uyumlu; tersine bir kırılma değişikliğidir.
  • [FONT:0)Using type promosyonlar[[DÜT:1) - Bir alan genişletin (örneğin, → 03: 5) → [[Üye ait, [[Üye Olmayanlar, → 5 ), →Üye ait olan →Üye ait veriler genellikle güvenlidir.

Forward Uyumluluk

Forward uyumluluğu, eski bir tüketicinin yeni bir yapımcı tarafından üretilen olayları okuyabilmesini sağlar. Bu, elde etmek daha zordur çünkü tüketici beklemeye programlanmamış alanları bilmiyorlar. Strategies şunları içerir:

  • [FONT=0)Tolerant okuyucular[[[Döneticiler, değiştir] ve JSON Schema'nın (Dönetici) tarafından bilinmeyen alanları görmezden gelmelidir.
  • [FONT:0]Yeni alanlar için savunma değerleri[[Dönetici: 1) - Yapımcılar tüketici onları kullanamadığında varsayılan değerlerle yeni alanları popül edebilir, ancak bu gerçekten geri uyumluluk endişesidir.For forward uyumluluğu için, tüketicinin anlamadığı alanları görmesi gerekir.
  • [FONT:0] Yapısal değişikliklerden yoksundur [[Dönem: 1) Renaming alanları, değişen türleri veya yeniden organize edilen yapıların genellikle yeni bir etkinlik sürümü gerektirir.

Metadata'da sürümleme

Mesaj başlıkları veya bir sarma zarfı içinde sürüme bir paket ayarlandığından bir paket oluşturabilir.#design #tasarım.com|tr|kullanıcılar veya aLFT:11) alan, genellikle bir şema kayıt altına almak için tüketicinin doğru şema sürümünü kullanmasına izin verir.

Schema Registries

Bir şema kaydı, mağazaların ve şemaları birden çok versiyonda doğrulamanın merkezi bir hizmettir.Refluent Schema Sicili) en yaygın olarak Kafka tabanlı sistemler için kullanılır, ancak APIcurio Kayıt ve Azure Schema Kayıtları gibi alternatifler sunar.Bir kayıt kullanarak, CI/CD boru hatlarında otomatik uyumluluk kontrollerini mümkün kılar ve üretim için kullanılan şemaları engeller.

Uygulamada Uygulamayı Uygulamayı Uygulamayı Uygulamayı Uygulamayı Uygulamayı

Uygulama teorisinden taşınmak, serileştirme biçimleri, araçlama ve süreçler hakkında somut seçimler yapmak gerektirir. Aşağıdaki uygulamalar yüksek kodlu, üretim etkinliğine dayalı sistemlerde kanıtlanmıştır.

Bir Serileştirme Biçimi Seç

Serileştirme formatı, şemaların nasıl tanımlandığını ve hangi uyumluluk aldığınızı belirler. İşte üç önde gelen seçeneğin bir karşılaştırması:

  • [FONT=0]Apache euro[[Dönetici: 1) - Grafiksel Evrim için tasarlanmıştır. Destekler geriye, ileri ve tam uyumluluk modları., Confluent Schema Sicili ile birlikte kompakt bir ikili format kullanın.
  • [FONT:0)Protocol Buffers (Protobuf)[Dönetici:0)[T:0))[MFD) ile bazı iş yükleri için bir Euro'dan daha verimli bir şekilde çalışır.
  • [FONT=0)JSON Schema[[Dönetici: 1) İnsan hazırlanabilir, yaygın olarak desteklenen ve tel verimliliğinin üzerinde esneklik sağlayan sistemler için en uygun şekilde kullanılır; genellikle JSON. Evolution ile kullanılır (örneğin,FLT:12, 03)

Birçok kuruluşta, seçim zaten mevcut altyapı tarafından kısıtlanır. Taze başlıyorsanız, euro etkinlik akışı için en olgun şema evrimcisi sunuyor, ancak Protobuf mikro hizmet iletişimi için güçlü bir rakiptir.

Uyumluluk Matrices

Algoritma ve versiyon sayısı büyüdükçe, bu sürümlerin hangileriyle uyumlu olduğunu belgelemek gerekir.A uyumluluk matris haritaları tüketici şema versiyonlarına uygun olarak, bilinen herhangi bir inkompatibiliteleri vurgulayın.Bu matrix, bir şema kayıt olarak otomatik olarak YAML dosyası olarak muhafaza edilebilir.

Örneğin, bir matrix, herhangi bir yapımcının v2 yayınlarından önce yükseltildiği gibi, veya üretici hazır olana kadar v1 olayları geri döndüremez.

Uyumluluk Testini Otomatikleştirmek

Algoritma için manuel kontroller hızla yönetilemez hale gelir. Tüme şema geçerliliği ve uyumluluk kontrolleri CI/CD boru hattınıza dönüştürür.Her seferinde bir yapımcı bir şema değiştirir, boru hattı gerekir:

  1. Belirli bir uyumluluk modu ile şema kayıt altına alınmasına karşı yeni şemayı kayıt edin.
  2. Kayıt başarısız olursa, inşa etmeyi ve ekibin şemayı düzeltmesini gerektirir (veya açıkça olay versiyonunu çöker).
  3. Gerçek tüketicilerle entegrasyon testleri, yeni şemayı koşu zaman sorunlarını yakalamak için egzersiz yapar.
  4. Başarılı olursa, yeni şema versiyonunu bir değişimlog girişi ile birlikte yayınlayın.

Araçlar:0)Confluent'in Maven[Dönetici:2|köpekli kabuk senaryoları[Döneticileri) ve şimdi GitHub Actions (ve şimdi GitHub Actions) bu işe yarar.For Protobuf için, Buf CLI, uyumluluk kurallarını uygulayan bir komut sunar.

İletişim ve Dokümantasyon

Schema değişiklikleri kapalı API sözleşmeleridir.Sadece başka bir API değişikliği gibi iletişim kurabilirler.Her bir olay türü için bir değişimlogu korumak, ne kadar değişti, neden ve tüm tüketicilerin yeni bir şemadan önce güncellendiğini garanti etmek.

Disisyon Değişiklikleri

Onları önlemek için en iyi çabalara rağmen, bazen değişiklikler olmalıdır (örneğin, bir alan yeniden kurmak, bir veri türü değiştirmek, yeniden inşa edilmiş nesneler).

  • [FONT:0)Versioned topics[[[Döneticiler[[Döneticiler) – Yeni bir konu üzerinde etkinlikler üretin (örneğin, 03: 5) Eski tüketiciler eski konuyla okumaya devam ederken, bu temiz ama tekrarlanan altyapı ve tüketicilere göç sırasında her iki konuya abone olmak gerekir.
  • [FONT=0]İstemeler [Döneticiler: 0 ))[Döneticileri) ve tüketicileri kontrol etmek için sürüme karar vermek gerekir.Bu, tüketicide şube kurma mantığını sağlar.
  • [FONT:0]Dual yazıyor[[Dönemli: 1) Bir geçiş dönemi için, yapımcı hem eski hem de yeni etkinlik formatlarını yayıyor. Bu genellikle tüketiciler göç ederken bir basamak taşı olarak kullanılıyor. Çift trafik ve karmaşıklığı artırmak, bu yüzden geçici olmalıdır.

Hangi yolu seçerseniz seçin, her zaman kırılma değişikliğini açık bir deprecation politikası ve izlenmiş bir rollout ile eşleştirin.

Gelişmiş Tahminler

Olay versiyonu ve şema evrimi, olay kaynağı, poliglot ortamları veya özel etkinlik mağazaları ile birlikte ortaya çıktığında, ek nüanslar ortaya çıkıyor.

Olay Sourcing ve Schema Evolution

Olay kaynaklı sistemlerde, olaylar gerçek kaynağıdır ve asla silinmez veya değiştirilemez. Schema evrimi, mevcut olanları değiştirmek yerine varsayılan alanları eklemek gerekir, önerilen bir uygulama, şema evrimi yerel olarak destekleyen bir formatta etkinlikleri depolamaktır (örneğin, bir şema kaydı ile) ve her zaman mevcut olanları değiştirmek yerine varsayılan alanları eklemek.

Polyglot Ortamlarında Modelleme

Üreticiler ve tüketiciler farklı dillerde yazılırken, dilbilimi formatı ve şema tanımının diller arasında tutarlı olmasını sağlamalıdır. euro ve Protobuf her dilde sağlam kod nesli vardır, ancak her dilsel karar verme mantığını önlemek için bilinmeyen alanları veya varsayılan değerleri biraz farklı tutabilirsiniz.

Event Stores ile sürüm

Event Shop StoreDB veya Apache Kafka gibi sistemler genellikle uzun vadeli bir etkinlik mağazası olarak Kafka'yı kullanarak, tüm tüketicilerden sonra olayları yalnızca yeni bir şemaya taşıdıktan sonra saklama politikasını dikkate alır. Aksi takdirde, hiçbir tüketicinin okumadığı eski bir şema ile etkinliklere sahip olursunuz.

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

Olay versiyonu ve şema evrimi, kullanıcıların beklenmedik başarısızlıklardan uzak tutulmasını bekleyen herhangi bir olay odaklı sistemde seçim değildir.Sağ kayıtlarını kabul ederek, doğru serileştirme biçimini seçerek ve uyumluluk kontrollerini otomatikleştirin, ekipler her zaman bir hizmetle veri şemalarını geliştirebilirler. Backward ve forward uyumluluğun tüketicileri beklenmedik başarısızlıklardan kurtarırken, açık ve deprecation politikaların herkes aynı şekilde uyumlu olmasını sağlar.En dirençli sistemler şema değişikliklerini ilk sınıf API değişiklikleri olarak değerlendirir, bir gün boyunca planlama.Bu uygulamalarda yatırım yapmak için planlama.