Rumah  >  Artikel  >  pangkalan data  >  Ketahui lebih lanjut tentang Codis di Redis

Ketahui lebih lanjut tentang Codis di Redis

青灯夜游
青灯夜游ke hadapan
2022-01-06 09:54:122917semak imbas

Artikel ini akan membawa anda memahami Codis dalam Redis dan memperkenalkan prinsip Codis. Saya harap ia akan membantu anda!

Ketahui lebih lanjut tentang Codis di Redis

Senario

Dalam senario konkurensi tinggi data besar, menggunakan satu contoh redis tunggal, tidak kira betapa tinggi prestasi redis, akan menjadi sangat sukar ,

Pertama sekali, semakin besar jumlah data, semakin banyak memori yang digunakan, yang seterusnya menyebabkan fail rdb menjadi terlalu besar Keadaan ini akan menjadikan masa penyegerakan penuh tuan-hamba terlalu lama. Pada masa yang sama, apabila contoh dimulakan semula, rdb yang terlalu besar akan dimuatkan Ia juga akan menjadikan masa permulaan lebih lama. [Cadangan berkaitan: Tutorial video Redis]

Kedua, dari segi penggunaan CPU, satu contoh Redis hanya boleh menggunakan satu teras CPU Terlalu banyak data pada satu teras juga akan muncul adalah di luar kemampuan kami,

Oleh itu, kami memerlukan penyelesaian kluster untuk menyebarkan sejumlah besar data daripada satu kejadian kepada berbilang kejadian Daripada populariti Redis kepada sokongan rasmi penyelesaian Klusternya sendiri, pihak ketiga juga membangunkan sokongan mereka sendiri. Codis ialah salah satu komponen kluster

Codis dibangunkan menggunakan bahasa Go dan bertindak sebagai ejen antara Redis dan klien, jadi pelanggan boleh menyambung terus ke Codis dan menghantar arahan kepadanya , Codis bertanggungjawab untuk memajukan arahan kepada Redis, dan akhirnya menerima hasil pemulangan dan mengembalikannya kepada pelanggan. contoh proksi Codis membentuk kluster Redis, yang boleh digunakan apabila ruang kluster tidak mencukupi Pada masa ini, anda boleh mengembangkan kapasiti secara dinamik dan terus menambah kejadian Redis Pada masa yang sama, sdk yang digunakan oleh pelanggan tidak perlu ditukar. Anda hanya perlu menukar sambungan asal daripada redis kepada codis

Codis sendiri juga boleh digunakan untuk memastikan ketersediaannya yang tinggi, ia hanya bertanggungjawab untuk memajukan kandungan Menambah berbilang Codis tidak mempunyai kesan sampingan dan boleh memastikan peningkatan QPS Apabila salah satu Codis gagal, anda juga boleh menggunakan satu lagi. Ketahui lebih lanjut tentang Codis di Redis

Prinsip

Codis memajukan Kunci tertentu kepada tika Redis tertentu Setiap tika dalam kelompok menyimpan sebahagian daripada Kunci, mengurangkan tekanan pada yang lain contoh. Pada masa yang sama, data semua kejadian ditambah untuk membentuk sekeping maklumat yang lengkap. Ketahui lebih lanjut tentang Codis di Redis

Codis dibahagikan kepada 1024 slot secara lalai. bilangan slot ialah 1024 secara lalai dan boleh diubah Jika terdapat banyak nod kluster, bilangannya boleh ditambah.

Apabila menerima kunci yang dihantar oleh pelanggan, Codis melakukan operasi crc32 pada kunci untuk mendapatkan nilai cincang,

kemudian cincangnya Nilai integer ialah modulo 1024 (bilangan slot) untuk mendapatkan baki, yang merupakan slot di mana kunci akan disimpan Dengan slot, anda boleh mencari contoh redis mana kunci harus dihantar.

Kod pseudo: Ketahui lebih lanjut tentang Codis di Redis

Penyegerakan slot kluster

hash = crc32(command.key) # 计算hash值
slot = hash % 1024 # 取模得到槽位
redisInstance = slots[slot].redis # 得到redis实例
redis.do(command) # 执行命令复制代码
Hubungan pemetaan antara Redis dan slot wujud dalam Codis In memori, gugusan Codis perlu mempertimbangkan untuk memastikan perhubungan pemetaan slot dalam setiap nod disegerakkan, jadi Codis menggunakan perisian tengah storan konfigurasi teragih Zookeeper dan Etcd untuk mengekalkan perhubungan pemetaan slot dan memastikan penyegerakan data antara gugusan Codis >Seperti yang ditunjukkan di bawah, Codis menyimpan perhubungan slot dalam Zookeeper dan menyediakan Papan Pemuka untuk memerhati dan mengubah suai perhubungan slot Apabila perubahan berlaku, Codis Proxy mendengar perubahan dan menyegerakkan semula perhubungan slot.

Peluasan kapasiti

Apabila kluster sedia ada tidak memenuhi keperluan perniagaan, anda perlu menambah yang baharu Apabila kejadian ditambahkan pada kluster, perhubungan pemetaan slot perlu diagihkan semula dan sebahagian daripada slot perlu diperuntukkan kepada nod baharu. Ketahui lebih lanjut tentang Codis di Redis

Codis telah menambahkan perintah SLOTSSCAN, yang boleh melintasi semua kekunci di bawah slot yang ditentukan Gunakan arahan ini untuk mengimbas keluar semua kunci dalam slot untuk dipindahkan, dan kemudian melintasi setiap kunci satu demi satu untuk berhijrah ke. nod baharu.

