حمزه قائم پناه
حمزه قائم پناه
خواندن ۳ دقیقه·۱ سال پیش

استقرار جنگو - Django Deployment

جنگو، یک فریمورک وب هست، پس نیاز به وب‌سرور برای عمل کردن داره و چون اکثر وب‌سرورها به طور نیتیو پایتون نمی‌فهمن، ما نیاز به یک رابط برای ارتباط نیاز داریم.

استقرار

جنگو در حال حاضر دو رابط رو پشتیبانی می‌کنه:

  • رابط WSGI - web server gateway interface: که استاندارد پایتون برای ارتباط بین وب‌سرور و برنامه‌است. اما فقط کد synchronous رو پشتیبانی می‌کنه. - Gunicorn - Green Unicorn: کار باهاش ساده‌است، از چندین پردازش ورکر پشتیبانی می‌کنه. - uWSGI: پیچیده‌تره و از تنظیمات و کانفیگ‌های مختلفی پشتیبانی می‌کنه و با وب‌سرورهای مختلفی میشه استفاده‌اش کرد.
  • رابط ASGI - Asynchronous Server Gateway Interface: استاندارد جدید asynchronous-friendly هست که به سایت جنگویی امکان استفاده از امکانات غیرهمزمان پایتون و جنگویی که پیاده شده رو میده. موقع استفاده از وب‌سوکت از این رابط‌ها استفاده می‌کنیم. - Daphne: به طور خاص برای اپ جنگو طراحی شده و اگر از channel ها در جنگو استفاده می‌کنین انتخاب مناسبیه. - Hypercorn: - Uvicorn: معمولا با FastAPI استفاده میشه.

شما باید همینطور در نظر بگیرین که چطور فایل‌های static برنامه رو می‌خواین دپلوی کنین و همینطور چطور می‌خواین error reporting رو مدیریت کنین.

مدیریت همزمانی - Concurrency - در وب سرورها:

رویکرد Eventlet

در واقع Eventlet یک concurrent networking library پایتون هست که از coroutines و greenlets برای دستیابی به همزمانی استفاده می‌کنه. این امکان رو میده که عملیات‌های non-blocking I/O در محیط single-threaded اجرا بشن. درواقع امکان اجرای تعداد زیادی کانکشن به طور همزمان بدون نیاز به multi-threading یا multi-processing رو ایجاد می‌کنه. بر اساس مدل event-driven هست. انتخاب مناسب برای برنامه‌هایی که نیازمند همزمانی بالا و کارایی در هندل کردن تعداد زیادی کانکشن هستن اما از پیچیدگی multi-threading یا multi-processing اجتناب می‌خوایم بکنیم.

رویکرد Pre-forking

این رویکرد شامل ایجاد چندین پروسس قبل از نیاز بهشون برای هندل کردن ریکوئست‌های ورودی میشه. هر پروسس یک نسخه از کد برنامه و منابع برای خودش داره و مستقل عمل می‌کنه. درخواست‌ها بین پروسس‌های در دسترس تقسیم می‌شن و امکان هندل کردن همزمان چندین کانکشن رو ایجاد می‌کنن. ریسک shared state issues وجود نداره، چون هر کدوم منابع مستقل خودشون رو دارن.

رویکرد Multi-threading

در این رویکرد هر کانکشن و درخواست توسط یک thread مجزا هندل میشه. ترد ها به صورت همزمان در یک پروسس اجرا میشن. GIL می‌تونه محدودیت تسک‌های CPU-bound باشه و اما برای تسک‌های I/O-bound کمتر مشکل ایجاد می‌کنه.

رویکرد Multi-processing

مشابه pre-forking، شامل ایجاد چندین پروسس و هندل کردن به طور همزمان کانکشن‌هاست.

رویکرد Asyncio

یک کتابخونه پایتون برای نوشتن کد single-threaded concurrent بوسیله coroutines, tasks, and event loops هست. یک چارجوب برنامه نویسی غیرهمزمان میده که اجازه هندل کردن تسک‌های I/O-bound رو بدون استفاده از threads یا processes رو میده.

رویکرد Thread Pooling

بجای ایجاد یک thread جدید برای هر کانکشن، یک استخر با سایز مشخص از thread ها نگهداری میشه تا درخواست‌های ورودی رو هندل کنن. با این روش سربار ایجاد تعداد زیاد thread برداشته میشه.

رویکرد Coroutine Libraries (e.g., Trio, Curio)

مشابه asyncio، این کتابخونه‌ها ابزارهایی برای نوشتن asynchronous و concurrent کد بوسیله coroutines در اختیارمون میذارن.

برنامه نویسیdjangoاستقرار
مهندس نرم‌افزار و عاشق توسعه فردی - مهندس نرم‌افزار - اکس هم بنیان‌گذار و مدیرفنی و پرداکت استارتاپ کشمون
شاید از این پست‌ها خوشتان بیاید