Windows Process Activation Service (WAS) 的功能

作者 :Thomas Deml

Windows Process Activation Service (IIS 7 的 WAS) 是提供 Web 應用程式和 Web 服務進程模型和組態功能的重要元件。 WAS 主要工作是管理應用程式集區。 應用程式集區是組態容器,代表 URL 群組的裝載環境。

當 HTTP 用戶端要求 URL HTTP.SYS將要求對應至應用程式集區要求佇列時。 WAS 會繁衍應用程式集區要求佇列的背景工作進程,而背景工作進程會執行傳送回應所需的程式碼。 WAS 的主要工作之一是管理其繁衍的背景工作進程,亦即 WAS 會監視其健康情況、在必要時加以回收,並確保它們不會耗用比對應 AppPool 組態中指定的更多資源。 WAS 也是執行時間和狀態資料的 Arbiter 和收集器,例如效能計數器、月臺和應用程式集區狀態。

架構圖表

IIS 7.0 架構

進程模型功能

支援在相同實體機器上裝載 10000 個以上的網站,是現今大量裝載環境的核心需求。 在這些網站上執行的程式碼通常完全未經過妥善測試。 為了支援這些需求,WAS 必須提供強大的進程模型和有效率的資源管理。

有效率的資源管理

隨選啟用

RAM 和 CPU 等資源在多租使用者案例中很罕見。 WAS 只會在特定網站或 Web 應用程式的要求送達後,才會啟動 IIS 背景工作進程。

閒置逾時

因為資源通常很罕見的 WAS 可以根據可設定的閒置逾時來關閉 Web 應用程式。

健康狀態監視

為了確保其健康情況 WAS 會監視其繁衍的背景工作進程。 健康情況消息會定期傳送至每個執行中的背景工作進程。 如果背景工作進程未以可設定的時間間隔回應,背景工作進程將會回收或終止。 如此一來,重新開機背景工作進程就會自動修正背景工作進程中未偵測到的死結。

啟動限制

Rapid-Fail保護功能的一部分是啟動限制。 如果背景工作進程未在可設定的啟動限制內回報回 WAS,則會終止該進程並遞增快速失敗保護計數器。 如果 Rapid-Fail-Protection 計數器在可設定的時間限制內達到可設定的限制,則不會再嘗試重新開機背景工作進程。 這可防止背景工作進程在啟動期間停止回應或當機的情況。

關機限制

背景工作進程也必須在可設定的限制中關閉。 如果此時未發生關機,則 WAS 會終止背景工作進程。 這可防止資源過度使用,因為進程在其關機階段中停止運作。 其他關機設定可讓可執行檔在 (啟動,例如當關機未在配置的時間內完成時,偵錯工具) 。

CPU 親和性

組態設定可讓 WAS 啟動與一或多個 CPU 親和化的背景工作進程。 如果租使用者共用相同的實體電腦,這可防止租使用者彼此干擾。

使用者設定檔

WAS 可以使用或不使用載入使用者設定檔來啟動背景工作進程。

安全性

應用程式集區身分識別

IIS 背景工作進程可以做為自訂帳戶、內建帳戶 (LocalService、LocalSystem、NetworkService) 或應用程式集區身分識別, (預設) 。 建議使用應用程式集區身分識別,因為它不需要密碼管理和應用程式集區身分識別已遵守最低許可權原則。 內建帳戶也不需要密碼管理。 如果使用自訂使用者身分識別,密碼會自動加密。 組態設定可以透過跨機器共用組態加密金鑰,複寫到多部電腦。

工作物件功能

工作物件可讓系統管理員將背景工作進程限制為特定的 CPU 限制。 如果超過此 CPU 限制,則會採取可設定的動作。 工作物件也會確保背景工作進程繁衍的進程會終止。

設定隔離和安全性

在 WAS 啟動應用程式集區及其背景工作進程之前,它會為此應用程式集區產生唯一的組態檔。 應用程式集區也有組態設定,以在唯一身分識別下執行應用程式集區。 不過,即使使用相同的身分識別,也可以達到隔離。 WAS 會為每個應用程式集區建立唯一的安全性識別碼 (SID) 。 然後,應用程式集區組態檔會受到這個唯一 SID 保護。 這可確保應用程式集區組態檔只能由系統管理員和應用程式集區本身讀取。 甚至可以使用這個唯一的 SID 來設定檔案許可權。

