ما یک وب سرویس ساده داریم که کاربر یک چیزی را پست می کند به آن و اطلاعاتی بازگشت داده می شود . سوال اصلی من در این رابطه این است که :
آیا ما باید هر درخواست از کاربر را در یک پروسز ببریم ؟
اگر نبریم ممکن است این درخواست ۱۰ ثانیه طول بکشد به کاربر اول برگشت داده شود و همین مشکل پشت به پشت برای کاربران در لیست اتفاق می افتد برای حل این مشکل تا چه حد می توانیم از پروسز ها استفاده کنیم ؟
آیا در کل وب سرویسی که چنین موردی را بازگشت می دهد بدون پروسز باید نوشته شود یا خیر؟ ( هر درخواست در یک تسک یا یک پروسز جدید )
Task دقیقا چنین استفاده ای داره
۱۰ ثانیه خیلی زیاده برای web request و Task این مترو در پروسه جدا در background انجام میده
در هر برنامه ارلنگ میتونی میلیون ها پروسه داشته باشی
از task supervisor هم برای رفع نقص بهره بگیر
Exq , Verk , Toniq هم کتابخانه background job هستند که شبیه sidekiq کارمیکنند
درود دلیل استفاده نکردن از spawn وجود abstraction های بالا تر و قویتر OTP هستش که کاربا process آسون میکنن
در آموزش ها spawn و توضیح میدن برای درک کامل process ها ولی هیچکسی در برنامه واقعی ازشون استفاده مستقیم نمیکنه
از ساختار OTP استفاده میکنن که بشه در supervision tree بگذاریش
میتونی از exq هم استفاده کنی ولی تسک بیشتر در elixir بکار میره
یک سوال برام پیش اومده . شما از کتابخونه استفاده می کنید یا تسک در خود الکسیر. به عنوان مثال که در پست اول گفتم
۳۰ نفر ممکنه در یک ثانیه درخواست اطلاعات بدند که ممکنه هر کدوم سر جمع یک ثانیه طول بشه و نفر سوم ۲۹ ثانیه منتظر باید باشه . به نظرتون از خود تسک باید استفاده بشه یا از کتابخونه هایی که فرمودید ؟
تسک کافی برای این کار من از کتابخانه زمانی استفاده میکنم که بخواهم در صورت خطا چندین بار یک کارو انجام بدم
برای بعضی کارها مهم که میخواهی دید بهتری راجع بشون داشته باشی exq با ui بهتره ولی نیاز به redis داره
۱. برای پروداکشن فعال نگه میداریم تا در باره کارها اطلاعات داشته باشیم
۲. نه لزوما تسک async کارو انجام میده اگه به نتیجه کاری نداری await نیاز نیست
۳. بله تسک سوپروایزر کارش ریست کردن تسکه اون یکیsupervisor کارش ریست کردن کل برنامه