Rumah rangka kerja php Swoole Cara melaksanakan kunci teragih dalam Swoole

Cara melaksanakan kunci teragih dalam Swoole

Jun 25, 2023 pm 04:45 PM
Kunci yang diedarkan capai swoole

Dengan pembangunan Internet dan Internet mudah alih, sistem konkurensi dan pengedaran yang tinggi telah menjadi masalah yang tidak dapat dielakkan dalam pembangunan harian. Dalam kes ini, kunci yang diedarkan menjadi alat yang sangat diperlukan yang boleh membantu kami mengelakkan masalah seperti persaingan sumber dan ketidakkonsistenan data. Artikel ini akan memperkenalkan cara melaksanakan kunci teragih dalam Swoole untuk membantu anda menyelesaikan masalah konkurensi dengan lebih baik dalam sistem teragih.

1. Apakah kunci yang diedarkan?

Dalam sistem yang diedarkan, terdapat berbilang proses mengakses sumber yang dikongsi pada masa yang sama Untuk memastikan data tidak dimusnahkan atau konflik serentak berlaku, sumber yang dikongsi ini perlu dikunci. Kunci teragih ialah mekanisme kunci yang direka untuk mencapai penggunaan sumber kongsi yang betul dalam sistem teragih.

Pelaksanaan kunci teragih agak rumit, dan secara amnya aspek berikut perlu dipertimbangkan:

  1. Keeksklusifan bersama: hanya satu proses atau benang boleh menduduki kunci pada masa yang sama
  2. Reentrancy: proses atau benang yang sama boleh mempunyai berbilang Mohon kunci beberapa kali, tetapi bilangan operasi buka kunci yang sama perlu dilakukan semasa membuka kunci
  3. Cegah kebuntuan: Anda perlu menetapkan masa tamat tempoh apabila memperoleh kunci untuk mengelakkan menunggu tanpa had disebabkan pengecualian atau sebab lain; ;
  4. Ketersediaan tinggi: perlu dipertimbangkan Masalah seperti kegagalan nod dan sekatan rangkaian
  5. Prestasi: Ia adalah perlu untuk mencapai ciri konkurensi tinggi dan kependaman rendah.

2. Pengenalan kepada Swoole

Swoole ialah enjin komunikasi rangkaian tak segerak dan selari berprestasi tinggi untuk bahasa PHP Ia boleh melaksanakan pelayan dan klien pelbagai protokol seperti TCP/UDP/HTTP/WebSocket. Ciri-ciri Swoole termasuk:

  1. Prestasi tinggi: menggunakan model IO tidak menyekat asynchronous, yang boleh meningkatkan keupayaan concurrency pelayan dengan banyak
  2. Coroutine terbina dalam: pengaturcaraan tak segerak boleh dilaksanakan dengan mudah tanpa perlu secara manual; cipta benang atau proses;
  3. Pelayan HTTP /WebSocket terbina dalam: Pembangunan aplikasi web boleh direalisasikan dengan mudah
  4. menyokong pengkapsulan MySQL, Redis, ElasticSearch dan alatan biasa yang lain.

Oleh itu, Swoole mempunyai kebolehsuaian yang sangat baik dan boleh digunakan untuk membina sistem teragih berkonkurensi tinggi dan berprestasi tinggi.

3. Bagaimana untuk melaksanakan kunci yang diedarkan dalam Swoole?

Di bawah ini kami akan memperkenalkan cara melaksanakan kunci teragih dalam Swoole.

  1. Melaksanakan kunci teragih berdasarkan Redis

Redis ialah pangkalan data nilai kunci berasaskan memori dan salah satu alatan yang paling biasa digunakan dalam sistem teragih. Ia menyokong pelbagai struktur data, termasuk rentetan, senarai, set, set tersusun, dll. Antaranya, jenis rentetan boleh digunakan untuk melaksanakan kunci teragih.

Proses umum menggunakan Redis untuk melaksanakan kunci teragih adalah seperti berikut:

(1) Dapatkan objek sambungan Redis melalui kumpulan sambungan Redis
(2) Gunakan perintah SETNX untuk mencapai pengecualian bersama kunci, yang bermaksud apabila nilai pulangan adalah 1 Pekerjaan berjaya;

Berikut ialah kod pelaksanaan khusus:

class RedisLock
{
    private $redis;

    public function __construct($config)
    {
        $this->redis = new Redis();
        $this->redis->connect($config['host'], $config['port'], $config['timeout']);
        if (!empty($config['auth'])) {
            $this->redis->auth($config['auth']);
        }
    }

    public function lock($key, $timeout = 10)
    {
        $startTime = time();
        do {
            $result = $this->redis->setnx($key, time() + $timeout);
            if ($result) {
                return true;
            }
            $lockTime = $this->redis->get($key);
            if ($lockTime && $lockTime < time()) {
                $oldTime = $this->redis->getset($key, time() + $timeout);
                if ($oldTime == $lockTime) {
                    return true;
                }
            }
            usleep(100); // 100毫秒等待
        } while (time() - $startTime < $timeout);
        return false;
    }

    public function unlock($key)
    {
        $this->redis->del($key);
    }
}
Salin selepas log masuk

Dalam kod di atas, gelung do-while digunakan dalam fungsi kunci untuk menunggu kunci dilepaskan Apabila masa menunggu melebihi tamat masa yang diberikan, false dikembalikan ; DEL digunakan dalam arahan fungsi buka kunci untuk melepaskan kunci. Walaupun kaedah ini mudah dilaksanakan dan mempunyai overhed yang rendah, kaedah ini juga mempunyai kebarangkalian kebuntuan tertentu.

Melaksanakan kunci teragih berdasarkan Zookeeper
  1. Zookeeper ialah sistem penyelarasan sumber terbuka teragih yang boleh digunakan untuk melaksanakan satu siri fungsi seperti penyegerakan data dan pengurusan konfigurasi dalam sistem teragih. Nod jujukan sementara (EPHEMERAL_SEQUENTIAL) yang disediakannya boleh melaksanakan kunci teragih dengan mudah.

Proses umum menggunakan Zookeeper untuk melaksanakan kunci yang diedarkan adalah seperti berikut:

(1) Buat klien Zookeeper dan sambung ke pelayan Zookeeper

(2) Gunakan fungsi createSequential untuk mencipta nod jujukan sementara

(3 ) Dapatkan Zookeeper Semua nod diisih mengikut nombor siri nod
(4) Bandingkan nombor siri nod anda sendiri dengan nombor siri nod terkecil semasa, ini bermakna kunci telah diperolehi, jika tidak, dengarkan nod terkini yang lebih kecil daripada nombor siri anda sendiri
(5) Apabila Apabila nod dengan nombor urutan yang lebih kecil daripada nod sendiri dipadamkan, nod semasa menerima pemberitahuan acara dan kemudian mengulangi langkah 4.

Berikut ialah kod pelaksanaan khusus:

class ZookeeperLock
{
    private $zk;
    private $basePath = '/lock';
    private $myNode;

    public function __construct($config)
    {
        $this->zk = new Zookeeper();
        $this->zk->connect($config['host'] . ':' . $config['port']);
        if (isset($config['auth'])) {
            $this->zk->addAuth('digest', $config['auth']);
        }
        if (!$this->zk->exists($this->basePath)) {
            $this->zk->create($this->basePath, null, array(array('perms' => Zookeeper::PERM_ALL, 'scheme' => 'world', 'id' => 'anyone')), null);
        }
    }

    public function lock()
    {
        $this->myNode = $this->zk->create($this->basePath . '/node_', null, array(array('perms' => Zookeeper::PERM_ALL, 'scheme' => 'world', 'id' => 'anyone')), Zookeeper::EPHEMERAL | Zookeeper::SEQUENCE);
        while (true) {
            $children = $this->zk->getChildren($this->basePath);
            sort($children);
            $pos = array_search(basename($this->myNode), $children);
            if ($pos === 0) {
                return true;
            } else {
                $this->zk->exists($this->basePath . '/' . $children[$pos - 1], function ($event_type, $s, $event_data) {
                    $this->unlock();
                });
                usleep(100); // 100毫秒等待
            }
        }
    }