診斷和監控

事件記錄

系統事件記錄會回報有關無效設定、回收、啟動或關閉背景工作進程的事件。

目前正在執行的要求

WAS 會公開執行時間和狀態控制介面,允許腳本和工具查詢特定背景工作進程目前執行的要求。 這適用于尋找停止回應的要求,或需要很長的時間才能完成的要求。

效能計數器

所有 IIS 效能計數器都會透過 WAS 漏斗圖。 WAS 會收集這些效能計數器,因為 IIS 計數器是以網站為基礎,而且 Web 應用程式可以存在於不同的應用程式集區中。

回收中

回收可讓背景工作進程重新整理,而不會因為停機而遺失單一要求。 這是透過稱為「重迭回收」的功能來完成。

重迭回收

WAS 會藉由繁衍與仍在處理要求的舊進程平行產生新的背景工作進程來執行此動作。 當新的背景工作進程啟動之後,它會開始從要求佇列中挑選要求,而舊的背景工作進程會指示 WAS 停止挑選要求。 一旦舊的背景工作進程完成其關閉的所有執行要求。 這項功能稱為「重迭回收」。 它可確保回收期間不會遺失任何要求。

回收組態

回收參數可在 IIS 組態系統中設定。

排程回收

客戶可能會想要根據定期排程回收其應用程式。 透過組態設定回收可以定期排程,例如每 4 小時、每天上午 1 點等等。

根據記憶體耗用量回收

應用程式可能會隨著時間流失記憶體。 WAS 可以監視每個背景工作進程的記憶體耗用量,以確保沒有任何背景工作進程使用超過其預先設定的限制。 達到已設定的虛擬或私人記憶體閾值,將會觸發背景工作進程的回收。

根據要求數目回收

回收也可以根據處理的特定背景工作進程要求數目來設定。

自訂回收

自訂程式碼可以自訂健康情況統計資料,並透過對 WAS 執行時間和狀態 API 的 API 呼叫來觸發回收。

進程孤立

某些錯誤只會發生在生產環境中。 終止背景工作進程可確保執行時間,但這些錯誤的疑難排解會變得困難,例如,如果需要偵錯失敗的背景工作進程。 WAS 中的進程孤立功能可讓背景工作進程回收,而不會終止失敗的背景工作進程。 現在,偵錯工具可以附加至它。 其他進程孤立設定允許執行進程 (例如,如果發生孤立,偵錯工具) 。

應用程式集區狀態管理

應用程式集區可以停止、回收或透過公開可用的 API 啟動,例如,如果應用程式必須離線,或者必須根據與applicationhost.config檔案中可設定的參數不同進行回收。

其他 WAS 功能

Load-Balancer功能

HTTP.SYS仍會在網路上接聽,如果應用程式集區未挑選要求,則會傳回 500 HTTP 錯誤訊息。 這是問題,因為層級 5 Load Balancers (TCP/IP) 500 HTTP 錯誤看起來像有效的 TCP/IP 連線。 WAS 組態設定可讓HTTP.SYS拒絕連線,而不是傳送 HTTP 回應。

WAS 可以設定為使用下列設定來啟動背景工作進程:

WoW64 支援

WAS 可以啟動 32 位或 64 位的背景工作進程。

.NET Framework預先載入

WAS 可以設定為預先載入特定版本的 .NET Framework。 這可讓版本衝突的疑難排解變得更容易。

Web 入口網站

Web Garden 是搭配多個背景工作進程執行之應用程式集區的詞彙。 要求會使用迴圈配置資源機制在這些背景工作進程實例之間散發。

WAS 多重通訊協定支援

WAS 不只裝載 HTTP 堆疊。 它也可以透過接聽配接器和背景工作進程架構來裝載其他通訊協定。 WCF 服務會利用 WAS 多重通訊協定支援。 WCF 通訊協定隨附自己的接聽程式 (例如 NET。TCP、NET。MSMQ 或 NET。PIPE 接聽程式) 。 這些接聽程式會使用接聽程式配接器介面 WAS 提供連接到 WAS。

利用此基礎結構的應用程式通訊協定可以在與一般 ASP.NET 應用程式相同的 .NET 應用程式域中裝載自訂應用程式程式碼。 他們也可以利用 ASP.NET 裝載環境所提供的通訊協定獨立服務,例如隨選編譯、組態支援等。