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
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; } }
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) { // 处理任务逻辑 } }
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'); } }
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
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, ], ], ];
Seterusnya, Anda perlu memulakan pengurus Horizon dalam konsol:
php artisan horizon
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() { // 处理任务逻辑 } }
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'; } }
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!