استفاده از elixir به جای php در یک پروژه ساده

یه پروژه ساده داشتم، که یه صف از کارا رو باید انجام میدادم. از Lumen استفاده کردم، و یه چند تا worker رو با استفاده از supervisor اووردم بالا که کارا رو انجام بدن. یه endpoint هم داشت که یه سرویس دیگه ازش برای ایجاد کار جدید استفاده میکرد.

کم کم تعداد کارا رفت بالا، تعداد worker ها هم رفت بالا. شد دو تا سرور که هر کدوم 300 تا worker داشتن. مجموعا ۱۶ گیگ رم دو تا سرور رو پر میکردن. واسه یه کار ساده خیلی زیاد بود 🙂

مشکل بنیادی این کار با php هست. مدل اجرایی (runtime) php طوری هست که یه بار اجرا میشه کار رو میکنه و بسته میشه. اینجوری هر 600 تا worker هرکدوم php و تمام کدهای من رو جداگانه لود میکردن، درحالی که نیازی نبود واقعا. یه کد بود که برای هرکاری یه تیکه کوچیک اجرا میشه، نیازی به لود دوباره php و lumen و کتابخونه‌های دیگه نبود.

پروژه رو با elixir از نو نوشتم. الان با یه سرور راحت ۲۰۰۰ تا worker دارم، ۴ گیگ رم هم پر نشده حتی.

میشد با پایتون یا ruby یا node هم این کار رو کرد، ولی من elixir رو بیشتر میشناسم و تجربه بیشتری باهاش داشتم.

خلاصه که ابزار کار رو درست انتخاب کنیم.