Εγκατάσταση του Beanstalk
Δείγμα έργου
Εργασίες αποστολής και λειτουργίας
Διαμόρφωση επόπτη
συμπέρασμα
Το Beanstalk είναι μια γρήγορη και απλή ουρά εργασίας. Σας επιτρέπει να εκτελείτε χρονοβόρες εργασίες ασύγχρονα, όπως αποστολή email, σύνδεση σε εξωτερικά API ή επεξεργασία εικόνων. Με αυτόν τον τρόπο, θα μειώσετε τον λανθάνοντα χρόνο της εφαρμογής ιστού σας. Η Laravel παρέχει out-of-the-box υποστήριξη για beanstalkd.
Σε αυτό το σεμινάριο θα εγκαταστήσουμε beanstalkd, θα εγκαταστήσουμε μια δοκιμαστική εφαρμογή Laravel και θα διαχειριστούμε τους εργαζόμενους στην ουρά μέσω του Supervisor . Η δοκιμαστική εφαρμογή θα λάβει μια λίστα με τα διαθέσιμα λειτουργικά συστήματα από το Vultr API και θα επιλέξει τυχαία ένα.
Υποτίθεται ότι έχετε ήδη εγκατεστημένο το Supervisor στο σύστημά σας. Εάν δεν το κάνετε, θα πρέπει να διαβάσετε το ακόλουθο σεμινάριο σχετικά με τον τρόπο ρύθμισης του Supervisor: Εγκατάσταση και ρύθμιση παραμέτρων του επόπτη στο Ubuntu 16.04
Θεωρείται επίσης ότι έχετε πρόσβαση SSH στην παρουσία σας Vultr.
Εγκατάσταση του Beanstalk
Το πρώτο βήμα που πρέπει να κάνετε είναι να εγκαταστήσετε beanstalkd.
sudo apt-get update
sudo apt-get install beanstalkd
Ξεκινήστε την υπηρεσία.
sudo systemctl start beanstalkd
Μπορείτε επίσης να ενεργοποιήσετε την έναρξη της υπηρεσίας κατά την προετοιμασία του συστήματος.
sudo systemctl enable beanstalkd
Ελέγξτε την κατάσταση της υπηρεσίας εκδίδοντας την ακόλουθη εντολή.
sudo systemctl status beanstalkd
Από προεπιλογή, beanstalkdακούει στη θύρα 11300. Το Beanstalk χρησιμοποιεί ένα απλό πρωτόκολλο που βασίζεται σε κείμενο που περιγράφεται στο αποθετήριο github του . Μπορείτε να δοκιμάσετε το πρωτόκολλό του εκτελώντας το telnet.
telnet localhost 11300
Γράψε το παρακάτω και πάτα ENTER.
list-tubes
Θα πρέπει να δείτε μια λίστα με σωλήνες που διατίθενται στον διακομιστή:
OK 14
---
- default
Για να κλείσετε τη σύνδεση απλώς πληκτρολογήστε quitκαι στη συνέχεια πατήστε ENTER.
Οι σωλήνες στο Beanstalk αντιπροσωπεύουν ουρές εργασίας. Το Beanstalk αποτελείται βασικά από παραγωγούς , καταναλωτές , θέσεις εργασίας και σωλήνες . Οι παραγωγοί τοποθετούν τις εργασίες σε ένα σωλήνα για κατανάλωση (επεξεργασία) από οποιονδήποτε αριθμό καταναλωτών. Σημειώστε ότι τόσο οι παραγωγοί όσο και οι καταναλωτές είναι απλώς πελάτες του διακομιστή Beanstalk και είναι εντελώς ανεξάρτητοι ο ένας από τον άλλο. Πρακτικά αυτό σημαίνει ότι χρησιμοποιώντας το Beanstalk μπορείτε να δημιουργήσετε τις εργασίες σας στην εφαρμογή PHP και να υποβάλετε σε επεξεργασία σε μια εφαρμογή NodeJS για παράδειγμα. Ευτυχώς, η Laravel αφαιρεί όλα αυτά και μας παρέχει ένα πολύ απλό API για την αποστολή και τη διαχείριση εργασιών, όπως θα δούμε στη συνέχεια.
Δείγμα έργου
Για να δημιουργήσουμε το δείγμα του έργου μας, πρέπει πρώτα να εγκαταστήσουμε τις εξαρτήσεις του. Θα εγκαταστήσουμε PHP και Composer.
sudo apt-get install php php-mbstring php-xml php-common php-zip composer
Τώρα, δημιουργήστε το έργο με βάση το Laravel 5.5.
composer create-project --prefer-dist laravel/laravel vultr "5.5.*"
Στη συνέχεια cdστον φάκελο που δημιουργήθηκε πρόσφατα. Θα εργαζόμαστε σε αυτόν τον κατάλογο από τώρα και στο εξής. Αυτός ο φάκελος μπορεί να αναφέρεται αργότερα ως PROJECT_ROOT.
cd vultr/
Για να χρησιμοποιήσουμε το Beanstalk στο Laravel πρέπει να εγκαταστήσουμε μια ακόμη εξάρτηση, τον πελάτη PHP Beanstalk.
composer require pda/pheanstalk ~3.0
Πρέπει επίσης να δημιουργήσουμε μια αντιπροσώπευση εργασίας. Στο Laravel, αυτή είναι μια κλάση μέσα στο app/Jobsφάκελο. Η Laravel έχει μια εντολή κονσόλας για να μας βοηθήσει να δημιουργήσουμε μια κλάση εργασίας. Ας δημιουργήσουμε το δείγμα εργασίας μας.
php artisan make:job FindFavoriteOS
Ενημερώστε το app/Jobs/FindFavoriteOS.phpαρχείο ως εξής.
<?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']);
}
}
Η μέθοδος χειρισμού είναι αυτή που θα εκτελεστεί αποτελεσματικά όταν η εργασία καταναλωθεί. Εδώ, λαμβάνουμε δεδομένα από το Vultr API, επιλέγουμε τυχαία ένα λειτουργικό σύστημα και γράφουμε το επιλεγμένο λειτουργικό σύστημα στο αρχείο καταγραφής. Το αρχείο καταγραφής βρίσκεται στο storage/logs/laravel.log.
Έχουμε ήδη εγκαταστήσει το Beanstalk και ορίσαμε την Εργασία που θα εκτελεστεί από αυτό. Τώρα είναι ώρα να πούμε στη Laravel να χρησιμοποιήσει το Beanstalk ως την προεπιλεγμένη ουρά εργασίας. Αντιγράψτε το προεπιλεγμένο .envαρχείο που παρέχεται από την εγκατάσταση Laravel.
cp .env.example .env
Τώρα ανοίξτε το .envαρχείο και ενημερώστε τη γραμμή όπου καθορίζεται το πρόγραμμα οδήγησης ουράς.
QUEUE_DRIVER=beanstalkd
Τέλος, δημιουργήστε ένα κλειδί εφαρμογής.
php artisan key:generate
Είμαστε πλέον έτοιμοι να στείλουμε εργασίες στην ουρά εργασίας Beanstalk.
Εργασίες αποστολής και λειτουργίας
Η αποστολή εργασίας στο Laravel είναι αρκετά απλή. Ενημερώστε το routes/web.phpαρχείο.
<?php
Route::get('/', function () {
for ($i = 0; $i < 50; $i++) {
\App\Jobs\FindFavoriteOS::dispatch();
}
return '50 Jobs dispatched!';
});
Παρά το γεγονός ότι δεν συνιστάται η εκτέλεση του ενσωματωμένου παρεχόμενου διακομιστή στην παραγωγή, θα τον χρησιμοποιήσουμε εδώ για λόγους συντομίας.
php artisan serve --host 0.0.0.0 --port 8000
Τώρα σε ένα πρόγραμμα περιήγησης ιστού, μεταβείτε στο http://[vultr-instance-ip]:8000. Θα δείτε το ακόλουθο μήνυμα.
50 Jobs dispatched!
Ανοίξτε μια νέα σύνδεση SSH στον διακομιστή σας και μέσα στη ρίζα του έργου μας, εκτελέστε τα εξής.
php artisan queue:work --once
Αυτή είναι η αναμενόμενη έξοδος:
[2018-02-14 00:03:52] Processing: App\Jobs\FindFavoriteOS
[2018-02-14 00:03:53] Processed: App\Jobs\FindFavoriteOS
Επιβεβαιώστε ότι δημιουργήθηκε το αρχείο καταγραφής.
cat storage/logs/laravel.log
Διαμόρφωση επόπτη
Για να αποφύγουμε την ανάγκη μη αυτόματης επεξεργασίας της ουράς, θα χρησιμοποιήσουμε supervisord. Δημιουργήστε την παρακάτω διαμόρφωση προγράμματος στο /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
Σημειώστε ότι η σωστή διαδρομή για να τοποθετήσετε το αρχείο διαμόρφωσης Supervisor θα εξαρτηθεί από τις ρυθμίσεις σας. Επίσης, θυμηθείτε να αντικαταστήσετε [PROJECT_ROOT]με την πλήρη διαδρομή προς το PROJECT_ROOTστο σύστημά σας.
Εδώ διαμορφώνουμε το Supervisor ώστε να ξεκινά αυτόματα την επεξεργασία της ουράς και, σε περίπτωση διακοπής του σεναρίου, να το επανεκκινεί. Σημειώστε επίσης ότι δεν δημιουργούμε έναν μόνο εργαζόμενο, αλλά 8 διαδικασίες. Είστε ελεύθεροι να εκκινήσετε όσες διαδικασίες θεωρείτε απαραίτητες ανάλογα με την αίτησή σας.
Για να επιτρέψετε στον Επόπτη να διαχειρίζεται τον εργαζόμενό μας, αναγκάστε τον να διαβάσει ξανά τη διαμόρφωσή του.
sudo supervisorctl reread
sudo supervisorctl update
Εάν η υπηρεσία Supervisor δεν έχει ξεκινήσει, πολλοί πρέπει να την ξεκινήσετε.
sudo systemctl start supervisord
Τώρα ας δούμε αν οι εργασίες υποβάλλονται σε επεξεργασία.
tail -f storage/logs/laravel.log
Σε ένα πρόγραμμα περιήγησης ιστού, μεταβείτε στο http://[vultr-instance-ip]:8000. Θα δείτε τα αρχεία καταγραφής που δημιουργούνται στην κονσόλα σας.
συμπέρασμα
Έχουμε διαμορφώσει με επιτυχία μια εφαρμογή Laravel ώστε να χρησιμοποιεί το Beanstalk ως ουρά εργασίας. Επίσης, δείξαμε πώς να χρησιμοποιείτε το Supervisor για τη διαχείριση εργαζομένων.