Cosmos DB Change Feed ile işi birden çok worker arasında dengeleme
Azure Cosmos DB Change Feed Processor, değişiklik akışını lease container üzerinden birden çok .NET worker arasında dağıtır. Makale, aynı işi paylaşan worker'ların nasıl yapılandırılacağını, işleme gecikmesine göre ölçeklendirmeyi ve tekrar işlemeye karşı idempotent tasarımı anlatıyor.
Kilit noktalar
- Ortak çalışacak worker'lar aynı processor adını ve aynı lease container'ı kullanmalı
- Farklı processor adları bağımsız tüketici grupları oluşturur ve her biri tüm akışı okur
- Worker eklemeden önce işleme gecikmesi, yeniden deneme ve downstream kapasitesi ölçülmeli
- Handler başarısız olursa exception yutulmamalı; batch yeniden teslim edilebilir
- Yan etkiler idempotent olmalı; örneğin sipariş ID'si bir idempotency anahtarı olarak kullanılabilir
- Downstream çağrılarında sınırlı concurrency ve backoff uygulanmalı
Change Feed, bir Cosmos DB container'ındaki öğe değişikliklerini sıralı bir akış olarak sunar. Yüksek hacimli uygulamalarda tek bir worker yetişemediğinde, Change Feed Processor işi birden çok örnek arasında dağıtır ve ilerleme bilgisini bir lease container'da tutar. Aynı işi paylaşması gereken worker'ların aynı processor adını ve aynı lease container'ı kullanması gerekir.
Worker sayısını artırmak her zaman verimi yükseltmez; kaynak container'ın feed range sayısı, downstream servislerin kapasitesi ve işleme gecikmesi belirleyicidir. Yazarın vurguladığı önemli nokta, processor'ın lease yönetmesine rağmen yan etkilerin tekrar çalışabileceğidir. Bu yüzden işlemler idempotent tasarlanmalı, hata yutulmamalı ve downstream çağrılarında sınırlı concurrency kullanılmalıdır.
Gerçek dünyada kullanımı
- Yüksek hacimli sipariş container'ından arama indeksi ve raporlama modeli güncelleyen arka plan servisleri
- Birden çok örnekte çalışan .NET BackgroundService ile olay tabanlı veri işleme hattı
- Analitik sistemine yazan ve tekrar işlemeye karşı korunması gereken tüketiciler
Neden önemli
Change Feed ile yatay ölçeklenen bir .NET uygulaması yazarken lease container ve processor adı yapılandırması kadar, işlemlerinizin tekrar çalışmaya dayanıklı olması da kritik. Worker eklemeden önce gecikme metriklerine bakmak gereksiz kaynak harcamasını önler.