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

數據庫讀寫分離如何保證主從一致性

數據庫 其他數據庫
主從一致的問題源自主從延遲,所以我們就是從如何消除延遲來解決問題。當數據規模和部署方式變更的時候,好的解決方案將會越來越多。我認為根據實際業務情況選擇最合適的方法才是最重要的。

讀寫分離

當我們的數據庫壓力主鍵變大的時候,我們會嘗試增加一些從節點來分攤主節點的查詢壓力。而一般來說,我們是用一主多從的結構來作為讀寫分離的基本結構。

而一般來說我們有兩種常用的方法來實現讀且分離架構:

客戶端直接分離

這種方式是由客戶端,或者我們的微服務直接進行數據庫的讀寫選擇。將讀庫選擇路由到主庫上進行,將查詢路由到從主庫上進行。

這種方式的優點在于因為是直連所以性能比較高,但是需要由業務團隊了解數據庫的實例細節,當數據庫做調整的時候就需要業務側同步改造。

使用數據中間件代理

這種方式是由一層代理層對數據的讀寫做分發,業務層將所有的請求都通過代理來實現。

這種方式的優點在于對于業務層不需要感知到數據庫的存在,但問題在于數據中間件的性能要求較高,還需要專人來進行優化和維護,整體架構較為復雜。

但是我們發現,盡管這兩種方式各有優劣。但核心都是通過數據的寫入、查詢請求的路由而實現的,那么這就會引發標題的問題:

主備同步存在延遲,所以在延遲時間內對插入的內容進行查詢則無法查詢到最新提交的事務。

那么如何保證主從一致性的問題,其實就變成了如何處理主從延遲的問題。

低改造成本

根據項目的大小,團隊的規模以及主機的部署模式。我們處理問題的方法也有很多種。

強制讀主庫

最簡單強硬的就是強制讀主庫。

一般情況下我們在不同的查詢中會有不同程度的一致性要求。我們可以將需要保證數據一致性的請求配置強制查詢主庫,而對于無強依賴的查詢請求仍然查詢備庫。

盡管這個方案不是很優雅,但是是最簡單實現的方法,并且在Spring等框架的支持下一般只需要加一個注解就能實現。但這個方法的問題也是顯而易見的,如果存在大量的強一致性要求的查詢語句,則相當于沒有進行讀寫分離與擴展。那么這種方法就會導致系統在數據庫層面沒有有效的擴展手段了。

等待時間

由于問題產生的來源是主從延遲,所以在下一次查詢的時候進行一段時間的等待以彌補這種延遲即可。

所以在進行主庫的數據插入之后,讓數據庫數據連接或者對應的執行線程等待一段時間后返回。通過等待時間來消化掉主從備份的延遲時間。但是這個方法也有一些問題比如:這個等待時間一般是固定的,即便主從已經無延遲了也會繼續等待到時間結束;如果在服務高峰時期,有可能數據在等待時間結束后仍然沒有完成同步則仍然會存在一致性問題。

但這種方法優雅的地方是可以配合業務來進行實現,舉例來說當用戶下單之后,通過下單送卷或者下單抽獎的方式從前端拖住用戶,從而當用戶在一次連續操作中再次查詢自己訂單的時候中間必然會間隔一定時間,也就讓需要再次查詢數據的時候保證了數據的一致性。

一主一備情況

上述兩種方案看起來可能不那么“技術”,感覺有點投機取巧。那么下面咱們可以分兩種情況來討論用更高技術的方法如何實現一致性。

查詢延遲方案

對于主從復制來說,是當主庫完成一個事務后,通知給從庫,當從庫接受到后,則主庫完成返回客戶端。所以當主庫完成事務后,僅能確保從庫已經接受到了,但是不能保證從庫執行完成,也就是導致了主從備份延遲。

但是從庫執行數據是有進度的,而這個進度是可以通過show slave status語句中的seconds_behind_master來進行描述,這個參數描述從庫落后了主庫數據多少秒,當這個參數為0時,我們可以認為從庫和主庫已經基本上沒有延遲了,那么這時候就可以查詢請求。

但seconds_behind_master是秒級的,所以只能大概地判斷,由于精度較低,所以還是可能出現不一致的情況。

如果要求精準執行的話,我們可以比較同步文件的執行記錄,具體來說是:

  • Master_Log_File和Read_Master_Log_Pos,表示的是讀到的主庫的最新位點;
  • Relay_Master_Log_File和Exec_Master_Log_Pos,表示的是備庫執行的最新位點。

所以當Relay_Master_Log_File和Exec_Master_Log_Pos和其一致的時候,就說明從庫的已執行數據已經追上主庫了,那么這時就可以說保證了主從一致性了

半同步復制方案

但是比較同步文件的執行記錄方法的問題在于,如果當前的這個事務的binlog尚未傳入到從庫,即Master_Log_File和Read_Master_Log_Pos未更新,也就無法保證從庫已經包含最新的主庫事務了。

