Rumah  >  Artikel  >  rangka kerja php  >  Amalan swoole: membina sistem baris gilir berprestasi tinggi

Amalan swoole: membina sistem baris gilir berprestasi tinggi

王林
王林asal
2023-06-13 08:49:031489semak imbas

Dengan perkembangan pesat Internet, pelbagai senario keselarasan tinggi menjadi semakin biasa. Dalam senario ini, sistem baris gilir tradisional sering mengalami kesesakan prestasi dan tidak dapat memenuhi keperluan masa nyata. Untuk menyelesaikan masalah ini, Swoole, sebagai rangka kerja komunikasi rangkaian berprestasi tinggi yang dipacu peristiwa, telah menjadi pilihan yang sangat baik. Dalam artikel ini, kami akan membincangkan cara menggunakan Swoole untuk membina sistem baris gilir berprestasi tinggi untuk menghadapi cabaran dalam senario perniagaan berkonkurensi tinggi.

1. Apakah itu sistem giliran

Pertama sekali, kita perlu memahami apa itu sistem giliran. Sistem giliran ialah struktur data yang digunakan untuk menyimpan tugas atau mesej yang perlu diproses dan diproses dalam susunan tertentu. Biasanya, sistem baris gilir menggunakan kaedah FIFO (masuk dahulu, keluar dahulu) untuk memproses tugas atau mesej. Apabila tugas atau mesej dimasukkan ke dalam baris gilir, ia menjadi ekor baris gilir Apabila tugas atau mesej perlu diproses, pemprosesan bermula dari kepala baris gilir. Sistem baris gilir biasanya digunakan untuk mengendalikan senario perniagaan bermuatan tinggi, berkonkurensi tinggi dan ketersediaan tinggi, seperti platform e-dagang, platform sosial, platform permainan, dsb.

2 Pengenalan kepada Swoole

Swoole ialah rangka kerja komunikasi rangkaian berprestasi tinggi berasaskan PHP, dengan ciri seperti coroutine, IO tak segerak, berbilang proses dan berbilang- benang. Ia boleh membantu aplikasi PHP mencapai prestasi dan kebolehskalaan yang lebih baik dalam senario perniagaan konkurensi tinggi. Swoole telah menjadi rangka kerja komunikasi rangkaian berprestasi tinggi yang paling popular dalam bahasa PHP. Swoole mempunyai pengaturcaraan rangkaian TCP/UDP tak segerak terbina dalam, sistem fail tak segerak, pelayan rangkaian coroutine, tugas tak segerak, penggunaan teragih, SQLite tak segerak dan fungsi lain. Berbanding dengan aplikasi PHP tradisional, aplikasi yang dibangunkan menggunakan Swoole boleh mencapai kelajuan tindak balas yang lebih pantas, kurang penggunaan sumber, keupayaan serentak yang lebih tinggi dan kelebihan lain.

3. Gunakan Swoole untuk membina sistem baris gilir

Berdasarkan pengenalan di atas, kita boleh menggunakan Swoole untuk membina sistem baris gilir berprestasi tinggi. Langkah-langkah khusus adalah seperti berikut:

1 Reka struktur baris gilir

Memandangkan sistem baris gilir terutamanya menggunakan FIFO untuk memproses tugas atau mesej, kami perlu mereka bentuk struktur baris gilir yang mematuhi peraturan FIFO. . Struktur baris gilir boleh dilaksanakan menggunakan struktur data seperti tatasusunan dan senarai terpaut.

2. Melaksanakan baris gilir tugas tak segerak berdasarkan Swoole

Dalam proses menggunakan Swoole untuk membina sistem baris gilir, kita perlu melaksanakan baris gilir tugas tak segerak. Barisan tugas tak segerak adalah berbeza daripada baris gilir tugas biasa Apabila menggunakan baris gilir tugas tak segerak untuk pemprosesan tugas, sistem tidak akan menyekat menunggu selesai tugasan. Pendekatan ini boleh meningkatkan daya pengeluaran dan kecekapan sistem.

3. Gunakan Swoole untuk melaksanakan pengguna dan pengeluar barisan

Dalam sistem giliran, terdapat pengguna dan pengeluar. Pengeluar juga bertanggungjawab untuk menolak tugasan ke dalam baris gilir, dan pengguna bertanggungjawab untuk mengalih keluar tugas daripada baris gilir dan melaksanakannya. Apabila menggunakan Swoole untuk membina sistem baris gilir, kita boleh menggunakan coroutine untuk melaksanakan pengguna dan pengeluar.

4. Gunakan Swoole untuk melaksanakan baris gilir teragih

Untuk keperluan perniagaan serentak yang tinggi, kami mungkin perlu membina sistem baris gilir teragih. Sistem baris gilir jenis ini boleh mengagihkan tugas dalam baris gilir kepada berbilang pelayan untuk diproses bagi mempercepatkan pemprosesan tugasan. Apabila menggunakan Swoole untuk membina sistem baris gilir teragih, anda boleh menggunakan fungsi penempatan teragih yang disediakan oleh Swoole untuk mencapai ini.

Di atas adalah langkah asas untuk menggunakan Swoole untuk membina sistem baris gilir berprestasi tinggi. Seterusnya, kami akan mengambil laman web e-dagang sebagai contoh untuk menerangkan secara terperinci cara menggunakan Swoole untuk membina sistem baris gilir berprestasi tinggi.

