Kestrel क्या है (बनाम IIS / एक्सप्रेस)


158

Kestrel वेब सर्वर क्या है और यह IIS / IIS एक्सप्रेस से कैसे संबंधित है?

मैं IIS एक्सप्रेस पर ऐप विकसित करने और उन्हें IIS वेब सर्वर पर होस्ट करने से आता हूं। ASP.NET Core के साथ Microsoft.AspNetCore.Server.Kestrelमेरी निर्भरता है और मेरे स्टार्टअप में है .UseServer("Microsoft.AspNetCore.Server.Kestrel")। लेकिन जब मैं अपनी वेबसाइट चलाता हूं, तब भी मुझे सिस्टम ट्रे में IIS एक्सप्रेस आइकन मिलता है। किसी ने मुझसे पूछा कि क्या मैं IIS एक्सप्रेस या Kestrel का उपयोग कर रहा हूं और मुझे नहीं पता कि क्या कहना है!

मेरे पास कोई क्रॉस-प्लेटफ़ॉर्म आवश्यकताएं नहीं हैं जैसा कि मैं एक पीसी पर विकसित करता हूं और एज़्योर में होस्ट करता हूं, इसलिए मैं उलझन में हूं अगर मैं यहां तक ​​कि needकेस्टेल भी हूं , लेकिन ऐसा नहीं लगता है कि कोई विकल्प है - यहां तक ​​कि सबसे सरल नमूने केस्टेल का उपयोग करते हैं।


जब आपके पास इस नई तकनीक के बारे में कोई प्रश्न हो, तो प्रोजेक्ट में GitHub पृष्ठ पर शुरू करें और विचियों को देखें। आप ASP.NET रेपो के लिए इस सर्वर विकी पृष्ठ पर चलेंगे ।
मेसन

11
बेशक, फिर आप सामान की तरह भागते हैं This document is now out of date. For up-to-date ASP.NET Core documentation go to: http://docs.asp.net। उफ़।

जवाबों:


115

Kestrel क्या है

यह एक पूर्ण विकसित वेब सर्वर है। आप बस Kestrel का उपयोग करके अपने ASP.NET कोर एप्लिकेशन को चला सकते हैं।

लेकिन जब मैं अपनी वेबसाइट चलाता हूं, तब भी मुझे सिस्टम ट्रे में IIS एक्सप्रेस आइकन मिलता है

आपके ASP.NET अनुप्रयोग में, संभवतः wwwrootनिर्देशिका में, आपको एक web.config दिखाई देगा जिसमें यह शामिल है:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
    <handlers>
    <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
</system.webServer>
</configuration>

यह HttpPlatformHandler है। अनिवार्य रूप से, यह क्या करता है केस्टेल के सभी अनुरोधों को आगे बढ़ाया जाता है । IIS एक्सप्रेस (और उस मामले के लिए IIS) ASP.NET को स्वयं नहीं चलाएगा। इसके बजाय, वे प्रॉक्सी के रूप में कार्य करेंगे जो किस्टेल से आगे और पीछे केवल अनुरोधों और प्रतिक्रियाओं को पारित करते हैं। अभी भी IIS का उपयोग करने के फायदे हैं, विशेष रूप से यह आपको सुरक्षा कॉन्फ़िगरेशन, कर्नेल-स्तर कैशिंग, आदि देता है।


5
ASP.Net कोर youtu.be/e2qZvabmSvo
user99513

4
ASP.NET कोर मॉड्यूल (HttpPlatformHandler के बजाय) की शुरुआत के कारण यह उत्तर थोड़ा पुराना है। मैंने और अधिक कहानियों और संबंधित उत्पादों के साथ एक वैकल्पिक उत्तर की पेशकश की।
लेक्स ली

174

मैं कुछ इतिहास के साथ एक वैकल्पिक उत्तर देना चाहता हूं, ताकि आप समझ सकें कि केटलर क्यों आता है, भले ही आप केवल विंडोज और आईआईएस का उपयोग करें।

