Redis Sharding

Redis Sharding



Apabila anda mula menggunakan Redis, mudah untuk mempercayai bahawa anda tidak perlu menskalakannya melebihi tetapan lalai. Isunya ialah apabila aplikasi anda berkembang, anda akhirnya memerlukan lebih banyak memori, CPU dan kapasiti pemprosesan untuk menyokong keperluan perniagaan anda. Dalam artikel ini, kami akan menunjukkan kepada anda cara gugusan Redis berskala dengan sharding untuk memberi anda kapasiti tambahan yang anda perlukan untuk menjalankan perniagaan anda dengan lancar dan berkembang ke masa hadapan. Kami akan mempelajari secara khusus bagaimana kluster Redis menyediakan daya pemprosesan yang tinggi dengan sharding.

Kebolehskalaan

Terdapat dua pendekatan biasa untuk menskala pelayan: penskalaan menegak dan penskalaan mendatar. Penskalaan atau penskalaan menegak ialah tempat anda menambahkan lebih banyak kuasa dan sumber pada pelayan anda, seperti lebih banyak CPU, memori dan storan, yang memerlukan kos yang tinggi. Sebaliknya, penskalaan mendatar menambah berbilang nod pada kumpulan sumber sedia ada anda. Ini dipanggil penskalaan. Jadi, berdasarkan batasan dan keperluan anda, terpulang kepada anda untuk mempunyai satu contoh pelayan yang lebih besar atau menggunakan berbilang nod pelayan.

Andaikan anda mempunyai 100 GB RAM dan perlu menyimpan 200 GB data. Dalam kes ini, anda mempunyai dua pilihan:







  • Tingkatkan dengan menambahkan lebih banyak RAM pada sistem
  • Kurangkan skala dengan menambah contoh pelayan lain dengan 100 GB RAM

Jika anda telah mencapai had maksimum RAM dalam infrastruktur anda, maka penskalaan adalah pendekatan yang ideal. Di samping itu, penskalaan akan meningkatkan pemprosesan pangkalan data dengan margin yang besar.





Redis Sharding

Ia adalah fakta yang diketahui bahawa Redis beroperasi pada satu utas. Jadi, Redis tidak mampu menggunakan berbilang teras CPU pelayan anda untuk memproses arahan. Oleh itu, menambah lebih banyak teras CPU tidak memberikan anda banyak daya pemprosesan atau prestasi dengan Redis. Ia tidak berlaku dengan membahagikan data anda antara beberapa contoh pelayan. Menambah beberapa pelayan dan mengedarkan set data antara yang membolehkan pemprosesan permintaan pelanggan selari, yang meningkatkan daya pengeluaran. Selain itu, prestasi keseluruhan mungkin meningkat hampir secara linear.





Pendekatan pemisahan atau pengagihan data di antara berbilang pelayan dengan mengambil kira penskalaan dipanggil serpihan . Semua pelayan yang menyimpan bahagian data dipanggil serpihan .



Bagaimana Perkongsian Dilakukan — Perkongsian Algoritma

Salah satu kebimbangan utama dengan sharding ialah cara mencari kunci yang diberikan di antara berbilang nod Redis. Kerana kunci yang diberikan boleh disimpan dalam mana-mana serpihan yang tersedia, menanyakan semua serpihan untuk mencari kunci tertentu bukanlah pilihan terbaik. Jadi, mesti ada cara untuk memetakan setiap kunci kepada serpihan tertentu, dan Redis menggunakan strategi serpihan Algoritma.

Pendekatan yang paling biasa ialah mengira nilai cincang menggunakan nama kunci dan modulo Redis. Kemudian, bahagikannya dengan serpihan Redis yang tersedia dalam sistem.

HASH_SLOT = CRC16(kunci) mod 16384

Ia adalah penyelesaian yang agak baik selagi jumlah bilangan serpihan adalah malar. Setiap kali anda menambah contoh pelayan Reids baharu, nilai yang terhasil untuk kunci tertentu mungkin berubah kerana jumlah bilangan serpihan telah meningkat. Ia akhirnya akan menanyakan serpihan Redis yang salah. Oleh itu, anda harus mengikuti proses pengerasan semula dengan mengira serpihan baharu untuk setiap kunci dan memindahkan data ke pelayan yang betul, yang menyusahkan dan bukan tugas remeh jika jumlah kiraan serpihan anda meningkat dari semasa ke semasa.

Redis menggunakan entiti logik baharu yang dipanggil a slot cincang untuk mengelakkan masalah ini. Beberapa slot cincang tersedia untuk serpihan tertentu, dan satu slot cincang boleh memuatkan berbilang kekunci Redis. Terdapat 16384 slot cincang dalam kelompok pangkalan data Redis yang kekal tidak berubah. Pembahagian modulo dilakukan dengan bilangan slot cincang dan bukannya kiraan serpihan. Ia menyediakan kedudukan slot cincang yang betul untuk kunci yang ditentukan walaupun bilangan serpihan telah meningkat. Ia memudahkan proses pengerasan semula dengan mengalihkan slot cincang daripada satu serpihan kepada yang baharu yang membahagikan data merentas kejadian Redis yang berbeza mengikut keperluan.

Faedah Redis Sharding

Redis sharding membolehkan beberapa faedah kepada sistem pangkalan data anda dengan perubahan yang minimum.

Throughput Tinggi

Memandangkan Redis adalah satu benang, memproses berbilang permintaan pelanggan tidak boleh memproses selari menggunakan berbilang teras CPU. Jadi, menambah serpihan atau contoh pelayan baharu menjamin bahawa anda boleh melaksanakan operasi Redis secara selari. Ia meningkatkan operasi sesaat dalam pangkalan data Redis anda, yang akhirnya memberi anda daya pemprosesan yang tinggi.

Ketersediaan Tinggi

Dengan pendekatan sharding, kelompok Redis boleh menyediakan seni bina replika induk yang memastikan ketersediaan dan ketahanan yang tinggi.

Baca Replika

Sharding membolehkan anda menyimpan salinan tepat data anda dan menyediakan operasi baca melalui kejadian Redis yang berasingan, yang meningkatkan prestasi pelaksanaan pertanyaan baca anda.

Selain daripada faedah ini, serpihan boleh menyebabkan situasi otak berpecah apabila anda mempunyai bilangan serpihan genap dalam gugusan Redis. Oleh itu, adalah disyorkan untuk mengekalkan bilangan serpihan yang ganjil dalam kelompok Redis anda.

Kesimpulan

Untuk meringkaskan, Redis sharding membahagikan data antara berbilang pelayan, yang membolehkan penskalaan dan pemprosesan tinggi untuk pangkalan data anda. Seperti yang dibincangkan, Redis menggunakan strategi serpihan algoritma untuk menunjukkan permintaan pelanggan kepada serpihan yang betul. Ini mempunyai beberapa kelemahan apabila jumlah bilangan serpihan meningkat. Jadi, bukannya jumlah bilangan serpihan, Redis menggunakan bilangan slot cincang untuk mengira serpihan yang sesuai. Dengan sharding diperkenalkan, pangkalan data Redis menyediakan ketersediaan tinggi, daya pemprosesan tinggi dan prestasi tinggi.