而為了保證在一主一備的情況下,從庫里一定接受到數據了,也就是Master_Log_File和Read_Master_Log_Pos中的數據是和主庫一致的,我們可以開啟semi-sync replication半同步復制。

半同步復制的原理是在主庫提交事務前先將binlog發送給從庫,然后當從庫接受后返回一個應答,主庫只有在接受到這個應答之后才返回事務執行完成。這樣就可以保證從庫的Master_Log_File和Read_Master_Log_Pos與主庫是一致的,從而解決了主從一致的問題。

一主多備情況

半同步復制可以解決一主一備的情況,但是當一主多備的時候,只要主庫接受到一個從庫的應答,就會返回事務執行完成。而這時當請求打到未完成同步的從庫上時就會發生主從延遲。

等主庫記錄方案

所以針對一主多備的情況,我們可以將目光集中在執行查詢的從庫上,即確保我們即將查詢的備庫已經執行了我們預期的事務。那么我們的問題就變成兩部分:1. 確認主庫事務,2. 查詢數據條件。

確認主庫事務

當我們提交完一個事務后,可以通過執行show master status來得到主庫中的數據事務文件(File)和位置記錄(Position)。

查詢數據條件

當我們要查詢從庫數據的時候,我們可以通過語句select master_pos_wait(File, Position, 1);來查詢當前是否已經執行到了該記錄(當返回值>=0的時候說明已經執行過了)。其中最后的數字1表示阻塞時長。

通過先確認主庫事務記錄,再判確認備庫是否已經執行了了主庫對應的事務。

但是可以發現,這種方法要求查詢的時候知道主庫的事務信息,對場景有很大的限制。

最后

主從一致的問題源自主從延遲,所以我們就是從如何消除延遲來解決問題。簡單點的方案我們可以不走備庫、或者直接等待一段時間來忽略延遲的影響。在一主一備的情況下我們可以粗力度的用seconds_behind_master來判斷或者用Relay_Master_Log_File和Exec_Master_Log_Pos來判斷。而當一主多從的情況下我們則需要在查詢前傳入主庫執行的事務記錄才能保證數據一致性。

可以看出,當數據規模和部署方式變更的時候,好的解決方案將會越來越多。我認為根據實際業務情況選擇最合適的方法才是最重要的。

責任編輯:武曉燕 來源: 蜜糖的代碼注釋
相關推薦

2024-08-20 16:13:52

2024-10-28 12:41:25

2022-03-29 10:39:10

緩存數據庫數據

2022-04-01 16:55:22

數據庫緩存日志

2022-03-31 08:21:14

數據庫緩存雙寫數據一致性

2022-10-19 12:22:53

并發扣款一致性

2020-09-03 09:45:38

緩存數據庫分布式

2022-12-05 08:24:32

mongodb數據庫數據

2019-08-30 12:46:10

并發扣款查詢SQL

2024-12-26 15:01:29

2025-03-27 08:20:54

2023-09-07 08:11:24

Redis管道機制

2021-03-04 06:49:53

RocketMQ事務

2023-05-26 07:34:50

RedisMySQL緩存

2025-04-27 08:52:21

Redis數據庫緩存

2024-01-10 08:01:55

高并發場景悲觀鎖

2020-08-05 08:46:10

NFS網絡文件系統

2024-01-22 08:52:00

AQS雙異步數據一致性

2024-10-16 09:53:07

2021-12-14 07:15:57

MySQLRedis數據
點贊
收藏

51CTO技術棧公眾號

