Ubuntuda Laravel İş Kuyruklarını Beanstalk ve Supervisor ile Yönetme 16.04

Beanstalk hızlı ve basit bir çalışma kuyruğu. E-posta gönderme, harici API'lere bağlanma veya görüntüleri işleme gibi zaman alıcı görevleri eşzamansız olarak çalıştırmanıza olanak tanır. Böylece, web uygulamanızın gecikmesini azaltabilirsiniz. Laravel, kullanıma hazır destek sağlar beanstalkd.

Bu derste beanstalkd, bir Laravel uygulaması kuracak , kuracak ve kuyruk çalışanlarını Süpervizör aracılığıyla yöneteceğiz . Demo uygulaması Vultr API'sinden kullanılabilir işletim sistemlerinin bir listesini alır ve rastgele birini seçer.

Sisteminizde zaten bir Yönetici yüklü olduğu varsayılmaktadır. Bunu yapmazsanız, Süpervizörün nasıl kurulacağı ile ilgili aşağıdaki öğreticiyi okumalısınız: Ubuntu 16.04 Üzerinde Süpervizörü Kurmak ve Konfigüre Etmek

Ayrıca Vultr örneğinize SSH erişiminiz olduğu varsayılır.

Beanstalk Kurulumu

İlk adım, yüklemektir beanstalkd.

sudo apt-get update
sudo apt-get install beanstalkd

Hizmeti başlatın.

sudo systemctl start beanstalkd

Hizmetin sistem başlatıldıktan sonra başlamasını da sağlayabilirsiniz.

sudo systemctl enable beanstalkd

Aşağıdaki komutu vererek servis durumunu kontrol edin.

sudo systemctl status beanstalkd

Varsayılan beanstalkdolarak, bağlantı noktasını dinler 11300. Beanstalk, github deposunda açıklanan basit bir metin tabanlı protokol kullanır . Protokolünü çalıştırarak test edebilirsiniz telnet.

telnet localhost 11300

Aşağıdakileri yazın ve tuşuna basın ENTER.

list-tubes

Sunucuda bulunan tüplerin bir listesini görmelisiniz:

OK 14
---
- default

Bağlantıyı kapatmak için sadece quityazıp tuşuna basın ENTER.

Beanstalk'taki tüpler çalışma kuyruklarını temsil eder. Beanstalk temel olarak üreticiler , tüketiciler , işler ve tüplerden oluşur . Üreticiler, herhangi bir sayıda tüketici tarafından tüketilecek (işlenecek) bir tüpe iş koyarlar. Hem üreticilerin hem de tüketicilerin sadece Beanstalk sunucusunun müşterileri olduğunu ve birbirinden tamamen bağımsız olduklarını unutmayın. Pratik anlamda bu, Beanstalk kullanarak işlerinizi PHP uygulamanızda üretebileceğiniz ve örneğin bir NodeJS uygulamasında işleyebileceğiniz anlamına gelir. Neyse ki, Laravel tüm bunları özetler ve bize bir sonraki bölümde göreceğimiz gibi işleri göndermek ve işlemek için çok basit bir API sağlar.

Örnek proje

Örnek projemizi oluşturmak için önce bağımlılıklarını kurmamız gerekiyor. PHP ve Composer'ı kuracağız.

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

Şimdi, projeyi Laravel 5.5'e göre oluşturun.

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

Sonraki cdson oluşturulan klasöre. Bundan sonra bu dizinde çalışacağız. Bu klasöre daha sonra olarak referans verilebilir PROJECT_ROOT.

cd vultr/

Laravel'de Beanstalk kullanmak için, bir bağımlılık daha kurmamız gerekiyor, PHP Beanstalk istemcisi.

composer require pda/pheanstalk ~3.0

Ayrıca bir İş temsili de yaratmalıyız. Laravel'de bu, app/Jobsklasörün içindeki bir sınıftır . Laravel, bir Job sınıfı oluşturmamıza yardımcı olacak bir konsol komutuna sahiptir. Örnek İşimizi yaratalım.

php artisan make:job FindFavoriteOS

app/Jobs/FindFavoriteOS.phpDosyayı aşağıdaki şekilde güncelleyin .

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

Tanıtıcı yöntem, iş tüketildiğinde etkili bir şekilde yürütülecek yöntemdir. Burada, Vultr API'sinden veri alır, rastgele bir işletim sistemi seçer ve seçilen işletim sistemini günlük dosyasına yazarız. Günlük dosyası adresinde bulunur storage/logs/laravel.log.

Beanstalk'i zaten kurduk ve onun tarafından yürütülecek İşi tanımladık. Şimdi Laravel'e Beanstalk'u varsayılan çalışma kuyruğu olarak kullanmasını söylemenin zamanı geldi. .envLaravel kurulumu tarafından sağlanan varsayılan dosyayı kopyalayın .

cp .env.example .env

