Düzenle

Aracılığıyla paylaş


Event Hubs ve Azure İşlevleri için performans ve ölçek kılavuzu

Azure Event Hubs
Azure Functions

Bu makalede, Azure Event Hubs'ı kullanırken ve uygulamalarınızda birlikte Azure İşlevleri ölçeklenebilirliği ve performansı iyileştirmeye yönelik yönergeler sağlanır.

İşlev gruplandırma

Genellikle bir işlev, olay işleme akışındaki bir iş birimini kapsüller. Örneğin, bir işlev bir olayı yeni bir veri yapısına dönüştürebilir veya aşağı akış uygulamaları için verileri zenginleştirebilir.

İşlevler'de işlev uygulaması işlevler için yürütme bağlamı sağlar. İşlev uygulaması davranışları, işlev uygulamasının barındıracağı tüm işlevler için geçerlidir. İşlev uygulamasındaki işlevler birlikte dağıtılır ve birlikte ölçeklendirilir. İşlev uygulamasındaki tüm işlevler aynı dilde olmalıdır.

İşlevleri işlev uygulamaları halinde gruplandırma şekliniz, işlev uygulamalarınızın performans ve ölçeklendirme özelliklerini etkileyebilir. Erişim haklarına, dağıtıma ve kodunuzu çağıran kullanım desenlerine göre gruplandırabilirsiniz.

Gruplandırma ve diğer yönleri için İşlevler için en iyi yöntemler hakkında yönergeler için bkz. Güvenilir Azure İşlevleri için en iyi yöntemler ve Azure İşlevleri performansını ve güvenilirliğini geliştirme.

Aşağıdaki listede işlevleri gruplandırma yönergeleri verilmiştir. Bu kılavuzda depolama ve tüketici grubu konuları ele alınıyor:

  • İşlev uygulamasında tek bir işlevi barındırma: Event Hubs bir işlevi tetikliyorsa, bu işlevle diğer işlevler arasındaki çekişmeyi azaltmak için işlevi kendi işlev uygulamasında yalıtabilirsiniz. Diğer işlevler CPU veya yoğun bellek kullanıyorsa yalıtım özellikle önemlidir. Bu teknik, her işlevin kendi bellek ayak izine ve onu barındıran işlev uygulamasının ölçeklendirmesini doğrudan etkileyebilecek kullanım desenlerine sahip olması nedeniyle yardımcı olur.

  • Her işlev uygulamasına kendi depolama hesabını verin: İşlev uygulamaları arasında depolama hesaplarını paylaşmaktan kaçının. Ayrıca, bir işlev uygulaması depolama hesabı kullanıyorsa bu hesabı diğer depolama işlemleri veya ihtiyaçları için kullanmayın. Event Hubs'ın tetiklediği işlevler için depolama hesaplarının paylaşılmasını önlemek özellikle önemli olabilir çünkü bu tür işlevler denetim noktası oluşturma nedeniyle yüksek hacimli depolama işlemlerine sahip olabilir.

  • Her işlev uygulaması için ayrılmış bir tüketici grubu oluşturma: Tüketici grubu bir olay hub'ının görünümüdür. Farklı tüketici gruplarının farklı görünümleri vardır, bu da durumların, konumların ve uzaklıkların farklı olabileceği anlamına gelir. Tüketici grupları, birden çok tüketen uygulamanın kendi olay akışı görünümlerine sahip olmasını ve akışı kendi hızlarında ve kendi uzaklıklarıyla bağımsız olarak okumasını mümkün hale getirir. Tüketici grupları hakkında daha fazla bilgi için bkz . Azure Event Hubs'da özellikler ve terminoloji.

    Tüketici grubuyla ilişkilendirilmiş bir veya daha fazla tüketici uygulaması vardır ve bir tüketici uygulaması bir veya daha fazla tüketici grubu kullanabilir. Bir akış işleme çözümünde, her tüketici uygulaması bir tüketici grubuna eşitler. İşlev uygulaması, tüketici uygulamasının en önemli örneğidir. Aşağıdaki diyagramda, her uygulamanın kendi ayrılmış tüketici grubuna sahip olduğu bir olay hub'ından okunan iki işlev uygulaması örneği verilmiştir:

    Her işlev uygulaması için ayrılmış tüketici grupları

    İşlev uygulamalarıyla diğer tüketici uygulamaları arasında tüketici gruplarını paylaşmayın. Her işlev uygulaması, her tüketici için uzaklık bütünlüğünü sağlamak ve bir olay akışı mimarisindeki bağımlılıkları basitleştirmek için kendi atanmış tüketici grubuna sahip ayrı bir uygulama olmalıdır. Bu tür bir yapılandırma, olay hub'ı ile tetiklenen her işlevin kendi işlev uygulamasını ve depolama hesabını sağlamanın yanı sıra, en iyi performans ve ölçeklendirme için temeli ayarlamaya yardımcı olur.

