İşleme uygulamanızı ölçeklendirme

Tamamlandı

Olay işleme uygulamanızı ölçeklendirmek için uygulamanın birden çok örneğini çalıştırabilir ve yükü kendi aralarında dengelemesini sağlayabilirsiniz. Daha eski sürümlerde EventProcessorHost, programınızın birden çok örneği ile denetim noktası olayları arasındaki yükü alırken dengelemenize olanak tanır. Daha yeni sürümlerde (5.0 ve üzeri), EventProcessorClient (.NET ve Java) veya EventHubConsumerClient (Python ve JavaScript) aynı işlemi yapmanızı sağlar.

Dekont

Event Hubs için ölçeklendirmenin anahtarı, bölümlenmiş tüketicilerin fikridir. Rakip tüketici deseninin aksine, bölümlenmiş tüketici deseni çekişme performans sorununu ortadan kaldırarak ve uçtan uca paralelliği kolaylaştırarak yüksek ölçek sağlar.

Örnek senaryo

Örnek bir senaryo olarak, 100.000 evi izleyen bir ev güvenlik şirketi düşünün. Her dakika, her eve monte edilen hareket algılayıcısı, kapı/pencere açma sensörü, cam kırılma algılayıcısı vb. gibi çeşitli algılayıcılardan veri alır. Şirket, sakinlerin evlerinin etkinliğini neredeyse gerçek zamanlı olarak izlemeleri için bir web sitesi sağlar.

Her algılayıcı verileri bir olay hub'ına iletir. Olay hub'ı 16 bölümle yapılandırılır. Tüketen uçta, bu olayları okuyabilen, birleştirebilen ve toplamayı kullanıcı dostu bir web sayfasına yansıtılan bir depolama blobunun dökümünü oluşturabilen bir mekanizmaya ihtiyacınız vardır.

Tüketiciyi dağıtılmış bir ortamda tasarlarken senaryo aşağıdaki gereksinimleri karşılamalıdır:

  • Ölçek: Her tüketicinin birkaç Event Hubs bölümünden okuma sahipliğini almasıyla birden çok tüketici oluşturun.
  • Yük dengeleme: Tüketicileri dinamik olarak artırın veya azaltın. Örneğin, her eve yeni bir sensör türü (örneğin, karbon monoksit algılayıcısı) eklendiğinde, olay sayısı artar. Bu durumda, işleç (bir insan) tüketici örneklerinin sayısını artırır. Daha sonra tüketici havuzu, sahip oldukları bölüm sayısını yeniden dengeleyebilir ve yükü yeni eklenen tüketicilerle paylaşabilir.
  • Hatalarda sorunsuz özgeçmiş: Bir tüketici (tüketici A) başarısız olursa (örneğin, tüketiciyi barındıran sanal makine aniden kilitlenirse), diğer tüketiciler A tüketicisinin sahip olduğu bölümleri alabilir ve devam edebilir. Ayrıca denetim noktası veya uzaklık olarak adlandırılan devam noktası, A tüketicisinin tam olarak başarısız olduğu noktada veya bundan biraz önce olmalıdır.
  • Olayları kullanma: Önceki üç nokta tüketicinin yönetimiyle ilgilenirken, olayları kullanacak ve onunla yararlı bir şey yapacak bir kod olmalıdır. Örneğin, toplu olarak blob depolamaya yükleyin.

Olay işlemcisi veya tüketici istemcisi

Bu gereksinimleri karşılamak için kendi çözümünüzü oluşturmanız gerekmez. Azure Event Hubs SDK'ları bu işlevi sağlar. .NET veya Java SDK'larında bir olay işlemcisi istemcisi ()EventProcessorClient kullanırsınız ve Python ve JavaScript SDK'larında kullanırsınız EventHubConsumerClient.

Çoğu üretim senaryosunda, olayları okumak ve işlemek için olay işlemci istemcisini kullanmanızı öneririz. Olay işlemcisi istemcileri, belirli bir olay hub'ı için bir tüketici grubu bağlamında işbirliği içinde çalışabilir. İstemciler, gruplar için örnekler kullanılabilir veya kullanılamaz hale geldikçe işin dağıtımını ve dengelemesini otomatik olarak yönetir.

Bölüm sahipliği izleme

Olay işlemcisi örneği genellikle bir veya daha fazla bölümden olaylara sahip olur ve bunları işler. Bölümlerin sahipliği, bir olay hub'ı ve tüketici grubu bileşimiyle ilişkili tüm etkin olay işlemcisi örnekleri arasında eşit olarak dağıtılır.

Her olay işlemcisine bir denetim noktası deposuna giriş ekleyerek veya güncelleştirerek bölümlerin benzersiz bir tanımlayıcısı ve sahipliğini talep eder. Tüm olay işlemcisi örnekleri, kendi işleme durumunu güncelleştirmek ve diğer etkin örnekler hakkında bilgi edinmek için düzenli aralıklarla bu depoyla iletişim kurar. Bu veriler daha sonra etkin işlemciler arasındaki yükü dengelemek için kullanılır.

İleti alma

Bir olay işlemcisi oluşturduğunuzda, olayları ve hataları işleyen işlevleri belirtirsiniz. Olayları işleyen işleve yapılan her çağrı, belirli bir bölümden tek bir olay teslim eder. Bu olayı halletmek sizin sorumluluğunuzdadır. Tüketicinin her iletiyi en az bir kez işlediğinden emin olmak istiyorsanız, yeniden deneme mantığıyla kendi kodunuzu yazmanız gerekir. Ancak zehirli mesajlar konusunda dikkatli olun.

İşleri nispeten hızlı yapmanızı öneririz. Yani, mümkün olduğunca az işlem yapın. Depolama alanına yazmanız ve biraz yönlendirme yapmanız gerekiyorsa, iki tüketici grubu kullanmak ve iki olay işlemcisine sahip olmak daha iyidir.

Denetim noktası oluşturma

Denetim noktası oluşturma , bir olay işlemcisinin bir bölümde başarıyla işlenen son olayın konumunu işaretlediği veya işlediği bir işlemdir. Bir denetim noktasını işaretleme işlemi genellikle olayları işleyen ve bir tüketici grubu içinde bölüm başına temelinde gerçekleşen işlev içinde yapılır.

Bir olay işlemcisi bir bölümün bağlantısını keserse, başka bir örnek daha önce o tüketici grubundaki bölümün son işlemcisi tarafından kaydedilmiş olan denetim noktasında bölümü işlemeye devam edebilir. İşlemci bağlandığında, okumaya başlayacağı konumu belirtmek için uzaklığı olay hub'ına geçirir. Bu şekilde, hem olayları aşağı akış uygulamaları tarafından "tamamlandı" olarak işaretlemek hem de bir olay işlemcisi kapandığında dayanıklılık sağlamak için denetim noktası oluşturmayı kullanabilirsiniz. Bu denetim noktası oluşturma işleminden daha düşük bir uzaklık belirterek eski verilere dönmek mümkündür.

İş parçacığı güvenliği ve işlemci örnekleri

Varsayılan olarak, olayları işleyen işlev belirli bir bölüm için sırayla çağrılır. Olay pompası diğer iş parçacıklarında arka planda çalışmaya devam ettiğinden, arka planda aynı bölüm kuyruğundan bu işleve yapılan sonraki olaylar ve çağrılar. Farklı bölümlerden olaylar eşzamanlı olarak işlenebilir ve bölümler arasında erişilen tüm paylaşılan durumların eşitlenmesi gerekir.