वर्ष 2000 से पहले ASP.NET विकास की शुरुआत में, स्पष्ट रूप से Microsoft ने ASP.NET WebForms ऐप्स की मेजबानी के लिए दो टुकड़े बनाए,

  • कैसिनी, बाद में विजुअल स्टूडियो में ASP.NET डेवलपमेंट सर्वर बन गया। यह पूरी तरह से प्रबंधित वेब सर्वर है जो C # पर आधारित है HttpListener। बेशक, चूंकि यह केवल विकास के लिए था, कई सुविधाओं को कभी भी लागू नहीं किया गया था। जैसा कि माइक्रोसॉफ्ट ने कैसिनी के स्रोत कोड को जनता के लिए उपलब्ध कराया है, तीसरे पक्ष हैं जिन्होंने कोड आधार को कांटा और अधिक सुविधाएँ जोड़ीं, जिससे कैसिनी परिवार शुरू हुआ।
  • IIS पर ASP.NET समर्थन (संशोधन 1)। क्योंकि उस समय IIS 4.0 और 5.0 / 5.1 था, जिसमें एप्लिकेशन पूल जैसा कुछ भी नहीं था, ASP.NET की अपनी कार्यकर्ता प्रक्रिया ( aspnet_wp.exe) भी है।

तो एक वेब ऐप विकसित करने के लिए, आप कैसिनी का उपयोग करते हैं, और आपको आईआईएस का उपयोग करने के लिए तैनात करते हैं।

  • IIS 6 में एप्लिकेशन पूल की शुरूआत को ASP.NET की ओर से कुछ बदलावों की आवश्यकता थी, इसलिए aspnet_wp.exeअप्रचलित हो गया और इसे बदल दिया गया aspnet_isapi.dll। इसे IIS संशोधन पर ASP.NET समर्थन के रूप में देखा जा सकता है। इसलिए ASP.NET ऐप को IIS कार्यकर्ता प्रक्रियाओं में होस्ट किया जा रहा है w3wp.exe

  • IIS 7 और इसके बाद के संस्करण में एकीकृत पाइपलाइन की शुरूआत में और परिवर्तन हुए, जो इसके aspnet_isapi.dllसाथ बदल गया webengine4.dll। इसे IIS संशोधन पर ASP.NET समर्थन के रूप में देखा जा सकता है। ASP.NET और IIS पाइपलाइन एकीकृत हैं।

आप देख सकते हैं ASP.NET बहुत अधिक जटिल और कसकर IIS के साथ एकीकृत हो गया है, इसलिए कैसिनी ने अपनी उम्र दिखाना शुरू कर दिया, और धीरे-धीरे IIS एक्सप्रेस (एक उपयोगकर्ता मोड लाइट IIS) द्वारा प्रतिस्थापित किया गया।

इस प्रकार, कई मामलों में, जब लोग दोष लगाते हैं कि IIS धीमा है, तो उन्हें वास्तव में ASP.NET को दोष देना चाहिए। ASP.NET के बिना IIS अपने आप में बहुत तेज़ और स्थिर है, जबकि ASP.NET को मन में पर्याप्त प्रदर्शन मेट्रिक्स के साथ विकसित नहीं किया गया था (जैसा कि WebForms काफी उत्पादकता और आरएडी पर केंद्रित है)।

फिर नवंबर 2014 में, ASP.NET 5 (बाद में इसका नाम बदलकर ASP.NET Core) कर दिया गया और यह क्रॉस प्लेटफॉर्म तकनीक बन गया। जाहिर है कि Microsoft को Windows, macOS और Linux को समर्थन देने के लिए एक नए डिज़ाइन की आवश्यकता थी, जहाँ IIS के अलावा सभी प्रमुख वेब सर्वर, nginx / Apache (या अन्य वेब सर्वर) पर विचार किया जाना चाहिए।

मुझे लगता है कि कई इस बात से सहमत होंगे कि माइक्रोसॉफ्ट ने NodeJS से काफी कुछ सीखा है, और फिर Kestrel को डिज़ाइन किया और विकसित किया है ( libuvशुरू में आधारित है लेकिन जल्द ही अन्य तकनीक में स्थानांतरित हो सकता है)। यह शुरुआत में कैसिनी की तरह एक हल्के वजन वाला वेब सर्वर है, लेकिन बाद में इसमें और फीचर जोड़े जा रहे हैं (जैसे एक अन्य उत्तर में टिप्पणी की गई, बहुत अधिक सुविधाओं को पूर्ण वेब सर्वर के रूप में माना जा सकता है)। हालांकि पूरी तरह से प्रबंधित (कुछ देशी निर्भरताएं मौजूद हैं), यह अब कैसिनी की तरह एक खिलौना वेब सर्वर नहीं है।

