国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

被數據庫讀寫分離坑了,數據不一致怎么解(含5種解法)

數據庫 其他數據庫
本文分享一下以前入職現在公司第一次發布項目遇到的一個問題,一個數據庫讀寫分離的坑。

Hello,大家好!我是樓下小黑哥,我又來了~本文分享一下以前入職現在公司第一次發布項目遇到的一個問題,一個數據庫讀寫分離的坑。

前言

事情是這樣的,剛入職的時候接到了這樣的一個業務需求:

每個支付通道支付失敗的時候都會返回特定的錯誤碼,業務內部需要將通道特定的錯誤碼轉義成內部的錯誤碼,這樣對外就可以統一返回我們自己的錯誤碼。

這個需求其實不難,當時設計的系統架構如下:

新增規則的流程簡單分為三步:

  •  業務人員通過管理后臺新增映射規則;
  •  數據庫新增、修改這條映射規則;
  •  刪除緩存。

這里之所以增加緩存,是因為這個場景每次支付都需要使用,使用緩存可以避免每次都去數據庫讀取,增加讀取速度。

后續支付請求業務流程如下:

數據庫讀寫分離-用戶操作

當緩存內映射規則不存在的時候,將會查詢數據庫,然后加載到緩存中。如果緩存內映射規則已存在,將會直接使用緩存內映射規則。

這個業務流程其實比較簡單,當時在測試環境測試也沒問題,后續發布線上環境的卻碰到奇怪的問題。

「新增規則之后,一段時間內,映射規則并沒有生效。查看日志發現,查詢數據庫的時候,沒有數據。」

這就很奇怪了,日志顯示新增是成功,但是查詢卻沒有數據。但是過了一段時間,再次查詢卻又有了數據。

走查了下代碼,發現并沒有什么問題,第二天上班的時候請教了一下同事,才知道問題的原因:

原來線上的數據庫采用主從架構,數據讀寫分離,數據查詢走的是從庫。數據寫入都是直接操作主庫,后續再同步到從庫。

「由于數據庫同步存在延時,這就導致數據同步的這段時間,主從數據將會不一致,從庫無法查詢到最新的數據。」

如果你之前的數據庫系統架構是單庫或者主備結構,當你第一次轉到數據讀寫分離架構,這個坑大概率也會踩到。

[[359763]]

一、數據庫系統架構發展

下面我們首先了解一下數據庫系統架構,最后再來看下如何解決主從同步延時的導致數據不一致。

1、主備架構

業務發展的前期,數據訪問量小,這時我們可以直接采用單庫的架構。

不過我們一般不使用的上面的架構,因為存在單點的問題。若數據庫出現故障,這段期間業務將會不可用。我們除了等待重啟,其他沒什么解決辦法。

所以我們會增加一個備庫,實時同步主庫的數據。

主備架構

一旦「主庫」出了故障,通過人工的方式,手動的將「主機」踢下線,將「備機」改為「主機」來繼續提供服務。

這種架構,部署維護簡單,業務開發也無需任何改造。

不過缺點也很明顯,備庫只有在主庫有問題的時候才會被啟用,存在一定的資源浪費的情況。

2、主從架構

隨著業務發展,請求量不斷變大,數據量也不斷變大,業務變得更加復雜,很快數據將會到達瓶頸。

由于大多數業務都是讀多寫少,所以數據庫讀的最容易成為系統瓶頸。

這時候我們可以提高讀的性能,這時我們的可以采用的方案,增加從實例,主從同步,數據讀寫分離。

可以看到這個架構與主備沒什么區別,主要區別在于主從架構下,從庫與主庫一樣,時刻需要干活,主庫提供寫服務,從庫只提供讀服務。

如果后續讀的壓力還是太大,我們還可以增加從庫的數量,水平擴充讀的能力。

雖然主從架構幫我們解決讀的瓶頸,但是由于主從之間需要數據同步,這天然就存在一定延時。

在這延時窗口期內,從庫的讀只能讀到一個舊數據,這也是上面案例問題的真正的原因。

[[359767]]

接下來我們來看下有什么辦法可以優化這種情況。

二、主從延時解決辦法

1、忍受大法

第一種解決辦法,很簡單,無他,不管他,沒有讀到也沒事。這時業務不需要任何改造,你好,我好,她也好~

[[359768]]

如果業務對于數據一致性要求不高,我們就可以采用這種方案。

2、數據同步寫方案

主從數據同步方案,一般都是采用的異步方式同步給備庫。

我們可以將其修改為同步方案,主從同步完成,主庫上的寫才能返回。

  •  業務系統發起寫操作,數據寫主庫;
  •  寫請求需要等待主從同步完成才能返回;
  •  數據讀從庫,主從同步完成就能讀到最新數據。

這種方案,我們只需要修改數據庫之間同步配置即可,業務層無需修改,相對簡單。

「不過,由于主庫寫需要等待主從完成,寫請求的時延將會增加,吞吐量將會降低。」

