چرا نباید هر کاری داخل Request انجام شود؟
فرض کنید بعد از ثبت سفارش باید ایمیل ارسال شود، فایل پردازش شود و یک گزارش هم تولید شود. اگر همه این کارها داخل همان درخواست HTTP اجرا شوند، کاربر باید تا پایان همه مراحل منتظر بماند. اینجا پردازش پسزمینه وارد میشود.
Celery چه کاری انجام میدهد؟
Celery یک سیستم اجرای task در پسزمینه است. برنامه Django میتواند یک task را در صف قرار دهد و worker آن را مستقل از درخواست کاربر اجرا کند. این الگو برای ارسال ایمیل، تولید گزارش، پردازش تصاویر، همگامسازی داده و کارهای زمانبر کاربرد دارد.
Redis چه نقشی دارد؟
Redis میتواند بهعنوان broker پیام بین برنامه و worker استفاده شود و در بعضی معماریها برای cache یا ذخیره موقت داده هم به کار رود. در محیط production باید برای پایداری، مانیتورینگ و سیاست نگهداری داده آن برنامهریزی شود.
یک task خوب چه ویژگیهایی دارد؟
- قابل تکرار یا تا حد ممکن idempotent باشد.
- خطاها و retryها را به شکل کنترلشده مدیریت کند.
- ورودی کوچک و مشخص داشته باشد.
- لاگ و وضعیت اجرای آن قابل پیگیری باشد.
چه زمانی از صف پردازش استفاده کنیم؟
هر کاری که برای پاسخ فوری کاربر ضروری نیست و زمان قابلتوجهی میگیرد، کاندید خوبی برای background task است. اما نباید بیدلیل همه عملیات را asynchronous کرد؛ پیچیدگی معماری باید با نیاز واقعی متناسب باشد.
جمعبندی
Django، Celery و Redis ترکیب قدرتمندی برای نرمافزارهایی هستند که کارهای پسزمینه، اعلانها، گزارشها یا پردازشهای زمانبر دارند. جداسازی این وظایف باعث میشود مسیر درخواست اصلی سبکتر و رفتار سیستم در زمان افزایش بار قابلکنترلتر باشد.