    public function unlock()
    {
        if ($this->myNode) {
            $this->zk->delete($this->myNode);
            $this->myNode = null;
        }
    }
}
Salin selepas log masuk

Dalam kod di atas, fungsi kunci menggunakan gelung sementara untuk memantau nod terbaharu dengan nombor siri yang lebih kecil daripada nod sendiri Apabila nod dipadamkan, ia bermakna ia telah memperoleh kunci; fungsi buka kunci menggunakan padam Fungsi memadamkan nod semasa.

Ringkasan
  1. Artikel ini memperkenalkan cara melaksanakan kunci teragih dalam Swoole Kami memperkenalkan dua kaedah pelaksanaan biasa berdasarkan Redis dan Zookeeper, dan memberikan kod pelaksanaan. Sebagai cara teknikal yang penting untuk memastikan konsistensi data dalam sistem yang diedarkan, kunci yang diedarkan boleh membantu kami mengelakkan masalah seperti konflik konkurensi dan ketidakkonsistenan data. Apabila melaksanakan kunci teragih, anda perlu mempertimbangkan isu seperti eksklusiviti bersama, kemasukan semula, pencegahan kebuntuan, ketersediaan tinggi dan prestasi serta memilih kaedah pelaksanaan yang berbeza berdasarkan senario aplikasi sebenar.

Atas ialah kandungan terperinci Cara melaksanakan kunci teragih dalam Swoole. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Mar 24, 2024 am 11:27 AM

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Dengan kebangkitan media sosial, WeChat telah menjadi salah satu alat komunikasi yang sangat diperlukan dalam kehidupan seharian orang ramai. Walau bagaimanapun, ramai orang mungkin menghadapi masalah: log masuk ke beberapa akaun WeChat pada masa yang sama pada telefon mudah alih yang sama. Bagi pengguna telefon mudah alih Huawei, tidak sukar untuk mencapai log masuk WeChat dwi Artikel ini akan memperkenalkan cara mencapai log masuk WeChat dwi pada telefon mudah alih Huawei. Pertama sekali, sistem EMUI yang disertakan dengan telefon mudah alih Huawei menyediakan fungsi yang sangat mudah - pembukaan dua aplikasi. Melalui fungsi pembukaan dwi aplikasi, pengguna boleh serentak

Panduan Pengaturcaraan PHP: Kaedah untuk Melaksanakan Jujukan Fibonacci Panduan Pengaturcaraan PHP: Kaedah untuk Melaksanakan Jujukan Fibonacci Mar 20, 2024 pm 04:54 PM

Bahasa pengaturcaraan PHP ialah alat yang berkuasa untuk pembangunan web, yang mampu menyokong pelbagai logik dan algoritma pengaturcaraan yang berbeza. Antaranya, melaksanakan jujukan Fibonacci adalah masalah pengaturcaraan biasa dan klasik. Dalam artikel ini, kami akan memperkenalkan cara menggunakan bahasa pengaturcaraan PHP untuk melaksanakan jujukan Fibonacci, dan melampirkan contoh kod tertentu. Jujukan Fibonacci ialah jujukan matematik yang ditakrifkan seperti berikut: unsur pertama dan kedua bagi jujukan ialah 1, dan bermula dari unsur ketiga, nilai setiap unsur adalah sama dengan jumlah dua unsur sebelumnya. Beberapa elemen pertama urutan

Cara menggunakan coroutine swoole dalam laravel Cara menggunakan coroutine swoole dalam laravel Apr 09, 2024 pm 06:48 PM

