현대 인터넷 애플리케이션의 지속적인 복잡성으로 인해 분산 시스템은 고가용성 및 고성능 애플리케이션을 구축하는 데 필수적인 기술이 되었습니다. 분산 작업 스케줄링도 중요한 부분입니다. 실행을 위해 작업을 여러 노드에 분산시켜 작업 효율성과 실행 속도를 향상시킬 수 있습니다. 이 기사에서는 기본적인 분산 작업 스케줄링 설계에 PHP를 사용하는 방법을 소개합니다.
1. 분산 작업 스케줄링의 개념을 이해합니다
분산 시스템에서 실행을 위해 작업을 여러 노드에 분산하려면 일반적으로 작업 스케줄링 시스템을 설계해야 합니다. 이 시스템은 실행을 위해 유휴 노드에 작업을 할당할 수 있으며 노드의 로드에 따라 작업 할당을 동적으로 조정할 수 있습니다. 이러한 방식으로 분산 시스템을 활용하여 여러 노드에서 작업을 동시에 실행하여 실행 효율성과 응답 속도를 향상시킬 수 있습니다.
2. 분산 작업 스케줄링을 위한 프레임워크 설계
PHP에서는 다양한 프레임워크를 사용하여 분산 작업 스케줄링 시스템을 설계할 수 있습니다. 그 중 가장 일반적으로 사용되는 프레임워크는 Symfony와 Laravel입니다. 두 프레임워크 모두 분산 작업 예약을 위한 관련 구성 요소와 확장을 제공하므로 안정적이고 효율적인 작업 예약 시스템을 신속하게 구축할 수 있습니다.
1. Symfony 프레임워크 사용
Symfony 프레임워크에서는 메신저 구성 요소를 사용하여 분산 작업 예약을 구현할 수 있습니다. 메신저는 메시지를 다른 대기열로 보내고 처리를 위해 대기열에서 작업자에게 메시지를 가져올 수 있는 비동기 메시징 구성 요소입니다. 이 구성 요소는 분산 시스템의 작업 예약 및 비동기 작업과 같은 시나리오에 매우 적합합니다.
먼저 프로젝트에 메신저 구성 요소를 설치해야 합니다.
composer require symfony/messenger
그런 다음 애플리케이션에서 메시지 클래스를 정의합니다.
// 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; } }
이 클래스는 처리할 작업을 나타내며 텍스트 속성을 포함합니다.
다음으로 이러한 메시지를 처리하는 메시지 핸들러를 작성해야 합니다.
// src/MessageHandler/ExampleMessageHandler.php namespace AppMessageHandler; use AppMessageExampleMessage; final class ExampleMessageHandler { public function __invoke(ExampleMessage $message) { // 处理任务逻辑 } }
마지막으로 메시지 대기열에 메시지를 보내는 메시지 생성자를 만듭니다.
// 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'); } }
Symfony 프레임워크와 메신저 구성 요소를 사용하면 배포를 빠르게 구축할 수 있습니다. 작업 스케줄링 시스템. 메시지 클래스, 메시지 핸들러 및 메시지 생성자를 정의하기만 하면 되며 작업은 실행을 위해 다른 노드에 할당될 수 있습니다.
2. Laravel 프레임워크 사용
Laravel 프레임워크에서는 Horizon 확장을 사용하여 분산 작업 스케줄링을 구현할 수 있습니다. Horizon은 Laravel의 공식 작업 스케줄링 관리자로 작업을 다양한 대기열에 할당하고 대기열 로드에 따라 작업 할당을 동적으로 조정할 수 있습니다. Horizon은 또한 개발자가 작업 실행 결과와 일정을 실시간으로 추적하는 데 도움이 되는 강력한 모니터링 도구 세트를 제공합니다.
Horizon 확장을 사용하려면 먼저 이 확장을 설치해야 합니다.
composer require laravel/horizon
그런 다음 구성 파일에서 사용할 대기열 및 대기열 드라이버를 정의해야 합니다.
// 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, ], ], ];
그런 다음 Horizon 관리자를 시작해야 합니다. 콘솔에서:
php artisan horizon
이제 애플리케이션에서 작업 클래스를 정의하고 지정된 대기열로 작업을 보낼 수 있습니다:
// 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() { // 处理任务逻辑 } }
컨트롤러의 지정된 대기열로 작업을 보낼 수 있습니다:
// app/Http/Controllers/ExampleController.php namespace AppHttpControllers; use AppJobsExampleJob; class ExampleController extends Controller { public function index() { ExampleJob::dispatch('hello')->onQueue('default'); return 'Task scheduled'; } }
Laravel 프레임워크 사용 Horizon 확장을 통해 분산 작업 스케줄링 시스템을 빠르게 구축할 수 있습니다. 작업 클래스를 정의하고 작업을 지정된 대기열로 보내기만 하면 작업을 실행을 위해 다른 노드에 할당할 수 있습니다.
3. 요약
이 글에서는 PHP를 사용하여 기본적인 분산 작업 스케줄링 설계를 수행하는 방법을 소개합니다. 실제 응용 프로그램에서는 특정 비즈니스 시나리오 및 요구 사항에 따라 적절한 분산 시스템 구성 요소와 도구를 선택하고 안정적이고 효율적이며 확장 가능한 분산 작업 스케줄링 시스템을 설계하는 것도 필요합니다.
위 내용은 기본 분산 작업 스케줄링 설계에 PHP를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!