Redis Sharding

Redis Sharding



Sa una mong paggamit ng Redis, madaling paniwalaan na hindi mo na ito kakailanganing palakihin ito nang higit pa sa mga default na setting. Ang isyu ay habang lumalaki ang iyong application, sa kalaunan ay mangangailangan ka ng mas maraming memorya, CPU, at kapasidad ng throughput upang suportahan ang iyong mga pangangailangan sa negosyo. Sa artikulong ito, ipapakita namin sa iyo kung paano sumusukat ang Redis cluster na may sharding para bigyan ka ng karagdagang kapasidad na kailangan mo para mapatakbo ang iyong negosyo nang maayos at lumago sa hinaharap. Partikular nating malalaman kung paano nagbibigay ang Redis cluster ng mataas na throughput na may sharding.

Scalability

Mayroong dalawang karaniwang diskarte sa pag-scale ng isang server: vertical scaling at horizontal scaling. Ang vertical na pag-scale o pag-scale up ay kung saan ka magdagdag ng higit pang kapangyarihan at mga mapagkukunan sa iyong server, tulad ng mas maraming CPU, memorya, at storage, na magastos. Sa kabilang banda, ang pahalang na pag-scale ay nagdaragdag ng maraming node sa iyong umiiral na resource pool. Ito ay tinatawag na scaling out. Kaya, batay sa iyong mga limitasyon at kinakailangan, nasa sa iyo na magkaroon ng isang solong mas malaking server instance o mag-deploy ng maramihang mga node ng server.

Ipagpalagay na mayroon kang 100 GB ng RAM at kailangang humawak ng 200 GB ng data. Sa kasong ito, mayroon kang dalawang pagpipilian:







  • Palakihin sa pamamagitan ng pagdaragdag ng higit pang RAM sa system
  • I-scale out sa pamamagitan ng pagdaragdag ng isa pang instance ng server na may 100 GB ng RAM

Kung naabot mo na ang maximum na limitasyon ng RAM sa loob ng iyong imprastraktura, ang pag-scale out ay ang perpektong diskarte. Bilang karagdagan, ang pag-scale out ay tataas ang database throughput ng malaking margin.





Redis Sharding

Ito ay isang kilalang katotohanan na ang Redis ay nagpapatakbo sa isang solong thread. Kaya, hindi kaya ng Redis na gumamit ng maraming core ng CPU ng iyong server upang iproseso ang mga utos. Samakatuwid, ang pagdaragdag ng higit pang mga CPU core ay hindi nagbibigay sa iyo ng maraming throughput o pagganap sa Redis. Hindi ito ang kaso sa paghahati ng iyong data sa maraming mga pagkakataon ng server. Ang pagdaragdag ng ilang mga server at pamamahagi ng set ng data sa mga iyon ay nagbibigay-daan sa pagproseso ng mga kahilingan ng kliyente nang magkatulad, na nagpapataas ng throughput. Bilang karagdagan, ang pangkalahatang pagganap ay maaaring tumaas nang malapit sa linearly.





Ang pamamaraang ito ng paghahati o pamamahagi ng data sa maraming server na nasa isip ay ang pag-scale sharding . Ang lahat ng mga server na nag-iimbak ng mga bahagi ng data ay tinatawag mga tipak .



Paano Ginagawa ang Sharding — Algorithmic Sharding

Ang isa sa mga pangunahing alalahanin sa sharding ay kung paano hanapin ang isang ibinigay na susi sa maraming Redis node. Dahil ang isang ibinigay na susi ay maaaring maimbak sa anumang magagamit na mga shards, ang pag-query sa lahat ng mga shards upang makahanap ng isang partikular na key ay hindi ang pinakamahusay na pagpipilian. Kaya, dapat mayroong isang paraan upang imapa ang bawat susi sa isang partikular na shard, at ang Redis ay gumagamit ng diskarte sa Algorithmic sharding.

