Menaxhimi i radhëve të punës Laravel me Beanstalk dhe mbikëqyrës në Ubuntu 16.04

Beanstalk është një radhë pune e shpejtë dhe e thjeshtë. Kjo ju lejon të ekzekutoni detyrat që kërkojnë kohë në mënyrë asinkrone, të tilla si dërgimi i emaileve, lidhja me API-të e jashtme ose përpunimi i imazheve. Duke vepruar kështu, ju do të zvogëloni vonesën e aplikacionit tuaj të internetit. Laravel ofron mbështetje jashtë kutisë për beanstalkd.

Në këtë tutorial ne do të instalojmë beanstalkd, konfigurojmë një aplikacion demo Laravel dhe do të menaxhojmë punëtorët e radhës përmes Supervisor . Aplikacioni demo do të marrë një listë të OS-ve të disponueshme nga Vultr API dhe do të zgjedhë rastësisht një.

Supozohet se ju tashmë keni të instaluar Supervisor në sistemin tuaj. Nëse nuk e bëni këtë, duhet të lexoni udhëzuesin e mëposhtëm se si të konfiguroni Supervisor: Instalimi dhe konfigurimi i Mbikëqyrësit në Ubuntu 16.04

Supozohet gjithashtu se ju keni akses SSH në shembullin tuaj Vultr.

Instalimi i Beanstalk

Hapi i parë për të ndërmarrë është instalimi beanstalkd.

sudo apt-get update
sudo apt-get install beanstalkd

Filloni shërbimin.

sudo systemctl start beanstalkd

Ju gjithashtu mund të aktivizoni shërbimin që të fillojë me inicializimin e sistemit.

sudo systemctl enable beanstalkd

Kontrolloni statusin e shërbimit duke lëshuar komandën e mëposhtme.

sudo systemctl status beanstalkd

Si parazgjedhje, beanstalkddëgjon në port 11300. Beanstalk përdor një protokoll të thjeshtë të bazuar në tekst të përshkruar në depon e tij github . Mund ta testoni protokollin e tij duke ekzekutuar telnet.

telnet localhost 11300

Shkruani sa vijon dhe goditni ENTER.

list-tubes

Ju duhet të shihni një listë të tubave të disponueshëm në server:

OK 14
---
- default

Për të mbyllur lidhjen thjesht shkruani quitdhe më pas shtypni ENTER.

Tubat në Beanstalk përfaqësojnë radhët e punës. Beanstalk është i përbërë kryesisht nga prodhuesit , konsumatorët , punët dhe tubacionet . Prodhuesit vendosin punë në një tub për t'u konsumuar (përpunuar) nga çdo numër konsumatorësh. Vini re se si prodhuesit ashtu edhe konsumatorët janë thjesht klientë të serverit Beanstalk dhe janë krejtësisht të pavarur nga njëri-tjetri. Në terma praktike kjo do të thotë që duke përdorur Beanstalk ju mund të prodhoni punët tuaja në aplikacionin tuaj PHP dhe ta përpunoni atë në një aplikacion NodeJS për shembull. Për fat të mirë, Laravel i përmbledh të gjitha këto dhe na ofron një API shumë të thjeshtë për të dërguar dhe trajtuar punët, siç do ta shohim më pas.

Shembull i projektit

Për të ndërtuar projektin tonë të mostrës, së pari duhet të instalojmë varësitë e tij. Ne do të instalojmë PHP dhe Composer.

sudo apt-get install php php-mbstring php-xml php-common php-zip composer

Tani, krijoni projektin bazuar në Laravel 5.5.

composer create-project --prefer-dist laravel/laravel vultr "5.5.*"

Më pas cdnë dosjen e krijuar së fundmi. Ne do të punojmë në këtë drejtori tani e tutje. Kjo dosje mund të referohet më vonë si PROJECT_ROOT.

cd vultr/

Për të përdorur Beanstalk në Laravel, duhet të instalojmë një varësi tjetër, klientin PHP Beanstalk.

composer require pda/pheanstalk ~3.0

Ne gjithashtu duhet të krijojmë një përfaqësi pune. Në Laravel, kjo është një klasë brenda app/Jobsdosjes. Laravel ka një komandë konsole për të na ndihmuar të krijojmë një klasë pune. Le të krijojmë Punën tonë shembull.

php artisan make:job FindFavoriteOS

Përditësoni app/Jobs/FindFavoriteOS.phpskedarin në vijim.

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Log;