İşlev barındırma planları

İşlev uygulamaları için çeşitli barındırma seçenekleri vardır ve bunların özelliklerini gözden geçirmek önemlidir. Bu barındırma seçenekleri hakkında bilgi için bkz. Azure İşlevleri barındırma seçenekleri. Seçeneklerin ölçeğini not edin.

Tüketim planı varsayılandır. Tüketim planındaki işlev uygulamaları bağımsız olarak ölçeklendirilir ve uzun süre çalışan görevlerden kaçındığında en etkili olanlardır.

Premium ve Ayrılmış planlar genellikle cpu ve bellek kullanımı daha yoğun olan birden çok işlev uygulamasını ve işlevini barındırmak için kullanılır. Ayrılmış plan ile işlevlerinizi bir Azure Uygulaması Hizmet planında normal App Service planı fiyatlarıyla çalıştırırsınız. Bu planlardaki tüm işlev uygulamalarının plana ayrılan kaynakları paylaştığını unutmayın. İşlevlerin farklı yük profilleri veya benzersiz gereksinimleri varsa, bunları özellikle akış işleme uygulamalarında farklı planlarda barındırmak en iyisidir.

Azure Container Apps, Azure İşlevleri üzerinde kapsayıcılı işlev uygulamaları geliştirmek, dağıtmak ve yönetmek için tümleşik destek sağlar. Bu, olay temelli işlevlerinizi açık kaynak izleme, mTLS, Dapr ve KEDA için yerleşik destekle tam olarak yönetilen, Kubernetes tabanlı bir ortamda çalıştırmanıza olanak tanır.

Event Hubs ölçeklendirme

Event Hubs ad alanını dağıttığınızda, en yüksek performansı ve ölçeklendirmeyi sağlamak için düzgün ayarlamanız gereken birkaç önemli ayar vardır. Bu bölüm, Event Hubs'ın Standart katmanına ve ayrıca İşlevler'i kullandığınızda ölçeklendirmeyi etkileyen bu katmanın benzersiz özelliklerine odaklanır. Event Hubs katmanları hakkında daha fazla bilgi için bkz . Temel ve Standart ile Premium ve Ayrılmış katmanlar.

Event Hubs ad alanı bir Kafka kümesine karşılık gelir. Event Hubs ve Kafka'nın birbirleriyle ilişkisi hakkında bilgi için bkz . Apache Kafka için Azure Event Hubs nedir?

Aktarım hızı birimlerini (TU) anlama

Event Hubs Standart katmanında aktarım hızı, zaman birimi başına ad alanından girilen ve okunan veri miktarı olarak sınıflandırılır. TU'lar önceden satın alınan aktarım hızı kapasitesi birimleridir.

TU'lar saatlik olarak faturalandırılır.

Bir ad alanındaki tüm olay hub'ları TU'ları paylaşır. Kapasite gereksinimlerini düzgün bir şekilde hesaplamak için hem yayımcılar hem de tüketiciler olmak üzere tüm uygulamaları ve hizmetleri dikkate almanız gerekir. İşlevler, bir olay hub'ına yayımlanan ve olay hub'ından okunan bayt ve olay sayısını etkiler.

TU sayısını belirlemeye yönelik vurgu, giriş noktasındadır. Ancak, bu olayların işlenme hızı da dahil olmak üzere tüketici uygulamalarının toplam değeri de hesaplamaya dahil edilmelidir.

Event Hubs aktarım hızı birimleri hakkında daha fazla bilgi için bkz . Aktarım hızı birimleri.

Otomatik şişirme ile ölçeği artırma

Yükün yapılandırılan TU sayısını aştığı durumlara uyum sağlamak için Event Hubs ad alanında otomatik şişirme etkinleştirilebilir. Otomatik Şişir'in kullanılması uygulamanızın azaltmasını önler ve olayların alımı da dahil olmak üzere işlemenin kesinti olmadan devam etmesini sağlamaya yardımcı olur. TU ayarı maliyetleri etkilediğinden, Otomatik şişirme'nin kullanılması fazla sağlamayla ilgili endişeleri gidermeye yardımcı olur.

