本文介紹了幾個技巧,這些技巧能夠改善Azure App Service託管應用程序的性能。其中一些技巧是你如今就能夠進行的配置變動,緩存
而其餘技巧則可能須要對應用程序進行一些從新設計和重構。性能優化
開發者都但願從部署在Azure的App Services中壓榨出最佳性能。
更好的性能不只可以得到更佳的響應體驗;並且若是咱們在Azure中能「四兩撥千斤」,那麼性能的提高還能夠爲咱們省錢。
在本文中,咱們將研究提升Azure App Services中運行的Web程序性能的設置和策略。服務器
下面幾個性能提高意見在 App Service 配置界面便可操做,這一組技巧的主題是壓榨出App Service自己的性能。cookie
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 方式交互。app
HTTP/2不會使每一個應用都受益,下面是一個簡單的測試以驗證HTTP/2的改進:負載均衡
某App Service託管頁面引用了腳本、CSS資源、16張圖像,每一個圖像的大小超過200 KB。less
使用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,以提升性能和彈性。
--------------------------------------------------------------------------------
下面的改進須要一些其餘網絡規劃或重組(某些狀況下,還須要更改應用程序自己)
下一組技巧中的主題是縮短數據在網絡上傳輸的距離
讓你的App Service 與使用者更接近
若是大多數客戶流量都來自世界的特定區域,則將資源放置在離客戶最近的Azure區域中是頗有意義的。固然,咱們許多人的客戶分佈在世界各地。在這種狀況下,您能夠考慮跨多個Azure區域進行地理複製,以與每一個人保持親密關係,以後你使用相似Azure Traffic Manager(基於DNS技術的負載均衡器)將你的客戶直接路由到 最近的服務實例。
讓你的服務內容與 使用者更接近
腳本、圖片、CSS,視頻等靜態資源是在CDN邊緣服務器上緩存的較好選擇,一旦緩存,Azure App Service 不須要花費帶寬和時間在這些資源上,專一處理動態資源。
Azure支持CDN邊緣服務器的搭建
回過頭來,看以上性能優化建議,第一步仍是要評估當前App Service現狀和性能,不是每個策略都對你的App Service 有效。