Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan baris gilir untuk mengoptimumkan prestasi dalam pembangunan PHP

Cara menggunakan baris gilir untuk mengoptimumkan prestasi dalam pembangunan PHP

WBOY
WBOYasal
2023-06-27 13:01:371025semak imbas

Dengan perkembangan teknologi Internet yang berterusan, isu prestasi aplikasi Web telah menarik lebih banyak perhatian daripada pembangun Terutama apabila bilangan permintaan serentak meningkat, kelajuan tindak balas dan prestasi aplikasi cenderung menjadi lebih perlahan sistem untuk ranap. Untuk menyelesaikan masalah ini, pembangun mula mengambil pelbagai langkah pengoptimuman, antaranya penggunaan baris gilir menjadi penyelesaian yang lebih berkesan. Artikel ini akan memperkenalkan cara menggunakan baris gilir untuk pengoptimuman prestasi dalam pembangunan PHP.

1. Apakah baris gilir ialah struktur data yang boleh digunakan untuk menyusun elemen mengikut peraturan tertentu dan mengekalkan susunan ini apabila elemen ditambah dan dipadam. Dalam sains komputer, baris gilir sering digunakan untuk mengendalikan sejumlah besar mesej untuk mengelakkan lonjakan serta-merta yang menimpa sistem. Baris gilir mempunyai ciri-ciri first-in-first-out (FIFO), iaitu elemen yang ditambahkan pada baris gilir dahulu diproses terlebih dahulu.

2. Mengapa menggunakan baris gilir

Dalam aplikasi web, terdapat banyak tugas yang memakan banyak masa dan sumber CPU, seperti menghantar e-mel, menjana PDF, dsb. Jika tugasan ini dilakukan secara langsung sebagai tindak balas kepada permintaan pengguna, adalah mudah untuk menyebabkan aplikasi bertindak balas dengan perlahan, malah menyebabkan sistem ranap. Penggunaan baris gilir boleh memperuntukkan tugas ini kepada proses tak segerak untuk pelaksanaan, dengan itu mengurangkan beban kerja aplikasi dan meningkatkan kelajuan tindak balas dan prestasi aplikasi.

3. Cara menggunakan baris gilir

Barisan boleh dilaksanakan dalam pelbagai cara dalam PHP, seperti Redis, Beanstalkd, Message Queue, dll. Sebelum memperkenalkan kaedah pelaksanaan khusus, kita perlu memahami dua konsep penting baris gilir: pengeluar dan pengguna.

Penerbit: Program atau modul yang meletakkan tugasan yang perlu dilaksanakan ke dalam baris gilir. Dalam pembangunan PHP, pengeluar boleh dilaksanakan dengan menulis data tugasan ke baris gilir mesej.

Pengguna: Mendapat tugas daripada baris gilir dan melaksanakannya, dan akhirnya mengembalikan hasil pelaksanaan kepada pengeluar. Dalam pembangunan PHP, pengguna boleh mendapatkan tugas dengan mendengar baris gilir mesej, dan kemudian melaksanakan data tugas selepas mengeluarkannya.

Dalam aplikasi praktikal, biasanya terdapat berbilang pengguna mendengar baris gilir pada masa yang sama. Jika terdapat berbilang tugasan menunggu untuk dilaksanakan dalam baris gilir, pengguna akan memprosesnya mengikut urutan mengikut peraturan, seperti beratur, selari, mengimbangi beban, dsb.

Yang berikut menggunakan Redis dan Beanstalkd sebagai contoh untuk memperkenalkan cara menggunakan baris gilir untuk pengoptimuman prestasi dalam PHP.

Redis

Redis ialah pangkalan data dalam memori yang popular yang menyokong pelbagai struktur data, seperti rentetan, cincang, senarai, set, set tersusun, dsb. Fungsi baris gilir mudah boleh dilaksanakan dengan menulis data tugasan ke senarai Redis.

Seandainya ada tugas untuk menghantar e-mel, kita perlu menambah tugas ini ke dalam baris gilir. Anda boleh menggunakan kod berikut:

$redis = new Redis();
$redis->connect('localhost', 6379);

$taskData = [
    'to' => 'example@test.com',
    'subject' => 'Test Email',
    'content' => 'This is a test email.',
];

$redis->rpush('email_queue', json_encode($taskData));

Kod di atas menggunakan arahan rpush Redis untuk menambah data tugas pada senarai bernama email_queue. Seterusnya, kita perlu menulis skrip pengguna untuk mendapatkan tugas daripada baris gilir dan melaksanakannya. Berikut ialah contoh mudah menghantar e-mel kepada pengguna:

$redis = new Redis();
$redis->connect('localhost', 6379);

while (true) {
    $taskData = $redis->blpop('email_queue', 0)[1];
    $task = json_decode($taskData, true);
    
    // 发送邮件
    $result = sendEmail($task['to'], $task['subject'], $task['content']);
    
    // 处理结果
    if ($result) {
        // 发送成功,记录日志等
    } else {
        // 发送失败,重试或记录日志等
    }
}

Kod di atas menggunakan arahan blpop Redis untuk mendapatkan tugasan daripada email_queue. Perintah ini menyekat proses pengguna sehingga terdapat tugasan dalam baris gilir untuk diproses. Selepas mendapat tugasan, kami menghuraikan data tugasan dan menggunakan fungsi sendEmail untuk menghantar e-mel Akhirnya, kami melakukan pengelogan dan pemprosesan seterusnya yang lain berdasarkan hasil penghantaran.

Beanstalkd

Beanstalkd adalah perkhidmatan giliran ringan yang sangat mudah digunakan. Dengan menambahkan data tugas pada baris gilir, ia disediakan kepada proses pengguna untuk diproses.

Andaikata ada tugasan untuk menjana PDF, kita perlu menambah tugas ini pada baris gilir. Kod berikut boleh digunakan:

$pheanstalk = new Pheanstalk('localhost');

$taskData = [
    'template' => 'invoice',
    'data' => [
        'invoice_id' => 1234,
        'amount' => 100,
        // ...
    ],
];

$pheanstalk->putInTube('pdf_generation', json_encode($taskData));

Kod di atas menggunakan perpustakaan Pheanstalk untuk menambah data tugasan pada tiub bernama pdf_generation. Tiub adalah serupa dengan senarai dalam Redis Dalam Beanstalkd, berbilang tiub boleh dikonfigurasikan supaya tugas yang berbeza menggunakan tiub yang berbeza untuk berkomunikasi.

Seterusnya, kita perlu menulis skrip pengguna untuk mendapatkan tugasan daripada baris gilir dan melaksanakannya. Berikut ialah contoh pengguna generasi PDF yang mudah:

$pheanstalk = new Pheanstalk('localhost');

while (true) {
    $job = $pheanstalk->watchOnly('pdf_generation')->reserve();
    $taskData = $job->getData();
    $task = json_decode($taskData, true);
    
    // 生成PDF
    $result = generatePDF($task['template'], $task['data']);
    
    // 处理结果
    if ($result) {
        // 生成成功,记录日志等
    } else {
        // 生成失败,重试或记录日志等
    }
    
    $pheanstalk->delete($job);
}

Kod di atas menggunakan kaedah rizab dan padam perpustakaan Pheanstalk untuk mendapatkan tugasan daripada tiub pdf_generation. Kaedah rizab menyekat proses pengguna sehingga terdapat tugasan dalam baris gilir untuk diproses. Selepas mendapat tugasan, kami menghuraikan data tugasan dan menggunakan fungsi generatePDF untuk menjana fail PDF Akhir sekali, kami melakukan pemprosesan seterusnya seperti pengelogan berdasarkan hasil yang dihasilkan. Akhir sekali, ingat untuk menggunakan kaedah padam untuk menandakan tugas sebagai selesai.

4. Nota

Apabila menggunakan baris gilir untuk pengoptimuman prestasi, anda perlu memberi perhatian kepada perkara berikut:

Kaedah pelaksanaan baris gilir yang berbeza akan membawa kepada prestasi dan kestabilan yang berbeza. Kaedah pelaksanaan baris gilir yang sesuai perlu dipilih berdasarkan senario aplikasi sebenar.
  1. Apabila pelaksanaan tugas gagal, pemprosesan seterusnya diperlukan, seperti mencuba semula atau mengelog.
  2. Apabila terdapat terlalu banyak tugasan dalam baris gilir atau masa pemprosesan tugasan terlalu lama, pengimbangan beban harus dipertimbangkan untuk mengelakkan pengguna tertentu terlalu sibuk.
  3. Disebabkan sifat asynchronous baris gilir, keputusan pelaksanaan tugas tidak boleh diperolehi dengan segera. Jika anda perlu mendapatkan hasil pelaksanaan tugas dengan segera, anda boleh menggunakan kaedah lain untuk mencapainya.
  4. 5

    Menggunakan baris gilir ialah cara yang berkesan untuk mengoptimumkan prestasi aplikasi web Dalam pembangunan PHP, dengan menulis data tugasan ke baris gilir mesej, tugasan intensif sumber atau memakan masa boleh diberikan kepada proses tak segerak untuk pelaksanaan, dengan itu meringankan beban aplikasi untuk menambah baik sistem. kelajuan tindak balas dan prestasi. Dalam aplikasi sebenar, adalah perlu untuk memilih kaedah pelaksanaan baris gilir yang sesuai mengikut situasi sebenar, dan memberi perhatian kepada isu seperti kegagalan pelaksanaan tugas dan pengimbangan beban.

Atas ialah kandungan terperinci Cara menggunakan baris gilir untuk mengoptimumkan prestasi dalam pembangunan PHP. 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