Cara menggunakan PHP untuk reka bentuk penjadualan tugas teragih asas

PHPz
Lepaskan: 2023-06-22 09:12:01
asal
1760 orang telah melayarinya

Dengan kerumitan berterusan aplikasi Internet moden, sistem yang diedarkan telah menjadi teknologi penting untuk membina aplikasi ketersediaan tinggi dan berprestasi tinggi. Penjadualan tugas teragih juga merupakan bahagian penting daripadanya. Ia boleh menyuraikan tugas ke nod yang berbeza untuk pelaksanaan, meningkatkan kecekapan tugas dan kelajuan pelaksanaan. Dalam artikel ini, kami akan memperkenalkan cara menggunakan PHP untuk reka bentuk penjadualan tugas teragih asas.

1. Fahami konsep penjadualan tugas teragih

Dalam sistem teragih, untuk mengagihkan tugas kepada nod yang berbeza untuk pelaksanaan, biasanya perlu mereka bentuk sistem penjadualan tugas. Sistem ini boleh memperuntukkan tugas kepada nod terbiar untuk pelaksanaan, dan boleh melaraskan peruntukan tugas secara dinamik mengikut beban nod. Dengan cara ini, anda boleh memanfaatkan sistem yang diedarkan untuk melaksanakan tugas pada berbilang nod secara serentak, meningkatkan kecekapan pelaksanaan dan kelajuan tindak balas.

2. Reka bentuk rangka kerja untuk penjadualan tugas teragih

Dalam PHP, pelbagai rangka kerja boleh digunakan untuk mereka bentuk sistem penjadualan tugas teragih. Antaranya, rangka kerja yang paling biasa digunakan ialah Symfony dan Laravel. Kedua-dua rangka kerja menyediakan komponen dan sambungan yang berkaitan untuk penjadualan tugas teragih, yang boleh membina sistem penjadualan tugas yang stabil dan cekap dengan cepat.

1. Gunakan rangka kerja Symfony

Dalam rangka kerja Symfony, anda boleh menggunakan komponen Messenger untuk melaksanakan penjadualan tugas teragih. Pengutus Mesej ialah komponen pemesejan tak segerak yang boleh menghantar mesej ke baris gilir yang berbeza dan mengeluarkan mesej daripada baris gilir kepada pekerja untuk diproses. Komponen ini sangat sesuai untuk senario seperti penjadualan tugas dan tugas tak segerak dalam sistem teragih.

Mula-mula, anda perlu memasang komponen Messenger dalam projek:

composer require symfony/messenger
Salin selepas log masuk

Kemudian, tentukan kelas mesej dalam aplikasi:

// src/Message/ExampleMessage.php

namespace AppMessage;

final class ExampleMessage
{
    private $text;

    public function __construct(string $text)
    {
        $this->text = $text;
    }

    public function getText(): string
    {
        return $this->text;
    }
}
Salin selepas log masuk

Kelas ini mewakili tugas yang perlu diproses, Mengandungi atribut teks.

Seterusnya, anda perlu menulis pengendali mesej untuk memproses mesej ini:

// src/MessageHandler/ExampleMessageHandler.php

namespace AppMessageHandler;

use AppMessageExampleMessage;

final class ExampleMessageHandler
{
    public function __invoke(ExampleMessage $message)
    {
        // 处理任务逻辑
    }
}
Salin selepas log masuk

Akhir sekali, buat pengeluar mesej untuk menghantar mesej ke baris gilir mesej:

// src/Controller/ExampleController.php

namespace AppController;

use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentMessengerMessageBusInterface;
use AppMessageExampleMessage;

final class ExampleController
{
    public function index(MessageBusInterface $bus): Response
    {
        $bus->dispatch(new ExampleMessage('hello'));

        return new Response('Task scheduled');
    }
}
Salin selepas log masuk

Menggunakan Rangka kerja Symfony dan komponen Messenger, anda boleh membina sistem penjadualan tugas teragih dengan cepat. Anda hanya perlu menentukan kelas mesej, pengendali mesej dan pengeluar mesej, dan tugas boleh diberikan kepada nod yang berbeza untuk dilaksanakan.

2. Gunakan rangka kerja Laravel

Dalam rangka kerja Laravel, anda boleh menggunakan sambungan Horizon untuk melaksanakan penjadualan tugas teragih. Horizon ialah pengurus penjadualan tugas rasmi Laravel Ia boleh memperuntukkan tugas kepada baris gilir yang berbeza dan melaraskan peruntukan tugas secara dinamik berdasarkan beban baris gilir. Horizon juga menyediakan satu set alat pemantauan berkuasa yang boleh membantu pembangun menjejaki keputusan pelaksanaan tugas dan penjadualan dalam masa nyata.

Untuk menggunakan sambungan Horizon, anda perlu memasang sambungan terlebih dahulu:

composer require laravel/horizon
Salin selepas log masuk

Kemudian, anda perlu menentukan baris gilir dan pemandu gilir untuk digunakan dalam fail konfigurasi:

// config/queue.php

return [
    'default' => env('QUEUE_CONNECTION', 'redis'),

    'connections' => [
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => ['default', 'high', 'low'],
            'retry_after' => 90,
            'block_for' => null,
        ],
    ],
];
Salin selepas log masuk

Seterusnya, Anda perlu memulakan pengurus Horizon dalam konsol:

php artisan horizon
Salin selepas log masuk

Sekarang, anda boleh menentukan kelas tugas dalam aplikasi dan menghantar tugasan ke baris gilir yang ditentukan:

// app/Jobs/ExampleJob.php

namespace AppJobs;

use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;

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

    protected $text;

    public function __construct($text)
    {
        $this->text = $text;
    }

    public function handle()
    {
        // 处理任务逻辑
    }
}
Salin selepas log masuk

Anda boleh meletakkannya dalam pengawal Hantar tugasan ke baris gilir yang ditentukan:

// app/Http/Controllers/ExampleController.php

namespace AppHttpControllers;

use AppJobsExampleJob;

class ExampleController extends Controller
{
    public function index()
    {
        ExampleJob::dispatch('hello')->onQueue('default');

        return 'Task scheduled';
    }
}
Salin selepas log masuk

Menggunakan rangka kerja Laravel dan sambungan Horizon, anda boleh membina sistem penjadualan tugas teragih dengan cepat. Anda hanya perlu mentakrifkan kelas tugasan dan menghantar tugasan ke baris gilir yang ditentukan, dan tugas itu boleh diberikan kepada nod yang berbeza untuk dilaksanakan.

3. Ringkasan

Artikel ini memperkenalkan cara menggunakan Php untuk melaksanakan reka bentuk penjadualan tugas teragih asas. Dalam aplikasi sebenar, ia juga perlu untuk memilih komponen dan alatan sistem teragih yang sesuai berdasarkan senario dan keperluan perniagaan tertentu, dan mereka bentuk sistem penjadualan tugas teragih yang stabil, cekap dan berskala.

Atas ialah kandungan terperinci Cara menggunakan PHP untuk reka bentuk penjadualan tugas teragih asas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan