2017-04-13 49 views
5

Bir hizmet veri yolu konusu tarafından tetiklenen tüketim planında çalışan bir masmavi işlevi var, sonra bir kuyruğa başka bir ileti ekler (temelde hiçbir işlem yapmaz, sadece IO). Tetik konusu ~ 1000/saniye hızında dolduruluyor. Saf bir şekilde fonksiyonun kolayca ayak uydurabileceğini düşünmüştüm, ama aslında umutsuzca bunalmış ve konu aboneliği çok çabuk doldu. Saatlerce koşuyorum, bu yüzden tamamen ölçeklendiğinden şüpheleniyorum.Azure işlevlerinden çok fazla ölçeklenebilirlik mi bekliyorum?

İşlevlerden ne kadar performans beklemeliyim? Verim, saniyede binlerce sıraya göre mi çıkıyor?

düzenleme: Düzenli günlüklerinde bu hata görüyorum:

bağlantı girişimi 00:00:00 bir zaman aralığı sürdü. TCP hatası 10013 kodu: Erişim izinleriyle yasaklanmış bir şekilde bir yuvaya erişmek için girişimde bulunuldu.

İşlevler, hizmet veri yolunda iyi performans göstermiyor gibi görünüyor mu? Bununla

public static async Task Run(BrokeredMessage msgin, Binder binder, TraceWriter log) 
{ 
var collector = await binder.BindAsync<IAsyncCollector<BrokeredMessage>>(
       new ServiceBusAttribute("my-queue")); 

... 
} 

:

public static IAsyncCollector<BrokeredMessage> collector; 
public static async Task Run(BrokeredMessage msgin, Binder binder, TraceWriter log) 
{ 
    collector = collector ?? await binder.BindAsync<IAsyncCollector<BrokeredMessage>>(
       new ServiceBusAttribute("my-queue")); 


    ... 
} 

engelledi soket yorgunluk ve fonksiyon üreticisi ile bir sorunum ayak uydurmak başardı çözümü için

düzenlemek 2 değiştirilmesi bu bağlayıcı.

cevap

3

benim Azure Fonksiyonu aynı sorunu vardı. Kök neden, tüm bağlantı noktalarını yoruyordum çünkü Run yönteminde bir TCP bağlantısı oluşturuyordum.

Aynı makinede çok sayıda paralel yürütme olduğunda, bunların hepsi bağlantı oluşturdu ve sonunda tüm bağlantı noktalarını yordu.

Bu durumda, ServiceBus istemcisinin oluşturulmasının bir parçası olarak bağlantı oluşturuldu ve onu statik değişkene taşıyarak sorun çözüldü.

+0

Bu çözüm benim için çalıştı, yukarıda daha fazla ayrıntı ekledim. –

3

bazı sorular:

Servis otobüsü bağlantı dizesi haklarını yönetmek var mı
  • ? Şu anda etkili ölçeklendirme için hakları yönetmek gereklidir.
  • Giriş/çıkış bağlamaları mı kullanıyorsunuz yoksa hizmet veri yolu istemcisini mi kendiniz yönetiyorsunuz?
  • Servis otobüsü eş zamanlılık ayarlarını host.json olarak değiştirdiniz mi?

Görmekte olduğunuz hata bağlantı tükenme ile ilgilidir, bu nedenle işlev örneğiniz bir şekilde kullanılabilir bağlantıların tükeniyordur.

Bunu denemek olabilir & verim ölçekleme işlevleri hakkında telemetri almak isterseniz: https://github.com/Azure/Azure-Functions/wiki/App-Insights-Early-Preview

+0

Bağlantı dizesi tam yönetme haklarına sahip. Çıktıyı binder.BindAsync kullanarak kod bağladım. Ev sahibine dokunmadım.json –