„Laravel“ darbo eilių valdymas naudojant „Beanstalk“ ir „Supervisor“ Ubuntu 16.04

„Beanstalk“ yra greita ir paprasta darbo eilė. Tai leidžia asinchroniškai vykdyti daug laiko reikalaujančias užduotis, pvz., siųsti el. laiškus, prisijungti prie išorinių API arba apdoroti vaizdus. Tai darydami sumažinsite žiniatinklio programos delsą. „Laravel“ teikia tiesioginį palaikymą beanstalkd.

Šiame vadove mes įdiegsime beanstalkd, nustatysime demonstracinę Laravel programą ir valdysime eilės darbuotojus per Supervisor . Demonstracinė programa gaus galimų OS sąrašą iš Vultr API ir atsitiktinai pasirinks vieną.

Daroma prielaida, kad jūsų sistemoje jau įdiegtas Supervisor. Jei to nepadarėte, turėtumėte perskaityti šią pamoką, kaip nustatyti „Supervisor“: „Supervisor“ diegimas ir konfigūravimas „Ubuntu 16.04“

Taip pat daroma prielaida, kad turite SSH prieigą prie „Vultr“ egzemplioriaus.

„Beanstalk“ diegimas

Pirmas žingsnis, kurį reikia padaryti, yra įdiegti beanstalkd.

sudo apt-get update
sudo apt-get install beanstalkd

Pradėkite paslaugą.

sudo systemctl start beanstalkd

Taip pat galite įgalinti paslaugą paleisti sistemą inicijavus.

sudo systemctl enable beanstalkd

Patikrinkite paslaugos būseną išduodami šią komandą.

sudo systemctl status beanstalkd

Pagal numatytuosius nustatymus beanstalkdklausosi prievado 11300. „Beanstalk“ naudoja paprastą teksto protokolą, aprašytą „github“ saugykloje . Galite išbandyti jo protokolą paleisdami telnet.

telnet localhost 11300

Parašykite toliau pateiktą informaciją ir paspauskite ENTER.

list-tubes

Turėtumėte pamatyti serveryje esančių vamzdžių sąrašą:

OK 14
---
- default

Norėdami uždaryti ryšį, tiesiog įveskite quitir paspauskite ENTER.

„Beanstalk“ vamzdeliai žymi darbo eiles. Beanstilk iš esmės susideda iš gamintojų , vartotojų , darbo vietų ir vamzdžių . Gamintojai sudeda darbo vietas į vamzdelį, kurį sunaudos (perdirbs) bet koks vartotojų skaičius. Atminkite, kad tiek gamintojai, tiek vartotojai yra tiesiog „Beanstalk“ serverio klientai ir yra visiškai nepriklausomi vienas nuo kito. Praktiškai tai reiškia, kad naudodami „Beanstalk“ galite sukurti savo užduotis savo PHP programoje ir apdoroti, pavyzdžiui, „NodeJS“ programoje. Laimei, Laravel visa tai abstrahuoja ir suteikia mums labai paprastą API, skirtą darbams išsiųsti ir tvarkyti, kaip matysime toliau.

Projekto pavyzdys

Norėdami sukurti pavyzdinį projektą, pirmiausia turime įdiegti jo priklausomybes. Mes ketiname įdiegti PHP ir Composer.

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

Dabar sukurkite projektą, pagrįstą Laravel 5.5.

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

Toliau cdį neseniai sukurtą aplanką. Nuo šiol dirbsime šiame kataloge. Šis aplankas vėliau gali būti nurodytas kaip PROJECT_ROOT.

cd vultr/

Norėdami naudoti „Beanstalk“ „Laravel“, turime įdiegti dar vieną priklausomybę – „PHP Beanstalk“ klientą.

composer require pda/pheanstalk ~3.0

Taip pat turime sukurti darbo atstovybę. „Laravel“ tai yra klasė app/Jobsaplanke. Laravel turi konsolės komandą, kuri padeda mums sukurti darbo klasę. Sukurkime savo darbo pavyzdį.

php artisan make:job FindFavoriteOS

Atnaujinkite app/Jobs/FindFavoriteOS.phpfailą į toliau pateiktą.

<?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']);
    }
}

Rankenos metodas yra tai, kas bus veiksmingai atlikta, kai darbas bus sunaudotas. Čia gauname duomenis iš Vultr API, atsitiktinai pasirenkame OS ir įrašome pasirinktą OS į žurnalo failą. Žurnalo failas yra adresu storage/logs/laravel.log.

Mes jau įdiegėme „Beanstalk“ ir apibrėžėme užduotį, kurią jis turi atlikti. Dabar laikas pasakyti „Laravel“ naudoti „Beanstalk“ kaip numatytąją darbo eilę. Nukopijuokite numatytąjį .envLaravel diegimo failą.

cp .env.example .env

Dabar atidarykite .envfailą ir atnaujinkite eilutę, kurioje nurodyta eilės tvarkyklė.

QUEUE_DRIVER=beanstalkd

Galiausiai sugeneruokite programos raktą.

php artisan key:generate

Dabar esame pasirengę siųsti darbus į „Beanstalk“ darbų eilę.

Siuntimo ir vykdymo darbai

Darbo išsiuntimas Laravelyje yra gana paprastas. Atnaujinkite routes/web.phpfailą.

