آیا هر درخواست از کاربر باید در یک پروسز باشد ؟

با درود خدمت شما .

ما یک وب سرویس ساده داریم که کاربر یک چیزی را پست می کند به آن و اطلاعاتی بازگشت داده می شود . سوال اصلی من در این رابطه این است که :

آیا ما باید هر درخواست از کاربر را در یک پروسز ببریم ؟
اگر نبریم ممکن است این درخواست ۱۰ ثانیه طول بکشد به کاربر اول برگشت داده شود و همین مشکل پشت به پشت برای کاربران در لیست اتفاق می افتد برای حل این مشکل تا چه حد می توانیم از پروسز ها استفاده کنیم ؟

آیا در کل وب سرویسی که چنین موردی را بازگشت می دهد بدون پروسز باید نوشته شود یا خیر؟ ( هر درخواست در یک تسک یا یک پروسز جدید )

1 پسندیده

Task دقیقا چنین استفاده ای داره
۱۰ ثانیه خیلی زیاده برای web request و Task این مترو در پروسه جدا در background انجام میده
در هر برنامه ارلنگ میتونی میلیون ها پروسه داشته باشی
از task supervisor هم برای رفع نقص بهره بگیر
Exq , Verk , Toniq هم کتابخانه background job هستند که شبیه sidekiq کارمیکنند

2 پسندیده

درود @samdvr عزیز تشکر .

یک سوال دارم . دلیل استفاده نکردن از spawn چی هست ولی در تمام آموزش ها این مورد هست ؟

فقط کنترلش سخته ؟ یا دلیل دیگه ای داره ؟

پس بر اساس صحبت های شما ما مجبور به استفاده از تسک هستیم و برای بهینه بودن و مشکل نخوردنشون سوپروایزر هم براید استفاده بشه

درود دلیل استفاده نکردن از spawn وجود abstraction های بالا تر و قویتر OTP هستش که کاربا process آسون میکنن
در آموزش ها spawn و توضیح میدن برای درک کامل process ها ولی هیچکسی در برنامه واقعی ازشون استفاده مستقیم نمیکنه
از ساختار OTP استفاده میکنن که بشه در supervision tree بگذاریش
میتونی از exq هم استفاده کنی ولی تسک بیشتر در elixir بکار میره

1 پسندیده

سوال زیاد می پرسم ببخشید .

یک سوال برام پیش اومده . شما از کتابخونه استفاده می کنید یا تسک در خود الکسیر. به عنوان مثال که در پست اول گفتم

۳۰ نفر ممکنه در یک ثانیه درخواست اطلاعات بدند که ممکنه هر کدوم سر جمع یک ثانیه طول بشه و نفر سوم ۲۹ ثانیه منتظر باید باشه . به نظرتون از خود تسک باید استفاده بشه یا از کتابخونه هایی که فرمودید ؟

تسک کافی برای این کار من از کتابخانه زمانی استفاده می‌کنم که بخواهم در صورت خطا چندین بار یک کارو انجام بدم
برای بعضی کارها مهم که میخواهی دید بهتری راجع بشون داشته باشی exq با ui بهتره ولی نیاز به redis داره

2 پسندیده

بسیار ممنون.

سه تا سوال دیگه هم خدمتتون داشتم .بازم ببخشید

۱. این محیط گرافیکیش که نیاز به ردیس داره . آیا برای دولپر هست . یا شما تو محصول نهایی هم این محیط گرافیکی رو فعال نگه می دارید ؟

۲. در تسک ما حتما باید Task.await بکنیم ؟ چون ممکن هست اصلا نیاز نداشته باشم که نتیجه رو بهم نشون بده فقط می خوام یک کاری رو بکنه .

۳. زمانی که از اپلیکیشن و سوپروایزر به صورت کامل در پروژه استفاده می کنیم باز نیاز هست تسک سوپروایزر هم استفاده بشه ؟

خیلی ممنون :rose:

1 پسندیده

۱. برای پروداکشن فعال نگه میداریم تا در باره کارها اطلاعات داشته باشیم
۲. نه لزوما تسک async کارو انجام میده اگه به نتیجه کاری نداری await نیاز نیست
۳. بله تسک سوپروایزر کارش ریست کردن تسکه اون یکی‌supervisor کارش ریست کردن کل برنامه

1 پسندیده