Bagaimana untuk membina sistem baris gilir tugas yang sangat tersedia menggunakan PHP dan REDIS

WBOY
Lepaskan: 2023-07-21 21:48:02
asal
1546 orang telah melayarinya

Cara menggunakan PHP dan REDIS untuk membina sistem baris gilir tugas yang sangat tersedia

Dalam pembangunan aplikasi moden, sistem baris gilir tugas telah menjadi penyelesaian yang sangat biasa, yang boleh menguraikan tugasan kompleks dengan berkesan kepada satu siri tugasan kecil, dan memprosesnya secara tidak segerak , yang sangat meningkatkan prestasi dan kebolehskalaan sistem. Dalam kes konkurensi yang tinggi, cara membina sistem baris gilir tugas yang sangat tersedia telah menjadi isu yang sangat penting.

Artikel ini akan memperkenalkan cara menggunakan PHP dan REDIS untuk membina sistem baris gilir tugas yang sangat tersedia, di mana PHP berfungsi sebagai pengeluar tugas dan pengguna, dan REDIS berfungsi sebagai media penyimpanan dan penghantaran mesej untuk baris gilir tugas.

1. Persediaan persekitaran

Sebelum kita mula, kita perlu memasang PHP dan REDIS, yang boleh dipasang dengan cara berikut:

  1. Pasang PHP (>=7.0): Pada sistem Linux, anda boleh menggunakan apt- mendapatkan atau yum arahan Pemasangan pada sistem Windows, anda boleh memuat turun pakej pemasangan dan memasangnya terus.
  2. Pasang REDIS (>=3.0): Pada sistem Linux, anda boleh memasang REDIS melalui penyusunan kod sumber pada sistem Windows, anda boleh memuat turun pakej pemasangan dan memasangnya terus.

Apabila persekitaran sudah siap, kita boleh mula membina sistem giliran tugas yang sangat tersedia.

2. Reka bentuk idea sistem giliran tugas

Sistem giliran tugasan terdiri daripada tiga modul utama: pengeluar tugas, giliran tugas dan pengguna tugas. Pengeluar tugas bertanggungjawab untuk membuat tugasan dan menghantarnya ke baris gilir tugas, manakala pengguna tugas bertanggungjawab untuk mendapatkan tugas daripada baris gilir tugas dan memprosesnya.

Dalam artikel ini, kami akan menggunakan REDIS sebagai medium storan dan pemesejan untuk baris gilir tugas. REDIS ialah sistem storan nilai kunci berprestasi tinggi yang boleh menyokong penyimpanan dan operasi pelbagai struktur data dan sangat sesuai untuk membina sistem baris gilir tugas.

3. Pelaksanaan pengeluar tugas

Pertama, kita perlu menyambung ke REDIS dalam PHP dan menentukan fungsi untuk mencipta tugas. Berikut ialah contoh kod:

<?php

// 连接REDIS服务器
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 创建任务
function createTask($task)
{
    global $redis;
    
    // 生成唯一的任务ID
    $taskId = uniqid();
    
    // 将任务信息保存到REDIS中
    $redis->rpush('task_queue', json_encode(['id' => $taskId, 'task' => $task]));
    
    return $taskId;
}

// 调用示例
$taskId = createTask('doSomething');
echo "Create task succeed, task ID: " . $taskId;
?>
Salin selepas log masuk

Dalam kod di atas, kami mula-mula menyambung ke pelayan REDIS melalui kelas Redis, dan kemudian mentakrifkan fungsi yang dipanggil createTask() untuk mencipta tugas. Fungsi ini menukar maklumat tugas ke dalam format JSON dan menyimpannya ke REDIS melalui kaedah rpush() task_queue ialah nama baris gilir tempat tugasan disimpan. Akhir sekali, fungsi mengembalikan ID unik tugasan untuk kegunaan seterusnya.

4. Pelaksanaan tugas pengguna

Seterusnya, kita perlu menulis pengguna tugas untuk mendapatkan dan memproses tugasan. Berikut ialah contoh kod:

<?php

// 连接REDIS服务器
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 从任务队列中获取任务
function getTask()
{
    global $redis;
    
    // 从任务队列中获取任务信息
    $task = $redis->lpop('task_queue');
    
    // 解析JSON格式的任务信息
    $taskInfo = json_decode($task, true);
    
    // 返回任务
    return $taskInfo;
}

// 处理任务
function processTask($task)
{
    // 这里写具体的任务处理逻辑
    // ...
    echo "Processing task: " . $task['id'] . ", task name: " . $task['task'];
}

// 循环获取和处理任务
while (true) {
    $task = getTask();
    if ($task) {
        processTask($task);
    }
    sleep(1);
}
?>
Salin selepas log masuk

Dalam kod di atas, kami mula-mula menyambung ke pelayan REDIS melalui kelas Redis, dan kemudian mentakrifkan fungsi yang dipanggil getTask() untuk mendapatkan tugas daripada baris gilir tugas. Fungsi ini mendapatkan maklumat tugas daripada REDIS melalui kaedah lpop() dan menukarkannya kepada tatasusunan bersekutu. Kemudian, kami mentakrifkan fungsi bernama processTask() untuk memproses tugasan dan logik pemprosesan tugas khusus dilaksanakan dalam fungsi ini. Akhir sekali, kami menggunakan gelung untuk terus mengambil dan memproses tugas.

5. Ketersediaan sistem yang tinggi

Untuk mencapai ketersediaan sistem yang tinggi, kami perlu meneruskan tugas dan menggunakan berbilang nod. Berikut ialah beberapa penyelesaian yang mungkin:

  1. Kegigihan tugas: Sebelum pengeluar tugasan menghantar tugasan ke baris gilir, tugasan itu boleh disimpan ke medium storan yang berterusan, seperti pangkalan data. Dengan cara ini, walaupun REDIS gagal, tugas itu tidak akan hilang. Apabila pengguna tugasan memproses tugasan, ia boleh mendapatkan tugasan daripada pangkalan data dahulu dan kemudian menandakannya sebagai diproses. Dengan cara ini, walaupun pengguna tugas gagal, tugas itu tidak akan diproses berulang kali.
  2. Penyerahan berbilang nod: Untuk mencapai ketersediaan tinggi dan pengimbangan beban sistem, nod pengguna berbilang tugas boleh digunakan dan tugas boleh diberikan kepada nod yang berbeza menggunakan pengimbangan beban. Dengan cara ini, walaupun nod gagal, sistem masih boleh berjalan seperti biasa.

Kesimpulan

Melalui PHP dan REDIS, kami boleh membina sistem baris gilir tugas dengan mudah. Pengeluar tugas bertanggungjawab untuk mencipta tugas dan menghantarnya ke baris gilir tugas, manakala pengguna tugas bertanggungjawab untuk mendapatkan tugas daripada baris gilir tugas dan memprosesnya. Pada masa yang sama, kami boleh mencapai ketersediaan tinggi sistem melalui kegigihan dan penggunaan berbilang nod. Saya harap artikel ini berguna kepada anda, terima kasih kerana membaca!

Atas ialah kandungan terperinci Bagaimana untuk membina sistem baris gilir tugas yang sangat tersedia menggunakan PHP dan REDIS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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