深入 IIS 課程筆記 (IIS In Depth Note)

2023-07-06

筆記 IIS Administration in Depth 的課程心得。

logo

Performance Tuning

Keep-Alvie Header

HTTP Keep-Alive 的用途:

  1. 降低連接建立的成本:建立 TCP 連接需要額外的時間和資源。使用 Keep-Alive,客戶端和服務器之間可以在同一個連接上完成多個請求和響應,避免了重複建立連接的成本。

  2. 減少延遲:在 Keep-Alive 連接上,連接已經建立,可以立即發送下一個請求,而無需等待建立新連接的握手過程。這減少了請求和響應之間的等待時間,提高了請求的速度和效率。

  3. 提高效能:由於建立和關閉連接的成本被減少,服務器可以更有效地處理更多的請求,提高了服務器的效能和吞吐量。

  4. 節省頻寬:使用 Keep-Alive,多個請求和響應可以在同一個連接上進行,減少了每個請求的成本,從而節省了帶寬的使用。

  5. 支援流式傳輸和長輪詢: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 包含 DontCacheCacheUntilChangeCacheForTimePeriosDisableCache,詳細可以參考 Adding Caching Profiles | learn.microsoft

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 進行區分,較難在控制器或操作方法級別進行更細粒度的區分。

相關連結

IIS 筆記整理

IIS 網頁伺服器的安全設定 (IIS Security Configuration)