Questo articolo rappresenta uno sguardo d'insieme su una delle più importanti innovazioni introdotte con l'arrivo di IIS6: l'isolamento dei processi. Questa caratteristica permette la creazione di applicazioni web autosufficienti che consentono di assicurare stabilità ed affidabilità al nostro web server e, di conseguenza, ai siti e alle applicazioni ospitate da esso.
Web Admin Service
Il "Web Administration Service" (WAS) è una novità introdotta da IIS6 e consiste in un servizio che costantemente tiene sotto controllo lo stato di "salute" (health) delle applicazioni web presenti su un determinato server. Il livello secondo il quale un'applicazione viene definita "salutare" può essere modificato a piacimento tramite alcuni parametri che vedremo in seguito.
Il WAS possiede una lista delle applicazioni in stato "running" su IIS6 e, periodicamente, le passa in rassegna singolarmente, confrontando il loro stato con una serie di valori che esso stesso preleva dal file "metabase.xml" e determinando quindi se il loro stato sia nella norma o meno. In quest'ultimo caso verranno intraprese alcune azioni impostabili a discrezione dell'amministratore.
Worker processes
IIS6 consente all'amministratore la creazione di un numero potenzialmente illimitato di Application Pool che, a loro volta, possono ospitare altrettanti siti web al loro interno. In ogni caso, un pool di default viene creato contemporaneamente all'installazione di IIS6: esso conterrà tutti siti che non verranno assegnati a specifici pool.
Ciascuno di questi pool è servito da un processo che in gergo è definito come "W3WP" (World Wide Web Worker Process). Per ogni pool al quale perverrà una richiesta da IIS6, verrà generata una nuova istanza del file W3WP.EXE. Il WAS si occupa, precisamente, del monitoring di queste diverse istanze.
Parametri HEALTH
Quando un nuovo pool viene creato, diversi parametri di salute possono essere definiti per esso sia al tempo stesso della sua creazione che in un momento successivo. Tutti questi parametri vengono memorizzati nella metabase e sono interrogati dal WAS ad ogni suo ciclo. I parametri includono, a titolo di esempio, voci simili alle seguenti:
- Tempo trascorso dal primo avvio del worker process
- Numero di richieste elaborate
- Quantità di CPU utilizzata
Ciascuno dei parametri precedenti può essere personalizzato e azioni quali lo stop o il riciclo (il quale altro non è se non una banale cancellazione dell'istanza corrente, con il conseguente avvio di una nuova) possono essere programmate per venire eseguite qualora se ne verifichi l'occorrenza.
Supponiamo di avere un pool configurato per autoriciclarsi nel caso si raggiungano i 100 mb di memoria virtuale utilizzata. Proviamo a vedere cosa avviene all'interno del web server nel momento in cui viene ricevuta un'ulteriore richiesta che comporterebbe il sorpasso di questa soglia:
- IIS6 controlla come prima cosa se un processo assegnato allo stesso pool che ha ricevuto la richiesta sia già esistente. In caso affermativo la stessa richiesta viene passata all'istanza individuata.
- In caso contrario, viene avviata una nuova istanza del file W3WP.EXE e la viene richiesta inoltrata a quest'ultimo.
- Supponiamo ora che una specifica richiesta porti l'applicazione attiva in questo pool a comportarsi in modo diverso dal normale: ciò significa che l'applicazione potrebbe crashare da un momento all'altro o, quantomeno, consumare molte più risorse di quante effettivamente necessiterebbe (questo è il caso che stiamo per analizzare).
- Poniamo inoltre la condizione che si abbia il WAS impostato per effettuare un controllo ogni 30 secondi.
- Quando WAS passa in rassegna questo processo noterà una differenza tra i parametri riscontrati (valore di risorse impegnate molto alto, oltre i 100 mb) durante il controllo e quelli impostati nella metabase. Immediatamente verrà avviato un nuovo processo di W3WP.EXE e si innescherà un meccanismo per cui tutte le richieste al processo "malato" verranno redirette presso la nuova istanza.
- Nel momento in cui il processo "malato" verrà svuotato completamente, IIS6 provvederà ad eliminarlo (l'intero processo viene definito "riciclaggio").
L'amministratore può inoltre impostare un controllo sul numero di ricicli avvenuti in un determinato lasso di tempo. Se questo numero dovesse essere piuttosto alto, ci si troverebbe probabilmente di fronte ad un errore di programmazione nella web application. A questo punto l'amministratore potrebbe ragionevolmente stabilire di bloccare l'avvio di nuovi processi di riciclo, interrompendo di fatto l'esecuzione dell'applicazione stessa. Un'ulteriore opzione presente è quella relativa al possibile invio di una notifica all'amministratore stesso.
Configurare un pool
Per creare un nuovo application pool è necessario innanzitutto creare una nuova cartella sotto il livello "root" del web server (di default è c:inetpubwwwroot), quindi accedere alla consolle di IIS. Qui, selezionare la voce "Application pools" dal pannello di sinistra e selezionare l'aggiunta di un nuovo pool. Inserire un nome significativo per il pool, evitando banalità classiche quali "MioPool" o "AppPool"; selezionare quindi le proprietà del pool appena creato dal menù a tendina che appare con un click destro. In questo modo sarà possibile impostare i vari parametri di HEALTH del vostro pool. Consiglio di giocare con questi parametri al fine di comprendere il vero funzionamento di ciascuno.
Infine, per aggiungere un'applicazione al pool, cliccare sempre col tasto destro una web directory e aprirne le proprietà: cliccando su "Create" si avrà la possibilità di trasformare quest'ultima in una web application e, quindi, di assegnarla ad un pool. Da questo momento in poi essa erediterà tutti i parametri di HEALTH dal pool di riferimento.