PHP を使用して基本的な分散タスク スケジューリング設計を行う方法

PHPz
リリース: 2023-06-22 09:12:01
オリジナル
1759 人が閲覧しました

現代のインターネット アプリケーションは継続的に複雑になっているため、分散システムは高可用性と高性能のアプリケーションを構築するために不可欠なテクノロジとなっています。分散タスク スケジューリングもその重要な部分であり、タスクを異なるノードに分散して実行し、タスクの効率と実行速度を向上させることができます。この記事では、PHP を使用して基本的な分散タスク スケジューリングの設計を行う方法を紹介します。

1. 分散タスク スケジューリングの概念を理解する

分散システムでは、タスクを異なるノードに分散して実行するために、通常、タスク スケジューリング システムを設計する必要があります。このシステムは、アイドル状態のノードにタスクを割り当てて実行することができ、ノードの負荷に応じてタスクの割り当てを動的に調整できます。このように、分散システムを活用して複数のノードでタスクを同時に実行することができ、実行効率と応答速度が向上します。

2. 分散タスク スケジューリングのフレームワークを設計する

PHP では、さまざまなフレームワークを使用して分散タスク スケジューリング システムを設計できます。その中でも、最もよく使われるフレームワークは Symfony と Laravel です。どちらのフレームワークも、分散タスク スケジューリングに関連するコンポーネントと拡張機能を提供しており、安定した効率的なタスク スケジューリング システムを迅速に構築できます。

1. Symfony フレームワークを使用する

Symfony フレームワークでは、メッセンジャー コンポーネントを使用して分散タスク スケジューリングを実装できます。 Messenger は、さまざまなキューにメッセージを送信したり、キューからメッセージを取り出してワーカーに渡して処理できる非同期メッセージング コンポーネントです。このコンポーネントは、分散システムにおけるタスクのスケジューリングや非同期タスクなどのシナリオに非常に適しています。

まず、プロジェクトにメッセンジャー コンポーネントをインストールする必要があります:

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 フレームワークと Messenger コンポーネントを使用すると、分散タスク スケジューリング システムを迅速に構築できます。メッセージ クラス、メッセージ ハンドラー、メッセージ プロデューサを定義するだけで、タスクを別のノードに割り当てて実行できます。

2. Laravel フレームワークの使用

Laravel フレームワークでは、Horizo​​n 拡張機能を使用して分散タスク スケジューリングを実装できます。 Horizo​​n は Laravel の公式タスク スケジューリング マネージャーで、タスクをさまざまなキューに割り当て、キューの負荷に基づいてタスクの割り当てを動的に調整できます。 Horizo​​n は、開発者がタスクの実行結果とスケジュールをリアルタイムで追跡するのに役立つ一連の強力な監視ツールも提供します。

Horizo​​n 拡張機能を使用するには、まずこの拡張機能をインストールする必要があります:

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,
        ],
    ],
];
ログイン後にコピー

次に、コンソールで Horizo​​n マネージャーを起動する必要があります:

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 フレームワークと Horizo​​n 拡張機能を使用すると、分散タスク スケジューリング システムをすばやく構築できます。タスク クラスを定義し、指定したキューにタスクを送信するだけで、タスクを別のノードに割り当てて実行できます。

3. 概要

この記事では、Php を使用して基本的な分散タスク スケジューリング設計を実行する方法を紹介します。実際のアプリケーションでは、特定のビジネス シナリオやニーズに基づいて適切な分散システム コンポーネントやツールを選択し、安定性、効率性、スケーラブルな分散タスク スケジューリング システムを設計することも必要です。

以上がPHP を使用して基本的な分散タスク スケジューリング設計を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート