2017-04-13 37 views
5

我有一個天藍色的函數在服務總線主題觸發的消費計劃上運行,然後簡單地向隊列中添加另一條消息(所以基本上沒有處理,只是IO)。觸發主題正在以〜1000 /秒的速度填充。我天真地認爲這個功能可以很容易地跟上,但實際上它絕望地被壓倒了,並且主題訂閱很快就填滿了。我已經運行了好幾個小時,所以我懷疑它已經完全縮小了。我是否期望從天藍色的功能有太多的可擴展性?

我應該從函數中獲得多少性能?吞吐量大概是每秒數千次?

編輯:我經常看到這個錯誤在日誌中:

連接嘗試持續了00:00:00的時間跨度。 TCP錯誤 代碼10013:試圖通過其訪問權限以禁止的方式訪問套接字 。

看起來功能與服務巴士的規模不搭配?

編輯2解決方案 更換這種結合:

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")); 


    ... 
} 

防止插座的疲憊和功能能夠跟上生產沒有問題。

回答

3

我有同樣的問題在我的Azure的功能。根本原因是我耗盡所有端口,因爲我在Run方法內部創建了一個TCP連接。

因此,當同一臺機器上有很多並行執行時,它們都會創建連接,最終耗盡所有端口。

在這種情況下,連接被創建爲ServiceBus客戶端創建的一部分,並將其移動到靜態變量來解決問題。

+0

該解決方案適用於我,我在上面添加了更多細節。 –

3

一些問題:

  • 請問您的服務總線連接字符串已管理的權利?目前,管理權利對於有效擴展是必要的。
  • 您是使用輸入/輸出綁定,還是自己管理服務總線客戶端?
  • 您是否修改了host.json中的服務總線併發設置?

您所看到的錯誤與連接耗盡有關,所以不知何故,您的功能實例用完了可用的連接。

如果你想獲得縮放&吞吐量你可以給這個一杆功能遙測:https://github.com/Azure/Azure-Functions/wiki/App-Insights-Early-Preview

+0

是的連接字符串具有完整的管理權限。我使用binder.BindAsync綁定了代碼中的輸出。我沒有碰過主人。json –

相關問題