小提示
你也可以向 Azure Copilot 詢問以下問題:
- 本機快取如何在 Azure App Service 中運作?
- 在 Azure App Service 中使用本機快取有哪些優點?
- 在 Azure App Service 中使用本機快取有何限制?
要使用 Azure Copilot,請在 Azure 入口網站 工具列中選擇 Copilot。
Azure App Service 內容會儲存在 Azure 記憶體中,並公開為永久性內容共用。 此設計適用於各種應用程式,並具有下列屬性:
- 內容會在應用程式的多個虛擬機 (VM) 實例之間共用。
- 內容很持久,而且執行中的應用程式可以修改它。
- 記錄檔和診斷數據檔位於相同的共享內容資料夾下。
- 發佈新內容會直接更新內容資料夾。 您可以透過原始檔控制管理員 (SCM, 也稱為 Kudu) 網站和執行中的應用程式,立即檢視相同的內容。 不過,某些技術(例如 ASP.NET)可能會在特定檔案變更上起始應用程式重新啟動,以載入最新的內容。
雖然許多應用程式都使用其中一或多個功能,但某些應用程式需要一個高效能且只讀的內容存放區,以確保高可用性。 此類應用程式可以從針對 VM 執行個體上的本機快取執行中受益。
App Service 中的本機快取功能提供內容的 Web 角色檢視。 此內容是在網站啟動時,以非同步方式建立之儲存體內容的 write-but-discard 快取。 當快取準備就緒時,網站會切換為對快取的內容執行。
具有本機快取的應用程式可以透過以下方式獲得益處:
- 在 Azure 儲存體中存取內容的相關延遲不會對其造成影響。
- 連線到儲存體的問題不會影響它們,因為唯讀複本會在本機快取。
- 它們因儲存體共用的變更而較少經歷應用程式重新啟動。
備註
函式應用程式或容器化 App Service 應用程式不支援本機快取功能,例如 Windows 容器 或內建或自定義 Linux 容器。 應用程式快取是適用於這些應用程式類型的功能版本。
App Service 的 F1 和 D1 定價層也不支援本機快取功能。
本機快取如何改變應用服務的行為
設定本機快取會導致這些變更:
D:\home指向本機快取,這是應用程式啟動時在 VM 執行個體上建立的。D:\local會繼續指向暫時的 VM 特定記憶體。本機快取包含共用內容存放區中
/site和/siteextensions資料夾的一次性複本。 這些資料夾分別位於D:\home\site和D:\home\siteextensions。 這些檔案會在應用程式啟動時複製到本機快取。這兩個資料夾的大小預設限制為 1 GB,但您可以將大小增加到 2 GB。 隨著快取大小增加,載入快取需要較長的時間。 如果您將本機快取限制增加到 2 GB,且複製的檔案超過此大小上限,App Service 會以無訊息方式忽略本機快取,並從遠端檔案共用讀取。
這很重要
當複製的檔案超過本機快取的已定義大小限制,或未定義任何限制時,部署和交換作業可能會失敗併發生錯誤。 如需詳細資訊,請參閱本文稍後 關於大小限制的常見問題 。
本機快取具有讀/寫屬性。 不過,當應用程式在 VM 之間移動或重新啟動時,會捨棄任何修改。 請勿使用本機快取來儲存任務關鍵性數據。
D:\home\LogFiles和D:\home\Data包含記錄檔和應用程式數據。 這些資料夾會儲存在本機 VM 實例上,並定期複製到共用內容存放區。 雖然應用程式可以藉由寫入這些資料夾來保存記錄檔和資料,但複製的過程是採取盡力而為的方式。 如果 VM 實例突然停止回應,記錄檔和數據可能會遺失。最大努力複本會影響記錄串流。 您可能會觀察到串流記錄中最多一分鐘的延遲。
在共用內容存放區中,對於使用本機快取的應用程式,
LogFiles和Data的資料夾結構發生變更。 現在有名稱包含唯一標識碼和時間戳的子資料夾。 每個子資料夾都會對應於應用程式正在或曾經運行的 VM 實例。中的其他
D:\home資料夾會保留在本機快取中,且不會複製到共用內容存放區。透過任何支援的方法,應用程式部署會直接發佈至永久性共用內容存放區。 若要重新整理
D:\home\site本機快取中的 和D:\home\siteextensions資料夾,您必須重新啟動應用程式。 為了協助確保順暢的生命週期,請參閱本文稍後關於最佳做法的章節。SCM 網站的預設內容檢視會繼續反映共用的內容存放區。
備註
如果您使用 Java (Java SE、Tomcat 或 JBoss EAP),依預設,Java 構件 (.jar、.war 和 .ear 檔案) 會在本機複製到背景工作角色。 如果您的 Java 應用程式需要唯讀存取其他檔案,請將 JAVA_COPY_ALL 設定為 true,以確保這些檔案也會被複製。 如果啟用了本機緩存,則會取代此 Java 專屬行為。
JAVA_COPY_ALL 與部署至 /home/site/wwwroot/webapps 的舊版慣例不相容。
啟用本機快取的方法
您可以使用保留的應用程式設定的組合,以設定本機快取。 您可以使用下列其中一種方法來設定這些應用程式設定。
使用 Azure 入口網站設定本機快取
藉由新增此應用程式設定,在個別 Web 應用程式上啟用本機快取: WEBSITE_LOCAL_CACHE_OPTION = Always。
使用 Azure Resource Manager 設定本機快取
{
"apiVersion": "2015-08-01",
"type": "config",
"name": "appsettings",
"dependsOn": [
"[resourceId('Microsoft.Web/sites/', variables('siteName'))]"
],
"properties": {
"WEBSITE_LOCAL_CACHE_OPTION": "Always",
"WEBSITE_LOCAL_CACHE_SIZEINMB": "1000"
}
}
變更本機快取中的大小設定
根據預設,本機快取大小為1 GB。 此大小包含從內容存放區複製的 /site 和 /siteextensions 資料夾。 此外也包含任何本機產生的記錄和資料的資料夾。
若要增加此限制,請使用應用程式設定 WEBSITE_LOCAL_CACHE_SIZEINMB。 每個應用程式最多可增加 2 GB(2,000 MB)的大小。 請記住,較大的快取大小會增加載入快取的時間。
使用本機快取的最佳做法
建議您使用本機快取搭配暫存環境功能。
以下過程代表使用本機快取的最佳做法:
將黏性應用程式設定
WEBSITE_LOCAL_CACHE_OPTION與值Always新增至您的生產位置。 如果您使用WEBSITE_LOCAL_CACHE_SIZEINMB,也請將該設定標示為生產環境位置的黏性設定。建立預備位置並發佈至該位置。 一般而言,您不會將預備位置設定為使用本機快取。 此組態有助於實現無縫的建置/部署/測試生命週期,同時仍為生產位置提供本機快取優勢。
在預備位置中測試您的網站。
當您準備好時,請在預備位置與生產環境位置之間執行交換作業。
黏性設定與位置相關聯。 當預備位置交換為生產環境時,它會繼承本機快取的應用程式設定。 幾分鐘後,新交換的生產環境位置會針對本機快取執行,並在位置預熱期間進行預熱。 交換完成後,您的生產環境位置會針對本機快取執行。
常見問題
如果我超過本機快取的大小限制,該怎麼辦?
如果複製的檔案超過本機快取的大小限制,應用程式會還原為從遠端共用讀取。 下表顯示詳細數據。
| 本機快取大小 | 複製的檔案 | 結果 |
|---|---|---|
| ≤ 2 GB | ≤ 本機快取大小 | 從本機快取讀取。 |
| ≤ 2 GB | > 本機快取大小 | 從遠端共用讀取。 部署和交換作業可能會失敗,並且還可能發生錯誤。 |
如何判斷我的應用程式是否可以受益於本機快取?
如果適用下列所有條件,本機快取就很適合:
- 您的應用程式需要高效能且可靠的內容存放區。
- 您的應用程式不會使用內容存放區在運行時間寫入重要數據。
- 總大小小於 2 GB。
若要檢查您的/site和/siteextensions資料夾的大小總和,可以使用站台擴充套件 Azure Web Apps 磁碟使用量。
如何判斷我的網站是否切換為使用本機快取?
當您在預備環境中使用本機快取時,交換操作將不會完成,直到本機快取完全準備就緒。 若要確認您的網站是否正在使用本機快取執行,請檢查工作進程環境變數 WEBSITE_LOCALCACHE_READY。 如需有關跨多個執行個體檢查此變數的資訊,請參閱背景工作角色流程環境變數的 Kudu 指示。
為什麼我的應用程式不會反映新發佈的變更?
如果您的應用程式使用本機快取,您必須重新啟動網站以載入最新的變更。 如果您不想直接將變更發佈至生產網站,請考慮使用部署位置,如稍早關於最佳做法的小節中所述。
備註
套件中執行的部署選項與本機快取功能不相容。
我的記錄在哪裡?
當您使用本機快取時,記錄和數據資料夾的結構會稍微變更。 子資料夾現在會巢狀於具有唯一 VM 識別碼和時間戳的資料夾下。 每個資料夾都會對應至應用程式執行所在的 VM 實例。
為什麼我的應用程式在啟用本機快取時仍會重新啟動?
本機快取有助於防止與儲存體相關的應用程式重新啟動。 不過,您的應用程式可能會在 VM 上規劃的基礎結構升級期間重新啟動。 總體而言,如果您啟用了本機快取,您應該會觀察到更少的重新啟動。
是否有任何目錄被本機快取排除,因而無法複製到更快速的本機磁碟驅動器?
在複製程序期間,會排除任何名為 repository 的資料夾。 此行為適合網站內容包括的原始檔控制存放庫並非您的日常作業所需的案例。
如何在網站管理作業之後排清本機快取記錄?
若要排清本機快取記錄,請停止並重新啟動應用程式。 此動作會清除先前的快取。
為什麼 App Service 會在啟用本機快取時重新啟動之後顯示先前部署的檔案?
如果先前部署的檔案在重新啟動後重新出現,請檢查應用程式設定 WEBSITE_DISABLE_SCM_SEPARATION=true是否存在。 新增此設定會導致透過 Kudu 進行的部署寫入本機 VM,而不是持久性儲存。 若要避免這種情況,請遵循 先前所述的最佳做法 ,並將部署執行至未啟用本機快取的預備位置。