نسخه:

Laravel Horizon

معرفی

Horizon یک داشبورد زیبا و پیکربندی کد محور برای صف‌های Redis با قدرت لاراول شما فراهم می‌کند. Horizon به شما این امکان را می دهد تا به راحتی معیارهای کلیدی سیستم صف خود را مانند توان عملیاتی، زمان اجرا و خرابی های شغلی نظارت کنید.

تمام پیکربندی کارگر شما در یک فایل پیکربندی ساده ذخیره می‌شود و به پیکربندی شما اجازه می‌دهد در کنترل منبع باقی بماند، جایی که کل تیم شما می‌تواند با هم همکاری کند.

نصب و راه اندازی

باید مطمئن شوید که اتصال صف شما در فایل پیکربندی redis شما تنظیم شده است. queue

می توانید از Composer برای نصب Horizon در پروژه Laravel خود استفاده کنید:

composer require laravel/horizon ~3.0

پس از نصب Horizon، دارایی های آن را با استفاده از horizon:install دستور Artisan منتشر کنید:

php artisan horizon:install

پیکربندی

پس از انتشار دارایی های Horizon، فایل پیکربندی اولیه آن در آدرس قرار خواهد گرفت config/horizon.php . این فایل پیکربندی به شما این امکان را می دهد که گزینه های کارگر خود را پیکربندی کنید و هر گزینه پیکربندی شامل شرحی از هدف خود است، بنابراین حتما این فایل را به طور کامل بررسی کنید.

باید اطمینان حاصل کنید که environments بخشی از فایل پیکربندی شما horizon حاوی یک ورودی برای هر محیطی است که قصد دارید Horizon را در آن اجرا کنید.

گزینه های تعادل

Horizon به شما این امکان را می دهد که از بین سه استراتژی متعادل کننده انتخاب کنید: simple , auto و false . این simple استراتژی که پیش‌فرض فایل پیکربندی است، کارهای ورودی را به طور مساوی بین فرآیندها تقسیم می‌کند:

'balance' => 'simple',

این auto استراتژی تعداد فرآیندهای کارگر در هر صف را بر اساس حجم کاری فعلی صف تنظیم می کند. به عنوان مثال، اگر notifications صف شما 1000 شغل انتظار داشته باشد در حالی که render صف شما خالی است، Horizon کارگران بیشتری را به صف شما اختصاص می دهد notifications تا زمانی که صف شما خالی شود. وقتی این balance گزینه روی تنظیم شود false ، از رفتار پیش‌فرض لاراول استفاده می‌شود که صف‌ها را به ترتیبی که در پیکربندی شما فهرست شده است پردازش می‌کند.

هنگام استفاده از auto استراتژی، می‌توانید گزینه‌ها minProcesses و maxProcesses پیکربندی را برای کنترل حداقل و حداکثر تعداد فرآیندهایی که Horizon باید در مقیاس بالا و پایین تعریف کنید. مقدار minProcesses حداقل تعداد پردازش ها در هر صف را مشخص می کند، در حالی که maxProcesses مقدار حداکثر تعداد پردازش ها را در تمام صف ها مشخص می کند:

'environments' => [
'production' => [
'supervisor-1' => [
'connection' => 'redis',
'queue' => ['default'],
'balance' => 'auto',
'minProcesses' => 1,
'maxProcesses' => 10,
'tries' => 3,
],
],
],

پیرایش کار

فایل horizon پیکربندی به شما امکان می دهد تا مدت زمان انجام کارهای اخیر و ناموفق (در چند دقیقه) را پیکربندی کنید. به‌طور پیش‌فرض، کارهای اخیر به مدت یک ساعت و کارهای ناموفق برای یک هفته نگه داشته می‌شوند:

'trim' => [
'recent' => 60,
'failed' => 10080,
],

مجوز داشبورد

Horizon داشبوردی را در نشان می دهد /horizon . به طور پیش فرض، شما فقط می توانید در local محیط به این داشبورد دسترسی داشته باشید. در فایل شما app/Providers/HorizonServiceProvider.php ، یک روش وجود دارد gate . این گیت مجوز دسترسی به Horizon را در محیط های غیر محلی کنترل می کند . شما آزاد هستید که این گیت را در صورت نیاز برای محدود کردن دسترسی به نصب Horizon خود تغییر دهید:

/**
* Register the Horizon gate.
*
* This gate determines who can access Horizon in non-local environments.
*
* @return void
*/
protected function gate()
{
Gate::define('viewHorizon', function ($user) {
return in_array($user->email, [
'taylor@laravel.com',
]);
});
}

به یاد داشته باشید که لاراول کاربر احراز هویت شده را به طور خودکار به گیت تزریق می کند. اگر برنامه شما امنیت Horizon را از طریق روش دیگری مانند محدودیت IP ارائه می کند، کاربران Horizon شما ممکن است نیازی به "ورود به سیستم" نداشته باشند. بنابراین، برای مجبور کردن لاراول به عدم نیاز به احراز هویت، باید function ($user) بالا را به تغییر دهید. function ($user = null)

ارتقاء Horizon

هنگام ارتقاء به نسخه اصلی جدید Horizon، مهم است که راهنمای ارتقا را به دقت مرور کنید .

علاوه بر این، باید دارایی های Horizon را مجدداً منتشر کنید:

php artisan horizon:assets

Running Horizon

هنگامی که کارگران خود را در فایل پیکربندی پیکربندی کردید config/horizon.php ، می توانید Horizon را با استفاده از horizon دستور Artisan راه اندازی کنید. این دستور واحد همه کارگران پیکربندی شده شما را راه اندازی می کند:

php artisan horizon

می توانید فرآیند Horizon را متوقف کنید و به آن دستور دهید تا با استفاده از دستورات horizon:pause و horizon:continue Artisan به پردازش کارهای خود ادامه دهد:

php artisan horizon:pause
 
php artisan horizon:continue

می توانید وضعیت فعلی فرآیند Horizon را با استفاده از horizon:status دستور Artisan بررسی کنید:

php artisan horizon:status

می‌توانید با استفاده از horizon:terminate دستور Artisan، فرآیند Master Horizon را در دستگاه خود خاتمه دهید. هر کاری که Horizon در حال حاضر در حال پردازش است تکمیل می شود و سپس Horizon خارج می شود:

php artisan horizon:terminate

استقرار Horizon

اگر Horizon را بر روی یک سرور زنده نصب می‌کنید، باید یک مانیتور فرآیند را پیکربندی کنید تا php artisan horizon فرمان را کنترل کند و اگر به طور غیرمنتظره‌ای از آن خارج شد، آن را مجدداً راه‌اندازی کنید. هنگام استقرار کدهای تازه در سرور خود، باید به پروسه اصلی Horizon دستور دهید تا پایان یابد تا بتواند توسط مانیتور فرآیند شما راه اندازی مجدد شود و تغییرات کد شما را دریافت کند.

نصب سوپروایزر

Supervisor یک مانیتور فرآیند برای سیستم عامل لینوکس است و horizon در صورت عدم موفقیت، فرآیند شما را به طور خودکار راه اندازی مجدد می کند. برای نصب Supervisor در اوبونتو، می توانید از دستور زیر استفاده کنید:

sudo apt-get install supervisor

اگر پیکربندی Supervisor به نظر می رسد بسیار دشوار است، از Laravel Forge استفاده کنید ، که به طور خودکار Supervisor را برای پروژه های Laravel شما نصب و پیکربندی می کند.

پیکربندی سرپرست

فایل های پیکربندی ناظر معمولاً در /etc/supervisor/conf.d دایرکتوری ذخیره می شوند. در این فهرست، می‌توانید هر تعداد فایل پیکربندی ایجاد کنید که به سرپرست آموزش می‌دهد که چگونه فرآیندهای شما باید نظارت شوند. به عنوان مثال، بیایید یک horizon.conf فایل ایجاد کنیم که یک horizon فرآیند را شروع و نظارت کند:

[program:horizon]
process_name=%(program_name)s
command=php /home/forge/app.com/artisan horizon
autostart=true
autorestart=true
user=forge
redirect_stderr=true
stdout_logfile=/home/forge/app.com/horizon.log
stopwaitsecs=3600

