Application Warmup and Preloading

Application Warmup and Preloading – जैसाकि हमने पहले भी बताया कि एक ASP.NET Application हमेंशा IIS Application Pool में Hosted रहता है और IIS Worker Process के द्वारा एक Instance द्वारा Run होता हैं। Application Pool हमेंशा उस समय Start होता है जब इसमें Hosted Applications पर पहला Request पहुंचता है।

चूंकि Application Pool के Startup होने में कुछ समय लगता है, क्योंकि Application पर First Request आने पर उस Requested Page को ASP.NET Web Server Compile करता है, साथ ही Requested Page के Initialization में भी कुछ समय लगता है। इसके अलावा Application Pool Recycle भी होता है और कई बार पूरे IIS Machine को Reboot होना पडता है। इसलिए Application Pool के पूरी तरह से Start होने में लगने वाला कुल समय विभिन्न इन सभी के योग के बराबर होता है।

IIS 7.5 में एक IIS Application Warm-up Module होता है, जिसे IIS 7 में एक Extension की तरह Install किया जा सकता है। ये Module Application Pool से सम्बंधित किसी भी प्रकार के Initialization को Background में Perform करता है, ताकि User को उसकी Request Fulfill होने में Extra Delay होने का अहसास कम से कम हो।

यानी Warm-up Module का मुख्‍य प्रभाव User Experience को Improve करने से सम्बंधित होता है, जबकि Request के Fulfill होने के लिए जितने काम IIS Web Server को इस Module की अनुपस्थिति में करने पडते हैं, उतने ही काम इसकी उपस्थिति में भी करने पडते हैं।

Behavior of Application Pool Warm-up Module

जब हम हमारे Application Pool पर Warm-up Feature को Apply करते हैं, इस प्रकार से Application Pool को Configure करने पर पूरे IIS Publishing Service के Restart होने व केवल Process के Recycle होने के बीच अन्तर होता है।

IIS Service के Restart होने की स्थिति में जो भी Application Pool Warm-up के लिए Configure किया गया होता है, वे सभी First Request के आने का Wait किए बिना तुरन्त Start हो जाते हैं, जो कि Warm-up Module की अनुपस्थिति की स्थिति होती है।

लेकिन जब Warm-up Module को Enabled रखा जाता है, तब IIS Web Server, Worker Process की Recycling को अलग तरीके से Handle करता है। जहां सामान्‍यत: Recycling के अन्तर्गत Worker Process के Current Instance को पूरी तरह से Kill करके नया Worker Process Start किया जाता है।

इस सम्पूर्ण Process के दौरान IIS अपना काम जारी रखते हुए User द्वारा आने वाली विभ्भिन्‍न Requests को Accept करता रहता है, हालांकि इन Requests की Processing में थोडा Delay होता है। Warm-up Module के Enabled रहने पर दो Operations बिल्कुल Reverse Order में Perform होते हैं पहला नया Worker Process Start होता है और दूसरा पुराना Worker Process Kill होता है।

जब नया Process Up and Running होता है, ये IIS को Notify करता है कि वह Requests Accept करने के लिए तैयार है। इस Point पर IIS पुराने Worker Process को Shutdown करता है और Recycle को इस प्रकार से Complete करता है, ताकि User को किसी प्रकार की परेशानी न हो।

Setting Up the Application Pool

किसी Application Pool को Warm-up के लिए Configure करने के लिए हमें applicationHost.config File को Edit करना होता है, जो कि IIS Directory में Exist होता है। इस Directory का नाम “\intesrv\config” होता है जो कि “\Windows\System32” Folder में Exist होता है।

हमें हमारे Application Pool Entry के startMode Attribute की Value को OnDemand से AlwaysRunning Set करना होता है। यानी हमें इस applicationHost.config File में निम्न Configuration Codes लिखने होते हैं:

<applicationPools>
<add
		name="MyAppWorkerProcess"
		managedRuntimeVersion="v4.0"
		startMode="AlwaysRunning"
	/>
</applicationPools>

जबकि हम इसी Setting को अपने IIS Manager के User Interface द्वारा निम्न चित्रानुसार ज्यादा आसानी से Configure कर सकते हैं:

Application Warmup and Preloading - Hindi

चूंकि एक Application Pool कई ASP.NET Web Applications को Host कर सकता है, इसलिए हमें ये भी Specify करना जरूरी होता है कि हम किस Web Application को Warm-up करना चाहते हैं और ये जरूरत पूरी करने के लिए हम हमारे applicationHost.config File में निम्नानुसार Configuration Settings Specify कर सकते हैं:

<sites>
	<sitename="YourApp"serverAutoStart="true"...>
	...
</sites>

Warm-up को Host Level पर Configure किया जाता है, Application Level पर नहीं। इसीलिए हमें इन Changes को applicationHost.config File में करना होता है न कि Web.config File में। यानी इसका मतलब ये है कि या तो Administrator अथवा Hosting Provider ही Application Warm-up Policies को Decide करता है और एक Web Developer के रूप में हम इसे तय नहीं कर सकते।

Specifying the Warm-up Code

पिछले Section में हमने Warm-up के लिए Application Pool को Configure किया, लेकिन हमने इस बात को Discuss नहीं किया कि Application Warm-Up के लिए हमें किन Actions को Perform करना चाहिए। IIS Level पर अपने Application को Warm-up के लिए Indicate करने हेतु हमें हमारे Application के केवल उन URL कोSpecify करना होता है, जो Warm-up Codes को Run करते हैं।

IIS Manager हमें Warm-up Applet के रूप में जो Dialog Box Provide करता है, उसमें हम उस Page का URL Enter करते हैं, जो कि Preloading Codes Execute करते हैं। साथ ही हम उन Acceptable HTTP Status Codes को भी Indicate करते हैं, जो Operation के Success को Indicate करते हैं। ये Approach IIS 7 व IIS 7.5 दोनों में समान रूप से काम करता है।

हालांकि हम IIS 7.5 में Autostart Service Provider को Define कर सकते हैं, जिसे Managed Component के नाम से जाना जाता है, जो कि हमारे Specified Application के लिए जरूरी Preloading Code को Run करता है। इस प्रकार का Provider IIS Configuration में निम्नानुसार एक Configuration Section के माध्‍यम से Register होता है:

<serviceAutoStartProviders>
<addname="MyPreloader"type="Samples.MyPreloader, MyWebApp" />
  ...
</serviceAutoStartProviders>

इस Aspect को Configure करने का कोई Visual Interface नहीं होता। इसलिए इस Configuration को Perform करने के लिए हम Configuration File को IIS Manager के Generic Configuration Editor का प्रयोग करते हुए Manually Edit करते हैं।

जब एक बार हम विभिन्न Autostart Providers को Register कर लेते हैं, उसके बाद हम किसी Particular Application को निम्नानुसार Configuration Code द्वारा Pick कर सकते हैं:

<sites>
<sitename="YourApp"serverAutoStart="true">
<applicationserviceAutoStartProvider ="MyPreloader"... />
  ...
</sites>

autostart Provider एक Class है जिसे उस Initialization या Cache-Loading Logic को Execute करने के लिए Design किया गया है जिसे हम Requests को Receive व Process करने से पहले Run करना चाहते हैं। जैसे:

using System.Web.Hosting;
publicclassMyPreloader : IProcessHostPreloadClient
{
    publicvoid Preload(String[] parameters)
    {
        // Perform initialization here...
    }
}

जब Autostart Provider पर Preload Method Return होता है, IIS, हमारे Application को Requests Accept करने के लिए Setup कर देता है। यदि Preload Method कोई Unhandled Exception Throw करता है, तो Worker Process Shutdown हो जाता है और पूरा Warm-Up Feature Fail हो जाता है। परिणामस्वरूप Default Scenario के आधार पर Worker Process, अगली Request के Perform होने पर OnDemand Activate होता है।

फिर भी यदि Preload बार-बार Fail हो, तो किसी Specific Point पर IIS Web Server इस प्रकार के Application को Broken Application की तरह Mark कर देता है  तथा थोडी देर के लिए इस प्रकार के Application को Stopped State में Place कर देता है। विभिन्न प्रकार के Configuration से सम्बंधित अधिक Detailed जानकारी प्राप्त करने के लिए हम http://www.iis.net/ConfigReference Webpage को देख सकते हैं।

Warm-up Feature एक ऐसा IIS Feature है जबकि Autostart Providers ASP.NET 4 Extension है, जिसे किसी भी प्रकार के Web Application (WebForms/MVC/Web Pages) के लिए Setup किया जा सकता है। इतना ही नहीं, इसे IIS के अन्तर्गत Run होने वाली Windows Communication Foundation (WCF) Services के लिए भी समान प्रकार से Configure किया जा सकता है।

Configuring IIS for ASP.NET Applications
ASP.NET Application Architecture

Core ASP.NET WebForms in Hindi - BccFalna.com: TechTalks in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Core ASP.NET WebForms with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

Core ASP.NET WebForms in Hindi | Page:647 | Format: PDF

BUY NOW GET DEMO REVIEWS