這一點對于現在在線業務,可能無法接受。

3、選擇性強制讀主

對于需要強一致的場景,我們可以將其的讀請求都操作主庫,這樣「讀寫都在主庫」,就沒有不一致的情況。

這種方案業務層需要改造一下,將其強制性讀主,相對改造難度較低。

不過這種方案相對于浪費了另一個數據庫,增加主庫的壓力。

4、中間件選擇路由法

這種方案需要使用一個中間件,所有數據庫操作都先發到中間件,由中間件再分發到相應的數據庫。

這時流程如下:

  •  寫請求,中間件將會發到主庫,同時記錄一下此時寫請求的 key(操作表加主鍵等);
  •  讀請求,如果此時 key 存在,將會路由到主庫;
  •  一定時間后(經驗值),中間件認為主從同步完成,刪除這個 key,后續讀將會讀從庫。

這種方案,可以保持數據讀寫的一致。

但是系統架構增加了一個中間件,整體復雜度變高,業務開發也變得復雜,學習成本也比較高。

5、緩存路由大法

這種方案與中間件的方案流程比較類似,不過改造成本相對較低,不需要增加任何中間件。

這時流程如下:

  •  寫請求發往主庫,同時緩存記錄操作的 key,緩存的失效時間設置為主從的延時;
  •  讀請求首先判斷緩存是否存在:

          若存在,代表剛發生過寫操作,讀請求操作主庫;

          若不存在,代表近期沒發生寫操作,讀請求操作從庫。

這種方案相對中間件的方案成本較低,但是呢我們此時又引入一個緩存組件,所有讀寫之間就又多了一步緩存操作。

三、總結

我們引入主從架構,數據讀寫分離,目的是為了解決業務快速發展,請求量變大,并發量變大,從而引發的數據庫的讀瓶頸。

不過當引入新一個架構解決問題時,勢必會帶來另外一個問題,數據庫讀寫分離之后,主從延遲從而導致數據不一致的情況。

為了解決主從延遲,數據不一致的情況,我們可以采用以下這幾種方案:

  •  忍受大法;
  •  數據庫同步寫方案;
  •  選擇性強制讀主;
  •  中間件選擇路由法;
  •  緩存路由大法。

上面的方案都有各自的優點,當然也有相應的缺點,我們需要根據自己的業務情況,選擇相應的解決方案。 

 

責任編輯:龐桂玉 來源: DBAplus社群
相關推薦

2020-07-20 14:06:38

數據庫主從同步服務

2018-07-08 07:38:28

數據庫緩存數據

2018-07-15 08:18:44

緩存數據庫數據

2025-04-08 09:00:00

數據庫緩存架構

2024-05-11 07:37:43

數據Redis策略

2020-11-17 06:42:21

MySQL數據庫開源

2017-06-20 09:42:52

網絡安全法數據隱私法網絡安全

2021-12-30 09:32:04

緩存數據庫數據

2021-12-26 14:32:11

緩存數據庫數據

2022-02-23 09:17:09

數據庫分離變更

2022-03-16 15:54:52

MySQL數據format

2019-08-07 10:25:41

數據庫緩存技術

2021-05-27 18:06:30

MySQL編碼數據

2022-03-18 10:53:49

數據系統架構

2024-11-18 08:00:00

數據倉庫通用語義層商業智能

2021-04-18 15:01:56

緩存系統數據

2021-01-19 10:39:03

Redis緩存數據

2025-04-03 09:51:37

2023-09-13 13:05:01

Java項目

2022-12-13 08:15:42

緩存數據競爭
點贊
收藏

51CTO技術棧公眾號

在线视频日韩| 亚洲午夜av久久乱码| 国产在线三区| 一本色道久久综合狠狠躁篇的优点 | 久久综合九色| 在线āv视频| 日韩成人在线资源| 日韩欧美亚洲国产精品字幕久久久| 久久福利毛片| 都市激情国产精品| 日韩一级特黄毛片| 91精品国产色综合久久| aaaaaaa大片免费看| 国产精品第100页| 亚洲香蕉成视频在线观看| 狠狠躁18三区二区一区| 国产日韩欧美高清| 国产伦精品一区二区三区在线观看| 久久蜜桃av| 成人毛片免费看| 日韩大胆成人| 亚洲国产合集| 欧美丰满日韩| 久久久亚洲人| 成人动漫精品一区二区| 美腿丝袜亚洲综合| 99久久精品国产毛片| 99久久99久久久精品齐齐| 夜夜嗨av一区二区三区| 日本韩国视频一区二区| 欧美成人一级视频| 欧美韩国理论所午夜片917电影| 国产suv精品一区二区三区88区| 久久国产精品-国产精品| 超碰成人在线免费观看| 成人毛片一区二区| 婷婷亚洲一区二区三区| 中文日本在线观看| 国产亚洲高清在线观看| 女人香蕉久久**毛片精品| 国产精品18久久久久久久久| 日韩欧美综合在线视频| 欧美巨乳美女视频| 蜜桃免费一区二区三区| 免费在线a视频| 国产一二三区在线视频| 日本亚洲欧洲无免费码在线| 在线精品国产| 国产一区二区三区视频在线播放| 国产日韩欧美在线一区| 在线视频综合导航| 久久天天躁狠狠躁夜夜av| 99porn视频在线| 欧美一卡2卡3卡4卡无卡免费观看水多多 | 国产激情视频一区二区三区欧美| 国产一区二区三区综合| 亚洲国产精品av| 亚洲第一精品在线| 亚洲精品美女在线观看| 日韩一卡二卡三卡国产欧美| 欧美另类一区二区三区| 91sa在线看| 向日葵污视频在线观看| 99精品老司机免费视频| 成人av动漫| 激情综合中文娱乐网| 精品久久久久久| 亚洲不卡av一区二区三区| 日韩中文字在线| 国产精品久久久久久久小唯西川 | 国产在线观看一区二区| 午夜精品福利一区二区三区蜜桃| 中文字幕国内精品| 成人黄色片视频网站| 激情视频综合网| 欧美男男tv网站在线播放| 国产精品av一区二区| 成人免费短视频| 久久久成人网| 欧美色另类天堂2015| 国产精品久久一区| 制服影音先锋| 99re8精品视频在线观看| 久久精品国产亚洲a| 在线不卡中文字幕播放| 国产一区二区h| 日本精品久久久久久久| 日韩啊v在线| 高清在线视频不卡| 国产精品亚洲午夜一区二区三区 | 97se狠狠狠综合亚洲狠狠| 91一区二区在线| 欧美日韩免费在线视频| 国产精品成人免费电影| 作爱视频免费观看视频在线播放激情网| 欧美变态网站| 欧美韩国日本不卡| 久久福利视频网| 亚洲精品久久久中文字幕| 成人黄色免费观看| 成人免费观看视频| 久久精品国产2020观看福利| 免费av观看网址| 久久人体大尺度| 国产最新精品精品你懂的| 亚洲成人a级网| 草草视频在线免费观看| 成人欧美一区二区三区的电影| 麻豆一区二区三| 久久精品视频网站| 1769国产精品| 久久99久久| 国产成人免费视频一区| 日韩av网站在线| 成年人网站大全| 97偷自拍亚洲综合二区| 欧美日韩性视频| 久99久视频| 懂色aⅴ精品一区二区三区| 国产拍揄自揄精品视频麻豆| 欧美自拍视频在线| 樱花在线免费观看| av在线加勒比| 久久99精品久久久久久动态图| 亚洲白虎美女被爆操| 欧美大黑帍在线播放| av在线国产精品| 9191精品国产综合久久久久久| 国产日韩欧美另类| a天堂中文在线官网| 91精品秘密在线观看| 久久久久88色偷偷免费| 亚洲男人天堂古典| 琪琪第一精品导航| 99热这里只有精品7| 婷婷五月在线视频| av亚洲免费| 日本久久91av| 国产日产久久高清欧美一区| 成年人视频在线网站| 亚洲欧美成人vr| 亚洲成人中文字幕| 国产精品999视频| 亚洲精品极品少妇16p| 日韩欧美一区二区三区在线| av动漫在线观看| 欧美日本中文| 亚洲九九视频| 九九九久久久久久| 性国产高清在线观看| 亚洲一区二区三区视频在线播放| 美媛馆国产精品一区二区| 欧美热在线视频精品999| 亚洲一级片在线看| а天堂8中文最新版在线官网| 26uuu亚洲综合色| 国产精品日本一区二区| 在线日韩网站| 亚洲人成电影网站| 国产www视频在线观看| 欧美网站在线观看| 这里只有精品66| 狠狠做六月爱婷婷综合aⅴ| 欧美日韩一区高清| 97视频在线免费| 国产福利一区二区精品秒拍| 欧美日韩五月天| 91在线最新| 亚洲蜜臀av乱码久久精品| 91好吊色国产欧美日韩在线| 99精品视频在线免费观看| 中文字幕精品在线播放| 精品国产午夜| 欧美精品18videos性欧| 色婷婷狠狠五月综合天色拍 | 午夜激情一区二区| 污网站免费在线| 国产精品沙发午睡系列990531| 国内精品视频一区二区三区| 亚洲欧美一级二级三级| 国产丝袜一区视频在线观看 | 国产一区再线| 色先锋久久影院av| 77777亚洲午夜久久多人| av在线1区2区| 精品免费一区二区三区| 韩日毛片在线观看| 日韩视频一区在线| 欧美jizz19性欧美| 久久本道综合色狠狠五月| 蝌蚪视频在线播放| 日韩一区二区免费电影| 成人在线免费视频| 在线观看一区| 精品人伦一区二区三区蜜桃免费| 成年在线播放小视频| 欧美激情影院| 日韩欧美有码在线| 久久精品蜜桃| 欧美日韩精品一区二区在线播放|