深入 IIS 課程筆記 (IIS In Depth Note)
2023-07-06
筆記 IIS Administration in Depth 的課程心得。
Performance Tuning
Keep-Alvie Header
HTTP Keep-Alive 的用途:
-
降低連接建立的成本:建立 TCP 連接需要額外的時間和資源。使用 Keep-Alive,客戶端和服務器之間可以在同一個連接上完成多個請求和響應,避免了重複建立連接的成本。
-
減少延遲:在 Keep-Alive 連接上,連接已經建立,可以立即發送下一個請求,而無需等待建立新連接的握手過程。這減少了請求和響應之間的等待時間,提高了請求的速度和效率。
-
提高效能:由於建立和關閉連接的成本被減少,服務器可以更有效地處理更多的請求,提高了服務器的效能和吞吐量。
-
節省頻寬:使用 Keep-Alive,多個請求和響應可以在同一個連接上進行,減少了每個請求的成本,從而節省了帶寬的使用。
-
支援流式傳輸和長輪詢:HTTP Keep-Alive 提供了連接的持久性,使得流式傳輸和長輪詢等應用變得更加容易實現,例如即時通訊和實時更新的 Web 應用。
但要注意的是根據 Wiki 的說明 Keep-Alvie 「對於單個檔案被不斷請求的服務(例如圖片存放網站),Keep-Alive可能會極大的影響效能,因為它在檔案被請求之後還保持了不必要的連接很長時間。」
<configuration>
<system.webServer>
<httpProtocol allowKeepAlive="true" />
</system.webServer>
</configuration>
Static Content
IIS Caching 和 staticContent 是兩個在IIS中用於提供靜態資源緩存的不同功能。以下是它們之間的差異:
IIS Caching(IIS 緩存)
IIS Caching 是一個較為通用的緩存機制,用於緩存Web應用程式的動態和靜態內容。它可以在IIS層級配置,以緩存整個Web應用程式的輸出,包括HTML頁面、動態輸出和圖像等。
可以提高 Web 應用程式的性能,減少對後端服務器的負載。它通常用於動態頁面的緩存,以減少每次請求時重新生成內容的成本。
配置選項包括緩存持續時間、VaryByParams、VaryByHeaders 等,用於控制緩存的行為和條件。
staticContent(靜態內容)
staticContent 是IIS的一個模組,專門用於處理和提供靜態資源,如 Images、CSS、JS 等,提供靜態資源的高效輸出,並支援靜態資源的緩存機制。
靜態內容可以通過設定 IIS 的 web.config 文件中的 staticContent
元素進行配置。你可以指定靜態資源的 MIME 類型、緩存控制、壓縮等相關設置。
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00"/>
</staticContent>
</system.webServer>
</configuration>
Output Cache
使用 IIS 設定 Cache,分為 User Mode 以及 Kernel Mode。
User Mode
<configuration>
<system.webServer>
<caching>
<profiles>
<add extension=".aspx" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" />
</profiles>
</caching>
</system.webServer>
</configuration>
Kernel Mode
<configuration>
<system.webServer>
<caching>
<profiles>
<add extension=".aspx" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" />
</profiles>
<kernelCache enabled="true" />
</caching>
</system.webServer>
</configuration>
所有支援的 Policy 包含 DontCache
、CacheUntilChange
、CacheForTimePerios
及 DisableCache
,詳細可以參考 Adding Caching Profiles
與 ASP.NET MVC OutputCacheAttribute 的比較:
範圍
- IIS Output Cache
- IIS Output Cache 是 IIS 層級的緩存機制,可以在多個應用程式中共享。它可以緩存靜態內容和動態內容,並且可以根據請求的URL和其他標識符進行緩存。
- OutputCacheAttribute
- ASP.NET MVC 5 的 OutputCacheAttribute 是在控制器或操作方法級別上應用的屬性,它僅對單個MVC應用程序中的特定控制器或操作方法起作用。
配置靈活性
- IIS Output Cache
- IIS Output Cache 提供了更多的配置選項,例如緩存持續時間、忽略的參數、自定義緩存鍵等。可以在IIS的網站或應用程序配置中進行進一步的細粒度配置。
- OutputCacheAttribute
- OutputCacheAttribute 提供了一組基本的配置選項,例如緩存持續時間、VaryByParam、VaryByCustom 等。它的配置是通過屬性的方式直接應用於控制器或操作方法。
緩存位置
- IIS Output Cache
- IIS Output Cache 可以將緩存結果保存在Web伺服器的記憶體中,也可以將其保存在磁碟上,提供更高的緩存效能。
- OutputCacheAttribute
- OutputCacheAttribute:OutputCacheAttribute 默認情況下將緩存結果保存在Web伺服器的記憶體中,但也可以配置為將緩存保存在其他存儲位置,如 SQL 資料庫或 AppFabric 等。
緩存粒度
- IIS Output Cache
- IIS Output Cache 的緩存粒度可以更細,可以根據請求的 URL、HTTP方法、HTTP 標頭等進行更細粒度的區分。
- OutputCacheAttribute
- OutputCacheAttribute 的緩存粒度通常是根據請求的 URL 進行區分,較難在控制器或操作方法級別進行更細粒度的區分。