App Service 多執行個體相關議題討論

  • 936
  • 0

針對 Azure 上面最多人使用的 Paas 服務之一的 App Service,我們可以很方便的手動或自動化設定多個執行個體來負擔網站的負載,但是在開啟之後會有一些延伸的議題需要處理,本文就針對這些常見問題做一些實測和確認。

前言

針對 Azure 上面最多人使用的 Paas 服務之一的 App Service,我們可以很方便的手動或自動化設定多個執行個體來負擔網站的負載,但是在開啟之後會有一些延伸的議題需要處理,本文就針對這些常見問題做一些實測和確認。

說明

如何確認執行個體編號

如果我們要取得目前的執行個體相關資訊,尤其是編號,方便我們後續程式開發或是測試上使用,可以使用底下幾種方式,都是可以取得目前的執行個體相關資訊。

Kudo

最簡單的方式就是直接透過 App Service 提供的進階工具 Kudo 來察看。

連到底下網址就可以看到目前執行個體相關資訊。

https://{yousitename}.scm.azurewebsites.net/Env

可以看到在右上角多個可以切換執行個體,然後在 System Info 區塊可以找到 Instance Id。如果個數不多的話用這一個方式可以比較快的取得相關資訊。

Rest Api

比較建議的方式當然還是透過微軟提供的 Rest Api 來取得,也方便我們可以透過程式做更多的應用。使用底下 Rest Api 就可以方便取得執行個體的相關資訊,更多詳細說明可以參考官方文件說明

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/instances?api-version=2019-08-01

Azure cli

當然也是可以使用 Azure Cli 來取得,相關更詳細說明可以參考官方文件

az webapp list-instances --name {name} --resource-group {resourcegroup}

如何確認使用者端連到的執行個體

有兩個方式可以確認目前使用者連線到的到底是哪一個執行個體,方便後續如果要查詢 Log 或是一些應用時候可以使用。

後端程式

透過環境變數 WEBSITE_INSTANCE_ID 就可以取得目前的執行個體編號。

string instanceId = Environment.GetEnvironmentVariable("WEBSITE_INSTANCE_ID");

ViewData["instanceId"] = instanceId;

Cookies

從 Cookies 名稱為 ARRAffinity 也可以取得目前的執行個體編號。如下圖可以比對程式和前端取到的編號是一致的。

需要打開 ARR 同質性設定。

如何讓使用者每次都連到一樣的執行個體

在某些情境或是舊的程式上雲,並沒有針對多執行個體作處理,可能導致使用者連到不同執行個體會無法正確運作。要針對這樣情境去避免的話也是有兩種方式。

針對前面提到的 Cookies 從後端記錄 (Session 或是其它方式)下來每次都寫入一樣的執行個體編號。

另一個比較建議的方式就是直接打開 App Service 一般設定裡面的 ARR 同質性就可以了,但是如果有針對多執行個體處理程式,建議是不要打開,可以讓 Azure 自行分配流量,達到比較高的效能。

多個執行個體的情境下檔案是否共用

答案是共用的。可以簡單的測試透過 Kudo 寫入一個檔案,然後在不同直接個體去連線,可以發現都連的到。至於要從前端去控制連到哪一個執行個體可以直接改 Cookies 填入前面我們取得的執行個體編號就可以了。

結論

App Service 可以很方便的產生多個執行個體,方便我們網站可以自動擴充來改善應用程式效能,但是還是有些點需要注意的,本文列出比較常見的一些問題跟情境,如果還有其它讀者有遇到其它什麼問題也可以提出來討論或是分享。

參考資料