国产在线高清视频| 亚洲综合自拍偷拍| 欧美+亚洲+精品+三区| 国产剧情一区在线| 91久久免费观看| 天天色图综合网| 国产精品免费一区二区三区四区| 福利小视频在线观看| 国产精品一卡二| 亚洲丝袜美腿一区| 综合国产在线| 日韩激情一区二区| 激情综合网天天干| 久久婷婷成人综合色| 色综合欧美在线视频区| 久久国产精品99国产精| 欧美极品jizzhd欧美| 成人黄色av| 久久久久久久久亚洲| 色综合久久久| 亚洲人成网站在线播| rebdb初裸写真在线观看| 欧美日韩一区二区三区免费看| 91网址在线播放| www.欧美日韩| 免费激情视频在线观看| 风流少妇一区二区| 亚洲精品永久www嫩草| 日韩专区视频网站| 91成人精品视频| 日韩欧美精品中文字幕| 91视频国产精品| 免费大片在线观看| 精品人人人人| 欧美变态tickling挠脚心| 国产视频一区二区视频| 欧美7777| 51精品国自产在线| 校园春色亚洲| 99久热re在线精品视频| 国语自产精品视频在线看抢先版结局| 成人av在线资源网站| 亚洲少妇激情视频| 成人永久免费网站| 欧美精品97| 国产亚洲精品综合一区91| julia京香一区二区三区| 99久久久国产精品| 日日骚久久av| 欧洲日本在线| 亚洲欧洲日本专区| 日韩欧美看国产| 日韩免费视频一区二区| 欧美jizz18hd性欧美| www国产在线观看 | 你懂的在线观看| 九一精品国产| 亚洲香蕉成视频在线观看| 美女xx视频| 不卡一区中文字幕| 色呦呦在线播放| 亚洲一区美女| 91久久精品国产91性色tv| 91极品在线| 国产精品一区而去| 精品国产髙清在线看国产毛片| 国产精品免费播放| 91黄色免费网站| 日韩一级大片| 五月婷婷丁香色| 国产午夜精品久久| 色婷婷av金发美女在线播放| 日韩欧美国产成人一区二区| 国模一区二区| 国产在线观看不卡| 国产一区二区三区精品欧美日韩一区二区三区| 美日韩精品免费| 美女视频一区二区三区| 香蕉视频网站在线观看| 日韩欧美国产精品| 欧美调教在线| 穿情趣内衣被c到高潮视频| 奇米一区二区三区| 国产又大又黄又粗又爽| 国产婷婷色综合av蜜臀av| 亚洲精品网址| 九色丨porny丨| 最近中文字幕日韩精品 | 91精品二区| 亚洲日本va中文字幕久久| 91chinesevideo永久地址| 成人免费视频视频| 女生影院久久| 精品久久久久av| 欧美激情乱人伦一区| 久久精品综合网| 韩国精品视频在线观看 | 国产精品综合网| 在线免费毛片| 日韩小视频在线| 国产精一区二区三区| 国产一精品一av一免费爽爽| 狠狠热免费视频| 91av在线播放| 美洲天堂一区二卡三卡四卡视频| 久草中文在线| 成人三级在线| 一本色道久久综合亚洲aⅴ蜜桃| 韩国美女久久| 国产精品久久一区二区三区| 亚洲国产高清aⅴ视频| 日韩高清欧美| 在线电影av不卡网址| 精品久久国产| 亚洲中文字幕无码中文字| 久久精品国产清自在天天线| 亚洲男人的天堂av| 中文字幕一区二区三区在线视频 | 国产精品国语对白| 久久亚洲一级片| 亚洲欧美综合国产精品一区| 中文字幕乱码在线播放| 日本新janpanese乱熟| 日韩精品一区二区三区外面| 色噜噜狠狠狠综合曰曰曰88av| 亚洲国产电影在线观看| 中文亚洲欧美| 成人羞羞视频播放网站| 台湾成人免费视频| 伪装者在线观看完整版免费| 高清无码一区二区在线观看吞精| 久久久久久网址| 日本韩国精品在线| 国产欧美一区二区精品婷婷| 肉肉av福利一精品导航| 日韩电影在线视频| 欧美丝袜一区| 欧美jizz19性欧美| 亚洲伊人伊成久久人综合网| 黄色污污视频在线观看| 麻豆tv在线| 国产成人天天5g影院在线观看| 香蕉精品视频在线| 蜜臀av.com| 国产自产在线视频| 激情综合网五月| 久久久久九九精品影院| 亚洲国产91视频| 精品176二区| 最新超碰在线| 香蕉成人影院| 精品一区二区三区亚洲| 国产电影一区二区| 一区二区三区短视频| 国产精品中文| 猛男gaygay欧美视频| 亚洲91视频| 久久三级视频| 麻豆国产精品777777在线| 米奇777超碰欧美日韩亚洲| 亚洲精品国产精品粉嫩| 国产精品美女久久久久久不卡| 国内精品在线观看视频| 国产女主播一区二区三区| 免费观看黄色的网站| 成人精品视频在线播放| 欧美xxxx黑人又粗又长密月| 潘金莲一级淫片aaaaaa播放1| 先锋影音资源999| 欧美日韩亚洲一| 一线天粉嫩在线播放| 成人三级av| 女人高潮特级毛片| 成人欧美magnet| 天然素人一区二区视频| segui88久久综合9999| 一区二区免费电影| 日韩wuma| 黄色仓库视频网站| 资源视频在线播放免费| 素人啪啪色综合| jvid一区二区三区| 国产精品99久久久久久动医院| 成人在线电影在线观看视频| 麻豆国产精品一区二区三区 | 污视频在线免费观看一区二区三区 | 99精品国产在热久久婷婷| 欧美系列电影免费观看| 视频欧美一区| 国产精品国产三级在线观看| 国产一区三区在线播放| 懂色av一区二区三区免费看| 欧美手机在线视频| 亚洲成人久久电影| 韩国福利视频一区| 国产精品天天av精麻传媒| 欧美人与性动交α欧美精品济南到| 成人免费黄色| 蜜臀久久久久久久| 日韩一区二区精品|