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

Azure Event Hubs
Azure Functions

Bu makalede, uygulamalarınızda Azure Event Hubs ve Azure İşlevleri birlikte kullandığınızda ö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 düzenlerine göre gruplandırabilirsiniz.

Gruplandırma ve diğer yönleriyle ilgili İşlevler için en iyi yöntemler hakkında rehberlik 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şme oranını 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 yardımcı olur çünkü her işlevin kendi bellek ayak izi ve onu barındıran işlev uygulamasının ölçeklendirmesini doğrudan etkileyebilecek kullanım desenleri vardır.

  • Her işlev uygulamasına kendi depolama hesabını verin: depolama hesaplarını işlev uygulamaları arasında 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şturun: 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 kullanan 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 özellikleri ve terminolojisi.

    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şittir. İş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ı ve 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'ı tarafından 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ı

Her işlev uygulaması üç barındırma planından birine göre barındırılır. Bu planlar hakkında bilgi için bkz. Azure İşlevleri barındırma seçenekleri. Üç seçeneğin nasıl ölçeklendirildeğe dikkat 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 daha fazla CPU ve bellek kullanan birden çok işlev uygulaması ve işlevi barındırmak için kullanılır. Ayrılmış plan ile işlevlerinizi bir Azure App Service planında normal App Service planı fiyatlarında ç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.

Event Hubs ölçeklendirmesi

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 bu katmanın İşlevler'i de kullandığınızda ölçeklendirmeyi etkileyen 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ı kafka kümesine karşılık gelir. Event Hubs ve Kafka'nın birbiriyle 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ı, giren ve zaman birimi başına ad alanından 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.

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. Bununla birlikte, bu olayların işlenme hızı da dahil olmak üzere tüketici uygulamalarının toplamı da hesaplamaya dahil edilmelidir.

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

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

Yükün yapılandırılan RU 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 kesintiye uğramadan devam etmesini sağlamaya yardımcı olur. TU ayarı maliyetleri etkilediğinden, Otomatik Şişir seçeneğinin 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 otomatik ölçeklendirmeyle karıştırılan bir özelliğidir. Ancak otomatik ölçeklendirmeden farklı olarak Otomatik şişir ö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ı bölüm sayısına eşit olabilir.

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çeği genişletebilir. 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ı ile işlev uygulaması örnekleri 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üketiciye sahip olun. İşlevler için bu amaç, plandaki bir işlev uygulamasının birçok örneğine çevrilir. Sonuç, aşağıdaki diyagramda gösterildiği gibi bölüm düzeyi paralellik veya maksimum 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 bir olay 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 uygulaması örnekleri) olduğundan, ne kadar çok bölüm varsa eşzamanlı aktarım hızı da o kadar yüksek olabilir. Bu gerçek, 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 uygulaması örneklerinin 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 bu hizmetlerden 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 olarak 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

Bir bölüm anahtarı veya kimlik 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 belirli bir bölümün kümenin tüm olayları için 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ı gerekmediği sürece 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 kiralama elde ettiğinde 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ılabilirliği 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ğlama 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 olay toplu işleminin işlenmesi, işlev çağrılarının bazı ek yükünü ortadan kaldırdığından daha verimlidir. 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, kardinalite özelliği işlevin function.json dosyasında çok 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 kullanılabilir olan sayıda olayla çağrılır. En düşük toplu iş boyutunu ayarlayamazsınız.
  • prefetchCount: Ön koşul sayısı, performansı iyileştirdiğinizde en önemli ayarlardan biridir. 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. Ön koşul sayısı maxEventBatchSize değerinden büyük veya buna eşit olmalıdır ve genellikle bu miktarın katı olarak ayarlanır. Bu değeri maxEventBatchSize ayarından küçük bir sayıya ayarlamak performansı etkileyebilir.
  • 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 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 üzere 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 dizisindeki 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 özellikler ve terminoloji.