باید اطمینان حاصل کنید که ارزش آن stopwaitsecs از تعداد ثانیه های مصرف شده توسط طولانی ترین کار شما بیشتر است. در غیر این صورت، Supervisor ممکن است کار را قبل از اتمام پردازش آن از بین ببرد.

راه اندازی سرپرست

پس از ایجاد فایل پیکربندی، می‌توانید پیکربندی Supervisor را به‌روزرسانی کنید و فرآیندها را با استفاده از دستورات زیر شروع کنید:

sudo supervisorctl reread
 
sudo supervisorctl update
 
sudo supervisorctl start horizon

برای اطلاعات بیشتر در مورد Supervisor، به مستندات Supervisor مراجعه کنید .

برچسب ها

Horizon به شما این امکان را می‌دهد که «برچسب‌ها» را به مشاغل، از جمله پست‌های پست، پخش رویداد، اعلان‌ها و شنوندگان رویداد در صف اختصاص دهید. در واقع، Horizon به طور هوشمندانه و خودکار اکثر مشاغل را بسته به مدل های Eloquent که به شغل متصل شده اند برچسب گذاری می کند. برای مثال به شغل زیر نگاهی بیندازید:

<?php
 
namespace App\Jobs;
 
use App\Video;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
 
class RenderVideo implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
 
/**
* The video instance.
*
* @var \App\Video
*/
public $video;
 
/**
* Create a new job instance.
*
* @param \App\Video $video
* @return void
*/
public function __construct(Video $video)
{
$this->video = $video;
}
 
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//
}
}

اگر این کار با App\Video نمونه ای در صف قرار گیرد که دارای یک id از باشد 1 ، به طور خودکار تگ را دریافت می کند App\Video:1 . این به این دلیل است که Horizon ویژگی های شغل را برای هر مدل Eloquent بررسی می کند. اگر مدل‌های Eloquent پیدا شوند، Horizon با استفاده از نام کلاس و کلید اصلی مدل، کار را هوشمندانه برچسب‌گذاری می‌کند:

$video = App\Video::find(1);
 
App\Jobs\RenderVideo::dispatch($video);

برچسب زدن دستی

اگر می خواهید به صورت دستی تگ ها را برای یکی از اشیاء در صف خود تعریف کنید، می توانید یک tags متد در کلاس تعریف کنید:

class RenderVideo implements ShouldQueue
{
/**
* Get the tags that should be assigned to the job.
*
* @return array
*/
public function tags()
{
return ['render', 'video:'.$this->video->id];
}
}

اطلاعیه

توجه: هنگام پیکربندی Horizon برای ارسال اعلان‌های Slack یا SMS، باید پیش‌نیازهای درایور اعلان مربوطه را بررسی کنید .

اگر می‌خواهید زمانی که یکی از صف‌های شما زمان انتظار طولانی دارد به شما اطلاع داده شود، می‌توانید از روش‌های Horizon::routeMailNotificationsTo ، Horizon::routeSlackNotificationsTo و و استفاده کنید Horizon::routeSmsNotificationsTo . می‌توانید این روش‌ها را از برنامه‌های کاربردی خود فراخوانی کنید HorizonServiceProvider :

Horizon::routeMailNotificationsTo('example@example.com');
Horizon::routeSlackNotificationsTo('slack-webhook-url', '#channel');
Horizon::routeSmsNotificationsTo('15556667777');

پیکربندی آستانه های زمان انتظار اعلان

می توانید پیکربندی کنید که چند ثانیه در config/horizon.php فایل پیکربندی شما به عنوان "انتظار طولانی" در نظر گرفته شود. گزینه waits پیکربندی در این فایل به شما امکان می دهد آستانه انتظار طولانی را برای هر ترکیب اتصال / صف کنترل کنید:

'waits' => [
'redis:default' => 60,
],

معیارهای

Horizon شامل یک داشبورد معیار است که اطلاعاتی را در مورد زمان انتظار و ظرفیت کار و صف شما ارائه می دهد. برای پر کردن این داشبورد، باید دستور Artisan Horizon را طوری پیکربندی کنید که هر پنج دقیقه یک بار از طریق زمان‌بندی snapshot برنامه شما اجرا شود :

/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('horizon:snapshot')->everyFiveMinutes();
}