Otomatik şişirme, Event Hubs'ın özellikle sunucusuz çözümler bağlamında genellikle otomatik ölçeklendirmeyle karıştırılan bir özelliğidir. Ancak otomatik ölçeklendirmeden farklı olarak otomatik olarak şişirme özelliği, kapasite eklendiğinde ölçeği azaltmaz.

Uygulamanın izin verilen en fazla TU sayısını aşan kapasiteye ihtiyacı varsa Event Hubs Premium katmanını veya Ayrılmış katmanı kullanmayı göz önünde bulundurun.

Bölümler ve eşzamanlı işlevler

Bir olay hub'ı oluşturulduğunda bölüm sayısı belirtilmelidir. Bölüm sayısı sabit kalır ve Premium ve Ayrılmış katmanlar dışında değiştirilemez. Event Hubs işlev uygulamalarını tetiklediğinde, eşzamanlı örnek sayısının bölüm sayısına eşit olması mümkündür.

Tüketim ve Premium barındırma planlarında, işlev uygulaması örnekleri gerekirse bölüm sayısını karşılayacak şekilde dinamik olarak ölçeklendirilir. Ayrılmış barındırma planı, işlevleri bir App Service planında çalıştırır ve örneklerinizi el ile yapılandırmanızı veya otomatik ölçeklendirme şeması ayarlamanızı gerektirir. Daha fazla bilgi için bkz. Azure İşlevleri için ayrılmış barındırma planları.

Sonuç olarak, bölüm sayısıyla işlev örneği veya tüketici arasındaki bire bir ilişki, akış işleme çözümünde en yüksek aktarım hızı için ideal hedeftir. En iyi paralelliği elde etmek için bir tüketici grubunda birden çok tüketici olması gerekir. İşlevler için bu amaç, plandaki bir işlevin birçok örneğine çevrilir. Sonuç, aşağıdaki diyagramda gösterildiği gibi bölüm düzeyi paralellik veya en yüksek paralellik derecesi olarak adlandırılır:

Maksimum paralellik derecesi

En yüksek aktarım hızına ulaşmak ve daha yüksek hacimli olaylar olasılığını hesaba katmak için mümkün olduğunca çok bölüm yapılandırmak mantıklı görünebilir. Ancak, birçok bölümü yapılandırırken göz önünde bulundurmanız gereken birkaç önemli faktör vardır:

  • Daha fazla bölüm daha fazla aktarım hızına yol açabilir: Paralellik derecesi tüketici sayısı (işlev örnekleri) olduğundan, ne kadar fazla bölüm varsa, eşzamanlı aktarım hızı o kadar yüksek olabilir. Bu durum, bir olay hub'ı için belirlenen sayıda TU'yu diğer tüketici uygulamalarıyla paylaştığınızda önemlidir.
  • Daha fazla işlev daha fazla bellek gerektirebilir: İşlev örneği sayısı arttıkça, plandaki kaynakların bellek ayak izi de artar. Bir noktada çok fazla bölüm tüketicilerin performansını bozabilir.
  • Aşağı akış hizmetlerinden gelen geri baskı riski vardır: Daha fazla aktarım hızı oluşturulduktan sonra aşağı akış hizmetlerini bunaltma veya onlardan geri baskı alma riskiyle karşılaşırsınız. Çevresindeki kaynakların sonuçları göz önünde bulundurulduğunda tüketicinin dışlanması dikkate alınmalıdır. Olası sonuçlar arasında diğer hizmetlerden azaltma, ağ doygunluğu ve diğer kaynak çekişmesi biçimleri yer alır.
  • Bölümler seyrek doldurulabilir: Birçok bölümün ve düşük hacimli olayların birleşimi, bölümler arasında seyrek dağıtılan verilere yol açabilir. Bunun yerine, daha az sayıda bölüm daha iyi performans ve kaynak kullanımı sağlayabilir.

Kullanılabilirlik ve tutarlılık

Bölüm anahtarı veya kimliği belirtilmediğinde, Event Hubs bir gelen olayı bir sonraki kullanılabilir bölüme yönlendirir. Bu uygulama yüksek kullanılabilirlik sağlar ve tüketiciler için aktarım hızını artırmaya yardımcı olur.

