共用方式為


Azure App Service 中的本地快取

小提示

您也可以在 Azure 中詢問 Microsoft Copilot 下列問題:

  • 本機快取如何在 Azure App Service 中運作?
  • 在 Azure App Service 中使用本機快取有哪些優點?
  • 在 Azure App Service 中使用本機快取有何限制?

若要在 Azure 中尋找 Copilot,請在 Azure 入口網站 工具列上選取 [Copilot]。

Azure App Service 內容會儲存在 Azure 記憶體中,並公開為永久性內容共用。 此設計適用於各種應用程式,並具有下列屬性:

  • 內容會在應用程式的多個虛擬機 (VM) 實例之間共用。
  • 內容很持久,而且執行中的應用程式可以修改它。
  • 記錄檔和診斷數據檔位於相同的共享內容資料夾下。
  • 發佈新內容會直接更新內容資料夾。 您可以透過原始檔控制管理員 (SCM, 也稱為 Kudu) 網站和執行中的應用程式,立即檢視相同的內容。 不過,某些技術(例如 ASP.NET)可能會在特定檔案變更上起始應用程式重新啟動,以載入最新的內容。

雖然許多應用程式都使用其中一或多個功能,但某些應用程式需要一個高效能且只讀的內容存放區,以確保高可用性。 此類應用程式可以從針對 VM 執行個體上的本機快取執行中受益。

Azure 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\siteD:\home\siteextensions。 這些檔案會在應用程式啟動時複製到本機快取。

    根據預設,這兩個資料夾的大小限制為1 GB,但您可以將它增加到2 GB。 隨著快取大小增加,載入快取需要較長的時間。 如果您將本機快取限制增加到 2 GB,且複製的檔案超過此大小上限,App Service 會以無訊息方式忽略本機快取,並從遠端檔案共用讀取。

    這很重要

    當複製的檔案超過本機快取的已定義大小限制,或未定義任何限制時,部署和交換作業可能會失敗併發生錯誤。 如需詳細資訊,請參閱本文稍後 關於大小限制的常見問題

  • 本機快取具有讀/寫屬性。 不過,當應用程式在 VM 之間移動或重新啟動時,會捨棄任何修改。 請勿使用本機快取來儲存任務關鍵性數據。

  • D:\home\LogFilesD:\home\Data 包含記錄檔和應用程式數據。 這些資料夾會儲存在本機 VM 實例上,並定期複製到共用內容存放區。 雖然應用程式可以藉由寫入這些資料夾來保存記錄檔和資料,但複製的過程是採取盡力而為的方式。 如果 VM 實例突然停止回應,記錄檔和數據可能會遺失。

  • 盡力而為的複本會影響 記錄串流。 您可能會在串流記錄中觀察到最多一分鐘的延遲。

  • 在共用內容存放區中,對於使用本機快取的應用程式,LogFilesData 的資料夾結構發生變更。 現在有名稱包含唯一標識碼和時間戳的子資料夾。 每個子資料夾都會對應於應用程式正在或曾經運行的 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 專屬行為。

啟用本機快取的方法

您可以使用保留的應用程式設定的組合,以設定本機快取。 您可以使用下列其中一種方法來設定這些應用程式設定。

使用 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)的大小。 請記住,較大的快取大小會增加載入快取的時間。

使用本機快取的最佳做法

建議您搭配 預備環境 功能使用用戶端快取。

以下過程代表使用本機快取的最佳做法:

  1. WEBSITE_LOCAL_CACHE_OPTION插槽中新增具有值Always的黏性應用程式設定。 如果您使用 WEBSITE_LOCAL_CACHE_SIZEINMB,也請將該設定標示為生產環境位置的黏性設定。

  2. 建立 暫存 插槽並發佈至該插槽。 通常,您不會將預備位置設定為使用本機快取,這有助於啟用無縫的建置/部署/測試生命週期,同時仍能為生產環境位置提供本機快取的優點。

  3. 在預備位置中測試您的網站。

  4. 當您準備好時,請在暫存區與生產環境之間執行 交換操作

黏性設定與位置相關聯。 當預備位置交換為生產環境時,它會繼承本機快取的應用程式設定。 幾分鐘後,新交換的生產環境位置會針對本機快取執行,並在位置預熱期間進行預熱。 交換完成後,您的生產環境位置會針對本機快取執行。

常見問題

如果我超過本機快取的大小限制,該怎麼辦?

如果複製的檔案超過本機快取的大小限制,應用程式會還原為從遠端共用讀取。 下表顯示詳細數據。

本機快取大小 複製的檔案 結果
≤ 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,而不是持久性儲存。 若要避免這種情況,請遵循 先前所述的最佳做法 ,並將部署執行至未啟用本機快取的預備位置。