Mikroservices'te Event Driven Architecture'a Bir Yeni başlayanlar Kılavuzu
Event Driven Architecture Nedir ve Neden Bu Önemli
Event Driven Architecture (EDA) modern mikro hizmet tasarımının temel taşı haline geldi. Organizasyonlar dağıtılmış sistemleri ölçeklendirir, geleneksel senkronizasyonlu istek-response modeli sıkı darbe, kalibrasyon, kalibrasyon başarısızlıkları ve sınırlı yönlendirmeleri oluşturmak için ihtiyacınız olan bu sorunları, doğrulayıcı bir şekilde çözmek için - hizmetler, bağımsız olarak gerçekleri yayınlar.
Event Driven Architecture
Asynchronous İletişim
Hizmetler bir olay yayınlamadan sonra bir yanıt beklemeyin. Üretici bir mesaj brokerine bir olay yayınlar ve hemen kendi hızda Tüketiciler süreci etkinliklerine devam eder.Bu engelsiz davranış, kesinti bileşenleri yavaş veya kullanılamazken bile hizmetleri tutar. Aynı zamanda, yükteki geçici artışların brokerin kuyruğu tarafından absorbe edildiği anlamına gelir ve talep etme.
Loose Coupling
Üreticiler ve tüketiciler birbirlerini doğrudan bilgi sahibi değildir. Bir yapımcı, hangi hizmetleri tüketeceklerini bilmeden bir konuya olayları yayınlar. Yeni bir tüketici, üreticiye herhangi bir değişiklik yapmadan mevcut bir olay konusuna abone olabilir.Bu decoupling, ekiplerin geliştirmesini sağlar, dağıtmasını ve ölçek hizmetleri bağımsız olarak değiştirmelerini sağlar.
Event Immutability
Bir kez yayınlanan bir olay değiştirilemez. Etkinlikler geçmiş olaylar hakkında gerçekleri temsil eder - bir müşteri kayıtlı, bir sipariş, bir ödeme tamamlandı. Immutability güvenilir bir denetim izi sağlar, basitleştirme veya test için olay yeniden oynatabilir.
Olaysal Consistency
Olay odaklı sistemler, erişilebilirlik ve bölme toleransı için güçlü bir tutarlılık satıyor. Bir olay yayınlandıktan sonra, tüm tüketiciler devletini güncellemeden önce bir gecikme var. Uygulamalar bu lütufla idare etmek için tasarlanmıştır. Örneğin, bir e-ticaret sitesi, envanter, ödeme ve nakliye hizmetleri sürecine ilişkin birkaç saniye sonra “önemli sipariş” gösterebilir.
Bir Event Driven Sisteminin Anahtarları
Event Yapımcıları
Yapımcılar anlamlı durumu değişiklikleri tespit eder ve olayları yayınlamalılar. İşle ilgili olaylara odaklanmalılar, düşük seviyeli teknik olanları yayınlamaları yerine "database sırasını güncelledi", "müşteri adresi değişti." yapımcılar, brokerlerin geri alma ve brokerden onay alması gerekir.
Event Consumers
Tüketiciler belirli olay türlerine abone olurlar ve iş mantığını yürütürler. Tek bir olay birden çok tüketiciyi tetikleyebilir - örneğin, bir "yaraya yerleştirilen" olay envanteri güncellemek, bir onay e-postası ve log analizleri göndermek gerekir. Tüketiciler idempotent olmalıdır: Aynı olayı iki kez işlemeli olarak işlemeli.Bu kritik çünkü çoğu mesaj brokerleri teslimiyete teslimiyet sağlamalı.
Mesaj Broker / Event Bus
brokerler ve tüketiciler arasında oturur, olayı yönlendirme, kalıcılık ve teslimat. gevşek darbelere yol açan yayın mekanizması sağlar. Anahtar özellikler şunları içerir:
- [FONT:0)Persistence[[[Dönetici: Etkinlikler hayatta kalan broker yeniden başlar.
- [FONT:0]Guaranteed teslimat[[Dönetici: En Az-once veya tam olarak-once semantics.
- [FONT:0)Yadering garantiler: Bir bölüm veya konu içinde.
- [FONT:0)Scalability: Yüksek devirde üst elek almak için yatay bölme.
- [FONT:0)Dead-letter kuyrukları[Dönder: Başarısız mesaj işleme için.
Topics and Channels
Olaylar konular veya kanallarda düzenlenir. Bir konu grupları ilgili olaylar -örneğin, "order events" veya "Otur events" konularının granularitesi bir tasarım kararıdır: çok coarse ve tüketiciler birçok alakasız olay alır; çok iyi ve bir yaklaşımla ilgili konulardan oluşan bir yaklaşımdır.
Event Driven Architecture vs. Request-Response
EDA her senaryo için doğru seçim değildir. Bunu ne zaman kullanın:
- Hizmetlerin bağımsız ölçeklendirilmesine ihtiyacınız var.
- Sistem direnci, bir hizmetin başarısızlığının cascade olmadığını gerektirir.
- Aynı veriler veya eylem için birden fazla tüketiciniz var.
- Devlet değişiklikleri için gerçek zamanlı tepki kritiktir.
- Tüm iş olaylarına karşı kusursuz bir denetim yolunu istiyorsunuz.
EDA'dan kaçın:
- Kullanım durumunuz hemen güçlü tutarlılık gerektirir (örneğin, finansal liderlik güncellemeleri).
- Birkaç servisle basit, lineer bir akış var.
- Ekibiniz, asynchronous sistemler ve olaysal tutarlılık ile deneyim eksikliğini sağlar.
- Düşük çözünürlük senkronizasyonlu cevaplar kullanıcı-okuma talepleri için gereklidir.
Birçok sistem bir hibrit yaklaşım kullanıyor: karmaşık iş akışları, entegrasyonlar ve gerçek zamanlı özellikler için basit CRUD operasyonları ve etkinlik odaklı desenler için senkronizasyonlar.
Common Event Driven Architecture Desenleri
Event Bildirim
En basit model: minimum verilerle hafif bir olay (yalnızca bir kimlik ve olay türü) tüketicilere bildirimde bulunmak için yayınlandı.Sonra, yapımcıyı ayrıntıları için sorgulayın.Bu en düşük olay ödeme yükü büyüklüğüne kavuşturur, ancak üreticiyi sorgulamalı çünkü tüketiciler, olayı boyutunun küçük ve sorguya geçilmesi gerektiğini bilmelidir.
Event-Carried State Transfer
Etkinlikler tüm veri tüketicilerinin ihtiyacına sahiptir. Bir müşteri adresi değiştiğinde, olay tam yeni adresi içerir. Bu, senkronizasyonu azaltır ve tüketici performansını artırır.
Olay Sourcing
Sistemin durumu doğrudan depolanandan ziyade olay loglarından elde edilir. Her devlet değişikliği, taklit edilebilir bir olay olarak kabul edilir.Mevcut durum, performans için anlık görüntülerle yeniden yapılandırılır (muhtemelen). Olay kaynağı mükemmel denetimlenebilirlik, zaman sorguları ve şema evrimi hakkında karmaşıklaştırır ve dikkatli bir olay tasarımı gerektirir.
CQRS (Command Query Sorumluluk Segregation)
CQRS ayrı yazı (komün) ve okuma (kahkadar) modelleri. Komutlar, her modeli bağımsız olarak optimize etmenize olanak sağlar - örneğin, yüksek normalleştirilmiş bir yaz mağazası ve normalleştirilmiş bir okuma mağazası kullanarak, özel sorgular için optimize edilmiş bir kitaptır. CQRS genellikle olayla kullanılır, ancak bağımsız olarak da kullanılabilir.
Saga Desen
Sagas, dağıtılmış kilitler olmadan mikro hizmetlerle çok adımlı işlemleri koordine eder. Her adım bir sonraki adımı tetikleyen bir olayı yayınlar.Eğer bir adım başarısız olursa, daha önce yapılan olayları telafi etmek iki uygulama stili vardır:
- [FONT:0)Choreografi)[Dönetici işlemi tamamlandıktan sonra bir sonraki yayınların ne yayınlanacağını bilir. Bu basit ama iz için zor olabilir.
- [FONT:0)Orchestration[Dönetici: Merkezi bir koordinatör (saga yöneticisi) bir sonraki adıma karar verir ve olayları dinler, bir sonraki adıma karar verir.
Sagas, dağıtık veri tutarlılığını sağlamak için gereklidir, sonunda tutarlı sistemler.
Event Driven Architecture için Popüler Teknolojiler
Apache Kafka
Kafka yüksek kodlu, hata-zamanlı olay işleme için önde gelen dağıtılmış akış platformudur.Bu, Kafka Connect ve zengin bir müşteri kütüphanesini organize eder ve bölümlerde güçlü bir şekilde görev alır. Kafka, belirli bir süre boyunca olayları korur[Döneticileri ve tarihi yeniden oynatır).
TavşanMQ
TavşanMQ, AMQP ve diğer protokolleri uygulama olgun, özellik-zengin bir mesaj brokerdir. Yeni ve kuyruklar aracılığıyla esnek bir şekilde destekleniyor, Kafka'nın aşırı talep etmesi veya uzun süreli tutma gibi gelişmiş özellikler. TavşanMQ, Kafka'dan kurmak ve çalışmak daha kolaydır, EDA'ya yeni takımlar için iyi bir seçim yapmak veya Kafka'nın aşırı talep etmediği durumlar için daha kolay.
Amazon EventBridge
EventBridge, AWS hizmetlerini, SaaS uygulamalarını ve özel uygulamaları birleştiren bir sunucusuz etkinlik otobüsüdir. It offers şema kayıt, event filtreleme, dönüşüm ve Lambda ve Step Functions. EventBridge otomatik olarak altyapı yönetimi ve ölçekleri gerektirir.It is ideal for AWS-merkezsel mimarlıklar, ancak yüksek hacimlerde daha yüksek maliyetlere sahip olabilir.
Azure Event Hubs ve Service Bus
Azure Service Bus, işlem, tekrar algılama ve ölü-parmak gibi özellikler için tamamen yönetilen bir kurumsal mesaj brokeridir. Azure Service Bus, Azure'un ekosistemine benzer şekilde, çok sayıdaki algılama ve ölü-parçalama gibi özelliklerle entegre edilmiştir.
Google Cloud Pub /Sub
Pub/Sub, en küçük teslimiyet ve otomatik ölçeklendirme ile tamamen yönetilen, küresel mesajlaşma hizmetidir. Google Cloud hizmetleri ile tedarik etmeyi ve entegre etmeyi destekler. GCP tabanlı mimariler için sağlam bir seçimdir.
Sistem için Etkinlikler tasarlamak
Event Granularity
Etkinlikler doğru soyutlama seviyesinde anlamlı iş olayları temsil etmelidir. "database sıralı" gibi teknik olaylardan kaçınmalıdır. Bunun yerine, alan konseptleri hakkında model olayları: "OrderShipped" "PaymentFailed" Etkinlikleri yapmak gerekir - iş başına birden ilgili değişikliklerle bir olay.
Event Naming Conventions
Daha önce meydana gelen bir şeyi göstermek için geçmiş zaman kullanın. Alan bağlamı belirsizlikten kaçınmak için ekleyin: "Billing.In billGenerated" vs. "Shipping.In billGenerated" Organizasyondaki Consistency, sistemi daha kolay anlama ve korumak için yapar.
Event Schema Design
Bir olay şeması standart metadata içermelidir:
- [FONT:0][Dönemli: Deduplication için eşsiz tanımlayıcı.
- [FONT=0))[FONT=0))
- [FONT:0]timestamp[[Dönetici: Olay gerçekleştiğinde.
- [FONT=0)0[[Dönetici: Schema version.
- [FONT:0])))))[Dönetici: Hizmetlerin karşısındaki geçiş için.
Ödeme yükü, tüm veri tüketicilerinin daha iyi performans ve şemalar uygulamak için bir şema kayıt kullanın. serileştirme formatı seçin: JSON insan hazırlanabilirken, euro veya Protobuf daha iyi performans ve şema evrimi desteği sunar.
Schema Evolution
Olaylar sözleşmelerdir ve başlangıçtan itibaren evrim için plan değişecekler:
- Her olayda sürüm bilgilerini ekleyin.
- Geri uyumluluk takip edin: yeni üreticiler hala eski tüketicilerle çalışmalıdır.
- Ekler için opsiyonel alanları kullanın; asla yok veya yeniden adlandırma alanları.
- Dağıtım sırasında uyumluluk kurallarını uygulayan bir şema kayıt kullanın.
- Geçiş döneminde birden fazla şema sürümünü destekler.
Uygulama En İyi Uygulamaları
Idempotency
Tüketiciler, olayları güvenli bir şekilde ele almalıdır. Stratejiler şunları içerir:
- Mağaza işlenme olayı IDs ve tekrarları atlar.
- İş domaininden doğal idempotency anahtarlarını kullanın (örneğin sipariş numarası).
- Tasarım işlemleri idempotent (daha fazlalık yerine mutlak değerler) olarak adlandırılır.
Hata işleme ve Yenidenleme
Sürekli hataları (network timeouts, geçici hizmet yetersizlik) kalıcı hataları (önetici verileri, şema yanlış bir eşleşme) tekrarlamalar için jitter ile üst üste tekrarlama.En fazla sayıda retries sonra, olayı manuel denetim için ölü kuyruklara gönderin.
Event Orderinging
Küresel sipariş pahalı ve genellikle gereksizdir.Bölüm anahtarlarını kullanın (örneğin, müşteri kimliği, sipariş ID) bu bağlamdaki olayları aynı bölümle rotalamak, bu bağlamda sipariş vermek. Sadece iş mantığının nerede bağlı olduğu konusunda katı bir şekilde uygulayın.
İzleme ve gözlemlenebilirlik
Anahtar ölçümler: etkinlik yayın oranı, tüketici gecikmesi, işlem zamanı, hata oranı, ölü kuyruk derinliği. Hizmetlerdeki olayları takip etmek için korelasyon kimlikleri ile dağıtın. Olay hacminde aniden veya artan tüketici gecikmesi gibi anomaliler için uyarılar ayarlayın. Gerçek zamanlı bir etkinlik görünümü veren panjurlar oluşturun.
Güvenlik Güvenliği Güvenlik Güvenliği Güvenlik Güvenliği
Etkinlikler, yayımlama ve alt tanımlama için hassas veriler içerebilir.Rezervasyondaki olayları şifreleyin (TLS) ve geri kalanı. brokere giriş ağ segmentasyonu kullanın. Olay akışlarına veri tutma politikaları uygulayın ve uygun alanlara ilişkin hassas alanları şifreleyin.
Ortak Zorluklar ve Çözümleri
Debugging Dağılışları
Tek bir çağrı yığını olmadan, etkinlik akışları zor. Tüm olaylarda ve loglarda korel kimlikleri kullanın. Jaeger veya Zipkin gibi kartla dağıtık uygulama araçları. Tarihi dizileri yeniden inşa etmek için bir arama yapılabilir bir etkinlik kaydı yapın.
Event Storms
Olaylar neden olayları tetiklerken meydana gelen bir olay fırtınası, potansiyel olarak sonsuz döngüler veya sistemi ezici bir şekilde yaratıyor.Bunu önle:
- Yeterli olan olayları tasarlayın, böylece tüketiciler verileri toplamak için daha fazla olay yayınlamaya ihtiyaç duymazlar.
- Maksimum yeniden deneme sınırları kurmak.
- Devre kesicilerini uygulamak.
- Olay hacmini izleyin ve alışılmadık desenlere uyarın.
Test Asynchronous Systems
Olay odaklı sistemlerin test edilmesi farklı yaklaşımlar gerektirir:
- [FONT:0]Unit testleri[[Dönetici: Mock the broker, doğru şekilde yayım / yayın olayları doğru bir şekilde doğrulayın.
- [FONT=0)Integration testleri[[Dönetici: Test konteynerleri kullanın (örneğin Kafka veya TavşanMQ için Testlüler) gerçek olay akışını doğrulamak için.
- [FONT:0)Kontrat testleri[[Döntme: 1): Üretici ve tüketiciler şemalarda aynı fikirdedir.
- [FONT:0)Chaos mühendisliği[[Dönetici: brokerleri, ağ bölümlerini ve tüketici başarısızlıklarını basitleştirerek dayanıklılık test edin.
Event Driven Architecture ile Başlayın
1. Etkinliklerinizi Tanımlayın
Domain uzmanlarıyla birlikte atölyeleri hareket etmek. anlamlı iş olayları temsil eden olayları tanımlamak. Küçük, iyi tanımlanmış bir alt setle başlayın - örneğin, "OrderPlaced" ve "PaymentReceived" Doküman her olay: amaç, ödemeli, yapımcı ve tüketiciler.
2. Broker seçin Your Broker
EDA'ya yeni takımlar için Amazon EventBridge veya Google Cloud Pub /Sub gibi yönetilen bir hizmet düşünün operasyonel yükü azaltmak için.Eğer yüksek aktarım ve etkinlik tekrar oynamanız gerekiyorsa, Kafka'yı karmaşıklığa rağmen seçin.Daha basit kullanım koşulları için, TavşanMQ, takımın mevcut uzmanlığınızı ve altyapınızı dikkate alın.
3. Tasarım Olayı Schemas
Standart metadata alanları oluşturun. Olay aracılı devlet transferini kullanarak ödeme yükleri tasarlayın. Bir serileştirme formatı seçin (JSON for simple, euro/Protobuf for production). Mümkünse bir şema kayıt oluşturun.
4. Implement ve Test
Tek bir üretici ve bir veya iki tüketici ile başlayın. Implement idempotency, hata işleme ve günden bir tanesine izleme. brokerin müşteri kütüphanelerini kullanın.Test konteynerleri ile entegrasyon testleri yazın.
5. Iterate and Document
Genişleme vakalarını yavaş yavaş yavaş yavaş kullanır. Gelişim ve operasyonlardan geri bildirim yapın. Bir etkinlik kataloğunu şemalar ve tüketici bilgileri ile koruyun. Doküman mimari kararları. ekibiniz için bir amnkör desenler ve olay tutarlılık konusunda eğitim sağlayın.
Gerçek Dünya Vakaları Kullanıyor
E-Ticaret Order Processing
Bir müşteri bir siparişi aldığında, "OrderPlaced" olayı birden çok bağımsız hizmet tetikler: envanter rezervasyon, ödeme işlemi, nakliye zamanlaması ve bildirim. Ödeme başarısız olursa, bir hesaplama olayı envanterini serbest bırakır.Her hizmet ölçekleri bağımsız olarak kendi yüklerine göre.
Gerçek Zamanlı Analytics ve Dolandırıcılık Tespiti
Kullanıcı tıklamaları, sayfa görüşleri ve işlem olayları analiz hizmetleri ile yayınlanmaktadır. Akış işleme gerçek zamanlı ölçümler hesaplar -konvers oranları, oturum sayısı, anomaly puanlar. dolandırıcılık algılama hizmetleri, aynı olayları hemen bayrak şüpheli desenleri için kullanmak yerine, aynı olayları gizli raporlar için kullanın.
IoT Sensör Data Ingestion
Milyonlarca IoT cihazı telemetri olayları (sıcak, nem, yer) bir mesaj brokerine yayınlar. Birden çok tüketici farklı görevleri idare eder: veri depolama (zaman serisi veritabanı), anomali algılama (alerting), pano güncelleştirmeleri ve makine öğrenme modeli çıkarımları. brokerin bölmesi büyük ölçüde elemanlık yapar ve tüketiciler veri hacmi ile devam edebilir.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Event Driven Architecture, modern mikro hizmet inşa etmek için güçlü bir paradigmadır, ölçeklenebilir, dayanıklı ve kullanılabilir.In müşterekli iletişim, gevşek darbe ve etkinlik immutability, işinizle büyümenin yol açtığı varsayılan sistemlerden kaçınabilirsiniz.Ana Sayfalar üzerinde daha iyi bir şekilde başlamak, gereksinimlerinize dayanan doğru teknolojiyi seçmek ve idempotency, izleme ve şema yönetimine yatırım yapmak.Dörtücüksel olarak burada belirtilen kalıpları ve uygulamaları kullanın.