1. 程式人生 > >改善Azure App Service託管應用程式效能的幾個技巧

改善Azure App Service託管應用程式效能的幾個技巧

 

本文介紹了幾個技巧,這些技巧可以改善Azure App Service託管應用程式的效能。其中一些技巧是你現在就可以進行的配置變更,

而其他技巧則可能需要對應用程式進行一些重新設計和重構。

開發者都希望從部署在Azure的App Services中壓榨出最佳效能。
更好的效能不僅能夠獲得更佳的響應體驗;而且如果我們在Azure中能“四兩撥千斤”,那麼效能的提升還可以為我們省錢。
在本文中,我們將研究提高Azure App Services中執行的Web程式效能的設定和策略。

下面幾個效能提升意見在 App Service 配置介面即可操作,這一組技巧的主題是壓榨出App Service本身的效能。

 

 

 

 

1.   啟動HTTP/2

Microsoft於2018年初宣佈在App Services中支援HTTP/2,但到目前為止在Azure中預設建立的App Service還是以HTTP1.1協議工作。HTTP/2對常見的的Web協議進行了重大更改,許多更改旨在提高效能並減少Web上的延遲。例如,HTTP/2中的標頭壓縮和二進位制格式將減少有效負載大小。另外請求管道和多路複用等功能允許使用更少的網路套接字來執行更多併發請求,並有助於避免一個緩慢的請求阻止所有後續請求,這是HTTP 1.1中的常見問題。

為你的的App Service啟動HTTP/2協議,如上圖所示,下拉列表指定HTTP2.0版本後,所有支援HTTP/2的客戶端都將自動升級其連線, 不支援HTTP/2的客戶端仍然以原有Http1.1 方式互動。

HTTP/2不會使每個應用都受益,下面是一個簡單的測試以驗證HTTP/2的改進:

某App Service託管頁面引用了指令碼、CSS資源、16張影象,每個影象的大小超過200 KB。

 使用developer tool記錄使用HTTP 1.1在App Service上發生的情況。

請注意觀察條形紅色部分顯示了後置請求以阻塞狀態開始。這是可怕的“行頭阻塞”問題,其中對連線數和併發請求的限制限制了客戶端和伺服器之間的吞吐量。直到第一個請求開始後800毫秒,客戶端才會收到該頁面的最終位元組。

 接下來在App Service中啟用了HTTP / 2支援:

不需要對客戶端或伺服器上進行任何其他配置更改,最後一個位元組不到500ms到達。由於HTTP/2提高了網路利用率,我們避免了阻塞。

 

2.  關閉空閒休眠

如果你有將應用程式部署到IIS的經歷,那麼你應該知道IIS在一段時間不活動之後將休眠(這個配置在IIS理預設是20分鐘)。

Azure App Service延續了這一傳統。儘管休眠可為在同一App Service Plan上執行的其他App Service提供資源,但是此策略會損害當前應用程式的效能,因為下一個傳入請求將經歷Web伺服器冷啟動的過程:快取為空、連線池為空,站點預熱,所有請求的速度都比正常情況慢。為了防止空閒關閉,您可以在“ App Service配置”刀片中設定“始終開啟”標誌。

 

3. 關閉App Service例項親和力

即使你僅執行App Service Plan的單例項,每個Azure App Service前面都是負載平衡器。負載均衡器會轉發請求到App Service例項。

因此,當App Service因流量縮放出多例項,負載均衡器使用Application Request Routing將連線會話分發給例項。

因為Azure無法知曉應用程式是不是stateless服務, 故預設的App Service將確保客戶端在會話期間訪問同一App Service例項。

為了實現這種親和力,負載均衡器會在對客戶端的第一個響應中注入ARRAffinity  Cookie。

 

 如果你的應用程式是stateless,並允許負載平衡器在例項之間分配請求,請關閉請求路由cookie,以提高效能和彈性。

--------------------------------------------------------------------------------

下面的改進需要一些其他網路規劃或重組(某些情況下,還需要更改應用程式本身)

下一組技巧中的主題是縮短資料在網路上傳輸的距離

  •   讓你的服務資源相距更近,比如常規的WebApi服務,需要搭建App Service 和Database,建議你把資源放在同一區域協同工作。
  •  讓你的App Service 與使用者更接近

如果大多數客戶流量都來自世界的特定區域,則將資源放置在離客戶最近的Azure區域中是很有意義的。當然,我們許多人的客戶分佈在世界各地。在這種情況下,您可以考慮跨多個Azure區域進行地理複製,以與每個人保持親密關係,之後你使用類似Azure Traffic Manager(基於DNS技術的負載均衡器)將你的客戶直接路由到 最近的服務例項。

  • 讓你的服務內容與 使用者更接近

指令碼、圖片、CSS,視訊等靜態資源是在CDN邊緣伺服器上快取的較好選擇,一旦快取,Azure App Service 不需要花費頻寬和時間在這些資源上,專注處理動態資源。

Azure支援CDN邊緣伺服器的搭建 

回過頭來,看以上效能優化建議,第一步還是要評估當前App Service現狀和效能,不是每一個策略都對你的App Service 有效。

&n