IIS7 Application Warm-Up moodul
21.01.2010 | Gunnar
Eile toimunud ASP.NET 4.0 ettekandel sai põgusalt vaadatud sellist asja nagu application warm-up. Tutvustasin selle käigus ka IIS-i vastavat moodulit, mille abil saab initsialiseerida suvalisi rakendusi, mis IIS-i all töötavad. Neile, kes tulla ei saanud, pakun seekord lohutuseks välja kande, mis toda IIS-i moodulit pisut lähemalt tutvustab.
| Materjalid | |
|---|---|
| Presentatsioon | |
| Lähtekood | |
Application warm-up tähendab antud juhul seda, et enne kui veebirakendusele külastajad brauseritega kallale saavad, teeb rakendus ära vajaliku eeltöö. Eeltöö võib olla näiteks eelmise jooksutamise ajast jäänud ajutiste failide kustutamine, uute andmete lugemine teenuste tagant, uuenduse allalaadimine või mõni muu rakenduse seisukohalt oluline tegemine.
Kuigi ettekande teemaks oli ASP.NET, on tegemist küllaltki universaalse mooduliga. Et mooduli universaalsus paremini näha oleks, siis paneme IIS7 peale lisaks mõnele veebirakendusele jooksma ka PHP. Kellel PHP veel IIS7 peale installitud pole, siis küllaltki hea juhendi pealkirjaga Using FastCGI to Host PHP Applications on IIS 7.0 pakub välja IIS7 kodukas.
Enne kui edasi liigud installeeri Application Warm-Up moodul. Järgmiseks pusime veidike IIS kallal ja loome paar testimisrakendust. Seejärel registreerime warm-up skriptid ära.
Rakenduste loomine
- Loo IIS7 alla kaks aplikatsiooni: üks ASP.NET ja teine PHP jaoks.
- Loo Visual Studio peal ASP.NET veebirakendus, mis sisaldab kataloogis warmup faili start.aspx.
- Start.aspx laadimisel käivitub järgmine kood.
protected void Page_Load(object sender, EventArgs e)
{
using(FileStream file = File.Open(Server.MapPath("~/warmup/start.txt"), FileMode.CreateNew))
using (var writer = new StreamWriter(file))
{
writer.WriteLine(DateTime.Now);
}
} - Kompileeri rakendus ja paigalda see ASP.NET aplikatsiooni jaoks loodud kataloogi.
- Loo PHP rakenduse jaoks mõeldud kataloogi alamkataloog warmup ning lisa sinna fail start.php.
- start.php sisu on järgmine.
<?php
$fp = fopen("start.txt","w");
fwrite($fp, date('d.m.Y H:i:s', time()));
fclose($fp);?>
- Salvesta fail ja sulge see.
Warm-up skriptide registreerimine
- Ava PHP kataloog ning kliki Application Warm-Up ikoonil.
- Kliki Actions paneelil linki Settings. Avaneb määrangute dialoog.
- Märgi linnuke mõlemasse kasti ja vajuta OK.
- Kliki Actions paneelil linki Add Request.
- Kirjuta URL-i kasti startimisel käivitatava PHP skripti asukoht ja vajuta OK.
- Tee analoogsed sammud läbi ka ASP.NET rakendusega.
Nüüd on kõik vajalik proovimiseks valmis. Kui kardad, et võib tekkida probleeme, siis võid avada näiteks Event Vieweri, kuhu rakenduste startimisel tekkivad probleemid raporteeritakse.
Proovimine
Järgnev katse on küll primitiivne ja mitte just parimate killast, sest rakenduste kataloogidesse peavad skriptid saama faile luua. Katse sooritamiseks lase cmd käima administraatori õigustes ja lase käima selline käsk nagu iisreset.
Kui IIS7 jälle starditud on, siis kontrolli katalooge. Katse õnnestumise korral tekkis mõlemasse fail, kus sees on skripti käivitamise kuupäev ja kellaaeg.
Lõpetuseks
Keskkondades, kus kasutajad warm-up toega rakendusi saavad käivitada, tuleb need kataloogid ära kaitsta, et väljaspoolt pöördumisi teha ei saaks. Pöördumised warm-up skriptide kataloogidesse peavad olema lubatud serverist, kus IIS7 jookseb – vastasel korral ei saa Application Warm-Up moodul omi pöördumisi neile skriptidele teha.
Application Warm-up moodul on hea lahendus praktiliselt kõikidele startimise eelset initsialiseerimist vajavatele veebirakendustele ükskõik, mis keeles või millise skriptimootori otsas need ka lahendatud pole. ASP.NET 4.0 pakub välja ka alternatiivse lähenemise, millega saab tutvuda seminari lähtekoodi uurides.

27.02.2010 kell 20:07
Huvitav IIS -i moodul ja päris elus täitsa vajalik. Tihti mõeldakse välja imelikke lahendusi, et oma IIS -i rakendus igal esmaspäeva hommikul jooksma tõmmata enne kui kliendid peale lähevad, sest ASP.NET -i rakendustel on väike jõudlusnihe esimesel (esimestel) kasutajal (kasutajatel), kui rakendus käima läheb või lehti kompileeritakse.
28.02.2010 kell 14:47
Selle esmakäivituse jooksul tehakse keerukamates rakendustes ära veel terve hulk igasuguste jubinate initsialiseerimist ja vanade andmete puhastamist jne, mis pikendab rakenduse ärkamise aega veel olulisel määral.