Rumah > pangkalan data > Redis > teks badan

Perbandingan ZooKeeper pelaksanaan Redis bagi kunci yang diedarkan

WBOY
Lepaskan: 2023-06-20 15:19:44
asal
1200 orang telah melayarinya

Dengan perkembangan pesat teknologi Internet, sistem yang diedarkan telah digunakan secara meluas dalam aplikasi moden, terutamanya dalam syarikat Internet yang besar. Walau bagaimanapun, dalam sistem teragih, sangat sukar untuk mengekalkan konsistensi antara nod, jadi mekanisme kunci teragih telah menjadi salah satu asas untuk menyelesaikan masalah ini. Dalam pelaksanaan kunci yang diedarkan, Redis dan ZooKeeper adalah kedua-dua alat yang popular.

  1. Redis melaksanakan kunci teragih

Redis ialah sistem storan data dalam memori sumber terbuka yang boleh digunakan sebagai pangkalan data, cache dan perisian tengah mesej. Mekanisme kunci teragih Redis dilaksanakan melalui SETNX Perintah SETNX boleh menetapkan nilai kunci secara atom, tetapi ia hanya berjaya ditetapkan apabila kunci tidak wujud. Oleh itu kita boleh melaksanakan kunci teragih melalui SETNX.

Andaikan kita ingin melaksanakan kunci bernama Lock dan perlu mengunci pembolehubah kongsi Anda boleh menggunakan kod contoh berikut:

def acquire_lock(conn, lockname, acquire_timeout=10):
    identifier = str(uuid.uuid4())
    end = time.time() + acquire_timeout
    while time.time() < end:
        if conn.setnx(lockname, identifier):
            return identifier
        time.sleep(0.001)
    return False
Salin selepas log masuk

Dalam kod di atas, fungsi acquire_lock menjana nilai rawak. melalui uuid Pengecam, dan beroperasi pada nama kunci melalui setnx, dan mengembalikan pengecam jika operasi berjaya. Mengembalikan Palsu jika kunci tidak diperoleh.

Tetapi terdapat masalah di sini: jika pelanggan telah memperoleh kunci, tetapi ranap atau tergantung sebelum melepaskan kunci, maka pelanggan lain tidak akan dapat memperoleh kunci itu, yang menyebabkan masalah kebuntuan. Untuk mengelakkan ini, kami boleh menambah tamat masa untuk melepaskan kunci secara automatik. Berikut ialah kod untuk melepaskan kunci:

def release_lock(conn, lockname, identifier):
    pip = conn.pipeline(True)
    while True:
        try:
            # watch the lock name to ensure that no one else has acquired the lock
            pip.watch(lockname)
            if pip.get(lockname) == identifier:
                pip.multi()
                pip.delete(lockname)
                pip.execute()
                return True
            pip.unwatch()
            break
        except redis.exceptions.WatchError:
            pass
    return False
Salin selepas log masuk

Kod contoh di atas agak mudah dan boleh digunakan terus. Walau bagaimanapun, dalam penggunaan sebenar, senario kunci yang diedarkan adalah lebih kompleks dan memerlukan penyelesaian yang lebih lengkap. Mari kita lihat cara ZooKeeper melaksanakan kunci teragih.

  1. ZooKeeper melaksanakan kunci teragih

ZooKeeper ialah perkhidmatan penyelarasan teragih yang boleh digunakan untuk menyelaraskan status nod yang berbeza dalam sistem teragih pergi ke ZooKeeper untuk menyelaraskan pelbagai nod. Dalam ZooKeeper, kunci yang diedarkan juga merupakan mekanisme yang sangat berguna.

Proses asas melaksanakan kunci teragih dalam ZooKeeper adalah seperti berikut:

(1) Buat nod mutex (Mutex Node)

Pertama, pelanggan perlu mencipta mutex pada ZooKeeper Nod kunci digunakan sebagai pengecam kunci. Anda boleh menggunakan arahan cipta untuk mencipta nod Jika nod sudah wujud, penciptaan akan gagal. Apabila membuat nod, anda perlu menentukan jenis nod kunci yang diedarkan secara amnya menggunakan nod tertib jangka pendek, iaitu, menambahkan set nombor pada nama nod untuk memastikan keunikan nama nod.

(2) Mendapatkan kunci

Proses memperoleh kunci ialah proses mengunci nod kunci mutex. Urutan di mana kunci diperoleh ditentukan oleh susunan berangka dalam nama nod. Jika pelanggan berjaya mencipta nod mutex, maka ia memiliki kunci itu. Jika nod tidak berjaya dibuat, anda perlu menunggu pelanggan lain melepaskan kunci sebelum mencuba lagi.

(3) Lepaskan kunci

Apabila pelanggan tidak lagi perlu mengunci sumber, ia perlu melepaskan kunci. Melepaskan kunci memerlukan pemadaman nod kunci mutex Selepas kunci dilepaskan, pelanggan lain akan segera menerima mesej pelepasan kunci melalui mekanisme Pemerhati.

ZooKeeper lebih mahal daripada Redis. Ia memerlukan perkhidmatan permulaan dan memasang dan menyelenggara kelompok ZooKeeper Oleh itu, kekerapan menggunakan ZooKeeper untuk melaksanakan kunci teragih dalam sistem teragih adalah agak rendah. Walau bagaimanapun, ZooKeeper secara relatifnya lebih stabil dan selamat, dan lebih sesuai daripada Redis untuk beberapa sistem kritikal.

Secara amnya, Redis dan ZooKeeper adalah penyelesaian pelaksanaan kunci teragih yang sangat praktikal. Apabila memilih penyelesaian untuk digunakan, anda perlu membuat pilihan berdasarkan situasi sebenar dan membuat pertukaran dari segi prestasi, kestabilan, keselamatan, dll. untuk mencapai hasil yang terbaik.

Atas ialah kandungan terperinci Perbandingan ZooKeeper pelaksanaan Redis bagi kunci yang diedarkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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!