Azure App Service 本機快取概觀

注意

函數應用程式或容器化 App Service 應用程式中不支援本機快取,例如:在 Windows 容器中或在 Linux 上的 App Service 中。 這些應用程式類型可用的本機快取版本是應用程式快取

Azure App Service 內容儲存在 Azure 儲存體上,且會長期顯示為內容共用。 這項設計的目的是為了要與各種應用程式搭配使用,而且其具有下列特性︰

  • 內容會由應用程式的多個虛擬機器 (VM) 執行個體共用。
  • 內容具有持久性,且可透過執行應用程式來修改。
  • 記錄檔和診斷資料檔案會在相同的共用內容資料夾底下提供使用。
  • 發佈新內容時會直接更新內容資料夾。 透過 SCM 網站與執行中的應用程式,即可立即檢視相同的內容 (通常 ASP.NET 之類的某些技術確實會在某些檔案變更時,讓應用程式重新啟動以取得最新內容)。

雖然許多應用程式會使用上述其中一項功能或所有功能,但某些應用程式只需要可從中執行的內容存放區,而且此存放區具備高效能、唯讀和高可用性。 這些應用程式可以受益於特定本機快取的 VM 執行個體。

Azure App Service 本機快取功能可讓您以 Web 角色檢視您的內容。 這個內容是在網站啟動時,以非同步方式建立之儲存體內容的 write-but-discard 快取。 當快取已準備就緒時,網站會切換為執行快取的內容。 在本機快取執行的應用程式具有下列優點︰

  • 它們不受存取 Azure 儲存體上的內容時所發生的延遲影響。
  • 不受儲存體連線問題的影響,因為唯讀複本會在背景工作上快取。
  • 應用程式比較不會因為儲存體共用變更而重新啟動。

注意

如果您使用 Java (Java SE、Tomcat 或 JBoss EAP),則依預設會將 Java 成品 (.jar、.war 和 .ear 檔案) 複製到本機的背景工作。 如果您的 Java 應用程式也需對其他檔案進行唯讀存取,請將 JAVA_COPY_ALL 設定為 true,以便同時複製這些檔案。 如果已啟用本機快取,其優先權將高於此 Java 特定增強功能。

本機快取對 App Service 的行為所造成的影響

  • D:\home 會指向應用程式啟動時,在 VM 執行個體上建立的本機快取。 D:\local 會繼續指向暫存 VM 的特定儲存體。
  • 本機快取中包含共用內容存放區上 /site/siteextensions 資料夾的一次性副本,分別位在 D:\home\siteD:\home\siteextensions。 檔案會在應用程式啟動時複製到本機快取。 針對每個應用程式,兩個資料夾的大小限制預設為 1 GB,但可以增加至 2 GB。 請注意,隨著快取大小增加,載入快取將需要更長的時間。 若您已將本機快取限制增加為 2 GB,且複製的檔案超過 2 GB 的大小上限,則 App Service 會以無訊息方式忽略本機快取,並從遠端檔案共用讀取。

重要

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

  • 本機快取具有讀寫屬性。 不過,當應用程式移動虛擬機器或重新啟動時,將會捨棄任何修改。 因此,請勿針對會在內容存放區中儲存關鍵任務資料的應用程式使用本機快取。
  • D:\home\LogFilesD:\home\Data 中包含記錄檔和應用程式資料。 這兩個子資料夾會儲存在本機上的 VM 執行個體中,並定期複製到共用內容存放區。 應用程式可以藉由將記錄檔和資料寫入這些資料夾來加以保存。 不過,複製到共用內容存放區已是最佳方式,記錄檔和資料還是可能會因為 VM 執行個體突然當機而遺失。
  • 記錄串流會受到此最佳複製方式的影響。 您可能會看到串流處理的記錄中有最多一分鐘的延遲。
  • 在共用內容存放區中,針對使用本機快取的應用程式,其 LogFilesData 資料夾的資料夾結構有所變更。 這些資料夾現在有子資料夾,且這些子資料夾會遵循「唯一識別碼」+ 時間戳記的命名模式。 每個子資料夾都對應到將要用來執行或已用來執行應用程式的 VM 執行個體。
  • D:\home 中的其他資料夾會保留在本機快取中,而且不會複製到共用內容存放區。
  • 透過任何支援方法執行的應用程式部署會直接發佈到永久的共用內容存放區中。 若要重新整理本機快取中的 D:\home\siteD:\home\siteextensions 資料夾,必須重新啟動應用程式。 為了讓整個生命週期順暢前進,請參閱本文稍後的資訊。
  • SCM 網站的預設內容檢視將仍是共用內容存放區。

在 App Service 中啟用本機快取

注意

F1D1 層中不支援本機快取。

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

使用 Azure 入口網站設定本機快取