Bir olay kümesinin sıralanması gerektiğinde, olay üreticisi kümenin tüm olayları için belirli bir bölümün kullanılacağını belirtebilir. Bölümünden okuyan tüketici uygulaması olayları uygun sırayla alır. Bu denge tutarlılık sağlar ancak kullanılabilirliği tehlikeye atabilir. Olayların sırasının korunması gerekmedikçe bu yaklaşımı kullanmayın.

İşlevler için, olaylar belirli bir bölüme yayımlandığında ve Event Hubs ile tetiklenen bir işlev aynı bölüme kira aldığınızda sıralama yapılır. Şu anda Event Hubs çıkış bağlaması ile bölüm yapılandırma özelliği desteklenmemektedir. Bunun yerine, en iyi yaklaşım belirli bir bölümde yayımlamak için Event Hubs SDK'larından birini kullanmaktır.

Event Hubs'ın kullanılabilirlik ve tutarlılığı nasıl desteklediği hakkında daha fazla bilgi için bkz . Event Hubs'ta kullanılabilirlik ve tutarlılık.

Event Hubs tetikleyicisi

Bu bölüm, Event Hubs'ın tetiklediğini işlevleri iyileştirmeye yönelik ayarlara ve önemli noktalara odaklanır. Faktörler arasında toplu işlem, örnekleme ve olay hub'ı tetikleyici bağlamasının davranışını etkileyen ilgili özellikler bulunur.

Tetiklenen işlevler için toplu işlem

Bir olay hub'ının bir toplu olayı veya bir kerede bir olayı işlemek için tetiklediğini işlevleri yapılandırabilirsiniz. Bir dizi olayı işlemek, işlev çağrılarının bazı ek yükünü azalttığında daha verimli olabilir. Yalnızca tek bir olayı işlemeniz gerekmediği sürece, işleviniz çağrıldığında birden çok olayı işlenecek şekilde yapılandırılmalıdır.

Event Hubs tetikleyici bağlaması için toplu işlemenin etkinleştirilmesi diller arasında farklılık gösterir:

  • JavaScript, Python ve diğer diller, işlevin function.json dosyasında kardinalite özelliği çok sayıda olarak ayarlandığında toplu işlemeyi etkinleştirir.
  • C# dilinde kardinalite, EventHubTrigger özniteliğindeki tür için bir dizi belirlendiğinde otomatik olarak yapılandırılır.

Toplu işlemenin nasıl etkinleştirildiği hakkında daha fazla bilgi için bkz. Azure İşlevleri için Azure Event Hubs tetikleyicisi.

Tetikleyici ayarları

host.json dosyasındaki çeşitli yapılandırma ayarları, İşlevler için Event Hubs tetikleyici bağlamasının performans özelliklerinde önemli bir rol oynar:

  • maxEventBatchSize: Bu ayar, işlevin çağrıldığında alabileceği en fazla olay sayısını temsil eder. Alınan olay sayısı bu miktardan azsa, işlev hala mümkün olduğunca çok olayla çağrılır. En düşük toplu iş boyutunu ayarlayamazsınız.
  • prefetchCount: Performans için iyileştirme yaptığınızda en önemli ayarlardan biri prefetch sayısıdır. Temel alınan AMQP kanalı, istemci için kaç ileti getirileceğini ve önbelleğe alındığını belirlemek için bu değere başvurur. Prefetch sayısı maxEventBatchSize değerinden büyük veya buna eşit olmalıdır ve genellikle bu miktarın katlarına ayarlanır. Bu değeri maxEventBatchSize ayarından küçük bir sayıya ayarlamak performansa zarar verebilir.
  • batchCheckpointFrequency: İşleviniz toplu işlemleri işlerken, bu değer denetim noktalarının oluşturulma hızını belirler. Varsayılan değer 1'dir, yani bir işlev tek bir toplu işlemi başarıyla işlediğinde bir denetim noktası vardır. Tüketici grubundaki her okuyucu için bölüm düzeyinde bir denetim noktası oluşturulur. Bu ayarın olayların yeniden yürütmelerini ve yeniden denemelerini nasıl etkilediği hakkında bilgi için bkz . Olay hub'ı tarafından tetiklenen Azure işlevi: Yeniden Yürütmeler ve Yeniden Denemeler (blog gönderisi).

