فاکتور نهم: Disposability
فاکتور نهم در 12-Factor App بر قابلیت حذف و جایگزینی سریع فرآیندها تمرکز دارد. فرآیندهای اپلیکیشن باید disposable باشند، یعنی بتوان آنها را به سرعت متوقف یا اجرا کرد. این ویژگی به مقیاسپذیری سریع، انتشار سریع تغییرات کد یا پیکربندی، و پایداری deployهای production کمک میکند.

شروع سریع فرآیند (Fast Startup)
فرآیندها باید حداقل زمان شروع را داشته باشند. ایدهآل این است که از اجرای دستور launch تا آماده شدن فرآیند برای دریافت درخواستها یا jobها تنها چند ثانیه طول بکشد. زمان شروع کوتاه باعث افزایش انعطافپذیری در release و مقیاسپذیری و همچنین پایداری بیشتر اپلیکیشن میشود.
خاموشی آرام (Graceful Shutdown)
هنگام دریافت سیگنال SIGTERM از Process Manager، فرآیندها باید به صورت graceful shutdown متوقف شوند:
- Web Process: ابتدا از گوش دادن به پورت سرویس دست میکشد، اجازه میدهد درخواستهای جاری تکمیل شوند و سپس خارج میشود. این مدل فرض میکند که درخواستهای HTTP کوتاه هستند یا در صورت long polling، کلاینت به صورت خودکار مجدداً متصل میشود.
- Worker Process: job جاری را به صف بازمیگرداند. برای مثال:
- در RabbitMQ، worker میتواند NACK ارسال کند.
- در Beanstalkd، job به صورت خودکار به صف بازمیگردد.
- در سیستمهای مبتنی بر Lock مانند Delayed Job، قفل job آزاد میشود.
پایداری در مواجهه با خرابی ناگهانی
فرآیندها باید در برابر توقف ناگهانی یا خرابی سختافزاری مقاوم باشند. اگرچه این اتفاق کمتر رخ میدهد، اما میتواند باعث توقف غیرمنتظره فرآیندها شود. استفاده از backends robust مانند Beanstalkd که jobها را در صورت قطع ارتباط یا timeout به صف بازمیگردانند، توصیه میشود.
طراحی اپلیکیشن به گونهای است که بتواند توقفهای غیرمنتظره و crash-only را مدیریت کند و پایداری و مقیاسپذیری را در محیط production حفظ کند.
نمونه عملی
تصور کنید یک worker اپلیکیشن در حال پردازش سفارشها است. اگر سرور به هر دلیلی خاموش شود، job در حال پردازش باید به صف بازگردد تا توسط worker دیگری انجام شود. این کار تضمین میکند که هیچ دادهای از بین نرود و فرآیندها به سرعت قابل جایگزینی و مقیاسپذیر باقی بمانند.