99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

Seata TCC分布式事務(wù)實戰(zhàn):從原理到生產(chǎn)環(huán)境避坑指南

Seata TCC分布式事務(wù)實戰(zhàn):從原理到生產(chǎn)環(huán)境避坑指南 1. 從“分布式事務(wù)”這個老難題說起如果你做過幾年后端開發(fā)尤其是在微服務(wù)架構(gòu)下折騰過數(shù)據(jù)一致性那“分布式事務(wù)”這個詞對你來說大概率不是什么美好的回憶。訂單創(chuàng)建了庫存沒扣積分增加了優(yōu)惠券沒核銷這種“一半成功一半失敗”的爛攤子處理起來比寫業(yè)務(wù)代碼本身還頭疼。我最早接觸分布式事務(wù)解決方案時試過基于消息隊列的最終一致性也折騰過兩階段提交2PC各有各的麻煩。消息隊列方案對業(yè)務(wù)侵入大補(bǔ)償邏輯復(fù)雜而傳統(tǒng)的2PC對數(shù)據(jù)庫和中間件要求高性能瓶頸明顯在云原生和微服務(wù)拆得越來越細(xì)的今天顯得有點力不從心。正是在這種背景下像Seata這樣的分布式事務(wù)框架開始流行起來。它把那些復(fù)雜的協(xié)調(diào)、回滾邏輯封裝起來給我們提供了一套相對統(tǒng)一的編程模型。Seata支持好幾種模式比如AT自動補(bǔ)償、TCCTry-Confirm-Cancel、Saga長事務(wù)等。今天我們不聊別的就聚焦在TCC模式上。為什么是TCC因為在我看來它是業(yè)務(wù)侵入性、性能和數(shù)據(jù)強(qiáng)一致性之間一個非常不錯的平衡點。它不像AT模式那樣嚴(yán)重依賴數(shù)據(jù)庫的undo log對某些不支持undo log的數(shù)據(jù)庫或中間件不友好也不像Saga模式那樣一階段就提交可能產(chǎn)生臟讀。TCC要求我們開發(fā)者自己定義三個明確的階段Try、Confirm、Cancel雖然多寫了一些代碼但換來了對事務(wù)邊界的絕對掌控和對各種異構(gòu)數(shù)據(jù)源比如Redis、ES、MQ的支持能力。網(wǎng)上關(guān)于Seata TCC的教程不少但很多要么是官網(wǎng)示例的簡單復(fù)刻要么只講通了Demo一遇到生產(chǎn)環(huán)境的復(fù)雜場景——比如嵌套調(diào)用、并發(fā)沖突、空回滾、冪等控制——就語焉不詳。這篇文章我就結(jié)合自己最近在一個電商履約系統(tǒng)中落地Seata TCC 1.4.2的真實經(jīng)歷把從環(huán)境搭建、代碼編寫、到各種坑的排查和填平過程給你完整地捋一遍。我們的目標(biāo)是讓你看完之后不僅能跑通一個TCC示例更能理解其內(nèi)在機(jī)制具備在實際項目中設(shè)計和駕馭TCC事務(wù)的能力。2. 環(huán)境與項目骨架避開第一個坑在開始寫一行業(yè)務(wù)代碼之前先把環(huán)境搭對能省掉后面80%的莫名其妙的問題。我這次用的是Seata 1.4.2版本部署方式選擇了Docker Compose這比直接下載jar包運(yùn)行要方便和干凈得多。2.1 部署Seata Server (TC)TC是Transaction Coordinator事務(wù)協(xié)調(diào)器是Seata的大腦必須最先啟動。很多人卡在第一步就是因為沒搞清楚配置。首先你需要一個docker-compose.yml文件。網(wǎng)上很多教程給的配置還是老版本的直接抄過來可能連服務(wù)都起不來。下面是我驗證過可用的1.4.2版本配置version: 3.8 services: seata-server: image: seataio/seata-server:1.4.2 container_name: seata-server ports: - 8091:8091 # 事務(wù)協(xié)調(diào)器默認(rèn)端口 - 7091:7091 # 控制臺端口1.4.2開始自帶控制臺 environment: - SEATA_IP你的服務(wù)器IP # 重要如果是云服務(wù)器填內(nèi)網(wǎng)IP本地測試填127.0.0.1 - SEATA_PORT8091 - STORE_MODEfile # 事務(wù)日志存儲模式單機(jī)測試用file最簡單。生產(chǎn)環(huán)境請用db或redis - SERVER_NODE1 # 節(jié)點編號單機(jī)就是1 volumes: - ./seata-config:/seata-server/resources networks: - seata-net networks: seata-net: driver: bridge這里有幾個關(guān)鍵點SEATA_IP這是最大的坑。這個IP是TC服務(wù)對外暴露的地址Client你的業(yè)務(wù)服務(wù)要靠這個地址來連接TC。如果你在本地用Docker跑Client是宿主機(jī)上的Spring Boot應(yīng)用那么這里應(yīng)該填宿主機(jī)的IP127.0.0.1或本機(jī)局域網(wǎng)IP而不是容器內(nèi)部的IP。如果填錯了Client會連不上TC報“no available server to connect”錯誤。存儲模式STORE_MODEfile表示將事務(wù)日志全局事務(wù)會話、分支事務(wù)記錄等存在本地文件。這對于開發(fā)測試完全沒問題重啟容器數(shù)據(jù)就沒了。生產(chǎn)環(huán)境絕對不要用file模式因為無法支持集群和高可用。生產(chǎn)環(huán)境應(yīng)該用db模式并配置好對應(yīng)的數(shù)據(jù)庫連接信息。控制臺從1.4.2開始Seata Server自帶了一個簡單的控制臺訪問http://你的IP:7091即可默認(rèn)賬號密碼是seata/seata??梢栽谏厦娌榭慈质聞?wù)列表和狀態(tài)對于調(diào)試非常有用。啟動命令很簡單docker-compose up -d。用docker logs -f seata-server查看日志看到 “Server started...” 的字樣就說明啟動成功了。2.2 準(zhǔn)備業(yè)務(wù)項目TM/RMTC搭好了接下來是事務(wù)參與者也就是我們的業(yè)務(wù)服務(wù)。我們需要創(chuàng)建一個簡單的多模塊Spring Boot項目來模擬分布式場景。假設(shè)我們有一個“訂單服務(wù)”和一個“庫存服務(wù)”。項目依賴是關(guān)鍵。在父pom中引入Spring Cloud和Spring Cloud Alibaba的依賴管理。注意版本兼容性我用的組合是Spring Boot: 2.3.12.RELEASESpring Cloud: Hoxton.SR12Spring Cloud Alibaba: 2.2.7.RELEASE在訂單服務(wù)和庫存服務(wù)的pom中都需要引入以下核心依賴!-- Seata 客戶端 -- dependency groupIdio.seata/groupId artifactIdseata-spring-boot-starter/artifactId version1.4.2/version /dependency !-- Spring Cloud Alibaba Nacos 作為配置和注冊中心也可用Eureka等 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-config/artifactId /dependency配置文件application.yml是另一個容易出錯的地方。訂單服務(wù)作為事務(wù)發(fā)起者TM的配置示例spring: application: name: order-service cloud: nacos: discovery: server-addr: localhost:8848 # Nacos地址 config: server-addr: localhost:8848 file-extension: yaml seata: application-id: ${spring.application.name} tx-service-group: my_test_tx_group # 事務(wù)組需要和TC配置對應(yīng) enable-auto-data-source-proxy: false # TCC模式不需要數(shù)據(jù)源代理設(shè)為false config: type: nacos # 從Nacos讀取TC配置 nacos: server-addr: ${spring.cloud.nacos.config.server-addr} group: SEATA_GROUP >dependency groupIdio.seata/groupId artifactIdseata-rm-tcc/artifactId version1.4.2/version /dependency然后定義接口。這個接口必須被業(yè)務(wù)實現(xiàn)類實現(xiàn)并且方法要遵循特定規(guī)則LocalTCC // 聲明這是一個本地TCC接口 public interface InventoryTccAction { /** * Try 方法 * param businessKey 業(yè)務(wù)唯一鍵用于標(biāo)識本次操作 * param productId 商品ID * param count 扣減數(shù)量 * return 是否成功 */ TwoPhaseBusinessAction(name inventoryTccAction, commitMethod commit, rollbackMethod cancel) boolean prepare(BusinessActionContext actionContext, BusinessActionContextParameter(paramName productId) String productId, BusinessActionContextParameter(paramName count) Integer count); /** * Confirm 方法 * param actionContext 業(yè)務(wù)上下文框架自動注入包含prepare方法的參數(shù) * return 是否成功 */ boolean commit(BusinessActionContext actionContext); /** * Cancel 方法 * param actionContext 業(yè)務(wù)上下文 * return 是否成功 */ boolean cancel(BusinessActionContext actionContext); }關(guān)鍵注解解析LocalTCC: 標(biāo)識這是一個TCC接口可以是Spring Bean。TwoPhaseBusinessAction: 核心注解標(biāo)注在Try方法上。name: TCC事務(wù)的名稱全局唯一用于標(biāo)識這個業(yè)務(wù)動作。commitMethod: Confirm方法的方法名。rollbackMethod: Cancel方法的方法名。BusinessActionContextParameter: 標(biāo)注在Try方法的參數(shù)上框架會將這些參數(shù)值保存到BusinessActionContext中并自動傳遞給后續(xù)的Confirm/Cancel方法。這是TCC模式能正確回滾的關(guān)鍵因為Cancel方法需要知道Try階段凍結(jié)的是哪個商品、多少數(shù)量。3.2 實現(xiàn)TCC接口接下來是實現(xiàn)類。這里的設(shè)計直接關(guān)系到事務(wù)的可靠性。Service public class InventoryTccActionImpl implements InventoryTccAction { Autowired private InventoryMapper inventoryMapper; Override Transactional(rollbackFor Exception.class) public boolean prepare(BusinessActionContext actionContext, String productId, Integer count) { // 1. 檢查庫存是否充足 Inventory inventory inventoryMapper.selectById(productId); if (inventory null || inventory.getAvailable() count) { throw new RuntimeException(庫存不足); } // 2. 執(zhí)行預(yù)留操作凍結(jié)庫存 int frozen inventory.getFrozen() null ? 0 : inventory.getFrozen(); int newFrozen frozen count; int newAvailable inventory.getAvailable() - count; int updateCount inventoryMapper.updateFrozenAndAvailable(productId, newFrozen, newAvailable); if (updateCount ! 1) { throw new RuntimeException(凍結(jié)庫存失敗可能并發(fā)沖突); } // 3. 記錄預(yù)留日志可選但推薦用于冪等和排查 // 可以將 xid, branchId, productId, count, status(try) 插入一張單獨的日志表 log.info(TCC Try 成功。xid{}, productId{}, count{}, actionContext.getXid(), productId, count); return true; } Override Transactional(rollbackFor Exception.class) public boolean commit(BusinessActionContext actionContext) { String xid actionContext.getXid(); String productId (String) actionContext.getActionContext(productId); Integer count (Integer) actionContext.getActionContext(count); log.info(TCC Confirm 開始。xid{}, productId{}, count{}, xid, productId, count); // 1. 冪等性檢查查詢?nèi)罩颈砣绻搙id和branchId已經(jīng)執(zhí)行過confirm則直接返回true // if (tccLogService.isConfirmed(xid, branchId)) { return true; } // 2. 執(zhí)行真正的扣減將凍結(jié)的庫存清零總庫存減少 int updateCount inventoryMapper.confirmDeduct(productId, count); if (updateCount ! 1) { // 這里可能因為Try階段數(shù)據(jù)被篡改等原因失敗需要告警和人工介入 log.error(TCC Confirm 失敗xid{}, xid); // 通常Confirm不允許失敗失敗后應(yīng)不斷重試直到成功??蚣軙卦?。 throw new RuntimeException(Confirm扣減庫存失敗); } // 3. 更新日志表狀態(tài)為 commit // tccLogService.updateStatus(xid, branchId, commit); log.info(TCC Confirm 成功。xid{}, xid); return true; } Override Transactional(rollbackFor Exception.class) public boolean cancel(BusinessActionContext actionContext) { String xid actionContext.getXid(); String productId (String) actionContext.getActionContext(productId); Integer count (Integer) actionContext.getActionContext(count); log.info(TCC Cancel 開始。xid{}, productId{}, count{}, xid, productId, count); // 1. 冪等性檢查查詢?nèi)罩颈砣绻搙id和branchId已經(jīng)執(zhí)行過cancel則直接返回true // if (tccLogService.isCancelled(xid, branchId)) { return true; } // 2. 執(zhí)行取消操作釋放凍結(jié)的庫存 int updateCount inventoryMapper.cancelDeduct(productId, count); if (updateCount ! 1) { // Cancel失敗也需要重試。但這里有個“空回滾”問題需要處理見下文。 log.error(TCC Cancel 失敗xid{}, xid); throw new RuntimeException(Cancel釋放庫存失敗); } // 3. 更新日志表狀態(tài)為 cancel // tccLogService.updateStatus(xid, branchId, cancel); log.info(TCC Cancel 成功。xid{}, xid); return true; } }實現(xiàn)要點與坑點數(shù)據(jù)庫操作Try階段是凍結(jié)Confirm是扣減凍結(jié)值Cancel是釋放凍結(jié)值。這三個操作必須是冪等的。這意味著即使網(wǎng)絡(luò)超時導(dǎo)致TC重復(fù)調(diào)用執(zhí)行多次也不會對數(shù)據(jù)狀態(tài)產(chǎn)生錯誤影響。上面的代碼通過“冪等性檢查”和“基于狀態(tài)的更新”如update table set frozen frozen - #{count} where product_id #{id} and frozen #{count}來保證。業(yè)務(wù)上下文BusinessActionContext是框架在Try階段幫你保存的參數(shù)包在Confirm/Cancel階段自動注入。務(wù)必用BusinessActionContextParameter注解標(biāo)記所有Cancel階段需要的參數(shù)。本地事務(wù)每個TCC方法prepare, commit, cancel都標(biāo)注了Transactional。這是因為每個階段本身可能包含多個數(shù)據(jù)庫操作需要保證其原子性。Seata的全局事務(wù)是由這些本地事務(wù)組合而成的。日志表強(qiáng)烈建議建立一張獨立的TCC事務(wù)日志表。記錄xid全局事務(wù)ID、branchId分支事務(wù)ID、業(yè)務(wù)鍵、狀態(tài)try/commit/cancel、創(chuàng)建時間。它的作用巨大冪等控制在Confirm/Cancel前先查日志避免重復(fù)執(zhí)行。問題排查當(dāng)出現(xiàn)異常時可以通過日志還原事務(wù)執(zhí)行鏈路。防懸掛配合“空回滾”檢查。4. 發(fā)起與管控全局事務(wù)TM的角色庫存服務(wù)的TCC接口準(zhǔn)備好了現(xiàn)在需要在訂單服務(wù)事務(wù)管理器TM中發(fā)起并管理這個全局事務(wù)。在訂單服務(wù)的業(yè)務(wù)方法上使用GlobalTransactional注解即可開啟一個Seata全局事務(wù)。Service public class OrderServiceImpl implements OrderService { Autowired private InventoryTccAction inventoryTccAction; // 通過Feign或Dubbo引入的遠(yuǎn)程TCC接口代理 Autowired private OrderMapper orderMapper; Override GlobalTransactional(name createOrder, timeoutMills 60000, rollbackFor Exception.class) public Order createOrder(OrderDTO orderDTO) { // 1. 創(chuàng)建訂單本地事務(wù) Order order new Order(); // ... 設(shè)置訂單屬性 orderMapper.insert(order); // 2. 調(diào)用庫存服務(wù)執(zhí)行TCC Try階段 BusinessActionContext context new BusinessActionContext(); context.setActionName(inventoryTccAction); // 這里實際是通過RPC框架如Feign調(diào)用了 inventoryTccAction.prepare(context, ...) boolean tryResult inventoryTccAction.prepare(context, orderDTO.getProductId(), orderDTO.getCount()); if (!tryResult) { throw new RuntimeException(庫存預(yù)留失敗); } // 注意Try階段只是預(yù)留資源訂單創(chuàng)建和庫存預(yù)留都未最終提交。 // 3. 這里可以繼續(xù)調(diào)用其他TCC服務(wù)比如扣減積分、優(yōu)惠券... // 如果所有Try都成功GlobalTransactional 注解的方法正常結(jié)束Seata會自動觸發(fā)所有參與者的Confirm階段。 // 如果此處拋出異常Seata會自動觸發(fā)所有參與者的Cancel階段。 return order; } }TM端的關(guān)鍵點GlobalTransactional這是TM的標(biāo)識。它會在方法開始時向TC申請一個全局事務(wù)IDXID并將其通過線程上下文傳播到所有遠(yuǎn)程調(diào)用中。超時控制timeoutMills很重要。它定義了整個全局事務(wù)的超時時間。如果超過這個時間事務(wù)還未完成所有分支未到達(dá)終態(tài)TC會主動發(fā)起回滾。需要根據(jù)業(yè)務(wù)鏈路的復(fù)雜度合理設(shè)置。異?;貪L默認(rèn)情況下只有RuntimeException和Error會觸發(fā)回滾。如果你希望受檢異常也回滾需要使用rollbackFor屬性指定。RPC調(diào)用調(diào)用inventoryTccAction.prepare看起來是本地調(diào)用但實際上它應(yīng)該是一個遠(yuǎn)程服務(wù)的代理。你需要通過Feign或Dubbo將InventoryTccAction接口暴露為遠(yuǎn)程服務(wù)并在訂單服務(wù)中通過FeignClient等方式引入。Seata的TCC組件會自動攔截這個調(diào)用將其注冊為一個分支事務(wù)到TC。5. 生產(chǎn)環(huán)境避坑指南空回滾、冪等與懸掛如果只是跑通Demo上面的知識就夠了。但一旦上生產(chǎn)你會遇到幾個經(jīng)典的“坑”。不處理好它們分布式事務(wù)的可靠性無從談起。5.1 空回滾Empty Rollback問題描述一個分支事務(wù)的Try方法因網(wǎng)絡(luò)超時等原因根本沒有執(zhí)行但TM卻發(fā)起了全局回滾導(dǎo)致TC調(diào)用了該分支的Cancel方法。后果Cancel方法執(zhí)行了“釋放凍結(jié)資源”的操作但Try根本沒凍結(jié)過任何資源。這可能導(dǎo)致數(shù)據(jù)不一致比如庫存被錯誤地增加了。解決方案在Cancel方法中必須進(jìn)行空回滾判斷。Override public boolean cancel(BusinessActionContext actionContext) { String xid actionContext.getXid(); Long branchId actionContext.getBranchId(); // 1. 查詢事務(wù)日志表判斷Try是否執(zhí)行過 TccLog tccLog tccLogService.getByXidAndBranchId(xid, branchId); if (tccLog null) { // Try沒執(zhí)行過是空回滾 log.warn(收到空回滾請求xid{}, branchId{}. 插入一條取消記錄防止懸掛。, xid, branchId); // 插入一條狀態(tài)為‘cancel’的記錄目的是為了“占位”防止后續(xù)的懸掛問題 tccLogService.insertCancelLog(xid, branchId, productId, count); return true; // 空回滾直接返回成功 } // 2. 如果已經(jīng)執(zhí)行過Cancel冪等返回 if (cancel.equals(tccLog.getStatus())) { return true; } // 3. 正常執(zhí)行Cancel邏輯... }核心就是Cancel時檢查Try是否已執(zhí)行。沒執(zhí)行過就是空回滾記錄一條Cancel日志后直接返回不執(zhí)行業(yè)務(wù)邏輯。5.2 冪等控制Idempotence問題描述由于網(wǎng)絡(luò)抖動或TC重試機(jī)制Confirm或Cancel接口可能會被重復(fù)調(diào)用。后果如果不做冪等重復(fù)的Confirm會導(dǎo)致資源被多次扣減重復(fù)的Cancel會導(dǎo)致資源被多次釋放。解決方案利用事務(wù)日志表實現(xiàn)冪等。在Try成功后插入一條狀態(tài)為try的記錄。在Confirm/Cancel執(zhí)行前先查日志。如果狀態(tài)已經(jīng)是commit/cancel則直接返回成功。執(zhí)行完Confirm/Cancel業(yè)務(wù)邏輯后更新日志狀態(tài)為commit/cancel。所有數(shù)據(jù)庫更新操作盡量使用帶狀態(tài)的更新語句例如-- Confirm: 扣減凍結(jié)值同時確保凍結(jié)值足夠 UPDATE inventory SET frozen frozen - #{count}, total total - #{count} WHERE product_id #{productId} AND frozen #{count}; -- Cancel: 釋放凍結(jié)值同時確保凍結(jié)值足夠 UPDATE inventory SET frozen frozen - #{count}, available available #{count} WHERE product_id #{productId} AND frozen #{count};這樣即使重復(fù)執(zhí)行只要條件不滿足影響行數(shù)就是0不會破壞數(shù)據(jù)。5.3 懸掛Hanging問題描述空回滾發(fā)生后之前被阻塞的Try請求終于到達(dá)了服務(wù)端并執(zhí)行成功。后果Try在Cancel之后執(zhí)行導(dǎo)致資源被凍結(jié)但再也沒有Confirm或Cancel來釋放它了因為全局事務(wù)已結(jié)束造成資源永久鎖定。解決方案在Try方法中進(jìn)行懸掛判斷。Override public boolean prepare(BusinessActionContext actionContext, String productId, Integer count) { String xid actionContext.getXid(); Long branchId actionContext.getBranchId(); // 懸掛檢查在執(zhí)行業(yè)務(wù)前先查日志 TccLog tccLog tccLogService.getByXidAndBranchId(xid, branchId); if (tccLog ! null cancel.equals(tccLog.getStatus())) { // 發(fā)現(xiàn)已經(jīng)有一條Cancel日志說明發(fā)生了空回滾且Cancel先于Try到達(dá) log.warn(檢測到懸掛Try方法被拒絕執(zhí)行。xid{}, branchId{}, xid, branchId); return true; // 或者拋出一個特定的異常讓TM感知 } // ... 正常的Try業(yè)務(wù)邏輯 // 執(zhí)行業(yè)務(wù)后插入狀態(tài)為‘try’的日志 tccLogService.insertTryLog(xid, branchId, productId, count); return true; }核心是Try執(zhí)行前檢查是否已有對應(yīng)xid和branchId的Cancel記錄。如果有說明是懸掛應(yīng)拒絕執(zhí)行Try業(yè)務(wù)邏輯??栈貪L、冪等、懸掛這三個問題是TCC模式在生產(chǎn)環(huán)境落地必須解決的“三座大山”。解決它們的核心工具就是那張TCC事務(wù)日志表。通過它記錄狀態(tài)所有操作都變成“先查后改”的模式從而保證最終一致性。6. 進(jìn)階話題嵌套調(diào)用、并發(fā)與監(jiān)控解決了基本可靠性問題我們再看一些更復(fù)雜的場景。6.1 嵌套的TCC調(diào)用有時候一個TCC服務(wù)內(nèi)部需要調(diào)用另一個TCC服務(wù)。比如“創(chuàng)建訂單”事務(wù)中調(diào)用“庫存服務(wù)”的TCC接口而“庫存服務(wù)”的Try操作里又需要調(diào)用“倉儲服務(wù)”的TCC接口來鎖定庫位。Seata是支持這種嵌套的。關(guān)鍵在于XID的傳遞。只要確保RPC框架如Dubbo、Feign的過濾器正確地將當(dāng)前線程上下文中的XID傳遞到下游服務(wù)Seata就能自動識別并管理這個嵌套分支事務(wù)。它會形成一個調(diào)用樹TC會確保所有分支包括嵌套的一起提交或回滾。在代碼上不需要特殊處理只需確保每個服務(wù)都正確引入了Seata客戶端并配置了事務(wù)組。6.2 高并發(fā)下的資源競爭在TCC的Try階段我們經(jīng)常要“凍結(jié)”資源。在高并發(fā)場景下對同一條記錄比如同一商品庫存的凍結(jié)操作可能發(fā)生沖突。解決方案數(shù)據(jù)庫悲觀鎖在Try方法的SQL中使用SELECT ... FOR UPDATE先鎖定記錄再執(zhí)行更新。但這會嚴(yán)重影響性能。樂觀鎖在庫存表中增加一個版本號字段。Try操作時使用UPDATE ... SET frozen frozen #{count}, version version 1 WHERE id #{id} AND version #{oldVersion}。如果更新失敗影響行數(shù)為0說明發(fā)生了并發(fā)沖突可以重試或直接返回失敗。分布式鎖在進(jìn)入Try業(yè)務(wù)邏輯前用Redis或Zookeeper對業(yè)務(wù)鍵如lock:inventory:{productId}加鎖。這是最常用的方式但要注意鎖的粒度、超時時間和釋放的可靠性。我個人更傾向于“樂觀鎖 有限重試”或“細(xì)粒度分布式鎖”的組合。在庫存凍結(jié)場景可以在應(yīng)用層用Redis分布式鎖控制同一商品ID的并發(fā)然后在數(shù)據(jù)庫層用樂觀鎖做最終保障。6.3 監(jiān)控與排查當(dāng)TCC事務(wù)出現(xiàn)問題時排查鏈路比普通調(diào)用復(fù)雜。你需要關(guān)注幾個點Seata TC控制臺訪問http://tc-server:7091查看全局事務(wù)列表。你可以看到每個全局事務(wù)的XID、狀態(tài)、開始時間、耗時以及其下所有分支事務(wù)的狀態(tài)。這是最直觀的定位工具。業(yè)務(wù)日志在TCC接口的三個方法中務(wù)必打印包含XID和BranchId的日志。這是串聯(lián)整個事務(wù)鏈路的唯一標(biāo)識。通過ELK或類似的日志聚合系統(tǒng)用XID可以輕松搜出該事務(wù)在所有微服務(wù)中的執(zhí)行痕跡。事務(wù)日志表你業(yè)務(wù)庫里的那張TCC日志表是最終的證據(jù)。通過它可以清楚地看到每個分支事務(wù)走到了哪一步try/commit/cancel以及執(zhí)行時間。如果發(fā)現(xiàn)一個事務(wù)長時間處于“try”狀態(tài)那很可能發(fā)生了懸掛如果大量“cancel”日志沒有對應(yīng)的“try”日志那可能是空回滾頻發(fā)需要檢查網(wǎng)絡(luò)或超時配置。Metrics監(jiān)控Seata客戶端會暴露一些Metrics需要額外配置比如全局事務(wù)提交/回滾次數(shù)、分支事務(wù)注冊次數(shù)、各種模式的耗時等??梢越尤隤rometheus和Grafana對分布式事務(wù)的健康度進(jìn)行監(jiān)控和告警。7. 總結(jié)與個人體會走完這一整套流程從環(huán)境搭建、代碼編寫到填坑進(jìn)階你應(yīng)該對Seata TCC模式有了比較立體的認(rèn)識。它不是銀彈需要你付出額外的設(shè)計設(shè)計TCC接口和資源預(yù)留邏輯和編碼實現(xiàn)三階段方法成本。但換來的是對復(fù)雜業(yè)務(wù)場景更強(qiáng)的掌控力以及對異構(gòu)數(shù)據(jù)源的支持。我個人在項目中的體會是設(shè)計階段多花時間在寫代碼前一定要和業(yè)務(wù)方、架構(gòu)師一起把每個分布式事務(wù)的邊界、每個參與服務(wù)的Try/Confirm/Cancel具體操作畫清楚。特別是資源預(yù)留的粒度是鎖整條記錄還是鎖部分字段這直接影響并發(fā)性能。日志表是生命線那張小小的TCC事務(wù)日志表在開發(fā)和排查階段的價值遠(yuǎn)超你的想象。一定要建而且要設(shè)計好查詢索引xid, branch_id, status, create_time。超時時間要合理全局事務(wù)超時時間timeoutMills不能設(shè)得太短否則長鏈路業(yè)務(wù)容易超時回滾也不能設(shè)得太長否則出問題時資源鎖定時間過長。需要根據(jù)壓測和線上監(jiān)控來調(diào)整。做好降級和熔斷分布式事務(wù)框架本身也可能成為故障點。如果TC集群不可用你的業(yè)務(wù)應(yīng)該有降級方案比如切到基于消息的最終一致性或者記錄異常工單人工處理。在調(diào)用TCC服務(wù)時也要配置好Feign/Dubbo的超時和熔斷避免一個分支事務(wù)的阻塞拖垮整個全局事務(wù)。最后TCC模式的思想——先試探后確認(rèn)——其實是一種非常普適的解決分布式問題的思路。即使未來你不使用Seata這種通過業(yè)務(wù)日志和狀態(tài)機(jī)來實現(xiàn)最終一致性的模式在設(shè)計和處理復(fù)雜業(yè)務(wù)邏輯時依然會給你帶來啟發(fā)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
色综合色色| 久久99免费视频网站| 这里只有视频精品| 亚洲免费av观看| 碰碰91| 欧美成人无码一区二区三区| 激情婷婷九月| 青青久久91| 激情六月丁香| 人人摸人人干| 五月开心深爱激情网| 96精品久久久久久久久| 99热这里只有精品33| 91色色色视频| 少妇出轨做爰高潮A片| 欧美综合激情丁香五月六月婷| av网址在线| 亚洲免费成人电影AV| 另类图片五月天| 99热精品免费| 五月天激情国产综合婷婷| 丁香五月婷婷黑人妻黄色电影院| 五月天久久网站| www.色五月| 六月婷婷五月丁香| 五月欧美丁香在线观看| 可以免费看AV网站| 99视频这里只有久久精品 | 夜夜骑日日夜夜| www91精品| 国产精品人人做人人爽人人添| 99精品综合视频| 五月丁香成人| 99秘 在线| yellow视频在线观看91| 久久婷婷国产| 日韩一级片| 成人精品免费在线观看| 亚洲最大视频网站| 色开心五月丁香| 99re欧美精品| 精品操逼一区二区| 五月激情婷婷国产精品久久久久久| 99热在线观看| 久热99狠| 国产色视频网站2| 亚州第一黄网| 色婷婷影| www.五月天婷婷.com| 91人在线观看| 午夜婷婷久久 | 91丨九色熟女丨首页| www五月婷婷88导航| 综合色久| 婷婷五月综合免费在线| 7777精品伊人久久久大香线蕉最新版| 久久久久亚洲AV成人无码电影| 98热精品| 九九碰九九爱97| 97人人看| 丁香六月 人妻| 五月色情网| 五月天婷婷丁香花| 六月丁香五月天| 婷婷十月丁香| 婷婷五月天亚洲五码| 99免费热视频在线| www夜夜| 人人爱人人草| 五月丁香婷婷激情图片| 超碰在线精品| 亚洲精品色色色| 天天综合亚洲综合| 色色色在线观看| 99视频久久| 久久丁香五月天| www激情| 久久综合婷婷| 五月婷婷丁香网| wWW九九在线播放| 丁香婷婷色色| 激情五月五月五月婷婷| 超碰人人干| 4399成人黄A片| 婷婷爱五月| 丁香五月天堂婷婷| 婷婷丁香成人| 五月婷婷丁香社区| 久久久久这里只有精品| 亚洲国产成人AV在线| 涩涩婷婷五月| 狠狠色 综合色区| 欧美色爱五月天| 婷婷五月综合在线| 免费观看高清无码| 婷婷五月天综合蜜桃| 亚洲 六月 综合| 永久免费视频| 国内久久婷婷| 天天摸夜夜爽天天做| 五月综合缴情网| 大香蕉综合网| 9月色婷婷| 婷婷综合成人五月天| 99er精品视频| 日本欧美成人片AAAA| 91丨人妻丨国产丨丝袜| 伊人丁香花综合影院| 可以看的AV| 五月激情天| 国产精品24r| 大香蕉伊人99| 色五月婷婷五月天| 亚洲国产色婷婷| 婷婷亚洲日本| 日韩黄黄| 97久久精品| 这里只有精品视频看看| 狠狠爱综合网| 九九九精品视频免费观看| 思思热精品在线视频| 五月亭亭开心网| 97超碰99热99| 亚洲色色香蕉| 丁香五月婷婷综合激情啪啪啪啪啪啪啪 | 九九色精品| 这里只有免费的精品| 欧美超级视频97| 激情五月丁香五月综合| 高清无码一区二区三区四区| 这里只有精品视频| 综合五月丁香久久| 亚洲色五月婷婷| 婷婷激情五月天小说| 国产精品五月丁香| 中文字幕按摩做爰| 五月激情另类| 99久久国产宗和精品1上映| 人妻激情视频| 99精品视频免费观看| www.99色在线| 丁香五月六月婷婷殴美综合| 五月天大香蕉视频| 久青草影院| 久久婷婷五月综合色丁香花| 九九热这里只有精品31| 五月丁香婷婷激情图片| 亚洲第79页| 日韩黄色影院| 亭亭五月天成人| 9精品久久999| 五月丁香六月激情欧美综合| 99热热热国产超碰| 97视频91| 99热香港| 伦乱人妻| 婷婷精品免费久久| 丁香五月综合久久八| 激情久久久| 中文色婷婷| 91激情五月开心| 亚洲成人影视在线| OUMEIRIHANCHENGREN| 思思久热| 超碰com| 亚洲va综合va国产va中文| 97亚洲精品| 日本操逼九九九九58日本操逼| 五月天婷婷狂暴白浆| 六月丁香婷婷开心综合基地| 久久月天堂| 2025天天操| 嫩草哈哈操| 婷婷狠狠操| 婷婷九月狠狠色| 久草视频一,二三四| 99久久97久久欧美综合网| 五月丁香色综合| 99亚洲视频| AV在线资源| 五月色丁香成人| 99ree6| 99热99热不卡| 91中文在线| 丁香五月自拍| 妻久久人久久| 亚洲中文无码成人| 丁香五月天天| 农村熟妇高潮精品A片| 九九在线免费观看| 性爱网五月天| 99欧美精品99日本精品| 五月婷亚洲精品AV天堂| 狠色狠色综合久久| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 六月婷婷久久| 国产,欧美,学生妹,视频| 深爱激情丁香五月| 色五月婷婷久久爱| 色婷亚洲五月丁香| 中文毛片无遮挡高潮免费| 天天摸夜夜夜| 久久er九九| 精品自拍99| 久久97| 综合性视频99| 97亚洲色 torrent magnet| 久久五月婷婷综合网| 天天爽,夜夜爽| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 玖色色综合| www.日日夜夜.com| 丁香五月天激情综合| 99视频内射三四| 激情五月天。| 婷婷色色五月| 99热这里是精品| 激情五月婷婷综合视频| 激情综合五月激情XXXX| 五月天久久综合| 五月天福利影院导航| 9999三级片| 国语精品探花| 婷婷六月中文字幕| 色七色九九| 国产视频福利| 人碰91| 日日影院 | 任你爽免费视频| 久久深爱激情网| 在线另类| 日韩操人| 大香蕉啪啪啪| 欧美一级色| 久久视频婷婷| 九九综合网色全集 | 欧美久久久久久久久中文字幕| 久久xx| 六月婷久久| 婷婷五点亚洲| 欧美色五月天| 美女丁香五婷婷| 五月天婷婷开心| 777色婷婷爱五月| 久久伊人9| 婷婷中文网站| 婷婷色中文| 丁香五月婷婷高清| 五月天伊人久久| 伊人在线另类| 五月婷天堂视频| 久久激丁香| www.婷婷| 狠狠色综合五月人人| 国产日比| 综合久久丁丁香婷| 色婷婷色综合| 久久人人九| 超碰爱爱爱| 婷婷五月天网址| 大香蕉狠狠爱主页| 亚洲成人网在线观看| 六月丁香狠狠爱| 五月丁香亭亭AV女优| 91色色色视频| 亚洲av成人在线| 久久总和99| 六月婷久久| 丁香激情久久| 久久九九免费大视频| 色五月丁香六月资源站| 亚洲日韩26uuu| 人人爽人人爽人人爽人人爽| www,婷婷| 色色免费网站| 亚洲亚洲人成综合网络| av首页在线| 极品嫩草| 激情五月综合| 精品成人无码A片观看香草视频 | 丁香久久在线| 色五月激情综合| 欧美在线97| www.粉嫩av.com| 91艹人| 亚洲色综久久五月| 婷婷五月天激情综合| 婷婷丁香五月亚洲| 国产麻豆视频| 欧美精产国品一二三区| 亚洲丁香五月美女| 色在线99| 变态 另类 在线| 9久热在线精品| 九九精品综合| 激情小说之五月| 无码人妻一区| 丁香五月天社区| 亚洲久久天堂| 99惹在线精品免费观看| 亚洲色爱综合| 亚洲人妻AV| 久久婷婷超碰| 99视频超级精品| 色丁香久久久| 色五月激情综合网| 婷丁香五月天| 5月丁香六月婷婷| 99精品久久久久| 99热这里有精品| 婷婷综合偷拍| 99热日本| 色婷婷色99国产综合精品| 午夜AV网| 日日色五月天| 丁香九月久久| 免费AV在线网址| 99这里有精品视频3| 婷婷五月天成人综合网| 极品少妇XXXX精品少妇偷拍| 五月天婷婷免费| 色综合性视频| 日本三级日本三级99| 97人人操人人拍| www.色五月| 婷婷开心久久| 五月丁香本色在线观看| 色婷婷中文字母五月丁香| 九九成人视频| 久操大屁股女人av| 天天色综合网1| 九九热这里| 99精品高潮| 亚洲精品性色| 国产肥白大熟妇BBBB视频| 伊人婷婷综合| 色色色五月婷| 91岛国片| 婷婷性爱五月天| 国产午夜精品一区二区三区四区| 久久五月视频| 五月天婷婷基地| AV成人在线播放| 丁香五月停停av| 五月婷丁香| 精品久热| 九色视频91| 99超级碰免费视频| www.狠狠| 天天狠天天狠| 亚洲人妻av伦理| 九九热九九| 任你搞网站| 青青艹b| 久久婷婷五月激情网站| 成人丁香婷婷| 激情综合色| 免费视频WWW在线观看网站| 中文字幕AV在线播放| 99热成人精品网站| 日本美女上人| 伊人五月天| 丁香五月性| 大香蕉婷婷丁香天堂AV| 综合色播| 超碰v| tingting五月天亚洲| 日韩成人电影AV| 99热这里只有精品268| 九月婷婷综合| 成人羞羞啪啪 全 视频| 欧美色片中文字幕久久久久| 色色网站| 另类小说五月天| 色五月婷婷久久| 婷婷五月天色色| 婷婷激情小说| www,五月丁,com| 久久黄色片| A网在线欧洲| 欧美色色色色色色色色| 五月丁香婷婷色色| 夜夜噜夜夜奇| 四季AV综合网| 天天色粽合合合合合合合| 秋霞黄色一级久久| 久婷狼色诱惑在线| 色六月婷婷| 超碰人人色| 九九热AV| 天天色天天操天天射| 婷婷丁香五月色偷偷| 91一起艹| 日韩av干| 91丨九色丨白浆秘| 青草视频在线播放| 热99在线精品| 2023天天日夜夜爽| 色噜噜狠狠色综合网| 色色色色色色色色综合网| 视色网在线播放| 日本在线观看aaa 99| 婷婷五月成人| 婷婷激情肏屄网| 亚洲无码色| 五月天激情久色| 激情五月天福利| 日本色道视频网站| 婷婷色色欧美| 亚洲小说五月婷婷| 久久日九九| 人妻久久久久久久 | 久久久com| 丁香六月色婷婷综合| 色婷婷先锋| 人人操av| 欧美五月婷婷| 热热久久99| 99超级碰免费视频| 91久草五月天婷婷| 久久大大香| 婷婷激情综合| 久久怡红院| 五月开心六月婷婷在线播放网站| 99爱爱网| Av在线不卡一区| 五月天综合色| 婷婷色操| 天天狠狠干| www.激情五月天.com| www.九月婷婷丁香.com| 久草热8精品视频在线观看| 久久婷婷内射| 五月丁香久久| 舔色婷婷| 日日狠狠久久偷偷四色综合免费| 久久综合网免费视频| 91|九色|动漫| www.com任你艹| 97色婷婷| 国产精品美女久久久久AV超清| 激情六月婷婷| www.天天日| 九九热这里只有国产精品| 激情综合网丁香| 日本人人草草| 色色综合激情| 毛v一区二区视频| 伊人五月婷| 婷婷大香蕉| 玖玖色综合网| 激情人妻综合| 五月色丁香| 精品无吗va视频免费观看| 久香草视频在线观看| 激情影院内射| 激情婷婷丁香五月天小说| 99人人干人人| 婷婷丁香五月天影院 | XX色综合| www.97视频| av九九| 综合色播| 99热这里有精品| 色色操| 777精品久无码人妻蜜桃| 久久ww| a网站免费观看| 久久ww| 五月丁香五月婷婷| 99在线精品免费视频| 国产精品色色| 欧美成人AAA片一区国产精品| 五月综合色| 成人国产欧美大片一区| 色色婷婷综合| 日本三级毛片| 色情婷婷| 天堂婷婷丁香六月网| 六月丁香激情综合| 色色色热热热| 亚洲热视频在线| 婷婷五月天色播| 五月丁香影视| 五月丁香婷婷狠狠操| 国产精品黑丝| 另类精品视频在线观看| 思思热国产视频| 亚洲五月婷婷在线| 99re思思热久久| 激情亚洲婷婷| 婷婷五月花| 伊人久久丁香五月91| 激情国产五月| 99自拍视频网站| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 五月婷婷在线观看黄| 中文字幕,综合,91| 99视频内射三四| 亚洲视频一区| 正宗黄色毛片| 99热这里只有精品亚洲| 天天舔天天操| 天天干天天干天天干| 大香蕉视频婷婷| 婷婷五月色图| 色五月激情基地| 亚洲男女激情| 日韩免费视频| 99热精品观看| 五月丁香五月天现场视频| 很很干天天干| 91九九| 丁香五月激情五月| 婷婷五月亚洲激情| 无码99| 激情综合色| 丁香五月婷婷综合激情啪啪啪啪啪啪啪| 超碰二区| 五月天激情无码| 色色婷| 国产免费一区二区三州老师F1……| 久久99精品久久久久子伦| 婷婷六月综合在线| 婷婷激情综合网| 丁香六月婷婷激情| 婷婷五月天Av| 夜夜撸天天操| 久久亚洲天堂| 丁香五月综合网亚洲综合欧美狠狠| 99久久婷婷五月综合| 久在线88综合| xxxx五月激情| 超碰成人电影| 婷婷爱五月| 五月丁香色五月| 九九色热| 狠狠色97| 人人播| 五月天丁香久久综合 | va婷婷在线免费观看| 中文字幕人妻在线| 久热久操久热久草国产91| 久久狠狠色| 婷婷久久综合久| 青青操丝袜美腿| 五月开心网| 国产永久一黄| 天堂草在线观| 亚洲日韩久久婷婷伊人| 激情小说五月天中文字幕| 色欲天天综合网| 色色丁香五月| 五月婷婷五月| 97伊人综合婷婷| 午夜婷婷五月天| AA片在线观看视频在线播放| 性爱先锋AV| 久久久91| 亚洲av网站| 狠狠色五月| 伊人大香蕉在线视频| 思思热精品在线观看| 日韩ww| 久久五月天激情视频| 五月丁香六月激情| 婷婷色五月天第7色| 婷婷丁香18| 99热国产| 综合久久婷婷| 伍月激情天| 丰满老熟妇BBBBB搡BBB| 九九热这里有精品23| AA丁香综合激情| 99欧美| 亚洲国产99| 性色欲情 网站| 狠狠草狠狠草| 亚州激情网站无码| 成人无码精品1区2区3区免费看| 玖玖资源部在线播放| 97人人干| 亚洲婷婷成人五月天| 久久久人妻系列| 九九九九热99超碰| 青草五月天| 九月激情综合婷婷| 婷婷五月色| 色综天天综合| 日本色色影片| 天天操天天曰| 91色久| 国产午夜精品AV一区二区麻豆| 三区激情四射av| 激情婷婷五月丁香啪啪啪| 久久婷婷五月激情网站| 中文字幕+中文在线| 婷婷九月亚洲| www.minyis.com【JT】实力收量可预付TG@LXSPSW8| www.zbzhongsen.com| 开心五月婷婷激情网| Y11111111111少妇电影院| 99热6色| 婷婷操超碰| 婷婷综合激情| 狠狠操狠狠操AV| 超碰在线视屏| 久久久亚洲精品一区二区三区浴池| 79色色免费| 成人在线视频男人的天堂4399| 日韩久热| 天天色天天爱天天爽| 激情五月天色色色| 丁香五月手机在线| 葵花AV在线| 色你久久| 国产26uuu视频| 天堂爱啪啪| 日日爽夜夜爽| 香蕉操亚洲| 国产又黄又爽又激情不遮挡视频在线观看| www,久久久人人| 久久机热/这里只有精品| 婷婷五月天a| 激情六月婷婷| 亚洲成AV人片在线观看| 99这里只有精品视频| 99热这里只有精品在线播放 | 精品在线网站| 五月天婷婷Av| 五月丁香亭亭| 无码人妻激情| 99爱视频在线播放| 岛国资源网| 天天久久狠狠色综合| 丁香五月婷婷av影院| 91碰碰| 人人爽欧美婷婷久久久五月丁香| 五月天 综合 在线| 亚洲av网站| 玖色色综合| 中文字幕网伦射乱中文| 婷婷激情性爱| 婷香五月激情视频| 日日爽天天| 综合激情五月丁香9999久久精| 日本久久人| 久操香蕉| 这里只有国产精品在线| 超碰在线国产| 久久五月天色婷婷| www.五月婷| 国产成人AV不卡| 九九热在线精品视频| 久久精品99久久久久久| 开心激情网五月天| 婷婷五月天免费视频在线观看| 操操操www.com| 亚洲精品国产成人AV在线| 综合五月丁香97| 精品自拍97| 色啪久| 色欲一区二区三区精品A片| 日本色色色| 久久色五月| 国产精品色婷婷AV综合色色| 亚洲情a| 色婷婷丁香中文在线播放| 日本女天天爽| 思思热99er在线视频| 丁香五月激情宗合网| 色色色婷婷五月| 538任你爽| www狠狠| WWW,五月| 五月丁香久| A在线观看| 久99久精品视频| 色色色五月婷| 色色五月丁香婷婷| 欧美极品999| 九九综合视频在线观看| 99热欧| 丁香五月狠狠综合欧美| 综合六月激情婷婷| 91人人爽久久涩噜噜噜| 色五月婷婷五月天| www.色综合| 色五月婷婷丁香五月| 久久激情五月| 牛色色碰| 91人无码久久久久久| 丁香六月青青草| 成人视频在线免费播放| 久热9| 99视频精品视频| 色婷婷五月婷婷五月婷婷五月| 婷婷爱婷婷| 开心激情网在线| 五月天综合激情网| 超碰久热| 99热欲| 26uuu丁香婷婷五月| 久久九九99| 婷婷性爱无码视频| 久久婷婷亚洲| 久久久久久久人妻| 久久全色| 91碰碰碰| 少妇人妻综合色6699| 五月天狠狠色| 国产亚洲精品AAAAAAA片| 日韩丁香涩| 亚洲乱码w在线观看| 久久久色婷婷五月天| 日本熟女一区二区| 丁香六月婷婷综合| 欧美槡BBBB槡BBB少妇| 二区成人视频| 丁香五月激情天AV无码| 99re这里只有精品视频了| 日本欧美国产| AⅤ网站在线看| 色爽九九| 婷婷五月精品中文字幕| 九九热九九| 淫视馆av三区| 激情五月天婷婷图| 5月丁香啪啪啪| 99色视频在线| 丁香五月大香蕉AV| 色婷婷丁香五月丁香| 久久超视频| 精品人妻在线免费观看| 超碰人人操人人干| 五月天激情小说欧美激情| 看片视频在线免费日产在线看| 99视频日韩| 免费AV黄在线播放| 香蕉狠狠爱视频| 激情婷婷激情在线不卡| 色婷婷中文字母五月丁香| 色亭亭五月天丁香综合AV - 百度 - 百度| 狠狠综合网| 丁香五月情| 欧美成人精品老美女噜噜噜| 成人AV在线电影| 超碰成人av| 26uuu国产激情视频| 日本狠狠色| 久青操| 婷婷噜噜| 激情亚洲五月| 丁香五月另类小说在线阅读| 久久久久激情| 天色综合网| 五月丁香六月激情啪| 国产精产国品一二三在观看| 欧洲亚洲免费视频9| 婷婷五月天视频亚洲| 色色色九九九五月婷婷| 婷婷九月激情| 五月开心网| 99ri视频| 五月丁香六月婷婷久久| 伊人色综合影院视频| 日日爽日日| 日本玖玖在线| 天天夜夜操| av婷婷六月丁香社区在线观看| 夜夜骑日日操| 99热这里只有精品99| 这里有精品99| 开心激情站| 丁香六月婷婷开心| 九九99精品| wWw色五月| 五月婷婷色色| 婷婷久久夜| 成人无码精品1区2区3区免费看 | 六月丁香好婷婷| 色色色色丁香| 五月婷婷六月基地| 热婷婷av| 99在线精品视频| AV成人在线播放| 热五月婷婷| 色综合久久综合中文综合网| 人人操97| 久久这里只精品66| 99re热视频这里只精品| 伊人五月网| 丁香五月婷婷综合激情啪啪啪| 激情婷婷五月社区| 久热超碰91| 91精品久久久久久| 青草性爱视频| 丁香婷婷狠狠97| 五月深爱激情网| 婷婷五月天丁香激情| 97丁香五月| 超碰在线99| 久久久久久久人妻| 五月天婷网| 亚洲午夜一区二区| 五月婷婷香| 色五月婷婷激情五月| 丁香九月激情在线视频| 激情五月天婷婷| 99精品国产在热久久| 丁香六月天| 97韩国久久电影院| 9有码中文| 大香蕉久操| 婷婷丁香人妻久久在线观看| 精品综合爱| 99精色| 激情婷婷丁香色五月| 97香蕉人人在线观看| 色婷婷亚洲婷婷| 五月天全国最大成人网| 激情婷婷五月天丁香| 成人av免费观看| 五月激情综合五月| 伊人三级激情| 欧美日综合| 操人妻视频91| 九九日本视频| 青青久久五月天丁香婷婷| 久久精品4| 99爱视频在线免费观看| 色娸娸综合网| 日本无码专区| 91九色国产| 噜噜噜精品欧美成人在线观看| 涩涩婷婷五月| 成人国产欧美大片一区| 91婷婷丁香五月| 丁香五月激情六月综合| 六月色激情| 日本色色影片| 我爱大香蕉| 丁香五月六月婷婷怡红院| 婷婷大香蕉| 色情五月| 成人中文网| 91热在线| 天天做天天爱天天要| 五月丁香色色综合| 国产亚洲99久久| 婷婷99狠狠躁天天久久久九九九| 最新久久网址| 丁香六月无码播放| 热这里只有精| 婷婷五月电影院| 久久婷婷五月综合色天| 色五月亚洲| 婷婷五月丁香久久| 亚洲va欧美va天堂v国产综合| 婷婷五月AA五月在线| 最新av在线观看| 九九色插| 国产偷人爽久久久久久老妇APP | 啪啪五月天啪啪| 五月婷婷激情综合| 久久色五月天| 九九精品re免费视频| 亚洲字幕AV一区二区三区四区 | 亚洲av午夜精品一区二区| 老美AA片| 超碰国产在线| 婷婷六月丁香五月| ww久久| 丁香婷婷社区| 激情五月天激情小说| 丁香色五月婷婷91桃色| 天天干天天日日| 久久最新色色色| 婷婷四色五月| 在线中文字幕视频| 超碰免费大香蕉| 成人AV中文字幕| 操人精品| 超碰99热精品| 亚洲人人操| 久久婷婷东京热大香樵| 人操人| 免费啪啪啪网站| 日本99婷婷| 性爱五月婷| 婷婷五月丁香综合桃花色网| 婷婷五月色综合香五月| 日韩在线看AV| 婷婷五月花.97| 久久人人添人人爽添人人片αV| 国产AV一区二区三区日韩| 专区无日本视频高清8| 久久综合婷婷| 风流少妇A片一区二区蜜桃 | 五月丁香六月婷婷精品| 久久五月天色婷婷| site:jszngf.com| 丁香久久AV| 亚洲99视频| 99热99re6国产在线播放| 99色最新在线视频网站| 夜夜夜夜夜骑撸| 天天干,夜夜爽| 性欧美日本| 狠狠干无码| 99色色网| 婷婷丁香六月天| 婷婷五月天丁香久久| 婷婷久久图片| 亚洲成人AV在线播放| 色婷五月| 伊人超碰| 狠狠摸狠狠摸| 激情九月婷婷| 久久久久久人妻| 亚洲天堂婷婷| 婷婷五月色惰| 亚洲国产精品成人免费一区久久久在线观看AAAA | 日韩一区二区A片免费观看| 九九成人电影婷婷| 丁香五月天婷婷91| 国产67194| 色婷婷五月天天天做| 色色COm| 97碰| 欧美 日韩 人妻 高清 中文| av不卡网站| 天堂中文国产| 久草五月天电影网| 久久机热/这里只有精品| 91操网| 午夜精品人妻无码一区二区三区| 五月婷婷欲色| 香蕉操亚洲| 五月丁香婷婷基地| 激情五月六月婷婷综合啪啪| 午夜激情五月天| 色五月色五天色情网| 99在线精品免费视频| 久久婷婷的综合色丁香五月| 久久综合爱| 欧美综合在线五月天色婷婷| 超碰猛烈的性猛交| 熟女少妇内射日韩亚洲| 玖玖99精品视频| 亚洲激情99| 欧美激情-区二区三区| Av九九| 蜜乳av一级av| 91男同| 天天摸色吧天天摸色吧| 日韩aaaaa| 亚洲欧洲小视频9| 中文人妻主播久久| 久久激情天堂| 日韩二区搞逼插逼毛片| 久操综合| 亚洲天堂aaa| 天天爽人人综合免费7799| 亚洲情欲久久| 久久婷婷五月草视频在线播放| A久久| 黄色国久久| 色婷婷影院| 五月婷婷啪啪| 伊人在线视频| 玖玖国产视频一区| 激情图片五月天| 日本一級黃色一級片| 91人人操.COM| 色婷婷五月天综合网| 色五月av| 久久天堂| 99无码黄色视频| 午夜精品人妻无码一区二区三区| 99九九在线精品热动漫| 五月停停激情网| 亚洲乱码日产精品BD| 日本97在线视频| 五月五婷婷| 综合色、色综合| 99国产小视频2013| 久久婷婷五月综合色奶水99啪| 激情综合文学| 丁香六月 婷婷六月| 国产综合婷婷| 毛片蕉地一二| 九六五月天婷婷| 97人人操人人干| 日韩无码专区| 婷婷五月天丁香社区| 啪啪五月婷婷| 国产色五月| 大战熟女丰满人妻AV| 9久热| 五月色网| www,com,五月色色| 五月丁香色| 婷婷丁香六月天激情四射网| 综合五月亭亭9| 久久激情视频| 六月色日韩| 99热九九热| 人人澡玖玖一| 亚洲高清在线| 色五月综合| 丁香六月色婷婷| 色999;丁香五月| 狼人久草| 秋霞黄色一级久久| 丁香六月婷婷综合| 5月丁香综合网| 97色干在线观看| 五月丁香婷婷伊人| 伊人激情综合| 久色资源| 激情亚洲婷婷| 亚洲区视频| site:xmssd.com| 99热久久这里只有精品| 深爱五月天婷综合| 五月久久丁香| 99re思思热久久| 久久视频婷婷| 婷婷在线精品| Av性爱网| 日韩国产在线精品| 激情五月婷婷色| 国产午夜精品一区二区| www.久久久久久久| 五月丁香爱婷婷深深| 欧美交换配乱吟粗大25P| 天天干天天操天天爱| 伊人成综合五月婷婷| 久久婷婷人人| 26uuu视频欧美| 久久综合久色欧美综合狠狠| 天天射夜夜骑| 特级操b片| 色爱亚洲| 婷婷五月天激情视频| 真实熟女-91九色| 国产成人综合在线| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | 久久99大全| 激情五月久久| 婷婷六月伊人| 亚洲天堂啪啪| 欧美三级A做爰在线观看| 亚洲综合婷婷六月丁香五月| 97干在线观看视频| 丁香五月天AV在线| www,99视频| 97人人操人人| 久久五月婷婷开心网| 色五月婷婷1| 激情久久久| www.99视频| 色色热99| 中文字幕天天干| 久久九九国产精品怡红院| 欧美日韩aaaa| 久久香蕉网| 丁香六月综合| 精品久久人妻| 亚洲成人人人操| 久久视频66| 免费AV在线网址| 国产精品国产成人国产三级| 六月婷婷五月天| 很很操96| 99九九热视频| 婷婷无五月无码视频| 五月停亭六月,六月停亭的英语| 婷婷综合激情五月综合| 97色热| 超碰自拍天堂| 丁香五月久久| 玖玖婷婷五月| 婷婷五月天激情综合网| 全亚洲最大的婷婷五月天网站COM| 婷婷9月天| 六月天婷婷| 久超超碰| 激情五月天开心总和网| 五月天婷a在线| 天堂综合久久| 色色色宗合网| 免费看欧美成人A片无码| 夜夜爱伊人| www天天爽| 亚洲综合视频一下| 男人的天堂999| 大香蕉婷婷丁香| 亚洲 成人 电影av在线观看| 婷婷五月天激情小说| 五月丁香啪啪激情| 五月婷丁香| 婷婷丁香五月天中文字幕| 另类色网| 狠狠干婷婷| 操比激情五月综合| 激情av网| 91在线人| 69天堂99| 99精品丁香五月| 疯狂做受XXXX高潮A片| 99操| 91婷婷在线| 99re在线视频| 日本丁香五月| 激情丁香图片| 99热精品免费在线观看| 色国产五月| 人人干天天舔| 久久这里只有精品5| AV在线免费播放| 第五婷婷伊人丁香色| 91啪啪啪啪| 亚洲AV另类| 久久人操-久草婷婷-成人AV| 色吊操色妞| 天堂网亚洲色图| 成人AV片播放| 雪千夏麻豆| 国产av网| 日本波多野结衣视频| JlZZJlZZ8JlZZ亚洲熟女| 日韩黄色影院| www九九免费视频| 婷婷在线五月综合| www.婷婷久久五月天| a级毛片一区二区免费视频| 婷婷色影音天| 九色成人AV在线| 人妻Av在线| 伊人玖玖综合| 国产婷婷五月天| 九月丁香亭亭| ..真实国产乱子伦对白在线_欧 | 亚洲激情五月婷婷日日| 美女婷婷六月色| 亚洲AAA| 天天色综合综合| 伊人啪啪网| 日本婷婷五月天| 99视频九九热| 激情综合五月| 东京热免费视频| 亚洲成人AV高清字幕| 五月九九综合| 一本色道久久88加勒比—| 婷婷激情视频| 欧洲99视频在线| 五月婷婷激情色情网| 开心五月婷| 五月丁香婷婷深深爱| 九九99免费视频| 国外亚洲成AV人片在线观看| 国产黄大片在线观看画质优化| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 婷婷深爱网| 五月在线| 久久婷婷视频| 少妇大叫太大太粗太爽了A片| 综合六月久久| 五月丁香综合成人社区| 色性综合| 人人干AV| 少妇人妻人伦A片| 五月婷婷开心网| 激情五月天天| 激情视频91| 综合激情五月综合激情五月激情1| 丁香色情五月综合网站| 久久久无码精品成人A片小说| 天天天天干| 久久日婷婷| 久久人操| 蜜桃五月天色| 激情伊人| 国产av一区二区三区| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 欧美在线视频99| 五月丁香无码视频| 欧美性爱五月天| 热99色| 六月99天天婷婷激情综合| 色五月婷婷DVD| 99啪| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 欧美成人热| 色屌丝中文字幕| 色综合99| 狠狠99| 丁香五月骚喷水视频| 玖玖在线| 新激情五月天| 色色无码日韩| 久久激情网| 少妇人妻人伦A片| 欧美激情综合色综合啪啪五月| 操逼123网| 91精品久久久久| 久久九九亚洲| 天天做天天要天天爽| 婷婷精品免费久久| 综合一啪| 国产精产国品一二三在观看| 5月丁香婷婷激情网| 五月丁香六月婷综合成人综合| 久久aaaaa| 影音先锋激情网| 大香蕉久操| 超碰伊人碰婷婷五月| 久久视频九九视频| 色五月激情网| 五月丁香91| 日本高清综合网五月丁香| 强辱丰满人妻HD中文字幕| 久久婷婷综合网| 久久这里只有精品99| 国产日产亚洲系列最新| www.丁香五月| 丁香五月六月综合激情| 色九月丁香婷婷蜜桃在线观看| 色噜噜,噜噜色| 五月天综合视频| 色综合久久88色综合天天99| 色五月婷婷一二| 97超喷视频在线观看| 丁香六月成人网| 色色热| site:901-07.com| 91美女被操| 97热这里精品在线视频| 99热国产免费| 超级97碰碰| 亚洲欧美一区二区三区四区爱爱动图| 久久一级AV| 婷婷五月天激情在线观看| 亚洲五月天激情| 性爱综合网| 丁香婷婷久久 | 欧美色骚婷婷五月天| 婷香五月激情视频| 蜜臀丁香黄色婷婷五月天| 色999五月色| 五月天综合久久| 色婷丁香| 色999五月色| 午夜婷婷| 久热这里只有精品6官网亚洲| 婷婷开心激情| 色频玖玖五月天| 色情五月综合婷婷| 秋霞午夜理论| 欧美成人猛片AAAAAAA| 思思99re这里只有| 无码字幕中文| 五月丁香婷婷六月|