Menggunakan coroutine Swoole dalam Laravel boleh memproses sejumlah besar permintaan secara serentak. Kelebihannya termasuk: Pemprosesan serentak: membolehkan berbilang permintaan diproses pada masa yang sama. Prestasi tinggi: Berdasarkan mekanisme acara epoll Linux, ia memproses permintaan dengan cekap. Penggunaan sumber yang rendah: memerlukan lebih sedikit sumber pelayan. Mudah untuk disepadukan: Penyepaduan lancar dengan rangka kerja Laravel, mudah digunakan.

Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Mar 24, 2024 pm 06:03 PM

Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Dengan populariti perisian sosial dan penekanan yang semakin meningkat terhadap privasi dan keselamatan orang ramai, fungsi klon WeChat telah beransur-ansur menjadi tumpuan perhatian. Fungsi klon WeChat boleh membantu pengguna log masuk ke berbilang akaun WeChat pada telefon mudah alih yang sama pada masa yang sama, menjadikannya lebih mudah untuk diurus dan digunakan. Tidak sukar untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Anda hanya perlu mengikuti langkah berikut. Langkah 1: Pastikan versi sistem telefon mudah alih dan versi WeChat memenuhi keperluan Pertama, pastikan versi sistem telefon mudah alih Huawei anda telah dikemas kini kepada versi terkini, serta Apl WeChat.

Mana satu lebih baik, swool atau pekerja? Mana satu lebih baik, swool atau pekerja? Apr 09, 2024 pm 07:00 PM

Swoole dan Workerman kedua-duanya adalah rangka kerja pelayan PHP berprestasi tinggi. Terkenal dengan pemprosesan tak segerak, prestasi cemerlang dan kebolehskalaannya, Swoole sesuai untuk projek yang perlu mengendalikan sejumlah besar permintaan serentak dan daya pemprosesan yang tinggi. Workerman menawarkan fleksibiliti mod tak segerak dan segerak, dengan API intuitif yang lebih sesuai untuk kemudahan penggunaan dan projek yang mengendalikan volum serentak yang lebih rendah.

Bagaimanakah swoole_process membenarkan pengguna bertukar? Bagaimanakah swoole_process membenarkan pengguna bertukar? Apr 09, 2024 pm 06:21 PM

Proses Swoole membolehkan pengguna beralih Langkah-langkah khusus ialah: membuat proses pengguna;

Kuasai cara Golang mendayakan kemungkinan pembangunan permainan Kuasai cara Golang mendayakan kemungkinan pembangunan permainan Mar 16, 2024 pm 12:57 PM

Dalam bidang pembangunan perisian hari ini, Golang (bahasa Go), sebagai bahasa pengaturcaraan yang cekap, ringkas dan sangat bersesuaian, semakin digemari oleh pembangun. Perpustakaan standardnya yang kaya dan ciri-ciri konkurensi yang cekap menjadikannya pilihan berprofil tinggi dalam bidang pembangunan permainan. Artikel ini akan meneroka cara menggunakan Golang untuk pembangunan permainan dan menunjukkan kemungkinan besarnya melalui contoh kod tertentu. 1. Kelebihan Golang dalam pembangunan permainan Sebagai bahasa yang ditaip secara statik, Golang digunakan dalam membina sistem permainan berskala besar.

Panduan Pelaksanaan Keperluan Permainan PHP Panduan Pelaksanaan Keperluan Permainan PHP Mar 11, 2024 am 08:45 AM

Panduan Pelaksanaan Keperluan Permainan PHP Dengan populariti dan perkembangan Internet, pasaran permainan web menjadi semakin popular. Ramai pembangun berharap untuk menggunakan bahasa PHP untuk membangunkan permainan web mereka sendiri, dan melaksanakan keperluan permainan adalah langkah utama. Artikel ini akan memperkenalkan cara menggunakan bahasa PHP untuk melaksanakan keperluan permainan biasa dan menyediakan contoh kod khusus. 1. Cipta watak permainan Dalam permainan web, watak permainan adalah elemen yang sangat penting. Kita perlu mentakrifkan atribut watak permainan, seperti nama, tahap, nilai pengalaman, dll., dan menyediakan kaedah untuk mengendalikannya

See all articles