Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mesej Swoole dan Workerman beratur dan storan data yang diedarkan untuk ketersediaan tinggi dan ketekalan data

Mesej Swoole dan Workerman beratur dan storan data yang diedarkan untuk ketersediaan tinggi dan ketekalan data

WBOY
WBOYasal
2023-10-15 11:57:271291semak imbas

Mesej Swoole dan Workerman beratur dan storan data yang diedarkan untuk ketersediaan tinggi dan ketekalan data

Swoole dan Workerman ialah dua rangka kerja PHP yang popular, kedua-duanya mempunyai baris gilir mesej yang berkuasa dan fungsi storan data teragih. Artikel ini akan menumpukan pada ketersediaan tinggi dan ketekalan data mereka, serta memberikan contoh kod khusus.

1. Ketersediaan Tinggi

Ketersediaan tinggi merujuk kepada keupayaan sistem untuk terus beroperasi secara normal walaupun menghadapi kegagalan atau keadaan tidak normal. Dalam baris gilir mesej dan storan data teragih, ketersediaan yang tinggi adalah penting kerana ia berkaitan secara langsung dengan kestabilan dan kebolehpercayaan sistem.

  1. Ketersediaan tinggi Swoole

Swoole menyediakan pelbagai cara untuk mencapai ketersediaan tinggi Berikut adalah beberapa kaedah yang biasa digunakan:

(1) Gunakan fungsi mula semula pantas Swoole Apabila kegagalan ditemui dalam perkhidmatan, anda boleh dengan pantas mulakan semula untuk memulihkan perkhidmatan dan mengurangkan masa terputus perkhidmatan.

(2) Gunakan alat pengurusan proses Swoole untuk memastikan kestabilan sistem dengan memantau status proses dan memulakan semula atau memulakan semula proses yang gagal dengan kerap.

(3) Melalui fungsi kluster Swoole, baris gilir mesej dan storan data teragih tersebar pada nod yang berbeza Apabila nod gagal, nod lain boleh mengambil alih kerjanya dan mengekalkan kesinambungan sistem.

Berikut ialah contoh kod menggunakan Swoole untuk melaksanakan baris gilir mesej:

<?php

$server = new SwooleServer('0.0.0.0', 9501);

$server->set([
    'worker_num' => 2,
]);

$server->on('receive', function ($serv, $fd, $from_id, $data) {
    // 将接收到的消息加入队列
    $serv->task($data);
});

$server->on('task', function ($serv, $task_id, $from_id, $data) {
    // 处理任务,例如存储数据等
    // ...
    // 完成后向Worker进程发送消息
    $serv->finish($result);
});

$server->on('finish', function ($serv, $task_id, $data) {
    // 处理任务完成后的回调
    // ...
});

$server->start();
  1. Ketersediaan tinggi Pekerja

Pekerja juga menyediakan beberapa mekanisme untuk mencapai ketersediaan tinggi, berikut adalah beberapa kaedah biasa:

(1) Workerman Fungsi mulakan semula automatik Apabila perkhidmatan keluar secara tidak normal, anda boleh menggunakan fungsi mula semula automatik untuk memulihkan perkhidmatan secara automatik dan meningkatkan ketersediaan sistem.

(2) Gunakan mod berbilang proses dan berbilang benang untuk memproses berbilang permintaan secara selari dengan memulakan berbilang proses Pekerja, meningkatkan keupayaan pemprosesan dan pemprosesan sistem.

(3) Gunakan mod kluster Workerman untuk menyuraikan baris gilir mesej dan storan data pada berbilang nod Apabila satu nod gagal, nod lain boleh mengambil alih tugasnya untuk memastikan ketersediaan sistem.

Berikut ialah contoh kod yang menggunakan Workerman untuk melaksanakan storan data teragih:

<?php

use WorkermanMySQLConnection;

// 主节点
$node1 = new Connection('主节点的IP和端口', '用户名', '密码');
$node2 = new Connection('备用节点的IP和端口', '用户名', '密码');

// 写数据
function writeData($data) {
    global $node1, $node2;
    $result = $node1->insert('table', $data);
    if (!$result) {
        $result = $node2->insert('table', $data);
    }
    return $result;
}

// 读数据
function readData($id) {
    global $node1, $node2;
    $result = $node1->select('*')->from('table')->where("id=$id")->query();
    if (!$result) {
        $result = $node2->select('*')->from('table')->where("id=$id")->query();
    }
    return $result;
}

2. Ketekalan data

Ketekalan data bermakna dalam persekitaran teragih, data antara berbilang salinan sentiasa konsisten. Dalam baris gilir mesej dan storan data yang diedarkan, adalah sangat penting untuk memastikan konsistensi data, jika tidak, ia akan membawa kepada kekacauan dan ketidakbolehpercayaan data.

  1. Konsistensi data Swoole

Dalam Swoole, transaksi boleh digunakan untuk memastikan konsistensi data. Apabila berbilang proses beroperasi pada data yang sama pada masa yang sama, transaksi boleh digunakan untuk memastikan ketepatan data.

Berikut ialah contoh kod yang menggunakan Swoole untuk melaksanakan transaksi:

<?php

$redis = new Redis();

// 开启事务
$redis->multi();

// 执行业务逻辑
$redis->set('key1', 'value1');
$redis->set('key2', 'value2');

// 提交事务
$redis->exec();
  1. Konsistensi data Workerman

Dalam Workerman, anda boleh menggunakan transaksi pangkalan data untuk mencapai konsistensi data. Sebelum operasi tulis, transaksi dimulakan Selepas operasi tulis tamat, diputuskan sama ada untuk melakukan transaksi berdasarkan hasil operasi tulis.

Berikut ialah contoh kod yang menggunakan Workerman untuk mencapai ketekalan data:

<?php

use WorkermanMySQLConnection;

function writeData($data) {
    global $node1, $node2;
    
    // 开启事务
    $node1->beginTrans();
    
    $result = $node1->insert('table', $data);
    if (!$result) {
        $node1->rollback();  // 回滚事务
        $result = $node2->insert('table', $data);
        if (!$result) {
            return false;
        }
    }
    
    // 提交事务
    $node1->commit();
    
    return true;
}

Ringkasan:

Kedua-dua Swoole dan Workerman menyediakan baris gilir mesej yang berkuasa dan fungsi storan data teragih, yang boleh meningkatkan prestasi sistem melalui konfigurasi dan penggunaan yang munasabah . Ketersediaan dan ketekalan data. Melalui contoh kod khusus, artikel ini memperkenalkan cara menggunakan Swoole dan Workerman untuk melaksanakan baris gilir mesej dan storan data yang sangat tersedia, serta memastikan ketekalan data melalui mekanisme transaksi. Diharapkan pembaca boleh menggunakan teknologi ini secara fleksibel untuk membina aplikasi teragih yang mantap dan boleh dipercayai.

Atas ialah kandungan terperinci Mesej Swoole dan Workerman beratur dan storan data yang diedarkan untuk ketersediaan tinggi dan ketekalan data. 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