Semasa proses penghijrahan, Codis terus menyediakan perkhidmatan luaran Pada masa ini, permintaan datang ke slot yang sedang dipindahkan Memandangkan slot kini sepadan dengan nod lama dan baharu, Codis tidak dapat menentukan sama ada kunci itu wujud pada masa ini. permintaan akan dimajukan kepada tika Redis baharu. Pseudokod:

SLOTSCAN Seperti arahan Scan Redis sendiri, penduaan data yang diimbas tidak boleh dielakkan, tetapi ini tidak akan menjejaskan ketepatan pemindahan kerana satu kekunci dipindahkan Selepas itu , ia segera dipadamkan daripada contoh lama dan tidak boleh diimbas keluar lagi.

Slot pengimbangan automatik

Setiap kali kejadian baharu ditambahkan, ia akan menjadi terlalu menyusahkan untuk mengekalkan perhubungan pemetaan slot secara manual ia tidak seimbang, ia akan Melakukan pengimbangan automatik dan operasi pemindahan data.

Kelemahan

Codis membawa faedah pengembangan kepada Redis, tetapi ia juga menyebabkan beberapa kesan sampingan.

Tidak menyokong urus niaga

Transaksi mungkin beroperasi pada berbilang kunci, tetapi urus niaga hanya boleh diselesaikan dalam satu kejadian, tetapi kerana kunci bertaburan dalam berbeza instance , jadi Codis tidak boleh menyokong operasi transaksi.

tidak menyokong penamaan semula

menamakan semula satu kunci kepada kunci lain, tetapi kedua-dua kunci itu mungkin tidak mencincang ke dalam slot yang sama, tetapi dalam slot kejadian yang berbeza, jadi nama semula tidak disokong.

Senarai arahan tidak disokong secara rasmi disediakan: https://github.com/CodisLabs/codis/blob/master/doc/unsupported_cmds.md

Peluasan tersekat

Semasa proses pengembangan Codis, penghijrahan data adalah untuk memindahkan keseluruhan kunci secara langsung, seperti struktur cincangan Codis akan secara langsung menarik semua kandungan dan menggunakan hmset untuk memasukkannya ke dalam nod baharu.

Jika kandungan cincang terlalu besar, ia akan menyebabkan ketinggalan Pengesyoran rasmi ialah jumlah saiz struktur koleksi tunggal tidak boleh melebihi 1MB Dalam perniagaan, data besar boleh dibahagikan kepada berbilang yang kecil penyimpanan baldi, dsb. , buat kompromi.

Overhed rangkaian

Memandangkan Codis bertindak sebagai proksi rangkaian antara klien dan instance Redis, terdapat lapisan tambahan dan overhed rangkaian secara semula jadi lebih tinggi, yang lebih tinggi daripada menyambung terus ke Redis Prestasi adalah lebih rendah sedikit.

overhed pengendalian dan penyelenggaraan perisian tengah

Konfigurasi kluster Codis memerlukan penggunaan Zk atau Etcd, yang bermaksud memperkenalkan kluster Codis memerlukan pengenalan perisian tengah lain dan meningkatkan operasi dan penyelenggaraan kos mesin.

Kelebihan

Codis menyerahkan isu konsistensi yang diedarkan kepada pihak ketiga (ZK atau Etcd), menghapuskan aspek ini Kerja-kerja penyelenggaraan untuk mengurangkan kerumitan kod pelaksanaan.

Untuk mencapai desentralisasi, Kluster Redis rasmi memperkenalkan protokol Raft dan Gossip, serta sejumlah besar parameter konfigurasi yang perlu ditala, dan kerumitan meningkat dengan mendadak.

Pemerolehan kelompok

Untuk operasi kelompok, seperti menggunakan mget untuk mendapatkan nilai berbilang kunci, kunci ini mungkin bertaburan merentasi berbilang kejadian, Codis mengumpulkan kunci mengikut keadaan di mana ia berada, kemudian memanggil mgt pada setiap kejadian satu demi satu, dan akhirnya mengembalikan ringkasan kepada klien.

Ketahui lebih lanjut tentang Codis di Redis

Fungsi lain

Codis menyediakan antara muka Papan Pemuka dan Codis-fe menguruskan kluster juga menambah kumpulan, nod, melakukan pengimbangan automatik dan operasi lain, dan melihat status slot dan contoh redis yang sepadan dengan slot Fungsi ini menjadikan operasi dan penyelenggaraan lebih mudah dan lebih mudah.

Ketahui lebih lanjut tentang Codis di Redis

Ketahui lebih lanjut tentang Codis di Redis

Ketahui lebih lanjut tentang Codis di Redis

Ketahui lebih lanjut tentang Codis di Redis

Menuju sejarah

Codis nampaknya menebus hakikat bahawa Redis secara rasmi tidak menyediakan konsep kluster Kini Redis secara rasmi menyediakan fungsi Kluster, dan sokongan rasmi secara semula jadi lebih berfaedah daripada sokongan pihak ketiga ,

Pada masa yang sama, perisian pihak ketiga juga perlu memberi perhatian kepada ciri baharu yang dikeluarkan oleh pegawai dalam masa nyata, dan Kluster pastinya serasi dengan ciri baharu dalam masa nyata, jadi ia lebih disyorkan untuk menggunakan Kluster rasmi Sebagai titik pengetahuan pada masa lalu, Codis mempunyai beberapa idea dan Kluster Terdapat pertindihan.

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !

Atas ialah kandungan terperinci Ketahui lebih lanjut tentang Codis di Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam