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)scommand=php /home/forge/app.com/artisan horizonautostart=trueautorestart=trueuser=forgeredirect_stderr=truestdout_logfile=/home/forge/app.com/horizon.logstopwaitsecs=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();}