2016-05-18 112 views
16

scaling documentation for Azure Functions對於Azure函數如何決定何時添加更多應用程序實例的詳細信息稍微清晰一些。Azure函數如何擴展?

說例如我有一個由Github webhook觸發的函數。 10,000人同時承諾Github回購(沒有合併衝突;)),Github在很短的時間內將我的功能稱爲10,000次。

我可以期待什麼發生?具體而言,

  1. 請問Azure函數調節webhook調用嗎?即,如果我的功能應用程序處於高負載狀態,Azure函數是否會拒絕某些函數調用?
  2. Azure函數以某種方式排隊請求嗎?如果是的話,在哪裏/如何?
  3. Azure函數在此場景中創建多少個函數應用程序實例?每個請求一個(即10,000個),並且每個請求都會並行運行?
  4. 如果我的應用程序函數被縮小到零實例,因爲它沒有負載,我可以期望在第一個函數執行之前看到一些「預熱時間」嗎?大概多久?

回答

17
  1. Azure的功能不會拒絕網絡掛接電話,但突然,極端負載的情況下,一些請求可能會超時。對於web apis,請包括對客戶的重試,作爲最佳做法。
  2. 他們沒有在任何持久的地方排隊。它們是由IIS管理的(實現細節)。
  3. (實現細節)實例的數量不是一件困難的事情。我們有一些未發表的保護措施,但我們的目的是要擴展很多。您的請求將由多個實例處理。
  4. 是的。現在,這是相當高的(秒),但我們將努力改進它。對於性能敏感的情況,推薦使用金絲雀或定時器觸發器來保持清醒。

我來自Azure Functions團隊。我標記爲實施細節的內容不是承諾,並且可能隨着我們服務的發展而改變;只是嘗試透明度。

+0

你能否定時器觸發的解決方案擴展更多嗎?我可以有另一種定時器觸發的功能應用功能,並依靠它來保持HTTP觸發功能'warm'? – Shrulik

+1

如果你在同一個Function App上有另外一個函數,例如定時器觸發器,它會保持一個溫暖的實例,以便執行另一個執行,今天是。 –

+0

Thanks。「today」有點令人擔憂,但是我很欣賞誠實 – Shrulik

2
  1. 今天測試。花了超過秒:(
ACTUAL PERFORMANCE 
-------------- 
ClientConnected: 13:58:41.589 

ClientBeginRequest: 13:58:41.592 

GotRequestHeaders: 13:58:41.592 

ClientDoneRequest: 13:58:41.592 

Determine Gateway: 0ms 

DNS Lookup:  65ms 

TCP/IP Connect: 40ms 

HTTPS Handshake: 114ms 

ServerConnected: 13:58:41.703 

FiddlerBeginRequest: 13:58:41.816 

ServerGotRequest: 13:58:41.817 

ServerBeginResponse: 14:00:36.790 

GotResponseHeaders: 14:00:36.790 

ServerDoneResponse: 14:00:36.790 

ClientBeginResponse: 14:00:36.790 

ClientDoneResponse: 14:00:36.790 


Overall Elapsed: **0:01:55.198**