Διαχείριση ουρών εργασίας Laravel με Beanstalk και Supervisor στο Ubuntu 16.04

Το 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 για τη διαχείριση εργαζομένων.

Αφήστε ένα σχόλιο

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Η Τεχνητή Νοημοσύνη δεν είναι στο μέλλον, είναι εδώ ακριβώς στο παρόν Σε αυτό το blog Διαβάστε πώς οι εφαρμογές Τεχνητής Νοημοσύνης έχουν επηρεάσει διάφορους τομείς.

Επιθέσεις DDOS: Μια σύντομη επισκόπηση

Επιθέσεις DDOS: Μια σύντομη επισκόπηση

Είστε επίσης θύμα των επιθέσεων DDOS και έχετε μπερδευτεί σχετικά με τις μεθόδους πρόληψης; Διαβάστε αυτό το άρθρο για να λύσετε τις απορίες σας.

Έχετε αναρωτηθεί ποτέ πώς κερδίζουν χρήματα οι χάκερ;

Έχετε αναρωτηθεί ποτέ πώς κερδίζουν χρήματα οι χάκερ;

Μπορεί να έχετε ακούσει ότι οι χάκερ κερδίζουν πολλά χρήματα, αλλά έχετε αναρωτηθεί ποτέ πώς κερδίζουν τέτοια χρήματα; ας συζητήσουμε.

Επαναστατικές εφευρέσεις από την Google που θα σας φέρουν εύκολη στη ζωή.

Επαναστατικές εφευρέσεις από την Google που θα σας φέρουν εύκολη στη ζωή.

Θέλετε να δείτε επαναστατικές εφευρέσεις της Google και πώς αυτές οι εφευρέσεις άλλαξαν τη ζωή κάθε ανθρώπου σήμερα; Στη συνέχεια, διαβάστε στο blog για να δείτε τις εφευρέσεις της Google.

Friday Essential: Τι συνέβη με τα αυτοκίνητα που κινούνται με AI;

Friday Essential: Τι συνέβη με τα αυτοκίνητα που κινούνται με AI;

Η ιδέα των αυτοκινούμενων αυτοκινήτων να βγαίνουν στους δρόμους με τη βοήθεια της τεχνητής νοημοσύνης είναι ένα όνειρο που έχουμε εδώ και καιρό. Όμως, παρά τις πολλές υποσχέσεις, δεν φαίνονται πουθενά. Διαβάστε αυτό το blog για να μάθετε περισσότερα…

Τεχνολογική μοναδικότητα: Ένα μακρινό μέλλον του ανθρώπινου πολιτισμού;

Τεχνολογική μοναδικότητα: Ένα μακρινό μέλλον του ανθρώπινου πολιτισμού;

Καθώς η Επιστήμη εξελίσσεται με γρήγορους ρυθμούς, αναλαμβάνοντας πολλές από τις προσπάθειές μας, αυξάνονται και οι κίνδυνοι να υποβάλλουμε τον εαυτό μας σε μια ανεξήγητη Ιδιότητα. Διαβάστε τι σημαίνει η μοναδικότητα για εμάς.

Λειτουργίες Αρχιτεκτονικών Επιπέδων Αναφοράς Μεγάλων Δεδομένων

Λειτουργίες Αρχιτεκτονικών Επιπέδων Αναφοράς Μεγάλων Δεδομένων

Διαβάστε το ιστολόγιο για να μάθετε διαφορετικά επίπεδα στην Αρχιτεκτονική Μεγάλων Δεδομένων και τις λειτουργίες τους με τον απλούστερο τρόπο.

Εξέλιξη της αποθήκευσης δεδομένων – Infographic

Εξέλιξη της αποθήκευσης δεδομένων – Infographic

Οι μέθοδοι αποθήκευσης των δεδομένων εξελίσσονται μπορεί να είναι από τη γέννηση των Δεδομένων. Αυτό το ιστολόγιο καλύπτει την εξέλιξη της αποθήκευσης δεδομένων με βάση ένα infographic.

6 εκπληκτικά οφέλη από την ύπαρξη έξυπνων οικιακών συσκευών στη ζωή μας

6 εκπληκτικά οφέλη από την ύπαρξη έξυπνων οικιακών συσκευών στη ζωή μας

Σε αυτόν τον ψηφιακό κόσμο, οι έξυπνες οικιακές συσκευές έχουν γίνει κρίσιμο μέρος της ζωής. Ακολουθούν μερικά εκπληκτικά οφέλη των έξυπνων οικιακών συσκευών σχετικά με το πώς κάνουν τη ζωή μας να αξίζει και να απλοποιείται.

Η ενημέρωση του συμπληρώματος macOS Catalina 10.15.4 προκαλεί περισσότερα προβλήματα από την επίλυση

Η ενημέρωση του συμπληρώματος macOS Catalina 10.15.4 προκαλεί περισσότερα προβλήματα από την επίλυση

Πρόσφατα, η Apple κυκλοφόρησε το macOS Catalina 10.15.4 μια συμπληρωματική ενημέρωση για την επιδιόρθωση προβλημάτων, αλλά φαίνεται ότι η ενημέρωση προκαλεί περισσότερα προβλήματα που οδηγούν σε bricking των μηχανών mac. Διαβάστε αυτό το άρθρο για να μάθετε περισσότερα