<?php

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

    return '50 Jobs dispatched!';
});

Nepaisant to, kad nerekomenduojama gamyboje paleisti įtaisytąjį pateiktą serverį, mes jį čia naudosime trumpumo sumetimais.

php artisan serve --host 0.0.0.0 --port 8000

Dabar žiniatinklio naršyklėje eikite į http://[vultr-instance-ip]:8000. Pamatysite šį pranešimą.

50 Jobs dispatched!

Atidarykite naują SSH ryšį su savo serveriu ir mūsų projekto šaknyje atlikite šiuos veiksmus.

php artisan queue:work --once

Tai yra laukiama produkcija:

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

Patvirtinkite, kad žurnalas buvo sugeneruotas.

cat storage/logs/laravel.log

Prižiūrėtojo konfigūravimas

Kad nereikėtų rankiniu būdu apdoroti eilės, naudosime supervisord. Sukurkite šią programos konfigūraciją /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

Atkreipkite dėmesį, kad teisingas kelias, kaip įdėti prižiūrėtojo konfigūracijos failą, priklausys nuo jūsų sąrankos. Be to, nepamirškite pakeisti [PROJECT_ROOT]visu keliu į PROJECT_ROOTjūsų sistemoje.

Čia mes sukonfigūruojame „Supervisor“, kad jis automatiškai pradėtų apdoroti eilę ir, jei scenarijus nutrūktų, paleisti jį iš naujo. Taip pat atkreipkite dėmesį, kad mes instantiuojame ne vieną darbuotoją, o 8 procesus. Priklausomai nuo jūsų taikomosios programos, galite laisvai kurti momentinius momentus, kad ir kiek daug procesų jums atrodo būtini.

Kad prižiūrėtojas galėtų valdyti mūsų darbuotoją, priverskite jį iš naujo perskaityti konfigūraciją.

sudo supervisorctl reread
sudo supervisorctl update

Jei Supervisor paslauga nebuvo paleista, daugelis turite ją paleisti.

sudo systemctl start supervisord

Dabar pažiūrėkime, ar darbai apdorojami.

tail -f storage/logs/laravel.log

Žiniatinklio naršyklėje eikite į http://[vultr-instance-ip]:8000. Pamatysite konsolėje generuojamus žurnalus.

Išvada

Sėkmingai sukonfigūravome „Laravel“ programą, kad „Beanstalk“ būtų naudojama kaip darbo eilė. Taip pat pademonstravome, kaip naudoti Supervisor valdant darbuotojus.

Palikti komentarą

Mašinų augimas: AI pritaikymas realiame pasaulyje

Mašinų augimas: AI pritaikymas realiame pasaulyje

Dirbtinis intelektas nėra ateityje, jis čia, dabartyje Šiame tinklaraštyje Skaitykite, kaip dirbtinio intelekto programos paveikė įvairius sektorius.

DDOS atakos: trumpa apžvalga

DDOS atakos: trumpa apžvalga

Ar taip pat esate DDOS atakų auka ir esate sumišęs dėl prevencijos metodų? Perskaitykite šį straipsnį, kad išspręstumėte savo užklausas.

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Galbūt girdėjote, kad įsilaužėliai uždirba daug pinigų, bet ar kada susimąstėte, kaip jie uždirba tokius pinigus? padiskutuokime.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Ar norite pamatyti revoliucinius „Google“ išradimus ir kaip šie išradimai pakeitė kiekvieno žmogaus gyvenimą šiandien? Tada skaitykite tinklaraštį, kad pamatytumėte „Google“ išradimus.

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Savavaledžių automobilių koncepcija, kuri išvažiuotų į kelius su dirbtinio intelekto pagalba, yra svajonė, kurią jau kurį laiką svajojame. Tačiau nepaisant kelių pažadų, jų niekur nematyti. Skaitykite šį tinklaraštį, kad sužinotumėte daugiau…

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Kadangi mokslas sparčiai vystosi, perimdamas daug mūsų pastangų, taip pat didėja rizika, kad pateksime į nepaaiškinamą singuliarumą. Skaitykite, ką mums gali reikšti išskirtinumas.

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Skaitykite tinklaraštį, kad paprasčiausiai sužinotumėte apie skirtingus didžiųjų duomenų architektūros sluoksnius ir jų funkcijas.

Duomenų saugojimo raida – infografika

Duomenų saugojimo raida – infografika

Duomenų saugojimo metodai gali būti tobulinami nuo pat Duomenų gimimo. Šiame tinklaraštyje, remiantis infografika, aprašoma duomenų saugojimo raida.

6 nuostabūs išmaniųjų namų įrenginių privalumai

6 nuostabūs išmaniųjų namų įrenginių privalumai

Šiame skaitmeniniu būdu pagrįstame pasaulyje išmanieji namų įrenginiai tapo svarbia gyvenimo dalimi. Štai keletas nuostabių išmaniųjų namų įrenginių privalumų, kaip jie daro mūsų gyvenimą vertą gyventi ir paprastesnį.

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

Neseniai „Apple“ išleido „macOS Catalina 10.15.4“ priedą, skirtą problemoms išspręsti, tačiau atrodo, kad dėl atnaujinimo kyla daugiau problemų, dėl kurių „Mac“ įrenginiai blokuojami. Norėdami sužinoti daugiau, perskaitykite šį straipsnį