免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

MySQL FOR UPDATE實(shí)現(xiàn)分布式鎖的原理與高可用實(shí)踐

MySQL FOR UPDATE實(shí)現(xiàn)分布式鎖的原理與高可用實(shí)踐 1. 為什么“數(shù)據(jù)庫(kù)for update”在分布式鎖場(chǎng)景里既讓人上頭又讓人上癮“Java架構(gòu)直通車”這個(gè)標(biāo)題乍看像培訓(xùn)廣告但真正跑過線上高并發(fā)系統(tǒng)的人都知道——它背后藏著一群在凌晨三點(diǎn)盯著數(shù)據(jù)庫(kù)死鎖日志、一邊灌咖啡一邊改SQL的開發(fā)者。我參與過三個(gè)不同行業(yè)的中臺(tái)系統(tǒng)重構(gòu)從電商秒殺到金融賬戶扣減最后都繞不開一個(gè)樸素得近乎寒酸的方案用MySQL的SELECT ... FOR UPDATE實(shí)現(xiàn)分布式鎖。不是沒試過Redis、ZooKeeper、Etcd而是當(dāng)QPS沖到8000、事務(wù)鏈路橫跨5個(gè)微服務(wù)、回滾代價(jià)動(dòng)輒百萬(wàn)級(jí)時(shí)我們發(fā)現(xiàn)最慢的鎖有時(shí)反而是最穩(wěn)的鎖。關(guān)鍵詞里雖然空著但標(biāo)題本身已經(jīng)把核心要素釘死了Java語(yǔ)言棧、架構(gòu)級(jí)決策不是工具調(diào)用是系統(tǒng)設(shè)計(jì)取舍、數(shù)據(jù)庫(kù)載體、FOR UPDATE核心機(jī)制、分布式鎖目標(biāo)能力。這五個(gè)詞連起來(lái)不是教你怎么寫一行代碼而是在問當(dāng)CAP理論撞上銀行級(jí)一致性要求你敢不敢把鎖的命脈交給事務(wù)日志很多人一聽到“數(shù)據(jù)庫(kù)做分布式鎖”就搖頭理由很充分性能差、單點(diǎn)瓶頸、死鎖風(fēng)險(xiǎn)高。這些都沒錯(cuò)。但問題從來(lái)不是“能不能用”而是“在什么條件下它是唯一能用的”。比如某次支付對(duì)賬系統(tǒng)升級(jí)第三方對(duì)賬平臺(tái)要求T0實(shí)時(shí)核驗(yàn)所有資金流水必須嚴(yán)格按時(shí)間戳順序處理。我們?cè)囘^Redis Lua腳本加鎖結(jié)果在跨機(jī)房網(wǎng)絡(luò)抖動(dòng)時(shí)出現(xiàn)鎖續(xù)期失敗導(dǎo)致重復(fù)處理?yè)Q成ZK臨時(shí)節(jié)點(diǎn)又因會(huì)話超時(shí)誤刪鎖引發(fā)數(shù)據(jù)錯(cuò)亂。最后上線前72小時(shí)團(tuán)隊(duì)咬牙切齒地把鎖邏輯全切回MySQL——用SELECT id FROM t_lock WHERE lock_key account_123456 FOR UPDATE配合唯一索引和超時(shí)重試扛住了連續(xù)48小時(shí)峰值流量零資損。提示這不是技術(shù)懷舊而是對(duì)“鎖的本質(zhì)”的回歸。分布式鎖要解決的從來(lái)不是“怎么搶”而是“搶完之后誰(shuí)說(shuō)了算”。數(shù)據(jù)庫(kù)的ACID保證了只要事務(wù)沒提交鎖就一定不釋放只要鎖沒釋放其他事務(wù)就一定阻塞。這種確定性在網(wǎng)絡(luò)不可靠的分布式環(huán)境中比毫秒級(jí)的性能數(shù)字更珍貴。所以這篇文章不講“如何用for update實(shí)現(xiàn)鎖”而是帶你拆解為什么在特定架構(gòu)水位下它成了不可替代的兜底方案它的能力邊界在哪里踩過的坑比教科書寫的更痛而填坑的方法論恰恰是架構(gòu)師真正的護(hù)城河。2. FOR UPDATE不是語(yǔ)法糖是InnoDB事務(wù)鎖機(jī)制的具象化表達(dá)很多Java開發(fā)者對(duì)SELECT ... FOR UPDATE的理解停留在“加行鎖”三個(gè)字上。但當(dāng)你在生產(chǎn)環(huán)境看到SHOW ENGINE INNODB STATUS里密密麻麻的LOCK WAIT或者information_schema.INNODB_TRX表里卡住的事務(wù)列表時(shí)就會(huì)明白這行SQL背后是InnoDB存儲(chǔ)引擎在內(nèi)存、磁盤、日志三者間精密調(diào)度的鎖管理器在工作。它不是Java代碼調(diào)用的一個(gè)API而是數(shù)據(jù)庫(kù)內(nèi)核對(duì)你業(yè)務(wù)語(yǔ)義的強(qiáng)制約束。2.1 行鎖、間隙鎖、臨鍵鎖FOR UPDATE的三種面孔FOR UPDATE到底鎖什么答案取決于WHERE條件和索引結(jié)構(gòu)。這是絕大多數(shù)分布式鎖失效的根源——你以為鎖住了某條記錄其實(shí)鎖的是整個(gè)索引區(qū)間。精確匹配主鍵或唯一索引SELECT * FROM t_account WHERE id 1001 FOR UPDATE這是最干凈的情況。InnoDB只對(duì)id1001這一行加記錄鎖Record Lock。其他事務(wù)更新id1002完全不受影響。此時(shí)鎖粒度最小性能最好也是我們實(shí)現(xiàn)分布式鎖的黃金場(chǎng)景。范圍查詢或非唯一索引SELECT * FROM t_order WHERE user_id 123 FOR UPDATEuser_id無(wú)唯一索引InnoDB會(huì)升級(jí)為臨鍵鎖Next-Key Lock——即“記錄鎖間隙鎖”的組合。它不僅鎖住所有user_id123的行還鎖住這些行之間的“間隙”。比如表中存在user_id為122、123、124的記錄那么(122,123)、(123,124)這兩個(gè)間隙也被鎖定。這意味著新插入user_id123.5的訂單會(huì)被阻塞。這種鎖的范圍遠(yuǎn)超預(yù)期極易引發(fā)大面積阻塞。WHERE條件不走索引SELECT * FROM t_log WHERE content LIKE %error% FOR UPDATE沒有索引支撐的查詢InnoDB只能走聚簇索引全表掃描。此時(shí)FOR UPDATE會(huì)升級(jí)為表鎖Table Lock。整個(gè)t_log表被鎖死所有DML操作排隊(duì)等待。在高并發(fā)系統(tǒng)中這等于直接宣布服務(wù)不可用。注意分布式鎖的可靠性90%取決于你能否確保FOR UPDATE始終命中唯一索引。這意味著你的鎖key必須映射到數(shù)據(jù)庫(kù)中一條必然存在且唯一的記錄。常見錯(cuò)誤是直接用業(yè)務(wù)ID如訂單號(hào)作為鎖key卻未在鎖表中為其建立唯一索引導(dǎo)致鎖失效。2.2 鎖的生命周期從SQL執(zhí)行到事務(wù)提交的完整鏈路理解鎖何時(shí)加、何時(shí)放是避免死鎖和超時(shí)的關(guān)鍵。FOR UPDATE的鎖行為嚴(yán)格綁定事務(wù)生命周期加鎖時(shí)機(jī)SQL執(zhí)行完成、返回結(jié)果集的瞬間鎖即生效。不是在Java代碼connection.commit()時(shí)才加鎖。持有期間鎖持續(xù)存在于整個(gè)事務(wù)中包括事務(wù)內(nèi)的其他SQL操作、網(wǎng)絡(luò)IO等待、業(yè)務(wù)邏輯計(jì)算耗時(shí)。釋放時(shí)機(jī)僅在事務(wù)顯式提交COMMIT或回滾ROLLBACK時(shí)釋放。注意JDBC默認(rèn)自動(dòng)提交autocommittrue此時(shí)FOR UPDATE變成“查完即放”完全失去鎖意義。必須關(guān)閉自動(dòng)提交connection.setAutoCommit(false)。這就引出一個(gè)致命陷阱業(yè)務(wù)代碼中的try-catch塊如果只捕獲了業(yè)務(wù)異常卻忽略了數(shù)據(jù)庫(kù)連接中斷、網(wǎng)絡(luò)超時(shí)等系統(tǒng)級(jí)異常會(huì)導(dǎo)致事務(wù)長(zhǎng)期掛起鎖永遠(yuǎn)不釋放。我們?cè)诰€上遇到過一個(gè)案例某支付回調(diào)接口在處理成功后調(diào)用第三方通知因?qū)Ψ椒?wù)超時(shí)Java線程卡在httpclient.execute()上長(zhǎng)達(dá)2小時(shí)。由于事務(wù)未提交也未回滾FOR UPDATE鎖一直霸占著賬戶記錄導(dǎo)致該用戶后續(xù)所有交易全部阻塞。2.3 死鎖檢測(cè)與超時(shí)InnoDB給你留的最后退路InnoDB內(nèi)置死鎖檢測(cè)器一旦發(fā)現(xiàn)循環(huán)等待如事務(wù)A鎖了行1等行2事務(wù)B鎖了行2等行1會(huì)立即選擇一個(gè)事務(wù)作為犧牲者victim將其回滾并拋出Deadlock found when trying to get lock異常。這是數(shù)據(jù)庫(kù)層面對(duì)鎖競(jìng)爭(zhēng)的主動(dòng)干預(yù)。但死鎖不是唯一風(fēng)險(xiǎn)。更常見的是鎖等待超時(shí)。InnoDB通過參數(shù)innodb_lock_wait_timeout控制等待上限默認(rèn)50秒。當(dāng)一個(gè)事務(wù)等待鎖的時(shí)間超過此值會(huì)拋出Lock wait timeout exceeded異常。這個(gè)參數(shù)必須與應(yīng)用層的超時(shí)策略對(duì)齊數(shù)據(jù)庫(kù)超時(shí)設(shè)為50秒但Java代碼里Transactional(timeout5)意味著業(yè)務(wù)邏輯5秒沒做完就回滾而鎖還在數(shù)據(jù)庫(kù)里掛著直到50秒后才釋放。這會(huì)造成嚴(yán)重的資源浪費(fèi)。正確的做法是應(yīng)用層超時(shí) 數(shù)據(jù)庫(kù)鎖等待超時(shí) 事務(wù)最大允許耗時(shí)。例如支付扣款業(yè)務(wù)要求1秒內(nèi)返回那么JavaTransactional(timeout1)MySQLSET innodb_lock_wait_timeout3留2秒緩沖同時(shí)在代碼中捕獲LockAcquisitionException快速降級(jí)或重試3. 從“能跑通”到“可運(yùn)維”分布式鎖的七層防御體系用FOR UPDATE寫個(gè)Demo可能10分鐘搞定但要讓它在日均億級(jí)請(qǐng)求的系統(tǒng)里穩(wěn)定運(yùn)行三年需要構(gòu)建一套完整的防御體系。這不是堆砌技術(shù)而是對(duì)每個(gè)環(huán)節(jié)脆弱性的預(yù)判和加固。我把這套體系稱為“七層防御”每一層都對(duì)應(yīng)一個(gè)真實(shí)踩過的坑。3.1 第一層防御鎖表設(shè)計(jì)——唯一性是生命線鎖表絕不能是簡(jiǎn)單的id BIGINT PK, key VARCHAR, expire_time DATETIME。它必須滿足三個(gè)硬性條件鎖key字段必須有唯一索引這是FOR UPDATE精準(zhǔn)加鎖的前提。沒有唯一索引SELECT ... FOR UPDATE會(huì)退化為臨鍵鎖甚至表鎖。鎖表必須是獨(dú)立物理表禁止復(fù)用業(yè)務(wù)表如t_user來(lái)存鎖。業(yè)務(wù)表結(jié)構(gòu)變更、歷史數(shù)據(jù)歸檔、分庫(kù)分表策略都會(huì)直接影響鎖的穩(wěn)定性。鎖記錄必須預(yù)熱初始化不能依賴INSERT IGNORE或ON DUPLICATE KEY UPDATE動(dòng)態(tài)創(chuàng)建鎖記錄。因?yàn)镮NSERT本身可能觸發(fā)間隙鎖且在高并發(fā)下易產(chǎn)生主鍵沖突。我們采用的方案是建一張distributed_lock表結(jié)構(gòu)如下CREATE TABLE distributed_lock ( id bigint(20) NOT NULL AUTO_INCREMENT, lock_key varchar(128) NOT NULL COMMENT 鎖的唯一標(biāo)識(shí)如 account_123456, holder varchar(64) NOT NULL COMMENT 持有者標(biāo)識(shí)如 service-a:pid-12345, acquire_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 獲取時(shí)間, expire_time datetime NOT NULL COMMENT 過期時(shí)間用于被動(dòng)清理, PRIMARY KEY (id), UNIQUE KEY uk_lock_key (lock_key) -- 強(qiáng)制唯一索引 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT分布式鎖表;關(guān)鍵點(diǎn)在于所有鎖key必須在系統(tǒng)啟動(dòng)時(shí)通過腳本批量預(yù)插入到表中。例如針對(duì)100萬(wàn)個(gè)用戶賬戶預(yù)先插入100萬(wàn)條lock_key為account_000001到account_1000000的記錄。這樣FOR UPDATE永遠(yuǎn)只走唯一索引查找鎖粒度嚴(yán)格控制在單行。3.2 第二層防御獲取鎖——原子性與冪等性的雙重保障獲取鎖的SQL必須保證“要么成功拿到鎖要么明確失敗”不能有中間態(tài)。常見的錯(cuò)誤寫法是// ? 危險(xiǎn)兩步操作非原子 boolean exists jdbcTemplate.queryForObject( SELECT COUNT(1) FROM distributed_lock WHERE lock_key ?, Integer.class, lockKey) 0; if (!exists) { jdbcTemplate.update(INSERT INTO distributed_lock (lock_key, holder) VALUES (?, ?), lockKey, holder); } jdbcTemplate.update(SELECT * FROM distributed_lock WHERE lock_key ? FOR UPDATE, lockKey);這段代碼在并發(fā)下會(huì)因“檢查-創(chuàng)建”非原子導(dǎo)致多線程同時(shí)插入違反唯一索引約束拋出DuplicateKeyException。正確姿勢(shì)是利用MySQL的INSERT ... ON DUPLICATE KEY UPDATE特性將“檢查-創(chuàng)建-加鎖”三步合一-- ? 原子操作嘗試插入若已存在則更新holder和時(shí)間 INSERT INTO distributed_lock (lock_key, holder, acquire_time, expire_time) VALUES (?, ?, NOW(), DATE_ADD(NOW(), INTERVAL ? SECOND)) ON DUPLICATE KEY UPDATE holder VALUES(holder), acquire_time VALUES(acquire_time), expire_time VALUES(expire_time); -- 緊接著執(zhí)行FOR UPDATE此時(shí)記錄必然存在 SELECT * FROM distributed_lock WHERE lock_key ? FOR UPDATE;Java代碼中我們封裝了一個(gè)LockResult對(duì)象包含isAcquired(是否成功獲取)、lockId(鎖記錄ID)、holder(持有者)字段。每次獲取鎖后業(yè)務(wù)代碼必須校驗(yàn)isAcquired true才執(zhí)行核心邏輯否則直接返回失敗。3.3 第三層防御鎖續(xù)約——讓長(zhǎng)事務(wù)不“餓死”分布式鎖常用于處理耗時(shí)業(yè)務(wù)如生成復(fù)雜報(bào)表、調(diào)用外部慢接口。如果鎖過期時(shí)間設(shè)為30秒而業(yè)務(wù)邏輯執(zhí)行了45秒鎖會(huì)在中途被其他線程搶走導(dǎo)致數(shù)據(jù)不一致。解決方案是“鎖續(xù)約”Lock Renewal在獲取鎖成功后啟動(dòng)一個(gè)后臺(tái)守護(hù)線程Daemon Thread每隔10秒expire_time/3執(zhí)行一次續(xù)約UPDATE distributed_lock SET expire_time DATE_ADD(NOW(), INTERVAL ? SECOND), holder ? WHERE lock_key ? AND holder ?;續(xù)約必須校驗(yàn)holder防止誤續(xù)其他線程的鎖CAS思想。守護(hù)線程需與業(yè)務(wù)線程強(qiáng)綁定業(yè)務(wù)線程結(jié)束正常完成或異常退出時(shí)必須中斷守護(hù)線程避免僵尸線程持續(xù)續(xù)約。我們?cè)蛲浿袛嗍刈o(hù)線程導(dǎo)致一個(gè)已結(jié)束的報(bào)表任務(wù)其守護(hù)線程仍在給鎖續(xù)期最終鎖表被占滿新請(qǐng)求全部阻塞。后來(lái)在LockResult中增加了close()方法強(qiáng)制在try-with-resources中調(diào)用確保資源及時(shí)釋放。3.4 第四層防御鎖釋放——優(yōu)雅退出的最后一步釋放鎖看似簡(jiǎn)單DELETE FROM distributed_lock WHERE lock_key ? AND holder ?但有兩個(gè)隱藏雷區(qū)釋放操作必須在同一個(gè)數(shù)據(jù)庫(kù)連接中完成FOR UPDATE加的鎖只能由同一個(gè)事務(wù)釋放。如果獲取鎖用Connection A釋放用Connection BDELETE語(yǔ)句不會(huì)釋放鎖只會(huì)刪除記錄導(dǎo)致鎖永久殘留。必須校驗(yàn)holder防止A線程的鎖被B線程誤刪。這是分布式鎖安全的底線。我們的釋放邏輯強(qiáng)制要求傳入lockId獲取鎖時(shí)返回的主鍵ID和holderSQL如下DELETE FROM distributed_lock WHERE id ? AND holder ?;同時(shí)在LockResult.close()中我們加入雙重校驗(yàn)先查SELECT holder FROM distributed_lock WHERE id ?確認(rèn)當(dāng)前持有者仍是自己再執(zhí)行DELETE。若第一步查不到或holder不匹配則拋出IllegalLockReleaseException拒絕釋放。3.5 第五層防御異常熔斷——當(dāng)數(shù)據(jù)庫(kù)失聯(lián)時(shí)的保命機(jī)制數(shù)據(jù)庫(kù)連接池耗盡、主庫(kù)宕機(jī)、網(wǎng)絡(luò)分區(qū)……這些故障下FOR UPDATE會(huì)直接拋出SQLException如果業(yè)務(wù)代碼不做特殊處理整個(gè)服務(wù)會(huì)雪崩。我們的熔斷策略分三級(jí)故障類型熔斷動(dòng)作觸發(fā)條件瞬時(shí)抖動(dòng)快速重試SQLException含Connection refused、Timeout重試2次間隔100ms局部故障降級(jí)為本地鎖檢測(cè)到連續(xù)5次獲取鎖失敗切換為ConcurrentHashMapReentrantLock僅限同JVM內(nèi)互斥標(biāo)記告警全局故障熔斷開關(guān)打開1分鐘內(nèi)失敗率80%自動(dòng)打開熔斷器所有鎖請(qǐng)求直接返回LockUnavailableException業(yè)務(wù)走異步補(bǔ)償這個(gè)熔斷器不是Spring Cloud CircuitBreaker那種通用組件而是專為鎖服務(wù)定制的輕量級(jí)狀態(tài)機(jī)狀態(tài)變更寫入本地AtomicBoolean避免引入額外依賴。3.6 第六層防御監(jiān)控告警——讓鎖的狀態(tài)看得見沒有監(jiān)控的分布式鎖就像蒙眼開車。我們接入了三類核心指標(biāo)鎖獲取成功率success_count / (success_count fail_count)閾值99.5%觸發(fā)告警。平均等待時(shí)間從執(zhí)行FOR UPDATE到返回結(jié)果的P95耗時(shí)超過200ms告警說(shuō)明鎖競(jìng)爭(zhēng)激烈。鎖持有時(shí)間分布統(tǒng)計(jì)acquire_time到commit的時(shí)間繪制直方圖。若大量鎖持有時(shí)間集中在30s過期時(shí)間說(shuō)明業(yè)務(wù)邏輯超時(shí)需優(yōu)化。所有指標(biāo)通過Micrometer上報(bào)到PrometheusGrafana看板實(shí)時(shí)展示。最關(guān)鍵的是一張“鎖熱點(diǎn)圖”橫軸是鎖key的哈希分段如account_000001-010000縱軸是該區(qū)間內(nèi)鎖的平均等待次數(shù)。這張圖能一眼定位出“明星用戶”如某個(gè)大V賬號(hào)被高頻訪問從而指導(dǎo)分庫(kù)分表或緩存預(yù)熱。3.7 第七層防御災(zāi)備清理——鎖表“尸體”的定期掃蕩即使有完善的續(xù)約和釋放機(jī)制極端情況下如JVM進(jìn)程被kill -9仍會(huì)產(chǎn)生“僵尸鎖”——鎖記錄存在但holder對(duì)應(yīng)的進(jìn)程早已消失。我們部署了一個(gè)獨(dú)立的LockCleaner服務(wù)每5分鐘掃描一次SELECT id, lock_key, holder, expire_time FROM distributed_lock WHERE expire_time NOW() - INTERVAL 10 MINUTE; -- 過期10分鐘以上才清理清理前會(huì)調(diào)用注冊(cè)中心如Nacos查詢holder標(biāo)識(shí)的服務(wù)實(shí)例是否存活。只有確認(rèn)實(shí)例已下線才執(zhí)行DELETE。這個(gè)服務(wù)本身也做了高可用多個(gè)實(shí)例通過數(shù)據(jù)庫(kù)SELECT ... FOR UPDATE爭(zhēng)搶清理任務(wù)確保同一時(shí)刻只有一個(gè)實(shí)例在工作。4. 性能壓測(cè)實(shí)錄當(dāng)QPS從100飆到10000鎖的表現(xiàn)曲線理論再完美也要經(jīng)受真實(shí)流量的拷問。我們用JMeter對(duì)鎖服務(wù)進(jìn)行了四輪壓測(cè)環(huán)境為MySQL 5.7雙主讀寫分離、應(yīng)用服務(wù)器4核8G*3、鎖表數(shù)據(jù)量100萬(wàn)。結(jié)果顛覆了很多人的認(rèn)知。4.1 基準(zhǔn)測(cè)試單點(diǎn)MySQL的吞吐天花板第一輪不啟用任何優(yōu)化純FOR UPDATE獲取鎖并發(fā)線程數(shù)QPS平均響應(yīng)時(shí)間(ms)錯(cuò)誤率關(guān)鍵觀察1001200830%表現(xiàn)平穩(wěn)鎖等待幾乎為050021002380.2%出現(xiàn)少量鎖等待平均等待12ms100023004351.8%P95響應(yīng)時(shí)間飆升至1.2s大量請(qǐng)求超時(shí)結(jié)論單點(diǎn)MySQL的FOR UPDATE鎖獲取理論極限約2300 QPS。超過此值InnoDB的鎖隊(duì)列開始積壓響應(yīng)時(shí)間呈指數(shù)增長(zhǎng)。這解釋了為什么所有教程都強(qiáng)調(diào)“鎖要細(xì)粒度”——不是為了性能而是為了把鎖競(jìng)爭(zhēng)控制在可承受范圍內(nèi)。4.2 優(yōu)化一擊唯一索引預(yù)熱性能翻倍第二輪應(yīng)用“七層防御”中的第一、二層唯一索引預(yù)熱初始化并發(fā)線程數(shù)QPS平均響應(yīng)時(shí)間(ms)錯(cuò)誤率提升幅度100048002080%QPS提升109%錯(cuò)誤率歸零200052003850%穩(wěn)定在5000 QPS平臺(tái)期關(guān)鍵變化SHOW PROFILE FOR QUERY N顯示Sending data階段耗時(shí)從320ms降至45ms因?yàn)槲ㄒ凰饕笷OR UPDATE的行查找從O(n)降到O(log n)。這證明鎖性能的瓶頸80%不在鎖機(jī)制本身而在索引設(shè)計(jì)。4.3 優(yōu)化二擊讀寫分離連接池調(diào)優(yōu)突破單庫(kù)瓶頸第三輪引入讀寫分離FOR UPDATE強(qiáng)制走主庫(kù)但鎖表的SELECT如監(jiān)控查詢走從庫(kù)。同時(shí)調(diào)整HikariCP連接池maximumPoolSize50原20→ 主庫(kù)連接更充裕connection-timeout3000原30000→ 避免連接等待過久leak-detection-threshold60000→ 及時(shí)發(fā)現(xiàn)連接泄漏并發(fā)線程數(shù)QPS平均響應(yīng)時(shí)間(ms)錯(cuò)誤率提升幅度200078002560%QPS提升50%響應(yīng)更平穩(wěn)500082006120.1%逼近主庫(kù)CPU 90%紅線此時(shí)瓶頸已從鎖機(jī)制轉(zhuǎn)移到主庫(kù)CPU和網(wǎng)絡(luò)帶寬。我們觀察到SHOW PROCESSLIST中大量Sleep狀態(tài)連接說(shuō)明應(yīng)用層連接復(fù)用不足。4.4 終極優(yōu)化分庫(kù)分表鎖路由支撐萬(wàn)級(jí)QPS第四輪對(duì)鎖表進(jìn)行水平分片。按lock_key哈希如Math.abs(key.hashCode()) % 4分到4個(gè)庫(kù)每個(gè)庫(kù)8張表。應(yīng)用層增加LockRouter組件根據(jù)key自動(dòng)路由到對(duì)應(yīng)庫(kù)表。并發(fā)線程數(shù)QPS平均響應(yīng)時(shí)間(ms)錯(cuò)誤率架構(gòu)變化5000125004100%單庫(kù)壓力下降75%10000138007200.05%P95時(shí)間1.8s仍在業(yè)務(wù)容忍內(nèi)支付場(chǎng)景要求3s壓測(cè)中最大的發(fā)現(xiàn)是當(dāng)QPS超過8000FOR UPDATE的性能曲線不再陡峭上升而是呈現(xiàn)平緩的線性增長(zhǎng)。這意味著通過分庫(kù)分表FOR UPDATE鎖可以線性擴(kuò)展不存在理論上的絕對(duì)瓶頸。某次大促中我們實(shí)際承載了15200 QPS鎖獲取成功率99.97%平均耗時(shí)890ms完全滿足SLA。5. 與Redis鎖的硬剛對(duì)比不是誰(shuí)更好而是誰(shuí)更適合你的戰(zhàn)場(chǎng)社區(qū)里關(guān)于“數(shù)據(jù)庫(kù)鎖 vs Redis鎖”的爭(zhēng)論從未停歇。但作為經(jīng)歷過兩者線上混戰(zhàn)的架構(gòu)師我想說(shuō)脫離具體業(yè)務(wù)場(chǎng)景談技術(shù)選型都是耍流氓。下面這張對(duì)比表不是為了分高下而是幫你畫出決策地圖。維度MySQL FOR UPDATE 鎖Redis SETNX 鎖適用場(chǎng)景判斷依據(jù)一致性保證強(qiáng)一致性ACID事務(wù)提交前鎖絕不釋放最終一致性網(wǎng)絡(luò)分區(qū)時(shí)可能出現(xiàn)腦裂兩個(gè)客戶端同時(shí)認(rèn)為自己持有鎖金融、支付、庫(kù)存扣減等零容忍數(shù)據(jù)錯(cuò)亂的場(chǎng)景必須選MySQL性能上限單庫(kù)約2000-5000 QPS分庫(kù)分表后線性擴(kuò)展單Redis實(shí)例輕松支撐5w QPS集群模式更高日均PV1000萬(wàn)、QPS3000的中小系統(tǒng)Redis更輕量超大規(guī)模且對(duì)一致性要求極高M(jìn)ySQL分片是正解運(yùn)維復(fù)雜度依賴DBA需監(jiān)控鎖等待、死鎖、連接池災(zāi)備需主從切換運(yùn)維簡(jiǎn)單但需關(guān)注Redis持久化、哨兵/集群故障轉(zhuǎn)移、Lua腳本原子性團(tuán)隊(duì)DBA能力強(qiáng)、有成熟MySQL治理平臺(tái)選MySQL若團(tuán)隊(duì)更熟悉Redis且能接受最終一致性Redis更省心鎖粒度控制精確到行但依賴索引設(shè)計(jì)設(shè)計(jì)不當(dāng)易升級(jí)為間隙鎖/表鎖精確到key無(wú)索引概念粒度天然最細(xì)業(yè)務(wù)鎖key天然具備唯一性如用戶ID、訂單號(hào)且能建立唯一索引MySQL優(yōu)勢(shì)明顯若鎖key是動(dòng)態(tài)拼接如cache:user:123:profileRedis更靈活超時(shí)與續(xù)約依賴innodb_lock_wait_timeout續(xù)約需額外UPDATE SQL易出錯(cuò)SET key value EX seconds NX原生支持超時(shí)Lua腳本能安全續(xù)約對(duì)鎖超時(shí)精度要求極高如必須精確到毫秒Redis的EX參數(shù)更可控MySQL的timeout是全局配置不夠靈活故障恢復(fù)主庫(kù)宕機(jī)鎖服務(wù)立即不可用從庫(kù)只讀無(wú)法獲取新鎖Redis Sentinel模式下故障轉(zhuǎn)移約30秒集群模式更快系統(tǒng)SLA要求RTO30秒且能接受短暫鎖不可用Redis更優(yōu)若要求RTO0如核心支付通道MySQL主庫(kù)高可用MHA/PXC是剛需開發(fā)心智負(fù)擔(dān)需深入理解InnoDB鎖機(jī)制、索引原理、事務(wù)傳播學(xué)習(xí)成本高API簡(jiǎn)單setIfAbsent文檔豐富上手快新團(tuán)隊(duì)或項(xiàng)目初期優(yōu)先用Redis快速驗(yàn)證進(jìn)入穩(wěn)定期、追求極致可靠再遷移到MySQL我們的真實(shí)遷移路徑是起步用Redis快中期用MySQL穩(wěn)后期混合智。例如在某電商平臺(tái)商品詳情頁(yè)的緩存更新用Redis鎖QPS高、容忍短暫不一致而下單扣庫(kù)存環(huán)節(jié)強(qiáng)制切到MySQL鎖強(qiáng)一致性。兩個(gè)鎖服務(wù)通過統(tǒng)一的LockFactory接口注入業(yè)務(wù)代碼無(wú)感知。注意不要迷信“銀彈”。我們?cè)谝粋€(gè)內(nèi)容推薦系統(tǒng)中盲目將Redis鎖全換成MySQL鎖結(jié)果因推薦算法耗時(shí)波動(dòng)大100ms~3s導(dǎo)致鎖持有時(shí)間不可控innodb_lock_wait_timeout設(shè)置成3秒太短頻繁超時(shí)設(shè)成10秒又導(dǎo)致鎖堆積。最后的解法是對(duì)耗時(shí)穩(wěn)定的業(yè)務(wù)用MySQL對(duì)耗時(shí)波動(dòng)大的業(yè)務(wù)保留Redis鎖但增加“鎖有效性校驗(yàn)”——在業(yè)務(wù)邏輯執(zhí)行前再次GET鎖key確認(rèn)自己仍是持有者。6. 踩坑實(shí)錄那些讓架構(gòu)師徹夜難眠的鎖相關(guān)故障紙上談兵千遍不如一次真實(shí)故障的教訓(xùn)深刻。我把過去三年處理的5個(gè)典型鎖故障還原成排查鏈路告訴你當(dāng)報(bào)警電話響起時(shí)第一步該看什么。6.1 故障一凌晨2點(diǎn)支付成功率暴跌至30%現(xiàn)象監(jiān)控顯示lock_acquire_success_rate從99.9%驟降至32%大量支付請(qǐng)求卡在FOR UPDATE上P95響應(yīng)時(shí)間從200ms飆升至15s。排查鏈路SHOW PROCESSLIST發(fā)現(xiàn)大量StateUpdating的線程Info列顯示UPDATE distributed_lock SET ... WHERE lock_key account_XXXXXX—— 鎖續(xù)約SQL在執(zhí)行。SELECT * FROM information_schema.INNODB_TRXTRX_STATELOCK WAIT的事務(wù)數(shù)超200TRX_MYSQL_THREAD_ID指向應(yīng)用服務(wù)器PID。登錄對(duì)應(yīng)應(yīng)用服務(wù)器jstack PID | grep -A 20 FOR UPDATE線程堆??ㄔ贖ttpURLConnection.getInputStream()正在調(diào)用一個(gè)外部風(fēng)控接口。查distributed_lock表expire_time字段大量為2023-10-01 02:00:00全是整點(diǎn)時(shí)間說(shuō)明續(xù)約線程在固定時(shí)間點(diǎn)集中觸發(fā)。根因風(fēng)控服務(wù)在凌晨2點(diǎn)進(jìn)行例行維護(hù)所有請(qǐng)求超時(shí)。但我們的鎖續(xù)約線程未設(shè)置超時(shí)導(dǎo)致UPDATE語(yǔ)句在網(wǎng)絡(luò)超時(shí)后仍長(zhǎng)時(shí)間占用數(shù)據(jù)庫(kù)連接阻塞了新的鎖獲取請(qǐng)求。修復(fù)為所有外部HTTP調(diào)用增加connectTimeout3000、readTimeout5000在續(xù)約線程中增加Thread.interrupt()保護(hù)超時(shí)后主動(dòng)中斷將續(xù)約頻率從“固定間隔”改為“基于鎖剩余時(shí)間的動(dòng)態(tài)間隔”剩余時(shí)間10s間隔5s剩余時(shí)間10s間隔1s6.2 故障二用戶投訴“錢被扣了兩次”現(xiàn)象財(cái)務(wù)對(duì)賬發(fā)現(xiàn)同一筆訂單在10分鐘內(nèi)被扣款兩次t_payment表有兩條相同order_id的記錄。排查鏈路查payment_log兩條記錄create_time相差8秒status均為SUCCESS。查distributed_lock對(duì)應(yīng)lock_keyorder_789012的記錄holder字段為payment-service:12345和payment-service:67890兩個(gè)不同PID。SELECT * FROM information_schema.INNODB_LOCK_WAITS空說(shuō)明沒有死鎖是正常獲取。深挖payment-service:12345的日志在FOR UPDATE后執(zhí)行INSERT INTO t_payment前發(fā)生OutOfMemoryErrorJVM崩潰。payment-service:67890的日志在FOR UPDATE后未檢測(cè)到payment-service:12345的鎖持有因進(jìn)程已死連接斷開鎖被InnoDB自動(dòng)釋放成功獲取鎖并扣款。根因JVM崩潰導(dǎo)致事務(wù)未提交鎖被自動(dòng)釋放但業(yè)務(wù)邏輯未做冪等校驗(yàn)第二個(gè)請(qǐng)求進(jìn)來(lái)后認(rèn)為自己是首次處理。修復(fù)所有扣款接口增加冪等key如order_id timestamp在INSERT t_payment前先SELECT COUNT(1) FROM t_payment WHERE order_id ? AND status SUCCESS在LockResult中增加isHeldByCurrentProcess()方法通過SELECT holder FROM distributed_lock WHERE id ?實(shí)時(shí)校驗(yàn)業(yè)務(wù)邏輯執(zhí)行前必須調(diào)用6.3 故障三數(shù)據(jù)庫(kù)CPU 100%SHOW FULL PROCESSLIST全是Sleep現(xiàn)象MySQL CPU持續(xù)100%SHOW PROCESSLIST顯示數(shù)百個(gè)StateSleep的連接Time列顯示連接已空閑3600秒以上。排查鏈路SELECT * FROM information_schema.PROCESSLIST WHERE COMMAND ! Sleep無(wú)活躍連接說(shuō)明問題不在SQL執(zhí)行而在連接管理。SELECT * FROM information_schema.INNODB_TRX空說(shuō)明沒有長(zhǎng)事務(wù)。檢查應(yīng)用服務(wù)器netstat -anp | grep :3306 | wc -l顯示連接數(shù)達(dá)800遠(yuǎn)超HikariCP配置的maximumPoolSize50。jstack PID | grep com.zaxxer.hikari發(fā)現(xiàn)大量線程卡在HikariPool.getConnection()等待連接。根因HikariCP的connection-timeout配置為30秒但應(yīng)用層Transactional的timeout60。當(dāng)數(shù)據(jù)庫(kù)響應(yīng)慢時(shí)連接在池中等待30秒超時(shí)后被丟棄但業(yè)務(wù)線程仍在等待事務(wù)完成導(dǎo)致連接池不斷創(chuàng)建新連接最終耗盡。修復(fù)統(tǒng)一超時(shí)Transactional(timeout25)HikariCP.connection-timeout20000innodb_lock_wait_timeout15增加連接池監(jiān)控HikariCP.getMetricsTrackerFactory()上報(bào)activeConnections,idleConnections6.4 故障四分庫(kù)后部分鎖key總是獲取失敗現(xiàn)象分庫(kù)分表上線后約5%的鎖請(qǐng)求返回LockUnavailableException但lock_key在對(duì)應(yīng)庫(kù)表中確實(shí)存在。排查鏈路抓取失敗的lock_key手動(dòng)計(jì)算哈希Math.abs(account_123456.hashCode()) % 4 2應(yīng)路由到ds_2庫(kù)。登錄ds_2庫(kù)SELECT * FROM distributed_lock_0 WHERE lock_key account_123456記錄存在。EXPLAIN SELECT * FROM distributed_lock_0 WHERE lock_key account_123456 FOR UPDATEtypeALL未走索引查distributed_lock_0表結(jié)構(gòu)lock_key字段為varchar(128)但建表時(shí)未指定字符集MySQL 5.7默認(rèn)utf8而應(yīng)用傳入的key是utf8mb4編碼。根因字符集不匹配導(dǎo)致索引失效。utf8mb4的account_123456在utf8索引中無(wú)法匹配FOR UPDATE退化為全表掃描觸發(fā)臨鍵鎖最終因鎖等待超時(shí)失敗。修復(fù)ALTER TABLE distributed_lock_0 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci所有分表執(zhí)行ALTER TABLE ... MODIFY COLUMN lock_key VARCHAR(128) CHARACTER SET utf8mb4 NOT NULL6.5 故障五大促期間鎖表被“撐爆”現(xiàn)象大促高峰distributed_lock表數(shù)據(jù)量從100萬(wàn)暴漲到5000萬(wàn)磁盤使用率95%INSERT操作變慢。排查鏈路SELECT table_name, table_rows, data_length FROM information_schema.TABLES WHERE table_schema xxx AND table_name LIKE distributed_lock%單表行數(shù)超600萬(wàn)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
丁香五月婷综合网| 四虎成人精品永久免费AV九九| 成人欧美日韩| 99在线精品观看99| 色开心五月婷婷丁香HD| 欧美三级A做爰在线观看| 精品成人a v无码内射| 色色五月天激情| 色婷婷AV在线观看| www.色五月| 丁香婷婷九月| 国产密乳av一区二区三区四区| 开心久久xxx色| 丁香婷婷老司机久操| 丁香五月六月综合激情| 狼人婷婷久久| 开心婷婷五月| 99久久激情视频| 婷婷五月蜜桃成人桃色丁香| www.色婷婷| 精品自拍97| 26uuu成人网| 五月丁香婷婷视频| 噜噜狠狠色综无码久久合欧美| 激情桃色网| 99成人精品六| 99男人的天堂| 26.uuu丁香五月婷婷| 99精品视频在线观看| YJLZZJLZZ亚洲乱熟无码| 五月丁香六月婷婷免费视频| 激情综合五月.....| 97操操| 婷婷五月电影院| 99视频在线观看欧| 色五月婷婷激情五月| 九九热超碰| 97碰碰在线观看视频| 婷婷丁香九色| a毛片二逼wwwwwwwwww| 99精品视频在线观看| 九九操操| 五月丁香色婷婷| 182TV大香蕉| 99性视频| 色婷婷激情| 日本婷婷色日| 性视频久久| 五月丁香啪啪| 91婷婷在线| 五月婷视频在线| 六月丁香社区| 这里只有精品视频在线| 九色91国产| 色五月AV| 丁香六月婷婷开心| AA片在线观看视频在线播放 | 女同激情久久av久久| 天天色综网| 久久有码| 日本成人噜噜噜| 久久机热思思热| 开心五月深爱激情| 国产午夜精品一区二区| Blackedraw视频一区二区| 色99色| 综合久| 欧美色五月| www.五月.com| 亞洲自怕| 婷婷人人操| 另类视在线| 色玖玖导航| 婷婷六月视频| 色婷婷在线视频久| 深爱激情丁香| 丁香五月伊人| 午夜AV网| 大香蕉99| www.五月丁香av| 久热中文字幕在线线观看 | 26uuu国产| 日韩一级片| 国产XXXX搡XXXXX搡麻豆| 激情五月婷婷| 91无码高清| 婷婷精品在线| 成人做爰高潮A片免费视频| 99热人人| 99热精品网| 色欲九区| 欧美色必爱| www.ywav| 欧美成人无码高清一区二区三区| 99热在这里只有精品| 色婷婷激情| WWW.开心五月天.COM| 天天日天天做天天操| 五月婷婷片| 亚洲美女高潮久久久久久69| 久久99人人| 五月丁香六月婷婷久久| 欧美婷婷五月激情| 我去色色网五雨天| 久久99人人| 国产亚洲网站在线| 色色色色色爱| 色婷五月| 五月丁香婷婷色色| 激情综合色婷婷六月天| 大香蕉AV在线| AV操逼网| 99热精品在这里| 五月天六月丁香| 亚洲九九免费| 蜜桃人妻无码AV天堂三区| 三级av在线| 26uuu偷拍亚洲欧洲综合| 激情宗合哪里能看| 婷婷在线午夜| 99热 免费| 五月色天情| 五月婷婷亚洲| 天天色五月婷婷91久久久久久久| 久久亚洲A| 色色网站免费观看| 婷婷久久综合| 亚洲激情综| 亚洲综合视频天天精品| 亚洲视频色婷婷| 九九色热| 九九激情综合| 丁香五月成人| 婷婷丁香大香蕉| 97视频91| 五月天色丁香| 色色欧美色色| 久月丁香爱婷婷综合| 无码网站视频| 99re欧美精品| 情婷婷五月天| 少妇人妻偷人精品无码视频新浪| 26uuu国自产精品| 人人摸人人| 亚洲精品V天堂中文字幕| 天堂久久性| 99亚洲大片精品永久在线观看| 99热爱爱干干日| 丁香深五月婷婷| 加勒比日本一区二区三区| 天天做天天干天天综合网| 欧美色九| 国产免费av在线| 这里只有精品网站| 色五月在线综合| 日日操夜夜爽白洁| 婷婷成人视频| 九九Av| 网站免费一站二站| 99免费青青蜜臀| 狠狠搞综合色| 好好日激情五月天| 女人高潮内射99精品| 国内一级精品| 日本九九网| 99热大| 亚洲综合色丁香婷婷六月| 天天爽综合| 一区二区传媒视频| 深爱五月亚洲| 亚洲AV成人无码精品| 丁香五月网络网络| 婷婷中文字幕| 日日干综合| 色九月婷婷| 婷婷月综合| 99这里只有精品|v| 91九色在线观看免费| 亚洲精品国产精品乱码不99| 91狼友视频网页更新| 深爱激情四射| 激情网 久久| 亚洲 小说 欧美 激情 另类| 亚洲99热| 99这里| 久久丁香九| 九九热经典视频在线观看| 丁香五月久久社区| 婷婷性福五月天| 国产91资源在线| 狠狠擼综合| 五月婷婷久久综合| www.色色色com| 亚洲色欲欧美一区二区三区| 国模九区| 五月丁香色六月激情干大屄| 伊人www22综合色| 国产成人综合在线| 天天弄天天爽| 99热传媒| 色婷五月天| 丁香婷婷九月| 国产精产国品一二三在观看| 九九热99热| 9色免费网| 日本色色色| 亚洲精品网址| WWW.久久久久久久久久久久久| 久久婷婷色五月| 日逼影音先锋男人AV资源站| 操操操操操电影网| 婷婷五月天AV在线| 欧美激情综合色综合啪啪五月| 激情五月丁香色婷婷| 久久艹 五月天| 日本成人小说婷婷六月| 五月天丁香久久| 五月丁香天堂网| 开心深爱五月天| 国产精产国品一二三在观看| 99久久喉9| 五月亭亭六月激情| 狠狠色综合无线观看| 99视频网址| 久9热| 丁香六月狠狠| Www.se.久久| 96五月丁香熟女| 婷婷性爱综合| 亚洲精品大片| 激情99在线视频| 丁香 久久| 伊人在线视频| 99久久极情精品一区| 天天操天天曰天天射| 欧美内射AA| 天天网站天天爽| 丁香五月亚洲综合| 婷婷丁香五月天激情| 热99国产精品| 性色av大香综合| 97自拍视频在线| 激情网综合| 97色欧美| 激情电影五月婷婷| 久久精彩视频| 91久久综合亚洲鲁鲁五月天| 五月天婷网| 欧美日韩成人免费在线| 99在线视频观看| 丁香六月婷婷综合| 人妻内射视频| 激情丁香网| 色综合丁香婷婷| 午夜天堂一区人妻| 黄色AV日韩| 青青久在线视频免费观看| 噜噜色婷婷| 亚洲成人免费电影| 台湾无码A片一区二区| 中文字幕日本最新乱码视频| 999热这里只有精品| 五月六月婷| 婷婷五月丁香六月| 色婷婷五月天偷拍| 色婷婷丁香AV综合| 亚洲色五月| 性生活视频98791| 五月开心啪啪| 77799热| 青996青| 婷婷中文字幕网站| 日本99视频| 99热精品99| 五月天性色| 丁香六月婷婷综合激情欧美| 99黄色在线视频精品熟女| 久热婷婷综合| 免费观看全黄做爰的视频| 色哟哟精品| 天天爽夜夜爽天天爽夜夜爽| 四色女婷婷| 亚洲精品视频在线| 亚洲永久四色| 婷婷精品在线| 噜噜噜狠狠色综| 伊人影院久久网| 色五月丁香91| 色播jjjj| 狠狠干夜夜干| 婷婷色正月| 丁香六月婷婷综合麻豆| 精品综合久久久久久五月天| 视色网在线播放| 色5在线| 久久99操| 六月婷婷色色色| 殴美日韩成人| 六月婷婷综合久久| 狼友超碰| 五月婷婷啪啪啪| 丁香五月婷婷五月| 久久久性爱视频| 丁乡久久| 色五月婷婷久久| 成人在线网| 色区久久| 开心四月婷婷在线色播播| 天天爱天天做天天日| 中文字幕在线不卡| 亚洲精品网站色视频| 热久久91| 六月婷婷网| 丁香午月AV中文字幕| 91婷色| 99视频在线播放大全| 操日本三片99| www.激情.com.| 9.1综合网| 激情5月舔| 深爱五月激情网| 激情五月天啪啪视频| 亚洲精品色色| 二区成人视频| 97热久久五月婷婷| 国产亚洲在线观看| 任你爽视频| 天天噜天天爱| 五月天婷婷激情在线色图| 六月婷婷开心| 婷婷丁香人妻天天爽| 久久狠狠干| 日本人妻伦在线中文字幕| 亚洲中文字幕在线观看| 狠狠色婷婷丁香五月| 六月丁香激情| 五月天婷婷自拍图片在线观看| 婷婷五月激情基地| 天天综合中文| 色色网站| 婷婷激情六月中文| 在线视频另类| 伍月激情天| 婷婷.com| 啊v视频在线观看| 成人午夜天| 亚洲色99综合天堂| 欧洲综合视频| 五月丁香六月花| 亚洲激情网| 中文字幕综合网| 婷婷五月激情小说| 99视频日韩| 九月婷婷色色| 丁香五月深爱五月婷婷| 国产三级片91| 少妇人妻丰满做爰XXX| 97热在线精品| 免费看欧美成人A片无码| 六月丁香AV| 婷婷五月激情图片| 天天日天天日天天搞| 丁香五月婷婷五月| 69超碰在线| 玖玖婷婷婷丁香五月| 99热加勒比| 五月丁香天堂网婷婷| 天天日综合| 五月婷婷激情网| 国产精品24r| 亚洲综合狠狠艹| 久久Xx| 五月www| 欧美婷婷五月天| 五月婷婷综合激情| 婷婷色五月激情强奸四射| 色五月婷婷五月丁香五月激情五月视频| 激情激情激情网| 五月婷婷激情视频| 丁香,开心成人,久久| 婷婷综合影院| 国产色五月| 国产免费一区二区在线A片视频| 国产黄色在线观看| 26uuu视频欧美| 夜夜干夜夜操| 色网五月婷婷| 五月天婷婷青青| 五月婷婷深深爱| 91打屁股免费看| 91窝窝| 亚洲综合色丁香五月天| 成人午夜无码视频| 激情五月天久久丁香| 激情综合激情综合| 久草视频大香蕉99| 能看的AV网站| 色情成人五月天| 六月丁香停| 天天撸天天干天天插| 天天日天天插| 久热中文字幕| 婷婷午夜综合| 色情婷婷。| 有哪些A片网站| 疯狂做受XXXX高潮A片| 色色吧综合| 六月激情久久| 色色色婷婷| 性色99| 丰满少妇猛烈A片免费看观看| 久综合网| 99精品综合视频| 猫咪伊人久久| 2017狠狠干| 久久码久久无清| 99热只有精| 色噜噜狠狠色综无码久久合欧美| 婷婷五月天在线观看av| 色五月激情综合网| 久久五月天合网| 天天爽天天干| 丁香六月亚洲| 三男玩一女三A片| 婷婷五月69| 这里只有精品2| 中文字幕永久免费| 久热这里只有精品6| w婷婷五月婷婷w| 91人人操人人| 九九色99| 大香蕉久久伊人婷婷五月丁香| 激情99热| 五月婷五月婷伊人伊人五月婷| 二色AV| www.精品99| 色婷婷19| 婷婷五月天日逼| 国产美女无遮挡裸体毛片A片| 婷婷五月天美女| 色99视频| 亚洲99视频| 艹B高清无码| 人妻尝试久久久久久久久久久久| 婷婷色网址| 尔尔AV一区| 9视频1在线| 色婷久久| 丁香五月激情啪啪| 丰满人妻妇伦又伦精品国产| 亚洲人人操BD| 海外网站专业操老外| 无码99| 丁香五月激情综合| 老师的粉嫩小又紧水又多A片视频| 五月丁香拍拍激情综合| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 99热思思| 久热超碰| 一级韩国产精品毛| 国产.亚洲.欧洲视频在线| 色噜噜狠狠色综合网| 热九九精品| 日韩好吊操| 伊人高清无码| 亚洲五月停停| 久热这里只有精品3| 成人 在线观看国产| Caop在线| 91色婷婷综合久久中文字幕二区| 狠狠色婷婷六月激情网| 久9免费视频| 亚洲无码色色| 欧美久久婷婷| 久久精彩综合视频| 91夫妻网站九色| 丁香五月av| 人妻性操逼中文字幕 国产| 国产乱妇无乱码大黄AA片| 天天天天色天天天天天干| 大香蕉九九热| 精品人妻午夜一区二区三区四区| 色噜噜狠狠色综合网| sS丁香五月婷婷| 九色1区视频在线| 99视频这里有精品| 久久久久综合激动五月天| 久久无码成人| 国产精品大香蕉| 99精品无码网站| 2017狠狠干| 色欲一区二区三区精品A片| 五月天五月天成人网亭亭成人色网站| 人妻性操逼中文字幕 国产| 婷婷激情五月天桃花网| 精品婷婷| 日日夜夜干| 日日鲁鲁夜夜爽爽| 色婷婷久久综合| 91干婷婷| 99热这里都是精品| www.激情五月| 亚洲精品在线视频| 五月婷婷丁香狠狠撸久久| 婷婷综合| 区美毛片子| 大香蕉 婷婷| 五月成人网站| 中文字幕 中文字幕明步| 西瓜美女a片| 操操碰| 2005天天干天天1| 午夜天堂一区人妻| 天天日天天操心| 色色色网站| 精品九九视频| 狠狠做五月婷婷| 久久婷婷网| 熟女国产在线一区二区三区四区| 五月婷婷网站| 丁香成人综合| 久久国产性爱A V| 大香蕉九九| 射久久丁香五月| 97人人干视频| 91 影音先锋| 亚洲操操操| 91久久综合亚洲鲁鲁五月天| 欧美va在线观看| 亚洲色无码| 久婷婷久草| 日本女va| 丁香婷婷五月天校园春色| 婷婷97碰碰| 九色在线观看91av| 婷婷丁香91| 五月激情综合性爱| 1234操逼网| 五月天综合色| 色黄啪啪| 久久日九九| 大香蕉视频婷| 久久五月婷6 9| 成人在线二区| 久久久久久99日本| 影音先锋男士资源网一区| 婷婷色五月激情强奸四射| 亚洲精品操一操、噜一噜、摸一摸、爽| 99毛片| 国产AV不卡福利| 色婷婷情片| 国产精产国品一二三在观看| 大香蕉五月婷婷丁香| 国产看真人毛片爱做A片| 天天爽夜夜操| 久久黄色片| 大香蕉久久综合网| 欧美六月婷婷| 婷婷六月香| Aα在线免费观看| 日韩xx在线| 婷婷性爱视频在线| 91丁香五月| 五月丁香激情怕怕| 激情综合五月婷| 天天干天天日日| 亚洲AAA| 婷婷五月丁香久久| 激情五月婷婷综合| 天天射美女| 夜夜干天天操| 精品成人在线| 伊人九九综合| 九九综合| 日本三级第一页| 色停停影院五月天| 天天射天天干天插色综合| 丁香九月久久| 久久99色色| 欧美丁香五月| www婷婷| 五月丁香六月婷| 亚洲av| 亚洲精品444久久久久久| 淫五月停停| 4399在线观看免费高清黄色视频| 亚洲性受XXXX五月丁香| 99热99这里有免费的精品| 97色色色色色| 久久只有18视频| 国外亚洲成AV人片在线观看| 另类激情码| 丁香综合伊人| 激情5月婷婷| 日韩欧美一级大黄网站| 欧美A级成人婬片免费看理论| 伊人大香蕉综合在线| 99爱视频精品| 99热久久这里只有精品2010| 九九99在线免费在线观看视频| 国产精品第一国产精品| 香蕉网久久| 狠狠88综合久久久久噜噜噜| 成人九九视频| 丁香五月天综合| 91 久热| 激情五月天色色网| 亚洲六月色| 99精品在线| 91操黄| 日本精品在线噜噜噜| 久久思思热视频| 超碰99在线观看| 99青青草99| 91九色在线| 亚洲无码九九| 拍真实国产伦偷精品| 97成人超碰免| 天天操九九插| 色色操| 九九无毛| 激情丰满熟妇五月| 99热精品免费| 91综合在线视频| 婷婷五月丁香色情| 99热精品中文字幕| 色综合久久综合| 婷婷五月天改成什么了| 久草视频一,二三四| 丁香婷婷欧美综合| 开心婷婷五| 婷婷五月天AV在线| 91久久18| 天天精品视频在线观看视频| 亚洲激情四射| 伊人婷婷五月天| 久久久精品色| www.91五月| 丁香婷婷六月婷婷六月婷婷六月婷婷 | 五月婷婷综合激情小说| 另类在线| 五月丁香精品| 五月丁香亭亭操逼| 操骚货在线| 性爱激情五月| 五月天色婷婷视频| 激情五月天婷婷| 久久免费操| 开心婷婷五月| 亚洲无码AV片| 婷婷五月天激情丁香| 99热这里都是精品| 色VA| 色婷婷电影网| 九九综合图片网| 婷婷五月天成人影片| 五月天激情小说| 色综合激情| 91热网址| 久久98热re| 99这里有精品视频| www.99精品视频| 五月开心深爱激情网| 91色性感五月婷婷丁香| 99热777| 丁香婷婷欧美综合| 婷婷综合网站| 婷婷色色色| av五月天婷婷丁香| 超碰免费电影| 亚洲色亚洲精品| 青青久久五月天丁香婷婷| 丁香五月综合在线播放| 综合色七七| 天天爽天天做| 久久区区一二三av| 91视频精品99| 九九碰九九爱97| 五月丁香婷婷基地| 久久丁香五月婷婷激情综合网| www.99热这里只有精品| 五月色丁香成人| 狠狠精品干练久久久无码中文字幕| 五月色情婷婷开心五月色情| 在线视频婷婷| 五月婷亚洲精品| 丁香久久激情俄| 五月丁香婷婷基地| 色五月婷婷操逼| 97干在线| 五月婷高清视频| 丁香五月成人| 天天做天天摸| 99热精品观看| 天天色天天操天天射| 婷婷九月激情| 日韩av在线播放综合网| 91狠狠色色丁香婷婷综合久久| 91人人操人人| 专区无日本视频高清8| 国际国外精品欧洲南美洲专区无码不卡| 在线精品97| 欧美色97| 激情99热| 人人草碰| 26uuu精品一区二区| 国产va在线视频| 涩玖玖免费视频| 99在线播放视频| 久久99这里| 男女av免费看| 无码人妻激情| 激情综合另类| 91要啪| 狠狠干综合| 婷婷日日夜夜| 五月天天综合| 黄色热99| 香蕉国产2013| 五月丁香婷婷激情久久| 东北黄色一级| 秋霞A V毛片| www激情网| 99热99精品| 99久久66综合| 碰碰女| 亚洲天堂亚洲色色色| 波多野结衣成人作品在线| 丁香九月激情| 日韩操逼小电影| 99视频在线| 丁香五月激情啪啪啪| 99热这里只有精品3| 新激情五月天色播| 亚洲欧美综合7777色婷婷| 风流少妇A片一区二区蜜桃| 99网| 五月丁香六月婷婷在线播放| 超碰人人射| 九九无毛| 成人资源在线| 天色综合网站| 婷婷射图| 1024成人免费看| 天天操综合网| 激情啪啪五月| 激情文学五月丁香六月婷婷| 欧美久久五月婷婷| 久久久久8888| 婷婷五月激情综合网| 亚洲AV日韩无码| 开心五月深爱五月丁香五月激情五月| 久热婷婷| 六月激情网| 极品少妇XXXX精品少妇偷拍| 婷婷无码五月天| 99.色| 丁香婷婷六月婷婷六月婷婷六月婷婷| 碰碰操91| 婷婷五月天丁香综合网| 欧美性猛交99久久久久99按摩| 91色五月| 五月婷婷AV| 久8色色| 色爱综合视频| 久久婷婷丁香五月一二三| 182TV亚洲| 五月丁香婷婷99| 久久无码成人| 五月天激情视频| 大香蕉五月婷婷| 五月天激情小说欧美激情| 这里只有精品99www| 亚洲区,视频区,视频区免费| 色色色干| 91AV婷婷| 五月天婷婷免费| 丁香五月婷婷欧美成人色图| 99热99思午夜精品| 精品五月花| 丁香五月婷婷av影院| 婷婷五月天成人网| 婷婷五月丁香五月| 99热综合| 日日夜夜狠狠| 丁香五月天电影| 丁香六月婷婷色XXXXX| www.色婷婷| www激情| 天堂中文国产| 五月色色网| 91人妻人人做人碰人人爽九色| 婷婷午夜综合| 婷色五月天| 97在线视频人妻九色| www,色婷婷| 日韩婷婷| 婷婷五月色播| 99久热| 少妇被躁爽到高潮无码文| www久久久久久久久久久| 亚洲精品又粗又大又爽A片| 亚洲操操操| 丁香五月AV| 97操操| 北京熟妇搡BBBB搡BBBB| 国产伦亲子伦亲子视频观看| 欧美久久一级内射wwwwww.| 五月婷婷色在线| 久99久视频精选| 91九色大屁股| 亚洲1区| 亚洲视频在线观看99| 丁香五月天欧美| 丁香五月在线看| 国产激情综合五月久久| 精品网站:999WWW| 五月天成人综合| 熟女少妇内射日韩亚洲| 国内精品免费一区二区2009| 欧美三级视频下载| 婷婷99热| 婷婷久久欧美| 婷婷亚洲在线| 99色热视频在线| 丁香五月婷婷基地| 五月天婷婷av| 性爱久久| 日韩日比视频在线| 二区成人视频| 亚洲综合无码| 久久er+| 噜噜噜久久亚洲精品国产品91| 丁香六月婷婷综合缴| 97婷婷色| 国产精品第一国产精品| 综合色视频| 色播综合| 丁香五月婷婷激情中文| 欧美综合123区| 丁香五月天堂网| 色综合网页| 武则天精品久久| 伊人影音无码一区二区三区| 操操操www.com| 天天做 天天爱| 91.com男女操| 久久er99热精品一区二区| 丁香五月综合激情久久潮喷| 色很很96| 丁香月六月| 热久精品| 色青青电影色五月| 天天色播| 久久免费婷婷视频| 久久婷婷五月| 丁香六月成人网| 啪啪色激情五月天| 婷婷综合五月天亚洲综合| 免费亚洲婷婷中文字幕| 九月性爱网| 综合亚洲六月婷婷在线| 婷婷五月天日本无码| 99在线观看视频| 粉嫩AV久久一区二区三区| 色色色色色色五月婷婷| 久久综合网免费视频| 免费在线观看欧美激情xx小视频| 最近中文字幕大全免费版在线| 综合色视频| 五月天三级| 久综合色| 欧美成综合在线观看| 五月婷婷与六月丁香图片激情| 五月丁香六月婷婷操操操| 激情五月综合| 亚洲旡码| 五月婷婷免费在线视频| 亚洲字幕AV一区二区三区四区| 大香蕉99热| 婷婷五月色天| 丁香五月天成人| 99er这里只有精品| 久热亚洲| 欧洲区自拍| 99爱视频在线免费观看| 色色操| 色综合久久88色综合天天看| 激情综合色五月丁香六月亚洲| 亚洲色网络| 欧美VA视频| 成人免费va| 97超碰,人人舔,人人操,人人摸| 五月婷丁香| 五月婷婷深深爱| 五月黄色婷婷| 婷婷激情丁五月| 色情综合网| 在线中文字幕av| 五月婷婷中文字幕AV| 国产黄色在线观看| 熟女乱论网| 婷婷五月天激情文学| 国产综合婷婷| 五月丁香六月情| 亚洲第一成人AV| 综合深爱五月| 九九九九精品精| 99热国内| www.色五月| 天天做天天要天天爱| 亚洲AV人人操| 综合一区二区三区| 九九大香视频| 五月婷婷色啪| 日本天天色| 亚洲国产网站| 欧美乱码国产一级A片| 丁香色五月AV在线| 五月天最新网| 99久久.www| 激情五月天婷婷在线网址发给我| 热婷婷av| 丁香五月婷久久| 日日噜噜久久婷婷五月天| 天天综合社区| www网站在线观看| 亚州操人在线视频| 久久狠婷婷| 六月丁香啪啪啪| 日韩免费99| 精品成人在线观看| 亚洲成人高清在线| 99日本黄站| 色婷婷久久综合久色综| 婷婷综合色图| 超碰人人干| 99免费| 五月天婷五月天综合网在线观| 99热成人| 婷婷夜夜夜夜| www.久99| 丁香五月亚综合图片| 4399高清无码视频| 婷婷少妇激情| 久久狠狠欧美| 亚洲亚洲人成综合网络| 婷婷五月天com| 99ri国产精品| 亚洲婷婷91丁香| 亚洲AV成人在线| 综合AV在线| 狠狠狠狠免费| 综合久久婷婷99| 五月天成人小说| 久操无码| 五月天啪啪| 26UUU精品一区二区Com| 99免费青青蜜臀| 婷婷五月丁香六月| 五月丁香久久综合| 大伊香蕉精品视频在线| 天天综合天综合| 九九色院| 深爱激情五月天| 中文字幕色色色| 色婷av| 五月天色社区| 亚洲va欧美va国产综合久久久| 青青草五月天| 777色色色| 日撸夜撸日操| 超碰在线免费9| 天天插天天射| 六月综和久久| 91久久九色| 色色色综合网| 久久这里只有欧美| 91se在线视频| 国产伦亲子伦亲子视频观看| 亚洲五月天婷婷| 人人干人人干骚美女| 亚洲av电影网站| 天天色丁香| 五月丁香六月花| 99久久精品色老| 国产毛片精品一区二区色欲黄A片| 婷婷丁香五月天在线| 五月婷婷激情性爱| 江苏少妇性BBB搡BBB爽爽爽| 丁香五月婷婷AV在线| 激情综合五月色在线| 五月丁香人妻| 五月天婷婷色| 亚洲激情综| 热的无码综合视频| 五月丁香婷婷在线| 高清 码 免费看片短视频| 五月天播播| www.com五月天| 99在线免费视| 色色色五月婷| 日韩成人影片网站| 欧美丁香婷婷五月| 久久机热/这里只有精品| 99热色无码| 日韩黄色电影| 色色色色色色综合网| 激情伊人| 这里只有精品免费视频| 操笔无码| 婷婷五月综合网| 一本久婷婷综合| 99视频自拍| 亚洲五月丁香六月婷婷| 99热成人在线观看| 这里只有精品视频在线观看免费| 久久久久久久久久久44| 99久久超级| 色999亚洲人成色| 亚洲无码11| 色五月激情五月| 一本道综合网| 婷婷久久综合久| 激情五月婷| www.久久色.com| 国外亚洲成AV人片在线观看| 久久丁香五月| 玖玖爱综合网| 激情五月小说婷婷| 91wwmm导航| 91操操操| 五月丁香日本片| 99色色爰| 欧美日朝成人| 五月丁香久久呀| 激情九九六月激情免费视频| 婷婷伊人综合| 精品香蕉99久久久久网站 | 成人va在线观看视频| 五月天激情四射网站| 激情五月天婷婷色色色色色色色色色色色| 99国产精品久久久久久久久久久 | 超碰99成人在线| 蜜臀久久99精品久久久久久酒店| 国产精品99久久久久久久女警| 99超级碰免费视频| 991精品在线视频| 天天综合色| 美女五月狠狠| va婷婷| 婷婷六月丁香欧美视频在线| 第四色26uuu| 九九久久99| 五月丁香婷婷中文网| se99在线| 人人97碰| 看婷婷五月天网| 99综合| 最新日本A片| 精品视频这里只有精品| 国产日产成人亚洲欧美国产VA| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 亚洲日日日| 噜噜噜狠狠色综合| 五月丁香狠狠爱| 成人免费高清在线播放| www.色婷婷.com| 激情五月综合| 久久久久久9| 丁香五月天网站| 69精品人人人人| 久久五月综合| 欧美搡BBBBB摔BBBBB| 亚洲国产精品VA在线看黑人| 婷婷97色| 欧美三级韩国三级日本三斤| 另类婷婷五月天啪帕帕| 色婷婷影音| 色婷婷情片| 色爱爱综合网| 激情爱爱网站超大免费| www.黄色片-久久成人国产精品在线播放-999AV | 99热精在线九九久久保| 99热这里有精品24| 久8色色| 五月天久久婷婷| 久久9久| 丁香五月激情网| 欧美私人家庭影院| 99精品手机在线视频| 综合超碰熟| 九色激情| 97色热| 久久婷婷五月天激情四射| 久99精品视频| 欧美色色色色色色色| 婷婷香香五月| 婷婷五月天亚洲色| 66精品成人免费网站在线观看| 久8色色| www.婷婷| 亚洲综合五月天婷婷| 亚洲成av人影院| 精品九九网| 日韩成人网址| 天天夜天天色天天| 久久小视频| 天天插天天插| 无语停婷丁香网| 激情五月天啪啪| 丁香五月婷婷成人综合| 九九热视频精品| 丁香五月网址| 99热网精品| 香蕉乱插| 婷丁香五月天| 综合久久五月天| 玖玖色综合| 99天天操夜夜操| 色婷婷777狠狠| 秋霞电影理论| 天天插天天日| 五月天激情小说网| 久久99久久久| 五月天婷基地| 色狠狠婷婷| 久99| 超碰在线观看成人视| 天天上天天爽| 丁香六月婷婷综合| 七七婷婷综合| 人妻久热| 99热九九在线| 大香蕉啪啪网| 婷婷五月天综合久久日美女| 色婷婷五月影视| 五月天婷婷丁香社区| 大香蕉婷婷| 97在线日本| 亚洲第一色色色色| 亚欧州精品视频| 丁香色婷婷色手机免费在线| 五月丁香花激情综合网| 天天干天天干天天干天天干天天干天天干天天 | 9精品视频在线观看| 天天日天天做天天操| 香蕉综合在线| bukadeavzaixian| 思思热思在线精品视频| 九九热在线视频| 亚洲欧洲美女在线观| 伊人婷婷青青cao| 五月丁香综合中文| 老师高潮流白浆喷水的A片| 婷婷综合| 色欲久久久久久综合网综合网| 久久在线视频免费观看| 久色网| 日本狠狠色| 欧美成人猛片AAAAAAA| 久久综合五月天| 婷婷五月亚洲一本在线丁香| 野外99热| 日日夜夜狠狠| 亚洲123区高清入口| 国产欧美日韩性爱| 99热国产免费| 97超碰,人人舔,人人操,人人摸| 大香蕉av在线| 五月婷婷六月丁香玖玖玫瑰91| 久99久视频精品| 久久亚洲色导航| 色欲av伊人久久大香线蕉影院| 色涩影院六月丁香| 丁香婷婷久久老熟女综合网| 成人精品一区日本无码网| 五月天丁香综合| 丁香六月婷婷| 五月天堂六月丁香亚州中文字幕久久| 99色看这里只有精品| 可以免费观看的AV| 丁香五月婷婷色情综合| 97色在线观看视频| 日本99婷婷| 激情久久综合网| seav天堂| 婷婷色天香| 国产3p露脸普通话对白| 国产99美少妇| 久久久久9| 9久热| 丁香五月婷婷亚洲综合精品| 色婷婷777狠狠| 天天做天天爽| 激情五月天的婷婷| 天天日天天草| 97五月综合网| 天天干天天干天天操| 激情熟女网| 色色色色网| 久久九九囯产| 五月天综合在线观看视频| 五月天激情日色在线| 色色色无码| 色开心五月婷婷丁香HD| 狠狠做深爱婷婷久久综合一区| 99久久国产综合精品五月天喷水\| 狠狠狠狠狠狠狠狠草| 亚洲亚洲人成综合网络| 丁香六月视频| 久久婷婷丁香花综合网| 天天射天天射一道本日本社区| 婷婷丁香五月天综合激情| 五月丁香婷婷婷婷综合网| 婷婷狠狠综合网入口| 国产精品婷婷午夜在线观看| 99精品手机在线视频| 色婷五月天激情| 91夫妻视频| 逼里香不卡| 丁香激情五月少妇| 涩综合网| www.久久爱| 粉嫩AV久久一区二区三区| 婷婷伊人激情婷婷| 久久九九思思| 国产性爱亚洲是图| www.henhenl| 色五月六月| 爱草视频在线观看| 久久婷综| 色五月婷婷、老熟女| 一级韩国产精品毛| 日本美女五月天| 日本一级一级一级一级| 婷婷色色网| 激情综合色五月丁香六月亚洲| 中文字幕高清av| 99热最新精品| 婷色人人狠| 99色免费观看全部| 激情五月丁香亭亭| 99久热在线精品| 日本不卡高字幕在线2019| 丁香综合网| 97se视频在线| 久久曰曰| 五月停停丁香| 亚洲性爱电影| 超碰av在线| 天天色天天爱天天爱天天爱y| 欧美色色干| AV大香蕉| www,99热| 丁香婷婷色五月| 亚洲字幕AV一区二区三区四区| 色噜噜狠噜噜视频| 入口五月婷婷六月香| 波多婷婷久久| 8区视频在线| www.五月天。com| 九九热婷婷| 最近中文字幕大全免费版在线 | 婷婷五月天开心激情网| 久久精彩综合视频|