در حال بارگزاری ...

ویژگی جدید Laravel 5.5 | Laravel Horizon

توسط الهه قنبری
آخرین به روز رسانی پنجشنبه 30 آبان 1398

پکیج Laravel Horizon برای اجرا و مدیریت صف‌ها طراحی شده که به وسیله آن می‌توان به راحتی تنظیمات را به هر Queue اعمال کرد.

لاراول در حال حاضر محبوب‌ترین فریم ورک برای برنامه نویسانی است که برای طراحی وب سایت از زبان PHP استفاده می‌کنند. به دلایلی مختلفی که پیش از این توضیح دادیم، در حال حاضر لاراول یکی از محبوب‌ترین فریم ورک‌های این زبان است، ولی این بدان معنی نیست که برای بهتر شدن به مکمل نیاز نداشته باشد. در مقاله قبل در لیداوب به ویژگی‌های جدید لاراول در نسخه 5.5 اشاره کردیم. در این مقاله قصد داریم به صورت دقیق‌تر روی یکی از ویژگی‌های جدید این نسخه از لاراول صحبت کنیم. Laravel Horizon یک پکیج برای لاراول 5.5 است که به برنامه نویس برای مدیریت بهتر و دقیق‌تر صف‌ها کمک می‌کند.

پکیج Laravel Horizon در لاراول

خبر خوب برای برنامه نویسانی که اجرا و مدیریت صف‌ها (queue) آن‌ها را با مشکل مواجه کرده، این است که با پکیج Horizon می‌توان طرز کار با صف‌ها را دانست و به راحتی تنظیمات را به صف‌ها اعمال کرد. با نصب Laravel Horizon می‌توان به داشبورد مدیریت صف‌ها در لاراول دسترسی داشت و تمام کارهای صف را تحت کنترل درآورد. برای مثال، می‌توان هر تعداد از صف‌ها، ایجاد کننده‌های صف‌ها، job‌های ناموفق و توان عملیاتی هر job را کنترل و تجزیه تحلیل کرد.

لاراول 5.5 | laravel horizon

این پکیج به صورت متن باز است و می‌تواند در برنامه‌های لاراول ما مورد استفاده قرار بگیرد.

laravel horizon | over view | لاراول 5.5

تنظیمات مبتنی بر کد در Laravel Horizon

مثل تمام برنامه‌ها و کامپوننت‌های لاراول، با استفاده از تنظیمات مبتنی بر کد، می‌توان برای Horizon مشخص کرد که چند Supervisor اجرا شود و هر کدام باید روی کدام صف نظارت کند. همچنین، می‌توان تعیین کرد که طراحی شما کدام مکانیزم ایجاد تعادل را بکار ببرد یا می‌توان مشخص کرد که چند فرایند به صورت چرخشی و همزمان کار کنند. همانطور که از توضیحات پیداست، با استفاده از پکیج Horizon در لاراول، هنگام طراحی وب سایت می‌توان کنترل خاص و ویژه‌ای روی صف‌ها اعمال کرد.


    'production' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['default'],
            'balance' => 'simple',
            'processes' => 10,
            'tries' => 3
        ]
    ],

    'local' => [
        'supervisor-1' => [
            'connection' => 'redis',
            'queue' => ['default', 'notifications'],
            'balance' => 'simple',
            'processes' => 20,
            'tries' => 3,
            'min-processes' => 5, // optional config
        ]
    ]

// ...

'waits' => ['redis:default' => 5] // If I read this syntax correctly, sets how long to wait before consider queue "backed up"
];

در اینجا، چند نمونه دستور ساده را که می‌توان به Horizon منتقل کرد را مشاهده می‌کنید:

php artisan horizon:pause // pause but not stop worker
php artisan horizon:continue // resume after pause
php artisan horizon:terminate // gracefully stop during deploy process
php artisan horizon:snapshot // take a metrics snapshot; cron as often as you want

تجزیه تحلیل سطح بالا در لاراول با استفاده از Horizon

Horizon چند شاخص اصلی درباره صف‌ها برای ما مشخص می‌کند. از جمله این شاخص‌ها می‌توان به موارد زیر اشاره کرد:

  • تعداد job‌ها در هر دقیقه
  • -تعداد job‌ها در یک ساعت قبل
  • تعداد job‌های ناموفق در یک ساعت قبل
  • وضعیت ایجاد کننده‌های صف (Queue Workers)
  • تعداد کل فرایندها
  • حداکثر زمان انتظار برای یک job خاص
  • حداکثر زمان اجرا برای یک job خاص
  • حداکثر توان عملیاتی یک job خاص

Horizon لیستی از فرایندها و Supervisor‌هایی را که بر روی آن فرایندها نظارت دارند را برای ما نشان می‌دهد و مشخص می‌کند که این فرایندها روی کدام صف قرار بگیرند و اینکه آیا فرایندها قرار است مورد نظارت متعادل بگیرند یا خیر.

current workload | laravel horizon | لاراول  5.5

تجزیه تحلیل یک صف و یک job  خاص

با Horizon می‌توان برای job های موجود در صف، نمودارهای زمانبندی و زمان اجرا را فراهم کرد.

 البته این نمودارها را می‌توان برای هر چیزی که داخل صف قرار دارد به کار برد؛  مثل شنوندگان رویداد یا event listeners و اعلان‌ها (notifications) و ایمیل‌های موجود در صف ( queued mail).

برچسب‌ها و نظارت بر آن‌ها در لاراول با استفاده از Horizon

با Horizon به راحتی می‌توانیم job‌های موجود در صف را tag کنیم و امکان نظارت بر روی tag‌های ایجاد شده را داشته باشیم. با این کار به راحتی می‌توان به کلاس‌های خاصی از jobها دسترسی داشت. در مثال زیر، می‌‌خواهیم یک متد را tag کنیم، برای این کار آن را به متد tag()  اضافه می‌کنیم:

class MyJob
{
    // ...
    public function tags()
    {
        return ['videos', 'video:' . $this->video->id];
    }
}

به عنوان مثال، در یکی از ایمیل‌های مشتری با عنوان invoice 14 مشکلی وجود دارد، می‌توان invoice 14 را tag کرد و روی آن نظارت کرد. از این راه می‌توان فهمید که fail شدن این Job به چه دلیل اتفاق می‌افتد. اگر از متد tag استفاده نکنیم، لاراول از طریق Eloquent model Ids کارهای auto-tag را روی job ها اعمال می‌کند. مثلا اگر Eloquent model یک ویدیو با آی.دی ۴ را به job  اضافه کند job  به صورت اتوماتیک تگ App\Video:4 را دریافت کرده و به آن اعمال می‌کند.

جدیدترین job ها 

Horizon جدیدترین job‌ها را پیگیری کرده و تمام اطلاعات مهمی که درباره هر یک از آن ها لازم است بدانیم را به ما نشان می‌دهد؛ از جمله این که روی کدام صف قرار بگیرند، کدام tag ها را دارند، چقدر زمان برای اجرا لازم دارند و این که آیا در حال اجرا هستند یا اجرای آن‌ها خاتمه یافته است.

recent jobs | laravel horizon | لاراول  5.5

Job های ناموفق

با Horizon می‌توان job‌های ناموفق را شناسایی کرد و داده‌های مرتبط و stack traceها را ردیابی کرد تا علت fail شدن مشخص شود. بعد از فهمیدن علت fail می‌توان دوباره آن را اجرا کرد و مراحل کار را مشاهده کرد و جلوی fail شدن را گرفت.

failing jobs | laravel horizon | لاراول  5.5h

حتی اگر روی یک tag نظارت هم نداشته باشیم باز می‌توان لیستی از job‌های ناموفق را برای آن جستجو و debug کرد. Job‌های ناموفق برای هفت روز حفظ می‌شوند (با قابلیت تنظیم) ولی tag‌ها به مدت 48 ساعت امکان جستجو دارند. تمام این metadata‌ها به طور مستقیم در Redis ذخیره می‌شوند.

تعادل در صف 

شاید توجه کرده باشید که یکی از گزینه‌های قابل تنظیم balance یا تعادل است که در هر یک از مثال‌های بالا به صورت simple تنظیم شده است. Queue balancing استراتژی‌هایی را برای نظارت بر چگونگی تقسیم منابع بین صف‌ها تعریف می‌کند.

Simple صرف نظر از حجم کار، دو فرایند جدا از هم را اجرا می کند.

Auto به طور اتوماتیک بین ایجاد کننده‌های صف یا queue workerها  براساس تعداد کارهای باقیمانده و میانگین زمان انتظار هر صف تعادل برقرار می‌کند.

اعلان‌ها در لاراول Horizon

اگر یک job  مدت زمان زیادی باید انتظار بکشد، Horizon با استفاده از اعلان یا notifications می‌تواند پیام sms یا slack برای صاحب برنامه ارسال کند.

// AppServiceProvider
Horizon::routeSlackNotificationsTo('slack endpoint');
Horizon::routeSmsNotificationsTo('phone number');

احراز هویت  

در هنگام نصب، داشبورد تنها محل برای مدیریت صف ها است که از طریق احراز هویت می‌توان مشخص کرد که چه کسی می‌تواند از آن استفاده کند.

// AppServiceProvider
// Choose who can see the dashboard
Horizon::auth(function ($request) {
    return true;
});

در صورت تمایل به آشنایی بیشتر با لاراول می‌توان مقالات لاراول ما را در لیداوب دنبال کنید. ما همواره جدیدترین موضوعات مربوط به طراحی وب را برای شما خوانندگان عزیز گردآوری می‌کنیم.

دیدگاه ها

دیدگاه ها : 0


متاسفانه فقط اعضای سایت قادر به ثبت دیدگاه هستند

رایگان

اشتراک گذاری در
ثبت امتیاز
1.8 (4 رای)

   لطفا صبر کنید ...