Tetikleyici bağlaması için ayarlanacağı değerleri belirlemek için birkaç performans testi yapın. Bu seçeneklerde ince ayar yapmak için ayarları artımlı olarak değiştirmenizi ve tutarlı bir şekilde ölçmenizi öneririz. Varsayılan değerler çoğu olay işleme çözümü için makul bir başlangıç noktasıdır.

Denetim noktası oluşturma

Denetim noktaları, bölüm olay dizisinde okuyucu konumlarını işaretler veya işler. Olaylar işlenirken ve toplu denetim noktası sıklığı ayarı karşılandığında denetim noktası için İşlevler ana bilgisayarının sorumluluğundadır. Denetim noktası oluşturma hakkında daha fazla bilgi için bkz . Azure Event Hubs'daki özellikler ve terminoloji.

Aşağıdaki kavramlar, denetim noktası oluşturma ile işlevinizin olayları işleme biçimi arasındaki ilişkiyi anlamanıza yardımcı olabilir:

  • Özel durumlar hala başarıya doğru sayılır: olaylar işlenirken işlev işlemi kilitlenmezse, özel durumlar gerçekleşse bile işlevin tamamlanması başarılı kabul edilir. İşlev tamamlandığında İşlevler konağı batchCheckpointFrequency değerini değerlendirir. Denetim noktası zamanı geldiyse, özel durumlar olup olmadığına bakılmaksızın bir denetim noktası oluşturur. Özel durumların denetim noktası oluşturmayı etkilememesi, özel durum denetimi ve işlemeyi doğru kullanımınızı etkilememelidir.
  • Toplu iş sıklığı önemlidir: Yüksek hacimli olay akışı çözümlerinde batchCheckpointFrequency ayarını 1'den büyük bir değerle değiştirmek yararlı olabilir. Bu değerin artırılması denetim noktası oluşturma oranını ve bunun sonucunda depolama G/Ç işlemlerinin sayısını azaltabilir.
  • Yeniden yürütmeler gerçekleşebilir: Event Hubs tetikleyici bağlaması ile bir işlev her çağrıldığında işlemenin nerede sürdürüleceğini belirlemek için en son denetim noktasını kullanır. Her tüketici için uzaklık, her tüketici grubu için bölüm düzeyinde kaydedilir. Yeniden yürütmeler, işlevin son çağrılması sırasında bir denetim noktası oluşmadığında ve işlev yeniden çağrıldığında gerçekleşir. Yinelemeler ve yinelenenleri kaldırma teknikleri hakkında daha fazla bilgi için bkz . Idempotency.

Bu makalenin devamında ele alınan bir konu olan hata işleme ve yeniden denemeler için en iyi yöntemleri göz önünde bulundurursanız denetim noktası oluşturmanın anlaşılması kritik hale gelir.

Telemetri örneklemesi

İşlevler, uygulama performansı izleme özellikleri sağlayan Bir Azure İzleyici uzantısı olan Application Insights için yerleşik destek sağlar. Bu özellik sayesinde işlev etkinlikleri, performans, çalışma zamanı özel durumları ve daha fazlası hakkındaki bilgileri günlüğe kaydedebilirsiniz. Daha fazla bilgi için bkz . Application Insights'a genel bakış.

Bu güçlü özellik, performansı etkileyen bazı önemli yapılandırma seçenekleri sunar. İzleme ve performansla ilgili dikkate değer ayarlardan ve önemli noktalardan bazıları şunlardır:

  • Telemetri örneklemesini etkinleştirme: Yüksek aktarım hızı senaryoları için ihtiyacınız olan telemetri miktarını ve bilgileri değerlendirmeniz gerekir. Gereksiz telemetri ve ölçümlerle işlevinizin performansını düşürmekten kaçınmak için Application Insights'taki telemetri örnekleme özelliğini kullanmayı göz önünde bulundurun.
  • Toplama ayarlarını yapılandırma: Application Insights'a veri toplama ve gönderme sıklığını inceleyin ve yapılandırın. Bu yapılandırma ayarı, host.json dosyasında ve diğer birçok örnekleme ve günlüğe kaydetmeyle ilgili seçeneği içerir. Daha fazla bilgi için bkz . Toplayıcıyı yapılandırma.
  • AzureWebJobDashboard'u devre dışı bırakma: İşlevler çalışma zamanının 1.x sürümünü hedefleyen uygulamalar için bu ayar, bağlantı dizesi Azure SDK'sının Web İşleri panosu günlüklerini tutmak için kullandığı bir depolama hesabına depolar. Web İşleri panosu yerine Application Insights kullanılıyorsa, bu ayar kaldırılmalıdır. Daha fazla bilgi için bkz . AzureWebJobsDashboard.

