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:

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:

EDA'dan kaçın:

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:

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:

Ö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:

Uygulama En İyi Uygulamaları

Idempotency

Tüketiciler, olayları güvenli bir şekilde ele almalıdır. Stratejiler şunları içerir:

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:

Test Asynchronous Systems

Olay odaklı sistemlerin test edilmesi farklı yaklaşımlar gerektirir:

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.