GenStage در الکسیر

درود خدمت دوستان من داشتم همینطور سرچ می کردم در مورد پروسز ها در الکسیر که یک دفعه به مبحثی برخورد کردم به نام GenStage ولی متوجه نشدم این دقیقا چی هست و چرا باید استفاده بشه

ترجمه از گوگل ترنسلیت

مرحله ها مراحل مبادله داده ها هستند که ارسال و یا دریافت اطلاعات از مراحل دیگر.

هنگامی که مرحله ارسال داده ها، آن را به عنوان تولید کننده عمل می کند. هنگامی که داده ها را دریافت می کند، به عنوان یک مصرف کننده عمل می کند. مرحله ها می توانند هر دو نقش تولید کننده و مصرف کننده را در یک زمان بگذرانند.

انواع مرحله
علاوه بر مصرف هر دو نقش تولید کننده و مصرف کننده، یک مرحله ممکن است به عنوان «منبع» نامیده شود، در صورتی که تنها موارد را تولید می کند یا به عنوان «سینک» نامیده می شود، اگر تنها موارد مصرف شود.

و همینطور اومدم اینجا برای خوندن اطلاعات بیشتر
https://hexdocs.pm/gen_stage/GenStage.html

اگر دوستان کلی بگند این چی هست و چرا باید استفاده کنیم و کجا ممنون می شم .

لازم به ذکره مثال هایی خود داکیومنت زده از نحوه انتقال که کمی متوجه شدم چی هست

با تشکر

#به روز رسانی
اطلاعیه انتشار این مورد در سایت الکسیر

1 Likes

GenStage برای مبادله پیام (event) بین process هاست GenStage برای حل مشکل Back pressure ,
GenEvent وجایگزین کرده
Back pressure: اگر یک سرور که داده رو تولید میکنه Producer بیش از توانایی مصرف کننده ها consumer پیام تولید کنه
consumer ها عقب میافتند و به مرور یکی یکی crash میکنند
برای حل این مشکل در GenStage
consumer ها مقدار پیام که میتونن بگیرند demand و به یک process واسط مفرستن به اسم ProducerConsumer و اون پیام هارو به صورت اتومات تقسیم میکنه

https://engineering.spreedly.com/blog/how-do-i-genstage.html

Reactive Streams در Akka هم همین کارو انجام میده

3 Likes

یک سوال اینجا برام ایجاد می شه در کد ها مثلا می یاند

max_demand

مشخص می کنند این چه معنی می ده؟ مگه هر پروسه که اوکی می شه نمی ره تو صف پس این ‍‍max_demand چه معنی می ده ؟

1 Likes

demand در حالت نرمال تعداد پیام ها که خونده میشه رو کنترل میکنه
max demand حداکثر تعداد پیام که پردازش میشه در یک اکتور کنترل می کنه
فرض کن به هر دلیلی سیستم پایین بوده و ۱۰ میلیون پیام عقب افتاده، اگه فقط demand گذاشته باشی احتمال داره این کم باشه و هیچوقت سیستم به شرایط نرمال برنگرده و همیشه چند ساعت عقب باشه اما اگه max demand نباشه احتمال داره consumer تمام یک میلیون پیام یک جا پردازش کنه و بره پایین. Max demand همیشه باید از سرعت تولید پیام ها ۲-۳ برابر بیشتر باشه ولی در حد معقولی باشه که سرور بتونه پردازش کنه
سپارک هم همین پارامتر هارو داره max offsets per trigger

2 Likes

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

1 Likes
1 Likes
2 Likes

مثل اینکه سام عزیز خیلی هم ازش تعریف کردن

2 Likes

دوستان من این کتاب دیروز خریدم به نظرم ضروری هست هر کسی که الیکسیر کار می کنه این کتاب رو بخره

می تونی یاد بگیری که بعدا spark و flink کارکنی :smiling_imp:

2 Likes

سام عزیز اونا مرحله آخرند :smiley: داخل این کتاب rabbitMQ رو یاد می ده . بالاخره مجبور شدیم یاد بگیریم پول دادیم برای کتاب حروم نشه :joy: :joy:

5 Likes

دوستان عزیز اگر کد تخفیف می خواند برای این کتاب اینجا استفاده کنند

من زود خریدم حیف شد :smiley:

1 Likes

اینم یک مقاله خوب برای درک بهتر

1 Likes

مرتبط با این قضیه، امروز این پست رو دیدم و جالب بود:

1 Likes

تو این کتاب در بخش آخر نسخه B1 به مبحث ConsumerSupervisor اشاره می کنه که خیلی جالب به نظر می یاد. ولی کم نوشته کاشکی مثال های خیلی زیادی می زد

در کل برای من که این GenStage سخت هست مبحثش فکر می کنم به این بر می گرده که چطوری و با چه پروژه ای بتونی جایگاهشو تو کدت پیدا کنی اون موقع هست که قشنگ درک می شه

1 Likes

دوستان نسخه جدید کتاب اومده که فصل
“Processing Collections with Flow”

بهش اضافه شده و یک نیم چه سه صفحه ای در قسمت سوپروایزر برای خوندن اطلاعات در موردش

*Added Chapter 4, Processing Collections with Flow.

		
*Added Inspecting Supervisors at Runtime.

		
*Fixed various errata.