Application Insights örnekleme olmadan etkinleştirildiğinde, tüm telemetri gönderilir. Tüm olaylar hakkında veri göndermenin, özellikle yüksek aktarım hızına sahip olay akışı senaryolarında işlevin performansı üzerinde zarar verici bir etkisi olabilir.

Örneklemeden yararlanmak ve izleme için gereken telemetri miktarını sürekli değerlendirmek, en iyi performans için çok önemlidir. Telemetri, temel iş ölçümlerini yakalamak için değil, genel platform sistem durumu değerlendirmesi ve zaman zaman sorun giderme için kullanılmalıdır. Daha fazla bilgi için bkz. Örneklemeyi yapılandırma.

Çıkış bağlaması

bir işlevden olay akışına yayımlamayı basitleştirmek amacıyla Azure İşlevleri için Event Hubs çıkış bağlamasını kullanın. Bu bağlamayı kullanmanın avantajları şunlardır:

  • Kaynak yönetimi: Bağlama sizin için hem istemci hem de bağlantı yaşam döngülerini işler ve bağlantı noktası tükenmesi ve bağlantı havuzu yönetimi ile ortaya çıkabilecek sorun olasılığını azaltır.
  • Daha az kod: Bağlama, temel alınan SDK'yı soyutlar ve olayları yayımlamak için gereken kod miktarını azaltır. Yazması ve bakımı daha kolay olan kodlar yazmanıza yardımcı olur.
  • Toplu işlem: Çeşitli dillerde toplu işlem, bir olay akışında verimli bir şekilde yayımlamak için desteklenir. Toplu işlem performansı artırabilir ve olayları gönderen kodu kolaylaştırmaya yardımcı olabilir.

İşlevlerin desteklediği Diller listesini ve bu diller için geliştirici kılavuzlarını gözden geçirmenizi kesinlikle öneririz. Her dilin Bağlamalar bölümünde ayrıntılı örnekler ve belgeler sağlanır.

Olayları yayımlarken toplu işlem

İşleviniz yalnızca tek bir olay yayımlıyorsa, bağlamayı değer döndürecek şekilde yapılandırmak, işlev yürütme her zaman olayı gönderen bir deyimle sona erdiğinde yararlı olan yaygın bir yaklaşımdır. Bu teknik yalnızca bir olay döndüren zaman uyumlu işlevler için kullanılmalıdır.

Toplu işlemenin bir akışa birden çok olay gönderirken performansı geliştirmesi önerilir. Toplu işleme, bağlamanın olayları mümkün olan en verimli şekilde yayımlamasını sağlar.

Event Hubs'a birden çok olay göndermek için çıkış bağlamasını kullanma desteği C#, Java, Python ve JavaScript'te kullanılabilir.

İşlem içi modeliyle birden çok olay çıktısı alma (C#)

C# dilinde bir işlevden birden çok olay gönderirken ICollector ve IAsyncCollector türlerini kullanın.

  • ICollector<T>. Add() yöntemi hem zaman uyumlu hem de zaman uyumsuz işlevlerde kullanılabilir. Çağrılır çağrılmaz ekleme işlemini yürütür.
  • IAsyncCollector<T>. AddAsync() yöntemi, olayları olay akışında yayımlanacak şekilde hazırlar. Zaman uyumsuz bir işlev yazarsanız, yayımlanan olayları daha iyi yönetmek için IAsyncCollector kullanmalısınız.

C# kullanarak tek ve birden çok olay yayımlama örnekleri için bkz. Azure İşlevleri için Azure Event Hubs çıkış bağlaması.

Yalıtılmış çalışan modeliyle birden çok olay çıktısı alma (C#)

İşlevler çalışma zamanı sürümüne bağlı olarak, Yalıtılmış çalışan modeli çıkış bağlamasına geçirilen parametreler için farklı türleri destekler. Birden çok olay için, kümeyi kapsüllemek için bir dizi kullanılır. Yalıtılmış model için çıkış bağlama özniteliklerini ve kullanım ayrıntılarını gözden geçirmeli ve uzantı sürümleri arasındaki farkları not edin.

Azaltma ve sırt basıncı

Azaltma konusunda dikkat edilmesi gerekenler yalnızca Event Hubs için değil Azure Cosmos DB gibi Azure hizmetleri için de çıkış bağlamaları için geçerlidir. Bu hizmetler için geçerli olan limitler ve kotalar hakkında bilgi sahibi olmak ve buna göre planlama yapmak önemlidir.

İşlem içi modelde aşağı akış hatalarını işlemek için, IAsyncCollector özel durumlarını yakalamak için AddAsync ve FlushAsync'i .NET İşlevleri için bir özel durum işleyicisine sarmalayabilirsiniz. Diğer bir seçenek de çıkış bağlamaları kullanmak yerine event hubs SDK'larını doğrudan kullanmaktır.

İşlevler için Yalıtılmış modelden yararlanıyorsanız, çıkış değerlerini döndürürken özel durumları sorumlu bir şekilde yakalamak için yapılandırılmış özel durum işleme kullanılmalıdır.

İşlev kodu

Bu bölüm, Event Hubs tarafından tetiklenen bir işlevdeki olayları işlemek için kod yazarken dikkate alınması gereken önemli alanları kapsar.

Zaman uyumsuz programlama

Özellikle G/Ç çağrıları söz konusu olduğunda zaman uyumsuz kod kullanmak ve çağrıları engellemekten kaçınmak için işlevinizi yazmanızı öneririz.

Zaman uyumsuz olarak işlemek için bir işlev yazarken izlemeniz gereken yönergeler şunlardır:

  • Tüm zaman uyumsuz veya tümü zaman uyumlu: bir işlev zaman uyumsuz olarak çalışacak şekilde yapılandırılmışsa, tüm G/Ç çağrıları zaman uyumsuz olmalıdır. Çoğu durumda, kısmen zaman uyumsuz kod tamamen zaman uyumlu olan koddan daha kötüdür. Zaman uyumsuz veya zaman uyumlu seçeneğini belirleyin ve tüm yol boyunca seçime bağlı kalın.
  • Çağrıları engellemekten kaçının: Engelleme çağrıları, hemen döndürülen zaman uyumsuz çağrıların aksine yalnızca çağrı tamamlandıktan sonra arayana geri döner. C# dilindeki bir örnek, zaman uyumsuz bir işlemde Task.Result veya Task.Wait çağrıları olabilir.

Aramaları engelleme hakkında daha fazla bilgi

Zaman uyumsuz işlemler için engelleme çağrılarının kullanılması iş parçacığı havuzu yetersizliği ve işlev işleminin kilitlenmesine neden olabilir. Kilitlenmenin nedeni, engelleme çağrısının şu anda bekleyen özgün çağrıyı telafi etmek için başka bir iş parçacığı oluşturulmasını gerektirmesidir. Sonuç olarak, işlemi tamamlamak için iki kat daha fazla iş parçacığı gerektirir.

Bir işlev kilitlenmesi denetim noktasını güncelleştirmediğinden, event hubs söz konusu olduğunda zaman uyumsuz yaklaşım üzerinden bu eşitlemeden kaçınmak özellikle önemlidir. İşlev bir sonraki çağrılışında bu döngüde sonuçlanabilir ve işlev yürütmeleri zaman aşımına uğradıkçe takılmış veya yavaş hareket ediyor gibi görünebilir.

Bu olayla ilgili sorunları giderme işlemi genellikle tetikleyici ayarlarını gözden geçirmek ve bölüm sayısını artırmayı içerebilecek denemeleri çalıştırmakla başlar. Araştırmalar, maksimum toplu iş boyutu veya ön işlem sayısı gibi toplu işlem seçeneklerinin birkaçının değiştirilmesine de yol açabilir. Bunun yalnızca buna göre ayarlanması gereken bir aktarım hızı sorunu veya yapılandırma ayarı olduğu izlenimi oluşur. Ancak, temel sorun kodun kendisindedir ve orada çözülmesi gerekir.

Katkıda Bulunanlar

Bu makale Microsoft tarafından yönetilir. Başlangıçta aşağıdaki katkıda bulunan tarafından yazılmıştır.

Asıl yazar:

Genel olmayan LinkedIn profillerini görmek için LinkedIn'de oturum açın.

Sonraki adımlar

Devam etmeden önce şu ilgili makaleleri gözden geçirmeyi göz önünde bulundurun: