【redis】- Redis Cluser之?dāng)?shù)據(jù)分布

數(shù)據(jù)分布

簡(jiǎn)述

  • 分布式數(shù)據(jù)庫(kù)首先要解決把整個(gè)數(shù)據(jù)集按照分區(qū)規(guī)則映射到多個(gè)節(jié)點(diǎn)的問(wèn)題,即把數(shù)據(jù)集劃分到多個(gè)節(jié)點(diǎn)上催束,每個(gè)節(jié)點(diǎn)負(fù)責(zé)整體數(shù)據(jù)的一個(gè)子集

分區(qū)及限制

分區(qū)規(guī)則

  • 常見(jiàn)的分區(qū)規(guī)則
    • 順序分區(qū)
    • 哈希分區(qū)照棋,Redis Cluser使用此種分區(qū)規(guī)則
  • 哈希分區(qū)和順序分區(qū)對(duì)比
    image
  • 分布式存儲(chǔ)數(shù)據(jù)分區(qū)圖
    image

① 哈希分區(qū)類(lèi)型

    1. 節(jié)點(diǎn)取余分區(qū)
    • 規(guī)則:使用特定的數(shù)據(jù)拓诸,如Redis的鍵或用戶(hù)ID悼沈,再根據(jù)節(jié)點(diǎn)數(shù)量N使用公式:hash(key)%N計(jì)算出哈希值嘲叔,用來(lái)決定數(shù)據(jù)映射到哪一個(gè)節(jié)點(diǎn)上
    • 優(yōu)點(diǎn):簡(jiǎn)單性
    • 缺點(diǎn): 當(dāng)節(jié)點(diǎn)數(shù)量變化時(shí)懦砂,如擴(kuò)容或收縮節(jié)點(diǎn)蜒犯,數(shù)據(jù)節(jié)點(diǎn)映射關(guān)系需要重新計(jì)算,會(huì)導(dǎo)致數(shù)據(jù)的重新遷移
    • 使用場(chǎng)景:數(shù)據(jù)庫(kù)的分庫(kù)分表規(guī)則孕惜,一般采用預(yù)分區(qū)的方式愧薛,提前根據(jù)數(shù)據(jù)量規(guī)劃好分區(qū)數(shù),比如劃分為512或1024張表衫画,保證可支撐未來(lái)一段時(shí)間的數(shù)據(jù)量毫炉,再根據(jù)負(fù)載情況將表遷移到其他數(shù)據(jù)庫(kù)中,擴(kuò)容時(shí)通常采用翻倍擴(kuò)容削罩,避免數(shù)據(jù)映射全部被打亂導(dǎo)致全量遷移的情況
    • 翻倍擴(kuò)容遷移約50%數(shù)據(jù)
      image
    1. 一致性哈希分區(qū)
    • 規(guī)則:為系統(tǒng)中每個(gè)節(jié)點(diǎn)分配一個(gè)token瞄勾,范圍一般在0~232费奸,這些token構(gòu)成一個(gè)哈希環(huán)。數(shù)據(jù)讀寫(xiě)執(zhí)行節(jié)點(diǎn)查找操作時(shí)进陡,先根據(jù)key計(jì)算hash值愿阐,然后順時(shí)針找到第一個(gè)大于等于該哈希值的token節(jié)點(diǎn)
    • 優(yōu)點(diǎn):加入和刪除節(jié)點(diǎn)只影響哈希環(huán)中相鄰的節(jié)點(diǎn),對(duì)其他節(jié)點(diǎn)無(wú)影響
    • 缺點(diǎn):
      • 加減節(jié)點(diǎn)會(huì)造成哈希環(huán)中部分?jǐn)?shù)據(jù)無(wú)法命中趾疚,需要手動(dòng)處理或者忽略這部分?jǐn)?shù)據(jù)
      • 當(dāng)使用少量節(jié)點(diǎn)時(shí)缨历,節(jié)點(diǎn)變化將大范圍影響哈希環(huán)中數(shù)據(jù)映射
      • 普通的一致性哈希分區(qū)在增減節(jié)點(diǎn)時(shí)需要增加一倍或減去一半節(jié)點(diǎn)才能保證數(shù)據(jù)和負(fù)載的均衡
    • 使用場(chǎng)景:
      • 緩存
      • 大量數(shù)據(jù)節(jié)點(diǎn)的分布式方案
    • 一致性哈希數(shù)據(jù)分布
      image
    1. 虛擬槽分區(qū),Redis Cluser使用此種分區(qū)類(lèi)型
    • 規(guī)則:虛擬槽分區(qū)巧妙地使用了哈喜诼螅空間辛孵,使用分散度良好的哈希函數(shù)把所有數(shù)據(jù)映射到一個(gè)固定范圍的整數(shù)集合中,整數(shù)定義為槽(slot)赡磅,這個(gè)范圍一般遠(yuǎn)遠(yuǎn)大于節(jié)點(diǎn)數(shù)魄缚,比如Redis Cluster槽范圍是0~16383。槽是集群內(nèi)數(shù)據(jù)管理和遷移的基本單位焚廊。采用大范圍槽的主要目的是為了方便數(shù)據(jù)拆分和集群擴(kuò)展
      • 槽集合與節(jié)點(diǎn)關(guān)系
        image