4. Gunakan Swoole untuk membina baris gilir pemprosesan pesanan tapak web e-dagang

Dalam laman web e-dagang, pemprosesan pesanan adalah perniagaan yang sangat penting. Untuk menghadapi senario perniagaan yang berkonkurensi tinggi dan beban tinggi, kami boleh menggunakan Swoole untuk membina baris gilir pemprosesan pesanan berprestasi tinggi. Berikut ialah langkah khusus:

1 Reka bentuk struktur baris gilir pemprosesan pesanan

Kita boleh menggunakan tatasusunan untuk melaksanakan baris gilir pemprosesan pesanan dan menggunakan prinsip FIFO untuk pemprosesan tugas.

// 订单处理队列结构
$orderQueue = array();

2. Laksanakan baris gilir tugas tak segerak berdasarkan Swoole

Menggunakan fungsi Task Worker yang disediakan oleh Swoole, baris gilir tugas tak segerak boleh dilaksanakan.

// Swoole异步任务队列
$serv = new SwooleServer("127.0.0.1", 9501);
$serv->set(array(
    'task_worker_num' => 4,
));

$serv->on('receive', function($serv, $fd, $from_id, $data) {
    $task_id = $serv->task($data);
    echo "Dispath AsyncTask: id=$task_id
";
});

$serv->on('task', function ($serv, $task_id, $from_id, $data) use ($orderQueue) {
    $orderQueue[] = $data;
    echo "New Task: id=$task_id, data=$data
";
});

$serv->on('finish', function ($serv, $task_id, $data) {
    echo "Task Finished: id=$task_id, data=$data
";
});

$serv->start();

3. Gunakan Swoole untuk melaksanakan baris gilir pengguna dan pengeluar

Di pihak pengguna, kami boleh menggunakan coroutine untuk memproses tugas. Di pihak pengeluar, kami hanya menolak tugasan ke dalam baris gilir.

// 消费者
Coun(function () use ($orderQueue) {
    while (true) {
        if (!empty($orderQueue)) {
            $order = array_shift($orderQueue);
            // 处理订单
            echo "Processing Order: $order
";
        }
        Co::sleep(0.1);
    }
});

// 生产者
for ($i = 1; $i <= 10000; $i++) {
    $data = "Order $i";
    $client = new SwooleClient(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
    $client->on("connect", function($cli) use ($data){
        $cli->send($data . PHP_EOL);
    });
    $client->connect('127.0.0.1', 9501, 0.5);
}

4. Gunakan Swoole untuk melaksanakan baris gilir teragih

Untuk menghadapi konkurensi yang lebih tinggi, kami boleh menggunakan fungsi teragih yang disediakan oleh Swoole untuk memproses tugas pada berbilang pelayan.

// 生产者端
for ($i = 1; $i <= 10000; $i++) {
    $data = "Order $i";
    $server_list = array(
        array('host'=>'192.168.0.100', 'port'=>9501),
        array('host'=>'192.168.0.101', 'port'=>9501),
        array('host'=>'192.168.0.102', 'port'=>9501),
        array('host'=>'192.168.0.103', 'port'=>9501),
    );
    $client = new SwooleClient(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
    $client->on("connect", function($cli) use ($data) {
        $cli->send($data . PHP_EOL);
    });
    $client->connect($server_list[array_rand($server_list)]['host'],
                     $server_list[array_rand($server_list)]['port'], 0.5);
}

// 服务端
$serv = new SwooleServer("127.0.0.1", 9501);

$serv->set(array(
    'task_worker_num' => 4,
    'worker_num' => 4,
    'task_ipc_mode' => 3,
    'message_queue_key' => 0x70001001,
));

$serv->on('receive', function($serv, $fd, $from_id, $data) {
    $task_id = $serv->task($data);
    echo "Dispath AsyncTask: id=$task_id
";
});

$serv->on('task', function ($serv, $task_id, $from_id, $data) use ($orderQueue) {
    $orderQueue[] = $data;
    echo "New Task: id=$task_id, data=$data
";
    $serv->finish($data);
});

$serv->on('finish', function ($serv, $task_id, $data) {
    echo "Task Finished: id=$task_id, data=$data
";
});

$serv->start();

Dengan kod di atas, kami berjaya menggunakan Swoole untuk membina baris gilir pemprosesan pesanan berprestasi tinggi. Sistem baris gilir ini bukan sahaja dapat mengatasi senario konkurensi tinggi dan beban tinggi, tetapi juga menyokong penggunaan teragih. Kita boleh membina senario perniagaan yang lebih kompleks dan cekap dengan mengoptimumkan sistem baris gilir asas ini.

5. Ringkasan

Artikel ini terutamanya membincangkan cara menggunakan Swoole untuk membina sistem baris gilir berprestasi tinggi untuk menghadapi senario perniagaan yang berkonkurensi tinggi dan beban tinggi. Melalui contoh di atas, kami memperkenalkan secara terperinci baris gilir tugas tak segerak, pengguna dan pengeluar berdasarkan Swoole, serta kaedah pembinaan baris gilir yang diedarkan. Saya harap artikel ini akan membantu pembaca memahami dan menggunakan Swoole untuk membina sistem baris gilir berprestasi tinggi.

Atas ialah kandungan terperinci Amalan swoole: membina sistem baris gilir berprestasi tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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