Aşağıdaki kavramlar, denetim noktası oluşturma ile işlevinizin olayları işleme şekli 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 oluşsa 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 düzgün 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 hızını ve sonuç olarak depolama G/Ç işlemlerinin sayısını azaltabilir.
  • Yeniden yürütmeler gerçekleşebilir: Event Hubs tetikleyici bağlamasıyla 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, bir denetim noktası işlevin son çağrılması sırasında gerçekleşmediğinde 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. Bir kez etkililik.

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şturmayı anlamak kritik önem taşır.

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ı temel yapılandırma seçenekleri sunar. İzleme ve performansla ilgili dikkate değer ayarlar ve önemli noktalardan bazıları şunlardır:

  • Telemetri örneklemesini etkinleştirme: Yüksek aktarım hızına sahip senaryolar için ihtiyacınız olan telemetri ve bilgi miktarını değerlendirmeniz gerekir. Gereksiz telemetri ve ölçümlerle işlevinizin performansını düşürmemek için Application Insights'ta telemetri örnekleme özelliğini kullanmayı göz önünde bulundurun.
  • Toplama ayarlarını yapılandırın: 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ındadır ve diğer birçok örnekleme ve günlüğe kaydetme ile ilgili seçenekleri içerir. Daha fazla bilgi için bkz . Toplayıcıyı yapılandırma.
  • AzureWebJobDashboard'ı devre dışı bırakın: İşlevler çalışma zamanının 1.x sürümünü hedefleyen uygulamalar için bu ayar, bağlantı dizesini Azure SDK'sının Web İşleri panosu günlüklerini korumak 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 olaylarla ilgili verilerin gönderilmesi, özellikle yüksek aktarım hızına sahip olay akışı senaryolarında işlevin performansı üzerinde zarara neden olabilir.

Örneklemeden yararlanmak ve izleme için gereken uygun miktarda telemetriyi 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 ihtiyacınız olan kod miktarını azaltır. Yazması ve bakımı daha kolay olan kod yazmanıza yardımcı olur.
  • Toplu işlem: Çeşitli dillerde toplu işlemenin bir olay akışında verimli bir şekilde yayımlanması desteklenir. Toplu işlem performansı artırabilir ve olayları gönderen kodun kolaylaştırılmasında yardımcı olabilir.

İşlevler'in 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ütmesinin her zaman olayı gönderen bir deyimle bitmesi durumunda 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şlem, 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.

Birden çok olay çıktısı (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ılz ekleme işlemini yürütür.
  • IAsyncCollector<T>. AddAsync() yöntemi, olay akışında yayımlanacak olayları 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 çıkış bağlamasını Azure Event Hubs.

Azaltma ve geri 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ğlaması 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.

Aşağı akış hatalarını işlemek için, IAsyncCollector'dan özel durumları yakalamak için AddAsync ve FlushAsync'i .NET İşlevleri için bir özel durum işleyicisine sarmalayabilirsiniz. Bir diğer seçenek de çıkış bağlamaları kullanmak yerine event hubs SDK'larını doğrudan kullanmaktı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 seçime tüm yol boyunca bağlı kalın.
  • Çağrıları engellemekten kaçının: Engelleme çağrıları yalnızca çağrı tamamlandıktan sonra, hemen döndürülen zaman uyumsuz çağrıların aksine çağırana geri döner. C# dilindeki bir örnek, zaman uyumsuz bir işlemde Task.Result veya Task.Wait'i çağırmak 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ığının 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, bu eşitlemeyi zaman uyumsuz yaklaşım üzerinden önlemek özellikle Event Hubs söz konusu olduğunda önemlidir. İşlevin 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 fenomenle ilgili sorunları gidermek 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 önceden hazırlama 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 vardır. Ancak, temel sorun kodun kendisindedir ve burada ele alınması gerekir.

Katkıda Bulunanlar

Bu makale Microsoft tarafından korunur. 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: