Dot-Net

如何確保新的自動縮放 Azure 應用服務實例在處理流量之前是熱的?

  • June 16, 2017

在應用服務上啟用自動縮放後,Azure 將根據設置規則根據需要添加實例。我總是從至少 2 個實例開始。我想確保在應用程式碼完全初始化之前,流量不會被定向到新的應用程序服務實例。我怎樣才能做到這一點?是否可以添加超時?還是以某種方式自動完成?

我怎樣才能做到這一點?是否可以添加超時?還是以某種方式自動完成?

如果您使用水平擴展(也稱為向外擴展和向內擴展),Azure 將使您的應用程序在供應新資源時繼續執行而不會中斷。

Azure 將自動預熱新實例的應用程序並添加負載平衡以自動在它們之間分配請求。您不需要自己單獨配置負載均衡。

有關 azure 自動縮放如何工作的更多詳細資訊,您可以參考這篇文章和這篇文章


“Azure 將自動預熱新實例的應用程序”-您提供的連結沒有這樣說-您能否提供其他參考資料?在使用 200 OK 或硬超時 2 分鐘後可以訪問特定 URL 之前,我基本上不希望將實例添加到負載均衡器。

將 Web 應用擴展到 2 個實例後,如果將新請求發送到預設實例網站,Azure 將預熱新實例的 Web 應用。

您可以編寫如下測試:

在 web.config 的 webserver 標籤中添加以下配置程式碼以跟踪所有請求:

<tracing>  
 <traceFailedRequests>  
   <clear/>  
   <add path="*">  
     <traceAreas>  
     <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,iisnode" verbosity="Verbose" />  
     </traceAreas>  
     <failureDefinitions statusCodes="200-600" />  
   </add>  
 </traceFailedRequests>  
</tracing> 

然後,如果您的站點擴展到 2 個實例,則在您訪問 Web 應用程序之後。負載平衡不會將請求重定向到第二個實例,因為實例的程序沒有啟動。Azure 將自動預熱第二個實例的 Web 應用程序。

您可以找到如下圖所示的日誌:

在此處輸入圖像描述

日誌結果:

在此處輸入圖像描述

fr00030.xml(你可以發現程序是 5860 舊實例):

在此處輸入圖像描述

fr00031.xml(你會發現程序是8164個新實例,需要4015毫秒)

在此處輸入圖像描述

此外,正如 Byron Tardif 所說,如果您想啟用自定義預熱(預熱所有頁面),您可以使用Application Initialization Module

在新請求訪問您的第二個 Web 應用程序實例之前,它也會被呼叫。

您想在應用程序的 web.config 文件中使用應用程序初始化。

您需要添加如下內容:

<system.webServer>  
 <applicationInitialization >  
   <add initializationPage="/page-you-want-to-warm-up.php" hostName="your-app.azurewebsites.net"/> 
 </applicationInitialization>  
<system.webServer> 

每次您的應用程序啟動時,這可能是因為新的工作人員上線(水平擴展),甚至只是由新的部署、配置更改等導致的冷啟動…… ApplicationInitialization 將在接受之前執行以預熱站點對該工作人員的請求。

您可以在此處閱讀有關此內容的更多資訊:http ://ruslany.net/2015/09/how-to-warm-up-azure-web-app-during-deployment-slots-swap/

儘管該文章正在討論在執行交換操作時使用它來預熱站點,但它也適用於冷啟動和橫向擴展。

引用自:https://stackoverflow.com/questions/44552036