<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
我們都知道網際網路資料有個特性,大部分場景都是 讀多寫少,比如:微博、微信、淘寶電商,按照 二八原則,讀流量佔比甚至能達到 90%。
結合這個特性,我們對底層的資料庫架構也會做相應調整。採用 讀寫分離。
處理過程:
看似非常合理,細想卻不是那麼回事。
主庫 與 從庫 是採用非同步複製資料,如果這兩者之間資料還沒有同步怎麼辦?
主庫剛寫完資料,從庫還沒來得及拉取最新資料,讀 請求就來了,給使用者的感覺,資料丟了?
針對這個問題,今天,我們就來探討下有什麼解決方案?
針對不用的業務訴求,區別性對待。
場景一:
如果是對資料的 實時性 要求不是很高,比如:大V有千萬粉絲,釋出一條微博,粉絲晚幾秒鐘收到這條資訊,並不會有特別大的影響。這時,可以走 從庫。
場景二:
如果對資料的 實時性 要求非常高,比如金融類業務。我們可以在使用者端程式碼標記下,讓查詢強制走主庫。
由於主從庫之間資料同步需要一定的時間間隔,那麼有一種策略是延遲從從庫查詢資料。
比如:
select sleep(1) select * from order where order_id=11111;
在正式的業務查詢時,先執行一個sleep 語句,給從庫預留一定的資料同步緩衝期。
因為是採用一刀切,當面對高並行業務場景時,效能會下降的非常厲害,一般不推薦這個方案。
之前寫過一篇文章 《京東一面:MySQL 主備延遲有哪些坑?主備切換策略 》。
有講過 什麼是主備延遲?、主備延遲的常見原因?
方案一:
在從庫 執行 命令 show slave status
。
檢視seconds_behind_master
的值,單位為秒,如果為 0,表示主備庫之間無延遲。
方案二:
比較主從庫的檔案點位。
還是執行show slave status
,響應結果裡有截個關鍵引數。
兩兩比較,上面的引數是否相等。
方案三:
比較 GTID 集合。
比較 Retrieved_Gtid_Set
和 Executed_Gtid_Set
的值是否相等。
在執行業務SQL操作時,先判斷從庫是否已經同步最新資料。從而決定是操作主庫,還是操作從庫。
缺點:
無論採用上面哪一種方案,如果主庫的寫操作頻繁不斷,那麼從庫的值永遠跟不上主庫的值,那麼讀流量永遠是打在了主庫上。
這個問題跟 MQ訊息佇列 既要求高吞吐量又要保證順序是一樣的,從全域性來看確實無解,但是縮小範圍就容易多了,我們可以保證一個分割區內的訊息有序。
回到 主從庫 之間的資料同步問題,從庫查詢哪條記錄,我們只要保證之前對應的寫binglog已經同步完資料即可,可以不用管主從庫的所有的事務binlog
是否同步。
問題是不是一下簡單多了。
在從庫執行下面命令,返回是一個正整數 M,表示從庫從引數節點開始執行了多少個事務。
select master_pos_wait(file, pos[, timeout]);
缺點:
master_pos_wait
返回結果無法與具體操作的資料行做關聯,所以每次接收讀請求時,從庫還是無法確認是否已經同步資料,方案實用性不高。
執行下面查詢命令:
gtid_set
,返回 0。select wait_for_executed_gtid_set(gtid_set, 1);
MySQL 5.7.6 版本開始,允許在執行完更新類事務後,把這個事務的 GTID
返回給使用者端。具體操作,將引數session_track_gtids
設定為OWN_GTID
,呼叫 API 介面mysql_session_track_get_first
返回結果解析出 GTID。
處理流程:
select wait_for_executed_gtid_set (gtid_set, 1)
。缺點:
跟上面的 master_pos_wait
類似,如果 寫操作 與 讀操作 沒有上下文關聯,那麼 GTID 無法傳遞 。方案實用性不高。
高並行系統,快取作為效能優化利器,應用廣泛。我們可以考慮引入快取作為緩衝媒介。
處理過程:
缺點:
K-V 儲存,適用一些簡單的查詢條件場景。如果複雜的查詢,還是要查詢從庫。
參考 Redis Cluster
模式, 叢集網路拓撲通常是 3主 3從,主節點既負責寫,也負責讀。
通過水平分片,支援資料的橫向擴充套件。由於每個節點都是獨立的伺服器,可以提高整體叢集的吞吐量。
常見的解決方式,是分庫分表,每次讀寫都是操作主庫的一個分表,從庫只用來做資料備份。當主庫發生故障時,主從切換,保證叢集的高可用性。
到此這篇關於分享MySQL 主從延遲與讀寫分離的七種解決方案的文章就介紹到這了,更多相關MySQL主從延遲讀寫分離解決方案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45