掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在聊數(shù)據(jù)庫與緩存一致性問題之前,先聊聊數(shù)據(jù)庫主庫與從庫的一致性問題。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供鐘樓企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為鐘樓眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
問:常見的數(shù)據(jù)庫集群架構(gòu)如何?
答:一主多從,主從同步,讀寫分離。
如上圖:
畫外音:任何方案不要忘了本心,加從庫的本心,是提升讀性能。
問:為什么會(huì)出現(xiàn)不一致?
答:主從同步有時(shí)延,這個(gè)時(shí)延期間讀從庫,可能讀到不一致的數(shù)據(jù)。
如上圖:
畫外音:任何數(shù)據(jù)冗余,必將引發(fā)一致性問題。
問:如何避免這種主從延時(shí)導(dǎo)致的不一致?
答:常見的方法有這么幾種。
方案一:忽略
任何脫離業(yè)務(wù)的架構(gòu)設(shè)計(jì)都是耍流氓,絕大部分業(yè)務(wù),例如:百度搜索,淘寶訂單,QQ消息,58帖子都允許短時(shí)間不一致。
畫外音:如果業(yè)務(wù)能接受,最推崇此法。
如果業(yè)務(wù)能夠接受,別把系統(tǒng)架構(gòu)搞得太復(fù)雜。
方案二:強(qiáng)制讀主
如上圖:
這是很常見的微服務(wù)架構(gòu),可以避免數(shù)據(jù)庫主從一致性問題。
方案三:選擇性讀主
強(qiáng)制讀主過于粗暴,畢竟只有少量寫請(qǐng)求,很短時(shí)間,可能讀取到臟數(shù)據(jù)。
有沒有可能實(shí)現(xiàn),只有這一段時(shí)間,可能讀到從庫臟數(shù)據(jù)的讀請(qǐng)求讀主,平時(shí)讀從呢?
可以利用一個(gè)緩存記錄必須讀主的數(shù)據(jù)。
如上圖,當(dāng)寫請(qǐng)求發(fā)生時(shí):
畫外音:key的格式為“db:table:PK”,假設(shè)主從延時(shí)為1s,這個(gè)key的cache超時(shí)時(shí)間也為1s。
如上圖,當(dāng)讀請(qǐng)求發(fā)生時(shí):
這是要讀哪個(gè)庫,哪個(gè)表,哪個(gè)主鍵的數(shù)據(jù)呢,也將這三個(gè)信息拼裝一個(gè)key,到cache里去查詢,如果,
以此,保證讀到的一定不是不一致的臟數(shù)據(jù)。
總結(jié)
數(shù)據(jù)庫主庫和從庫不一致,常見有這么幾種優(yōu)化方案:
文字很短,不能解決所有問題,但希望能給大家一些啟示。
【本文為專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流