Şimdi .envdosyayı açın ve kuyruk sürücüsünün belirtildiği satırı güncelleyin.

QUEUE_DRIVER=beanstalkd

Son olarak, bir uygulama anahtarı oluşturun.

php artisan key:generate

Artık işleri Beanstalk çalışma kuyruğuna göndermeye hazırız.

İşleri gönderme ve çalıştırma

Laravel'de bir iş göndermek oldukça basittir. routes/web.phpDosyayı güncelleyin .

<?php

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

    return '50 Jobs dispatched!';
});

Yerleşik sağlanan sunucuyu üretimde çalıştırmanız tavsiye edilmemesine rağmen, burada kısaca olması için kullanacağız.

php artisan serve --host 0.0.0.0 --port 8000

Şimdi bir web tarayıcısında adresine gidin http://[vultr-instance-ip]:8000. Aşağıdaki mesajı göreceksiniz.

50 Jobs dispatched!

Sunucunuza yeni bir SSH bağlantısı açın ve proje kökümüzün içinde aşağıdakileri yürütün.

php artisan queue:work --once

Bu beklenen çıktıdır:

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

Günlüğün oluşturulduğunu doğrulayın.

cat storage/logs/laravel.log

Süpervizörü Yapılandırma

Kuyruğu manuel olarak işleme ihtiyacını ortadan kaldırmak için kullanacağız supervisord. İçinde aşağıdaki program yapılandırmasını oluşturun /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 yapılandırma dosyasını koymak için doğru yolun kurulumunuza bağlı olduğuna dikkat edin. Ayrıca, sisteminizdeki [PROJECT_ROOT]tam yolla değiştirmeyi unutmayın PROJECT_ROOT.

Burada Süpervizörü kuyruğu otomatik olarak işlemeye başlayacak ve kod kopması durumunda yeniden başlatacak şekilde yapılandırıyoruz. Ayrıca, tek bir çalışanı değil, 8 süreci somutlaştırdığımızı unutmayın. Uygulamanıza bağlı olarak gerekli bulduğunuz birçok işlemi somutlaştırmakta serbestsiniz.

Süpervizörün çalışanımızı yönetmesine izin vermek için onu yapılandırmasını yeniden okumaya zorlayın.

sudo supervisorctl reread
sudo supervisorctl update

Supervisor hizmeti başlatılmadıysa, çoğunu başlatmanız gerekir.

sudo systemctl start supervisord

Şimdi işlerin işlenip işlenmediğine bakalım.

tail -f storage/logs/laravel.log

Bir web tarayıcısında adresine gidin http://[vultr-instance-ip]:8000. Konsolunuzda oluşturulan günlükleri göreceksiniz.

Sonuç

Laravel uygulamasını, Beanstalk'u çalışma kuyruğu olarak kullanacak şekilde başarıyla yapılandırdık. Ayrıca, Süpervizörün çalışanları yönetmek için nasıl kullanıldığını gösterdik.



Leave a Comment

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Birçoğunuz Switch'in Mart 2017'de çıkacağını ve yeni özelliklerini biliyorsunuz. Bilmeyenler için, 'Switch'i 'olmazsa olmaz bir gadget' yapan özelliklerin bir listesini hazırladık.

Hala Teslim Edilmeyen Teknoloji Sözleri

Hala Teslim Edilmeyen Teknoloji Sözleri

Teknoloji devlerinin sözlerini yerine getirmesini mi bekliyorsunuz? teslim edilmeyenleri kontrol edin.

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Mimarisindeki farklı katmanları ve işlevlerini en basit şekilde öğrenmek için blogu okuyun.

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zekanın küçük ölçekli şirketler arasında nasıl popüler hale geldiğini ve onları büyütme ve rakiplerine üstünlük sağlama olasılıklarını nasıl artırdığını öğrenmek için bunu okuyun.

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA, son birkaç yılda kullanıcıların çözmesi oldukça zorlaştı. Gelecekte spam ve bot tespitinde etkili kalabilecek mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Bilim hızla gelişip birçok çabamızı üstlendikçe, kendimizi açıklanamaz bir Tekilliğe maruz bırakmanın riskleri de artıyor. Okuyun, tekillik bizim için ne anlama gelebilir.

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp, uzaktan sağlık hizmetleri ve gelecek nesiller üzerindeki etkisi nedir? Pandemi durumunda iyi bir yer mi değil mi? Bir görünüm bulmak için blogu okuyun!

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Bilgisayar korsanlarının çok para kazandığını duymuş olabilirsiniz, ancak bu kadar parayı nasıl kazandıklarını hiç merak ettiniz mi? Hadi tartışalım.

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

Son zamanlarda Apple, sorunları gidermek için macOS Catalina 10.15.4'ü ek bir güncelleme yayınladı, ancak güncelleme, mac makinelerinde tuğla oluşmasına neden olan daha fazla soruna neden oluyor gibi görünüyor. Daha fazla bilgi edinmek için bu makaleyi okuyun