class FindFavoriteOS implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $rawData = file_get_contents('https://api.vultr.com/v1/os/list');
        $list = json_decode($rawData, true);
        shuffle($list);
        $key = array_rand($list);
        $favorite = $list[$key];
        Log::info('My Favorite OS is: ' . $favorite['name']);
    }
}

Metoda e dorezës është ajo që do të ekzekutohet në mënyrë efektive kur puna të konsumohet. Këtu, ne marrim të dhëna nga Vultr API, zgjedhim rastësisht një OS dhe shkruajmë OS-në e zgjedhur në skedarin e regjistrit. Skedari i regjistrit ndodhet në storage/logs/laravel.log.

Ne kemi instaluar tashmë Beanstalk dhe kemi përcaktuar punën që do të ekzekutohet prej tij. Tani është koha për t'i thënë Laravel që të përdorë Beanstalk si radhën e paracaktuar të punës. Kopjoni .envskedarin e paracaktuar të ofruar nga instalimi i Laravel.

cp .env.example .env

Tani hapni .envskedarin dhe përditësoni linjën ku është specifikuar drejtuesi i radhës.

QUEUE_DRIVER=beanstalkd

Më në fund, gjeneroni një çelës aplikacioni.

php artisan key:generate

Tani jemi gati të dërgojmë punë në radhën e punës Beanstalk.

Punë dërgimi dhe drejtimi

Dërgimi i një pune në Laravel është mjaft i thjeshtë. Përditëso routes/web.phpskedarin.

<?php

Route::get('/', function () {
    for ($i = 0; $i < 50; $i++) {
        \App\Jobs\FindFavoriteOS::dispatch();
    }

    return '50 Jobs dispatched!';
});

Pavarësisht se nuk rekomandohet për të ekzekutuar serverin e integruar të ofruar në prodhim, ne do ta përdorim atë këtu për hir të shkurtësisë.

php artisan serve --host 0.0.0.0 --port 8000

Tani në një shfletues uebi, lundroni te http://[vultr-instance-ip]:8000. Do të shihni mesazhin e mëposhtëm.

50 Jobs dispatched!

Hapni një lidhje të re SSH me serverin tuaj dhe brenda rrënjës së projektit tonë, ekzekutoni sa më poshtë.

php artisan queue:work --once

Ky është rezultati i pritur:

[2018-02-14 00:03:52] Processing: App\Jobs\FindFavoriteOS
[2018-02-14 00:03:53] Processed:  App\Jobs\FindFavoriteOS

Konfirmoni që regjistri është krijuar.

cat storage/logs/laravel.log

Konfigurimi i Mbikëqyrësit

Për të shmangur nevojën për të përpunuar manualisht radhën, ne do të përdorim supervisord. Krijoni konfigurimin e mëposhtëm të programit në /etc/supervisor/conf.d/vultr.conf.

[program:vultr]
process_name=%(program_name)s_%(process_num)02d
command=php [PROJECT_ROOT]/artisan queue:work
autostart=true
autorestart=true
numprocs=8
redirect_stderr=true
stdout_logfile=/var/log/worker.log

Vini re se rruga e duhur për të vendosur skedarin e konfigurimit të Mbikëqyrësit do të varet nga konfigurimi juaj. Gjithashtu, mos harroni të zëvendësoni [PROJECT_ROOT]me shtegun e plotë për PROJECT_ROOTnë sistemin tuaj.

Këtu ne po konfigurojmë Supervisorin që të fillojë automatikisht përpunimin e radhës dhe, në rast të prishjes së skriptit, ta rifillojë atë. Gjithashtu vini re se ne nuk jemi duke instancuar një punëtor të vetëm, por 8 procese. Ju jeni të lirë të instantoni sado procese që ju i gjeni të nevojshme në varësi të aplikimit tuaj.

Për të lejuar mbikëqyrësin të menaxhojë punonjësin tonë, detyrojeni atë të rilexojë konfigurimin e tij.

sudo supervisorctl reread
sudo supervisorctl update

Nëse shërbimi i Mbikëqyrësit nuk është nisur, shumë ju duhet ta filloni atë.

sudo systemctl start supervisord

Tani le të shohim nëse punët janë duke u përpunuar.

tail -f storage/logs/laravel.log

Në një shfletues uebi, lundroni te http://[vultr-instance-ip]:8000. Do të shihni regjistrat që krijohen në tastierën tuaj.