您可以使用下列應用程式設定來針對每個 Web 應用程式啟用本機快取︰ WEBSITE_LOCAL_CACHE_OPTION = Always

Azure portal app settings: Local Cache

使用 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 (2000 MB)。 請注意,隨著快取大小增加,載入本機快取將需要更長的時間。

使用 App Service 本機快取的最佳作法

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

  • 將「黏性」應用程式設定 WEBSITE_LOCAL_CACHE_OPTION 與值 Always 新增至您的生產環境位置。 如果您要使用 WEBSITE_LOCAL_CACHE_SIZEINMB,也將它做為黏性設定新增至您的生產環境位置。
  • 建立 預備環境 位置,並發佈至您的預備環境位置。 如果您獲得生產環境位置之「本機快取」提供的好處,便通常不會將預備環境位置設定為使用本機快取以在預備環境獲得順暢的「建置、部署、測試」生命週期。
  • 針對預備位置測試您的網站。
  • 準備好後,請在您的「預備環境」和「生產環境」位置之間發出 交換作業
  • 黏性設定包含位置的名稱和黏性。 因此,當預備環境位置交換到生產環境時,它會繼承本機快取應用程式設定。 新交換的生產環境位置會在幾分鐘後針對「本機快取」執行,並會在交換後的位置準備就緒時一併就緒。 因此,完成位置交換時,將會針對本機快取執行您的生產環境位置。

常見問題集 (FAQ)

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

當複製的檔案超過本機快取大小限制時,應用程式會從遠端共用讀取。 不過,部署和交換作業可能會失敗,併發生錯誤。 如需大小限制和結果,請參閱下表。

 本機快取大小 複製的檔案 結果
≤ 2 GB ≤ 本機快取大小 從本機快取讀取。
≤ 2 GB > 本機快取大小 從遠端共用讀取。
注意:部署和交換作業可能會失敗,併發生錯誤。

如何知道「本機快取」是否適用於我的應用程式?

如果您的應用程式需要高效能、可靠的內容存放區,且不使用內容存放區在執行階段時寫入重要資料並且大小總計小於 2 GB,那麼答案就是肯定的! 若要取得您 /site 和 /siteextensions 資料夾的大小總計,您可以使用網站擴充功能「Azure Web Apps 磁碟使用量」。

如何知道我的網站是否已切換成使用本機快取?

如果搭配預備環境使用「本機快取」功能,在本機快取準備就緒之前將無法完成交換作業。 若要檢查您的網站是否正在執行本機快取,您可以檢查工作者處理序環境變數 WEBSITE_LOCALCACHE_READY。 使用 背景工作角色處理序環境變數 頁面中的指示,存取多個執行個體上的工作者處理序環境變數。

我剛剛發佈了新的變更,但我的應用程式似乎沒有變更。 為什麼?

如果您的應用程式使用「本機快取」,則您需要重新啟動您的網站,以取得最新的變更。 不想對生產網站發佈變更嗎? 請參閱前面的最佳作法一節中的位置選項。

注意

從套件部署執行選項與本機快取不相容。

我的記錄在哪裡?

使用本機快取,您的記錄和資料的資料夾看起來會有點不同。 不過,子資料夾的結構會保持相同,不同之處在於這些子資料夾會位在格式為「唯一 VM 識別碼」+ 時間戳記的子資料夾底下。

我已啟用「本機快取」,但我的應用程式仍然重新啟動。 這是為什麼? 我以為「本機快取」有助於頻繁的應用程式重新啟動。

「本機快取」確實有助於防止儲存體相關應用程式重新啟動。 不過,您的應用程式仍有可能在計劃性 VM 基礎結構升級期間重新啟動。 整體而言,啟用「本機快取」後應該比較不會發生應用程式重新啟動。

「本機快取」會排除所有目錄而不會複製到更快的本機磁碟機嗎?

在複製儲存體內容的步驟中,將會排除名為儲存機制的任何資料夾。 當您的網站內容可能包含應用程式的日常作業不需要的原始檔控制儲存機制時,這會有幫助。

如何在網站管理作業之後排清本機快取記錄?

若要排清本機快取記錄,請停止並重新啟動應用程式。 此動作會清除舊的快取。

為何在啟用本機快取時,重新開機之後,App Service 便開始顯示先前部署的檔案?

如果 App Service 在重新開機後開始顯示先前部署的檔案,請檢查應用程式設定 - 'WEBSITE_DISABLE_SCM_SEPARATION=true'。 透過 KUDU 將部署新增至此設定之後,就會開始對本機 VM 而非永續性儲存體進行寫入。 請加以運用本文所述的最佳做法,應一律將部署執行至未啟用本機快取的預備位置。

更多資源

環境變數與應用程式設定參考