>  기사  >  백엔드 개발  >  기본 분산 작업 스케줄링 설계에 PHP를 사용하는 방법

기본 분산 작업 스케줄링 설계에 PHP를 사용하는 방법

PHPz
PHPz원래의
2023-06-22 08:54:091750검색

현대 인터넷 애플리케이션의 지속적인 복잡성으로 인해 분산 시스템은 고가용성 및 고성능 애플리케이션을 구축하는 데 필수적인 기술이 되었습니다. 분산 작업 스케줄링도 중요한 부분입니다. 실행을 위해 작업을 여러 노드에 분산시켜 작업 효율성과 실행 속도를 향상시킬 수 있습니다. 이 기사에서는 기본적인 분산 작업 스케줄링 설계에 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.