از بیست سال mod_wsgi تا Muru؛ مسیر تازه Graham Dumpleton برای اجرای برنامه‌های Python

چرا مهم است

اگر برنامه Python را با mod_wsgi اجرا می‌کنی، این نوشته نشان می‌دهد چرا مدیریت process به قواعد Apache وابسته است. Muru تلاشی در حال توسعه برای رسیدگی به همین محدودیت‌ها و نیازهای میزبانی Python است.

قبل از خواندن، این‌ها را بدان۵ مفهوم
WSGI

استانداردی برای ارتباط میان برنامه وب Python و server میزبان آن است.

بیشتر درباره این مفهوم

ASGI

استاندارد ارتباط برنامه Python با server است که از الگوی async و ارتباط‌هایی مانند WebSocket پشتیبانی می‌کند.

بیشتر درباره این مفهوم

Global Interpreter Lock (GIL)

قفل موجود در برخی حالت‌های اجرای Python که اجرای هم‌زمان bytecode توسط چند thread را محدود می‌کند و بر انتخاب میان process و thread اثر می‌گذارد.

بیشتر درباره این مفهوم

نمایش همه (۵)
metrics

اندازه‌گیری‌های عددی درباره وضعیت و رفتار برنامه، مانند زمان انتظار request یا مصرف حافظه، که برای پایش و تصمیم‌گیری استفاده می‌شوند.

بیشتر درباره این مفهوم

virtual machine

محیطی نرم‌افزاری که مانند یک رایانه مستقل عمل می‌کند و می‌تواند سیستم‌عامل و برنامه‌های خودش را اجرا کند.

بیشتر درباره این مفهوم

Graham Dumpleton، سازنده mod_wsgi، در مرور بیست سال کار روی این پروژه از سیستم تازه‌ای به نام Muru گفته است. نوشتن mod_wsgi در دسامبر ۲۰۰۶ آغاز شد؛ زمانی که WSGI وجود داشت، اما راه استاندارد و جاافتاده‌ای برای میزبانی برنامه‌های مبتنی بر آن در production نبود. Apache تقریباً همه‌جا حضور داشت و mod_wsgi راهی برای استفاده از همان زیرساخت موجود فراهم کرد.

این انتخاب محدودیت‌هایی هم داشت. در daemon mode، برنامه Python در process‌هایی جدا از worker‌های Apache اجرا می‌شود، اما مدیریت چرخه عمر آن‌ها همچنان در اختیار Apache است. تعداد این process‌ها در تنظیمات تعیین می‌شود و تغییر آن به restart کردن Apache نیاز دارد. به گفته Dumpleton، تغییر ظرفیت متناسب با بار یا جایگزینی نسخه برنامه بدون اختلال در request‌های در حال اجرا، در این چارچوب دشوار بود.

Muru تلاشی برای بازنگری در همین مسئله، بدون وابستگی به Apache است. این پروژه نه module آن است و نه صرفاً یک WSGI server برای قرار گرفتن پشت ابزار دیگری. هدف، پوشش اجرای برنامه از لپ‌تاپ تا production است. Muru می‌تواند برنامه‌های WSGI و ASGI و سرویس‌های gRPC را در یک برنامه کنار هم میزبانی کند. extension‌هایی نیز برای انتقال request میان WSGI و ASGI دارد؛ مسیری برای افزودن قابلیت‌هایی مثل websockets به برنامه موجود WSGI، بدون بازنویسی آن.

بخش دیگری از طراحی به مدیریت نسخه‌های جدید، routing، گزارش سلامت و restart بدون از دست رفتن request‌ها مربوط است. Dumpleton می‌خواهد این موارد جزئی از رفتار پیش‌فرض سیستم باشند، نه مسئولیت‌هایی که هر کاربر جداگانه به آن اضافه می‌کند.

طراحی Muru همچنین ویژگی‌های Python را در نظر می‌گیرد: اثر Global Interpreter Lock (GIL) بر انتخاب process یا thread، زمان لازم برای import و آماده‌شدن برنامه و افزایش تدریجی مصرف حافظه. قرار است metrics‌هایی مانند میزان مشغول‌بودن thread‌های پاسخ‌گو و زمان انتظار request‌ها، در تصمیم‌های مربوط به ظرفیت، مدیریت process و routing نقش داشته باشند.

Muru هنوز در حال توسعه است و نویسنده فعلاً نشانی پروژه را معرفی نکرده است. او می‌گوید ابزارهای AI بخش عمده نوشتن code را بر عهده دارند و خودش بر معماری، طراحی و تعیین رفتار قابلیت‌ها تمرکز دارد. نوشته‌های بعدی قرار است توسعه محلی، deployment روی host یا virtual machine و سپس اجرای Muru در container و Kubernetes را بررسی کنند.

نکته کلیدی

Muru را فعلاً پروژه‌ای در حال توسعه در نظر بگیر، نه محصولی که آماده‌بودنش اعلام شده باشد. هنگام دنبال‌کردن معرفی‌های بعدی، به نحوه مدیریت نسخه جدید، سلامت برنامه و request‌های در حال اجرا توجه کن.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)