حسام اثناعشری
حسام اثناعشری
خواندن ۳ دقیقه·۴ سال پیش

داکر برای دات نت کار ها - قسمت 2 (وب سرور Kestrel)

Kestrel چیست؟

Kestrel یک وب سرور بسیار سبک و کراس پلتفرم هست که وظیفه داره درخواست های HTTP ارسال شده به سمت برنامه ی ASP.NET Core ما رو مدیریت و پردازش کنه.

همونطور که مطلع هستین در نسخه های قبل ASP، برای هاست کردن برنامه ها نیاز داشتیم که حتما اون رو روی وب سرور IIS قرار بدیم.

خب اینکار یک سری محدودیت ها برای ASP به وجود آورده بود؛ یکی از این محدودیت ها که اهمیت بسیاری هم داشت این بود که برنامه های ASP فقط برروی سرورهای ویندوز قابل اجرا بودن - چون IIS فقط برروی ویندوز ران میشد).

یکی دیگه از مشکلات IIS، سرعت کم نسبت به تکنولوژی های نوپا بود به همین دلیل مایکروسافت به فکر چاره افتاد و وب سرور Kestrel رو به ASP.NET Core اضافه کرد تا در کنار کراس پلتفرم بودن، سرعت اجرای برنامه ها رو نیز افزایش بده.

این افزایش سرعت باعث شد که Kestrel تنظیمات بسیار محدودتری نسبت به وب سرورهای دیگه مانند IIS ، آپاچی یا nginx داشته باشه (به عنوان مثال تنظیماتی مانند SSL Certificates در Kestrel وجود نداره).

به همین دلیل، Kestrel به تنهایی کاربرد نداره و باید در کنار اون از یک Reverse proxy server نیز استفاده کنیم تا ابتدا درخواست های HTTP رو بررسی و سپس به سمت وب سرور Kestrel ما هدایت کنه :

همونطور که در تصاویر قابل مشاهده ست، درخواست ابتدا به سمت Reverse proxy server ما که میتونه IIS یا Nginx یا Apache باشه ارسال میشه و پس از انجام عملیات های مورد نیاز اون رو به وب سرور Kestrel پاس میده تا نتیجه مورد نظر رو دریافت کنه.
وب سرور Kestrel با داکر کاملا هماهنگه و به همین دلیل برای هاست کردن برنامه ها در داکر از Kestrel استفاده میکنیم.

ویژگی های بارز Kestrel

کراس پلتفرم ( Cross platform )

اوپن سورس ( Open source )

سبک بودن ( Lightweight )

سرعت بالا ( High speed )

مدیریت درخواست ها به صورت غیرهمزمان ( Asynchronous I/O )

برای استفاده بسیار ساده است ( Very simple to use )


وب سرور Kestrel چگونه کار میکند؟

برخلاف وب سرورهای دیگه، Kestrel نیازی به نصب برروی سیستم عامل نداره و فقط یک پکیج nuget هستش که در کنار برنامه ASP.NET Core ما قرار میگیره و هنگام اجرای برنامه فعال میشه و درخواست های HTTP دریافتی رو پردازش میکنه.

این وب سرور به صورت رویداد محور ( Event-Driven ) برنامه نویسی شده؛ به این معنی که داخل یک لوپ قرار داره تا زمانی که یک درخواست به سمت اون ارسال بشه، در این زمان به اون واکنش نشون میده و اون رو پردازش میکنه، سپس نتیجه موردنظر رو return میکنه.

برای کاهش ارتباط های SYS، کارهای دیگه در Managed code برروی Worker thread های استاندارد دات نت اجرا میشن.

آموزش داکرداکر برای سی شارپداکر در asp net coreوب سرور kestrelkestrel در docker
دولوپرِ به دنبالِ سلف‌دولوپمنت!
شاید از این پست‌ها خوشتان بیاید