Redis數(shù)據(jù)分區(qū)

  • Redis Cluser采用虛擬槽分區(qū)冶匹, 所有的鍵根據(jù)哈希函數(shù)映射到0~16383整數(shù)槽內(nèi), 計(jì)算公式: slot=CRC16(key) &16383咆瘟。 每一個(gè)節(jié)點(diǎn)負(fù)責(zé)維護(hù)一部分槽以及槽所映射的鍵值數(shù)據(jù)
    • 特點(diǎn)
      • 解耦數(shù)據(jù)和節(jié)點(diǎn)之間的關(guān)系嚼隘, 簡(jiǎn)化了節(jié)點(diǎn)擴(kuò)容和收縮難度
      • 節(jié)點(diǎn)自身維護(hù)槽的映射關(guān)系, 不需要客戶(hù)端或者代理服務(wù)維護(hù)槽分區(qū)元數(shù)據(jù)
      • 支持節(jié)點(diǎn)搞疗、 槽嗓蘑、 鍵之間的映射查詢(xún), 用于數(shù)據(jù)路由匿乃、 在線伸縮等場(chǎng)景
    • 使用CRC16(key) &16383將鍵映射到槽上
      image

Redis集群功能限制

  • Redis集群相對(duì)單機(jī)在功能上存在一些限制
    • key批量操作支持有限桩皿。如msetmget幢炸, 目前只支持具有相同slot值的key執(zhí)行批量操作泄隔。 對(duì)于映射為不同slot值的key由于執(zhí)行mgetmget等操作可能存在于多個(gè)節(jié)點(diǎn)上因此不被支持
    • key事務(wù)操作支持有限宛徊,只支持多key在同一節(jié)點(diǎn)上的事務(wù)操作佛嬉,當(dāng)多個(gè)key分布在不同的節(jié)點(diǎn)上時(shí)無(wú)法使用事務(wù)功能
    • key作為數(shù)據(jù)分區(qū)的最小粒度, 因此不能將一個(gè)大的鍵值對(duì)象如hash闸天、 list等映射到不同的節(jié)點(diǎn)
    • 不支持多數(shù)據(jù)庫(kù)空間暖呕,單機(jī)下的Redis可以支持16個(gè)數(shù)據(jù)庫(kù), 集群模式下只能使用一個(gè)數(shù)據(jù)庫(kù)空間苞氮, 即db0
    • 復(fù)制結(jié)構(gòu)只支持一層湾揽, 從節(jié)點(diǎn)只能復(fù)制主節(jié)點(diǎn), 不支持嵌套樹(shù)狀復(fù)制結(jié)構(gòu)

總結(jié)

  • 數(shù)據(jù)分區(qū)是分布式存儲(chǔ)的核心, 理解和靈活運(yùn)用數(shù)據(jù)分區(qū)規(guī)則對(duì)于掌握Redis Cluster非常有幫助
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末库物,一起剝皮案震驚了整個(gè)濱河市霸旗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌戚揭,老刑警劉巖诱告,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異民晒,居然都是意外死亡精居,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)镀虐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)箱蟆,“玉大人,你說(shuō)我怎么就攤上這事刮便。” “怎么了绽慈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵恨旱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我坝疼,道長(zhǎng)搜贤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任钝凶,我火速辦了婚禮仪芒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耕陷。我一直安慰自己掂名,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布哟沫。 她就那樣靜靜地躺著饺蔑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗜诀。 梳的紋絲不亂的頭發(fā)上猾警,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音隆敢,去河邊找鬼发皿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拂蝎,可吹牛的內(nèi)容都是我干的穴墅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼封救!你這毒婦竟也來(lái)了拇涤?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤誉结,失蹤者是張志新(化名)和其女友劉穎惩坑,沒(méi)想到半個(gè)月后趾痘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體滥沫,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡痹束,死狀恐怖屎媳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布村斟,位于F島的核電站废累,受9級(jí)特大地震影響邓梅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜邑滨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钱反。 院中可真熱鬧掖看,春花似錦、人聲如沸面哥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)尚卫。三九已至归榕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吱涉,已是汗流浹背刹泄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怎爵,地道東北人特石。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鳖链,于是被迫代替她去往敵國(guó)和親姆蘸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Redis cluster是Redis的分布式解決方案狂秦,在3.0版本正式推出,有效地解決了Redis分布式方面的需...
    linuxzw閱讀 183評(píng)論 0 2
  • 分布式數(shù)據(jù)庫(kù)首要問(wèn)題是要解決把整個(gè)數(shù)據(jù)集按照分區(qū)的規(guī)則映射到多個(gè)節(jié)點(diǎn)的問(wèn)題推捐。即把數(shù)據(jù)劃分到多個(gè)節(jié)點(diǎn)上裂问,每個(gè)節(jié)點(diǎn)負(fù)責(zé)...
    yeren108閱讀 1,324評(píng)論 0 1
  • 1、槽(slot)概念 Redis Cluster中有一個(gè)16384長(zhǎng)度的槽的概念玖姑,他們的編號(hào)為0愕秫、1、2焰络、3……...
    183207efd207閱讀 5,603評(píng)論 0 2
  • 一戴甩、哈希分布 1、哈希取模 哈希分布就是將數(shù)據(jù)計(jì)算哈希值之后闪彼,按照哈希值分配到不同的節(jié)點(diǎn)上甜孤。例如有 N 個(gè)節(jié)點(diǎn),數(shù)...
    筆記本一號(hào)閱讀 904評(píng)論 0 0
  • 夜鶯2517閱讀 127,720評(píng)論 1 9