Tutorial pembangunan baris gilir mesej PHP: melaksanakan kunci sumber yang diedarkan

WBOY
Lepaskan: 2023-09-12 08:16:02
asal
792 orang telah melayarinya

Tutorial pembangunan baris gilir mesej PHP: melaksanakan kunci sumber yang diedarkan

Tutorial Pembangunan Barisan Mesej PHP: Melaksanakan Kunci Sumber Teragih

Pengenalan:
Dengan perkembangan pesat teknologi Internet aplikasi meluas sistem tradisional dalam aplikasi peringkat perusahaan telah menjadi trend. Dalam sistem teragih, bagaimana untuk mencapai penjadualan dan pengurusan sumber yang munasabah adalah isu penting. Artikel ini akan memperkenalkan cara menggunakan baris gilir mesej PHP untuk melaksanakan kunci sumber teragih untuk memenuhi keperluan pengurusan sumber dalam sistem teragih.

1. Apakah kunci sumber teragih
Kunci sumber teragih merujuk kepada penguncian dan kawalan sumber dalam sistem teragih untuk memastikan hanya satu nod boleh beroperasi pada sumber pada masa yang sama , untuk mengelakkan konflik sumber dan masalah konkurensi. Kunci sumber yang diedarkan biasanya termasuk dua fungsi teras:

  1. Locking: Apabila nod beroperasi pada sumber, ia memperoleh kunci sumber untuk menghalang nod lain daripada beroperasi pada sumber pada masa yang sama; #🎜🎜 #
  2. Membuka kunci: Selepas nod melengkapkan operasi sumber, ia melepaskan kunci sumber dan membenarkan nod lain beroperasi pada sumber.
2. Gunakan baris gilir mesej untuk melaksanakan kunci sumber yang diedarkan

Baris gilir mesej ialah kaedah komunikasi yang digunakan secara meluas dalam sistem teragih. Perisian tengah baris gilir mesej biasa termasuk Kafka, RabbitMQ, ActiveMQ, dsb. Artikel ini akan mengambil Kafka sebagai contoh untuk memperkenalkan cara menggunakan baris gilir mesej untuk melaksanakan kunci sumber yang diedarkan.

    Pasang dan konfigurasikan Kafka
  1. Pertama, anda perlu memasang dan mengkonfigurasi Kafka. Untuk tutorial pemasangan dan konfigurasi terperinci, sila rujuk dokumen yang berkaitan atau tapak web rasmi. Selepas pemasangan selesai, pastikan Kafka boleh berjalan seperti biasa.
  2. Buat topik kunci sumber

    Dalam Kafka, topik (Topik) digunakan untuk menyimpan mesej. Kita perlu mencipta tema khusus untuk kunci sumber. Cipta topik bernama "resource_lock" melalui arahan berikut:

    bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic resource_lock --partitions 1 --replication-factor 1
    Salin selepas log masuk

  3. Tulis kod PHP

    Untuk menggunakan PHP untuk membangunkan kunci sumber yang diedarkan, anda perlu memperkenalkan terlebih dahulu Pustaka PHP berkaitan Kafka. Anda boleh menggunakan komposer untuk memasang:

    composer require superbalist/php-pubsub-kafka
    Salin selepas log masuk

Seterusnya, kami menulis skrip PHP untuk melaksanakan logik mengunci dan membuka kunci sumber yang diedarkan. Kod sampel adalah seperti berikut:

<?php

require 'vendor/autoload.php';

use SuperbalistPubSubKafkaKafkaConnectionFactory;

class DistributedLock
{
    private $topic;
    private $connection;

    public function __construct($topic)
    {
        $this->topic = $topic;
        $this->connection = $this->createConnection();
    }

    private function createConnection()
    {
        $config = [
            'metadata.broker.list' => 'localhost:9092',
            'enable.auto.commit' => 'false',
        ];

        return KafkaConnectionFactory::create($config);
    }

    public function acquireLock($identifier)
    {
        $producer = $this->connection->createProducer();

        $message = json_encode(['identifier' => $identifier]);
        $producer->produce($this->topic, $message);
    }

    public function releaseLock($identifier)
    {
        $consumer = $this->connection->createConsumer();
        $consumer->subscribe([$this->topic]);

        while (true) {
            $message = $consumer->consume(1000);
            if ($message) {
                $payload = json_decode($message->getPayload(), true);
                if ($payload['identifier'] == $identifier) {
                    break;
                }
            }
        }
    }
}

// 示例代码
$lock = new DistributedLock('resource_lock');
$identifier = 'example_identifier';

echo 'Acquiring lock...' . PHP_EOL;
$lock->acquireLock($identifier);
echo 'Lock acquired!' . PHP_EOL;

// 模拟资源操作
sleep(3);

echo 'Releasing lock...' . PHP_EOL;
$lock->releaseLock($identifier);
echo 'Lock released!' . PHP_EOL;
Salin selepas log masuk

3. Cara menggunakan kunci sumber teragih

Untuk menggunakan kunci sumber teragih, anda perlu mengikuti langkah berikut:

    Buat DistributedLock Object, masukkan nama subjek kunci sumber;
  1. Panggil kaedah acquireLock untuk mengunci dan menghantar pengecam unik; yang memerlukan penguncian;
  2. Selepas operasi sumber selesai, panggil kaedah releaseLock untuk membuka kunci dan memasukkan pengecam yang digunakan sebelum ini.
  3. 4. Ringkasan
  4. Artikel ini memperkenalkan kaedah menggunakan baris gilir mesej PHP untuk melaksanakan kunci sumber dalam sistem teragih. Dengan menggunakan baris gilir mesej, kami boleh melaksanakan operasi mengunci dan membuka kunci dengan mudah pada sumber yang diedarkan untuk memastikan ketekalan sumber dan kawalan serentak. Sudah tentu, sebagai tambahan kepada Kafka, middleware baris gilir mesej lain juga boleh digunakan untuk mencapai fungsi yang serupa. Saya harap artikel ini akan membantu semua orang dalam pengurusan sumber yang diedarkan.

Atas ialah kandungan terperinci Tutorial pembangunan baris gilir mesej PHP: melaksanakan kunci sumber yang diedarkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!