konkluzioni

Ne kemi konfiguruar me sukses një aplikacion Laravel për të përdorur Beanstalk si një radhë pune. Gjithashtu, ne demonstruam se si të përdorim Supervisor për të menaxhuar punëtorët.

Lëreni një koment

Ngritja e makinave: Aplikimet në botën reale të AI

Ngritja e makinave: Aplikimet në botën reale të AI

Inteligjenca Artificiale nuk është në të ardhmen, është këtu në të tashmen Në këtë blog Lexoni se si aplikacionet e inteligjencës artificiale kanë ndikuar në sektorë të ndryshëm.

Sulmet DDOS: Një përmbledhje e shkurtër

Sulmet DDOS: Një përmbledhje e shkurtër

A jeni edhe ju viktimë e Sulmeve DDOS dhe jeni konfuz në lidhje me metodat e parandalimit? Lexoni këtë artikull për të zgjidhur pyetjet tuaja.

A e keni pyetur ndonjëherë veten se si fitojnë para hakerët?

A e keni pyetur ndonjëherë veten se si fitojnë para hakerët?

Ju mund të keni dëgjuar se hakerët fitojnë shumë para, por a keni menduar ndonjëherë se si i fitojnë ato para? Le te diskutojme.

Shpikjet revolucionare nga Google që do tju bëjnë të lehtë jetën tuaj.

Shpikjet revolucionare nga Google që do tju bëjnë të lehtë jetën tuaj.

Dëshironi të shihni shpikjet revolucionare nga Google dhe se si këto shpikje ndryshuan jetën e çdo njeriu sot? Më pas lexoni në blog për të parë shpikjet nga Google.

E Premte Thelbësore: Çfarë ndodhi me Makinat e drejtuara nga AI?

E Premte Thelbësore: Çfarë ndodhi me Makinat e drejtuara nga AI?

Koncepti i makinave vetë-drejtuese për të dalë në rrugë me ndihmën e inteligjencës artificiale është një ëndërr që e kemi prej kohësh. Por, pavarësisht nga disa premtime, ato nuk shihen askund. Lexoni këtë blog për të mësuar më shumë…

Singulariteti teknologjik: Një e ardhme e largët e qytetërimit njerëzor?

Singulariteti teknologjik: Një e ardhme e largët e qytetërimit njerëzor?

Ndërsa Shkenca evoluon me një ritëm të shpejtë, duke marrë përsipër shumë nga përpjekjet tona, rriten edhe rreziqet për t'iu nënshtruar një Singulariteti të pashpjegueshëm. Lexoni, çfarë mund të thotë singulariteti për ne.

Funksionalitetet e shtresave të arkitekturës së referencës së të dhënave të mëdha

Funksionalitetet e shtresave të arkitekturës së referencës së të dhënave të mëdha

Lexoni blogun për të njohur shtresat e ndryshme në arkitekturën e të dhënave të mëdha dhe funksionalitetet e tyre në mënyrën më të thjeshtë.

Evolucioni i ruajtjes së të dhënave - Infografik

Evolucioni i ruajtjes së të dhënave - Infografik

Metodat e ruajtjes së të dhënave kanë evoluar mund të jenë që nga lindja e të dhënave. Ky blog mbulon evolucionin e ruajtjes së të dhënave në bazë të një infografike.

6 Përfitimet e mahnitshme të të pasurit pajisje shtëpiake inteligjente në jetën tonë

6 Përfitimet e mahnitshme të të pasurit pajisje shtëpiake inteligjente në jetën tonë

Në këtë botë të drejtuar nga dixhitali, pajisjet inteligjente të shtëpisë janë bërë një pjesë thelbësore e jetës. Këtu janë disa përfitime të mahnitshme të pajisjeve shtëpiake inteligjente se si ato e bëjnë jetën tonë të vlefshme dhe më të thjeshtë.

Përditësimi shtesë i macOS Catalina 10.15.4 po shkakton më shumë probleme sesa zgjidhja

Përditësimi shtesë i macOS Catalina 10.15.4 po shkakton më shumë probleme sesa zgjidhja

Së fundmi Apple lëshoi ​​macOS Catalina 10.15.4 një përditësim shtesë për të rregulluar problemet, por duket se përditësimi po shkakton më shumë probleme që çojnë në bricking të makinerive mac. Lexoni këtë artikull për të mësuar më shumë