Redis Sharding

Redis Sharding



Amikor először kezdi el használni a Redis-t, könnyen elhiheti, hogy soha nem kell az alapértelmezett beállításokon túllépnie. A probléma az, hogy az alkalmazás növekedésével több memóriára, CPU-ra és átviteli kapacitásra lesz szüksége az üzleti igények kielégítéséhez. Ebben a cikkben bemutatjuk, hogyan skálázható a Redis-fürt a szilánkosítással, hogy többletkapacitást biztosítson vállalkozása zökkenőmentes működtetéséhez és a jövőbeni növekedéshez. Kifejezetten megtudjuk, hogy a Redis-fürt hogyan biztosít nagy átviteli sebességet felosztással.

Skálázhatóság

A szerver méretezésének két általános megközelítése létezik: a függőleges és a vízszintes méretezés. A függőleges méretezéssel vagy felskálázással több energiát és erőforrást ad hozzá a szerverhez, például több CPU-t, memóriát és tárhelyet, ami költséges. Másrészt a vízszintes méretezés több csomópontot ad a meglévő erőforráskészlethez. Ezt skálázásnak hívják. Tehát az Ön korlátai és követelményei alapján Ön dönti el, hogy egyetlen nagyobb kiszolgálópéldánnyal rendelkezzen, vagy több kiszolgálócsomópontot telepít-e.

Tegyük fel, hogy 100 GB RAM-mal rendelkezik, és 200 GB adatot kell tárolnia. Ebben az esetben két választása van:







  • Növelje a RAM-ot a rendszerbe
  • Bővítsen egy másik szerverpéldányt 100 GB RAM-mal

Ha elérte a maximális RAM-korlátot az infrastruktúrán belül, akkor a kicsinyítés az ideális megközelítés. Ezen túlmenően a kicsinyítés nagymértékben növeli az adatbázis átviteli sebességét.





Redis Sharding

Köztudott tény, hogy a Redis egyetlen szálon működik. Tehát a Redis nem képes a kiszolgáló CPU-jának több magját használni a parancsok feldolgozásához. Ezért több CPU mag hozzáadása nem biztosít nagy átviteli sebességet vagy teljesítményt a Redis segítségével. Nem ez a helyzet, ha az adatokat több szerverpéldány között osztja fel. Több szerver hozzáadása és az adathalmaz ezek között történő elosztása lehetővé teszi a kliens kérések párhuzamos feldolgozását, ami növeli az átviteli sebességet. Ezenkívül az általános teljesítmény közel lineárisan növekedhet.





Ezt a megközelítést az adatok több szerver között történő felosztása vagy elosztása a méretezést szem előtt tartva hívják szilánkos . Minden kiszolgáló, amely az adatok egy részét tárolja, meghívásra kerül szilánkok .



Hogyan történik a megosztás – Algoritmikus megosztás

A felosztással kapcsolatos egyik fő probléma az volt, hogyan lehet egy adott kulcsot több Redis-csomópont között megtalálni. Mivel egy adott kulcs bármely elérhető szilánkban tárolható, az összes szilánk lekérdezése egy adott kulcs megtalálása érdekében nem a legjobb megoldás. Tehát minden kulcsot le kell képezni egy adott szilánkra, és a Redis algoritmikus felosztási stratégiát használ.

A legáltalánosabb módszer a hash érték kiszámítása a Redis kulcsnév és a modulo használatával. Ezután ossza el a rendszerben elérhető Redis-szilánkokkal.

HASH_SLOT = CRC16(kulcs) mod 16384

Egészen jó megoldás, amíg a szilánkok száma állandó. Amikor új Reids-kiszolgálópéldányt ad hozzá, az adott kulcs eredő értéke megváltozhat, mivel a szilánkok száma nőtt. A végén rossz Redis-szilánkot fog lekérdezni. Ezért kövesse az újrafelosztási folyamatot úgy, hogy minden kulcshoz kiszámolja az új szilánkot, és továbbítsa az adatokat a megfelelő kiszolgálóra, ami nehézkes és nem triviális feladat, ha a szilánkok teljes száma időről időre növekszik.

A Redis egy új logikai entitást használ, az a hash slot hogy megelőzzük ezt a problémát. Egy adott szilánkhoz több hash slot is rendelkezésre áll, és egyetlen hash slot több Redis kulcsot is tartalmazhat. A Redis adatbázis-fürtben 16384 hash-hely található, amelyek változatlanok maradnak. A modulo felosztás a hash slotok számával történik a szilánkok száma helyett. Akkor is biztosítja a hash slot megfelelő pozícióját a megadott kulcshoz, ha a szilánkok száma nőtt. Leegyszerűsíti az újrafelosztási folyamatot azáltal, hogy áthelyezi a hash-helyeket az egyik szilánkról az újra, amely a követelményeknek megfelelően felosztja az adatokat a különböző Redis-példányok között.

A Redis Sharding előnyei

A Redis sharing minimális változtatásokkal számos előnnyel jár az adatbázisrendszer számára.

Nagy áteresztőképesség

Mivel a Redis egyszálú, több ügyfélkérelem feldolgozása nem tud párhuzamosan több CPU magot használni. Tehát új szilánkok vagy kiszolgálópéldányok hozzáadása garantálja, hogy párhuzamosan hajtsa végre a Redis-műveleteket. Növeli a másodpercenkénti műveletek számát a Redis adatbázisban, ami végül nagy átviteli sebességet biztosít.

Magas rendelkezésre állás

A felosztási megközelítéssel a Redis-fürt olyan master-replica architektúrát állíthat be, amely magas rendelkezésre állást és tartósságot biztosít.

Olvassa el a replikákat

A megosztás lehetővé teszi az adatok pontos másolatának megőrzését, és az olvasási műveletek elvégzését különálló Redis-példányokon keresztül, ami növeli az olvasási lekérdezés végrehajtásának teljesítményét.

Ezen előnyök mellett a felosztás megosztott agyi helyzeteket okozhat, ha páros számú szilánk van a Redis-fürtben. Ezért ajánlatos páratlan számú szilánkot tartani a Redis-fürtben.

Következtetés

Összefoglalva, a Redis sharding az adatokat több szerver között osztja fel, ami lehetővé teszi az adatbázis méretezését és nagy átviteli sebességét. Amint már említettük, a Redis algoritmikus felosztási stratégiát használ az ügyfélkérelmek megfelelő szilánkra irányítására. Ennek van néhány hátránya, amikor a szilánkok száma növekszik. Tehát a szilánkok teljes száma helyett a Redis a hash slotok számát használja a megfelelő szilánk kiszámításához. A felosztás bevezetésével a Redis adatbázisok magas rendelkezésre állást, nagy átviteli sebességet és nagy teljesítményt biztosítanak.