तो फिर आप सिर्फ Kestrel का उपयोग क्यों नहीं कर सकते? IIS एक्सप्रेस और संभावित IIS, nginx या Apache अभी भी क्यों आवश्यक है? यह मुख्य रूप से आज के इंटरनेट अभ्यास का एक परिणाम है। अधिकांश वेब साइटें अपने वेब ब्राउज़र से अनुरोधों को लेने के लिए रिवर्स प्रोक्सीज़ का उपयोग करती हैं और फिर बैकग्राउंड में एप्लिकेशन सर्वरों पर अग्रेषित करती हैं।

  • IIS एक्सप्रेस / IIS / nginx / Apache रिवर्स प्रॉक्सी सर्वर हैं
  • Kestrel / NodeJS / Tomcat और इतने पर अनुप्रयोग सर्वर हैं

एक अन्य उत्तर में पहले से ही Microsoft दस्तावेज़ का लिंक दिखाया गया है, ताकि आप देख सकें।

Microsoft ने शुरू में HttpPlatformHandler को विकसित किया ताकि IIS को Java / Python के लिए एक अच्छा रिवर्स प्रॉक्सी बनाया जा सके और इसलिए ASP.NET कोर के लिए इसका उपयोग करने की योजना बनाई। विकास के दौरान मुद्दे दिखाई देने लगे, इसलिए बाद में Microsoft ने ASP.NET Core मॉड्यूल को विशेष रूप से ASP.NET कोर के लिए बनाया। कि IIS संशोधन 4 पर ASP.NET का समर्थन है।

ASP.NET Core 2.2 से शुरू, IIS के लिए ASP.NET कोर मॉड्यूल (संस्करण 2) IIS कार्यकर्ता प्रक्रिया ( w3wp.exe) के अंदर .NET कोर वातावरण की मेजबानी कर सकता है , काफी हद तक ASP.NET 2.x / 4.x के समान है। इस मोड को "IIS इन-प्रोसेस होस्टिंग" कहा जाता है । इसे IIS संशोधन 5 पर ASP.NET समर्थन के रूप में माना जा सकता है।

खैर, काफी लंबा है, लेकिन मुझे आशा है कि मैंने सभी आवश्यक टुकड़ों को एक साथ रखा है और आप इसे पढ़ने का आनंद लेते हैं।


1
अच्छा उत्तर। लेकिन आप बस यह नहीं कह सकते कि IIS के साथ kestrel का उपयोग करना 'आज के इंटरनेट अभ्यास का परिणाम है'। रिवर्स प्रॉक्सी का उपयोग करने के कई तर्क हैं। यहाँ कुछ उल्लेख करना अच्छा होता।
नीलय विश्वकर्मा

13
"रिवर्स प्रॉक्सी का उपयोग करने के कई तर्क हैं" अपने प्रश्न और उत्तर के अंतर्गत आता है। आमतौर पर लोग Google से पूछकर अच्छे संसाधन खोज सकते हैं, इसलिए मैंने उसे पहले से ही लंबे समय तक पर्याप्त जवाब नहीं दिया।
लेक्स ली

12

Ms docs से: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

Kestrel ASP.NET Core के लिए एक क्रॉस-प्लेटफ़ॉर्म वेब सर्वर है, जो लिब्यू, एक क्रॉस-प्लेटफॉर्म अतुल्यकालिक I / O लाइब्रेरी पर आधारित है। Kestrel ASP.NET कोर प्रोजेक्ट टेम्प्लेट में डिफ़ॉल्ट रूप से शामिल किया जाने वाला वेब सर्वर है।

आप Kestrel का उपयोग स्वयं या रिवर्स प्रॉक्सी सर्वर, जैसे IIS, Nginx, या Apache के साथ कर सकते हैं। एक रिवर्स प्रॉक्सी सर्वर इंटरनेट से HTTP रिक्वेस्ट प्राप्त करता है और कुछ प्रारंभिक हैंडलिंग के बाद उन्हें Kestrel को फॉरवर्ड करता है।


अद्यतन: .net कोर 2.1, Kestrel libv के बजाय प्रबंधित सॉकेट का उपयोग करता है

Asp.net कोर 2.1 डॉक्स से: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration

ASP.NET Core 2.1 की रिलीज़ के साथ, Kestrel का डिफ़ॉल्ट परिवहन अब Libuv पर आधारित नहीं है, बल्कि प्रबंधित सॉकेट्स पर आधारित है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.