Ang pinakakaraniwang diskarte ay ang pagkalkula ng hash value gamit ang Redis key name at modulo. Pagkatapos, hatiin ito sa magagamit na Redis shards sa system.

HASH_SLOT = CRC16(key) mod 16384

Ito ay isang magandang solusyon hangga't ang kabuuang bilang ng mga shards ay pare-pareho. Sa tuwing magdaragdag ka ng bagong instance ng server ng Reids, maaaring magbago ang resultang halaga para sa isang naibigay na key dahil tumaas ang kabuuang bilang ng mga shards. Ito ay magtatapos sa pagtatanong sa maling Redis shard. Samakatuwid, dapat mong sundin ang proseso ng resharding sa pamamagitan ng pagkalkula ng bagong shard para sa bawat key at paglilipat ng data sa tamang server, na masalimuot at hindi isang maliit na gawain kung ang iyong kabuuang bilang ng shard ay tumataas paminsan-minsan.

Gumagamit si Redis ng bagong lohikal na entity na tinatawag na a hash slot upang maiwasan ang problemang ito. Maraming hash slot ang available para sa isang partikular na shard, at ang isang hash slot ay maaaring maglaman ng maraming Redis key. Mayroong 16384 hash slots sa isang Redis database cluster na nananatiling hindi nagbabago. Ginagawa ang modulo division sa bilang ng mga hash slot sa halip na sa shard count. Nagbibigay ito ng tamang posisyon ng hash slot para sa tinukoy na key kahit na tumaas ang bilang ng mga shards. Pinapasimple nito ang proseso ng resharding sa pamamagitan ng paglipat ng mga hash slot mula sa isang shard patungo sa bago na naghahati ng data sa iba't ibang Redis instance ayon sa kinakailangan.

Mga Pakinabang ng Redis Sharding

Ang redis sharding ay nagbibigay-daan sa ilang mga benepisyo sa iyong database system na may kaunting pagbabago.

Mataas na Throughput

Dahil ang Redis ay single-threaded, ang pagpoproseso ng maraming kahilingan ng kliyente ay hindi maaaring magproseso ng magkatulad gamit ang maraming CPU core. Kaya, ang pagdaragdag ng mga bagong shards o server instance ay ginagarantiyahan na maaari mong gawin ang mga operasyon ng Redis nang magkatulad. Pinatataas nito ang mga operasyon sa bawat segundo sa iyong database ng Redis, na sa kalaunan ay nagbibigay sa iyo ng mataas na throughput.

Mataas na Availability

Gamit ang sharding approach, ang Redis cluster ay makakapag-set up ng master-replica architecture na nagsisiguro ng mataas na availability at tibay.

Basahin ang mga Replika

Binibigyang-daan ka ng Sharding na magtago ng eksaktong kopya ng iyong data at magbigay ng mga read operation sa pamamagitan ng hiwalay na Redis instance, na nagpapataas sa performance ng iyong read query execution.

Bukod sa mga benepisyong ito, ang sharding ay maaaring magdulot ng split-brain na sitwasyon kapag mayroon kang pantay na bilang ng mga shards sa Redis cluster. Kaya, inirerekomenda ang pagpapanatili ng kakaibang bilang ng mga shards sa iyong Redis cluster.

Konklusyon

Upang buod, ang Redis sharding ay naghahati ng data sa maraming server, na nagbibigay-daan sa pag-scale at mataas na throughput para sa iyong database. Gaya ng tinalakay, gumagamit ang Redis ng algorithmic sharding na diskarte upang ituro ang mga kahilingan ng kliyente sa tamang shard. Ito ay may ilang mga kakulangan kapag ang kabuuang bilang ng mga shards ay tumaas. Kaya, sa halip na kabuuang bilang ng mga shard, ginagamit ng Redis ang bilang ng mga hash slot upang kalkulahin ang naaangkop na shard. Sa pagpapakilala ng sharding, ang mga database ng Redis ay nagbibigay ng mataas na kakayahang magamit, mataas na throughput, at mataas na pagganap.