<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          面試題:如何實(shí)現(xiàn)絲滑般的數(shù)據(jù)庫(kù)擴(kuò)容

          共 1916字,需瀏覽 4分鐘

           ·

          2021-05-15 06:25

          ????關(guān)注后回復(fù) “進(jìn)群” ,拉你進(jìn)程序員交流群????

          作者丨sowhat1412

          來源丨sowhat1412

          引言

          初版

          如果我們的線上服務(wù)不重要,一般來個(gè)單體的數(shù)據(jù)庫(kù)DB來存儲(chǔ)數(shù)據(jù)即可來。

          單體應(yīng)用

          優(yōu)點(diǎn):簡(jiǎn)單,省事,方便。
          缺點(diǎn):數(shù)據(jù)并發(fā)性,穩(wěn)定性都有問題。

          進(jìn)階

          隨著數(shù)據(jù)量的不斷增大,一般我們要對(duì)數(shù)據(jù)進(jìn)行水平切分,水平切分的規(guī)則你可以簡(jiǎn)單根據(jù)用戶id或者用戶IP對(duì)數(shù)據(jù)進(jìn)行取模,實(shí)現(xiàn)路由功能。當(dāng)然也可以增加Slave跟KeepAlived來實(shí)現(xiàn)高可用。

          主從+路由

          但問題是,如果隨著業(yè)務(wù)發(fā)展,目前我們2個(gè)庫(kù)的性能扛不住了,還要繼續(xù)水平拆分,造出更多庫(kù)咋辦?你一般是如何實(shí)現(xiàn)絲滑擴(kuò)容的呢?

          擴(kuò)容

          第一版:停機(jī)擴(kuò)容

          停機(jī)擴(kuò)容

          簡(jiǎn)單直接暴力的方法。

          1. APP通知用戶在某個(gè)時(shí)間段停機(jī)維護(hù)升級(jí)。

          2. 新建若干個(gè)具有高可用的庫(kù)。

          3. 停止當(dāng)前服務(wù),然后寫個(gè)數(shù)據(jù)遷移程序,實(shí)現(xiàn)把老庫(kù)數(shù)據(jù)全部遷移到新庫(kù)中。

          4. 修改代碼路由規(guī)則后重新對(duì)外提供服務(wù)。

          優(yōu)點(diǎn):簡(jiǎn)單
          缺點(diǎn):中間停服務(wù)了,無法保證高可用。數(shù)據(jù)切換前跟切換過程中需確保無任何出錯(cuò)。

          第二版:在線雙寫

          在線雙寫
          1. 建立好新到數(shù)據(jù)庫(kù),然后接下來用戶在寫原有數(shù)據(jù)庫(kù)到同時(shí)也寫一份數(shù)據(jù)到我們的新庫(kù)中。

          2. 寫個(gè)數(shù)據(jù)遷移程序,實(shí)現(xiàn)舊庫(kù)中的歷史數(shù)據(jù)遷移到新庫(kù)中。

          3. 遷移過程中,每次插入數(shù)據(jù)時(shí),需檢測(cè)數(shù)據(jù)的更新情況。比如,如果新的表中沒有當(dāng)前的數(shù)據(jù),則直接新增;如果新表有數(shù)據(jù)并沒有我們要遷移的數(shù)據(jù)新的話,我們就更新為當(dāng)前數(shù)據(jù),只能允許新的數(shù)據(jù)覆蓋舊的數(shù)據(jù),推薦使用Canal這樣到中間件。

          4. 經(jīng)過一段時(shí)間后需要校驗(yàn)新庫(kù)跟舊庫(kù)兩邊數(shù)據(jù)是否一樣。如果檢查到一樣了,則直接切換即可。

          優(yōu)點(diǎn):高可用了。
          缺點(diǎn):不夠絲滑,來回挪動(dòng)數(shù)據(jù)較大。

          第三版:絲滑般擴(kuò)容

          目標(biāo):打算將原來到兩個(gè)數(shù)據(jù)庫(kù)擴(kuò)容到4個(gè)。

          第一步:修改配置
          修改配置
          1. 修改配置信息,注意舊庫(kù)跟新庫(kù)之間到映射關(guān)系。確保擴(kuò)容后數(shù)據(jù)可以正確路由到服務(wù)器。

          • Id % 2 = 0 的庫(kù)變?yōu)榱? id % 4 = 0 或   id % 4 = 2

          • Id % 2 = 1 的庫(kù)變?yōu)榱? id % 4 = 1 或   id % 4 = 3

          第二步:reload配置

          服務(wù)層reload配置,可以重啟服務(wù),也可以CLoud那樣配置中心發(fā)送信號(hào)來實(shí)現(xiàn)重讀配置文件。

          至此,數(shù)據(jù)庫(kù)的2 --> 4 擴(kuò)容完成,原來是2個(gè)數(shù)據(jù)庫(kù)實(shí)例提供服務(wù),現(xiàn)在變?yōu)?個(gè)數(shù)據(jù)庫(kù)實(shí)例提供服務(wù)。

          第三步:收縮數(shù)據(jù)
          絲滑擴(kuò)容

          此時(shí)  id % 4 = 0 跟  id % 4 = 2 的兩個(gè)DB 還在同步數(shù)據(jù)。id % 4 = 1 跟 id % 4 = 3的兩個(gè)DB還在同步數(shù)據(jù)。需做一些收尾操作。
          1. 接觸上面的兩個(gè)同步操作。

          2. 對(duì)新庫(kù)新建高可用。

          3. 刪除冗余數(shù)據(jù),比如id % 4 = 0的機(jī)器中刪除id % 4 = 2的冗余數(shù)據(jù),只為id % 4 = 0的數(shù)據(jù)提供服務(wù),其余三個(gè)類似操作。

          4. 至此實(shí)現(xiàn)成倍擴(kuò)容,還避免來數(shù)據(jù)遷移。

          -End-

          最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

          點(diǎn)擊??卡片,關(guān)注后回復(fù)【面試題】即可獲取

          在看點(diǎn)這里好文分享給更多人↓↓

          瀏覽 12
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩中文字幕A | 亚洲AV无码国产综合专区 | 极品少妇被猛得白浆直流草莓视频 | 三级在线视频播放 | 国产在线视频日本 |