久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(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ù)侵入大補償邏輯復(fù)雜而傳統(tǒng)的2PC對數(shù)據(jù)庫和中間件要求高性能瓶頸明顯在云原生和微服務(wù)拆得越來越細的今天顯得有點力不從心。正是在這種背景下像Seata這樣的分布式事務(wù)框架開始流行起來。它把那些復(fù)雜的協(xié)調(diào)、回滾邏輯封裝起來給我們提供了一套相對統(tǒng)一的編程模型。Seata支持好幾種模式比如AT自動補償、TCCTry-Confirm-Cancel、Saga長事務(wù)等。今天我們不聊別的就聚焦在TCC模式上。為什么是TCC因為在我看來它是業(yè)務(wù)侵入性、性能和數(shù)據(jù)強一致性之間一個非常不錯的平衡點。它不像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)在機制具備在實際項目中設(shè)計和駕馭TCC事務(wù)的能力。2. 環(huán)境與項目骨架避開第一個坑在開始寫一行業(yè)務(wù)代碼之前先把環(huán)境搭對能省掉后面80%的莫名其妙的問題。我這次用的是Seata 1.4.2版本部署方式選擇了Docker Compose這比直接下載jar包運行要方便和干凈得多。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ù)日志存儲模式單機測試用file最簡單。生產(chǎn)環(huán)境請用db或redis - SERVER_NODE1 # 節(jié)點編號單機就是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是宿主機上的Spring Boot應(yīng)用那么這里應(yīng)該填宿主機的IP127.0.0.1或本機局域網(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ù)組合而成的。日志表強烈建議建立一張獨立的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引入的遠程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并將其通過線程上下文傳播到所有遠程調(diào)用中。超時控制timeoutMills很重要。它定義了整個全局事務(wù)的超時時間。如果超過這個時間事務(wù)還未完成所有分支未到達終態(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)該是一個遠程服務(wù)的代理。你需要通過Feign或Dubbo將InventoryTccAction接口暴露為遠程服務(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方法中必須進行空回滾判斷。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重試機制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請求終于到達了服務(wù)端并執(zhí)行成功。后果Try在Cancel之后執(zhí)行導(dǎo)致資源被凍結(jié)但再也沒有Confirm或Cancel來釋放它了因為全局事務(wù)已結(jié)束造成資源永久鎖定。解決方案在Try方法中進行懸掛判斷。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到達 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. 進階話題嵌套調(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ā)沖突可以重試或直接返回失敗。分布式鎖在進入Try業(yè)務(wù)邏輯前用Redis或Zookeeper對業(yè)務(wù)鍵如lock:inventory:{productId}加鎖。這是最常用的方式但要注意鎖的粒度、超時時間和釋放的可靠性。我個人更傾向于“樂觀鎖 有限重試”或“細粒度分布式鎖”的組合。在庫存凍結(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ù)的健康度進行監(jiān)控和告警。7. 總結(jié)與個人體會走完這一整套流程從環(huán)境搭建、代碼編寫到填坑進階你應(yīng)該對Seata TCC模式有了比較立體的認(rèn)識。它不是銀彈需要你付出額外的設(shè)計設(shè)計TCC接口和資源預(yù)留邏輯和編碼實現(xiàn)三階段方法成本。但換來的是對復(fù)雜業(yè)務(wù)場景更強的掌控力以及對異構(gòu)數(shù)據(jù)源的支持。我個人在項目中的體會是設(shè)計階段多花時間在寫代碼前一定要和業(yè)務(wù)方、架構(gòu)師一起把每個分布式事務(wù)的邊界、每個參與服務(wù)的Try/Confirm/Cancel具體操作畫清楚。特別是資源預(yù)留的粒度是鎖整條記錄還是鎖部分字段這直接影響并發(fā)性能。日志表是生命線那張小小的TCC事務(wù)日志表在開發(fā)和排查階段的價值遠超你的想象。一定要建而且要設(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)機來實現(xiàn)最終一致性的模式在設(shè)計和處理復(fù)雜業(yè)務(wù)邏輯時依然會給你帶來啟發(fā)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
伊人操操| 日韩国产成人自拍视频| 亚州中文字幕超碰97| 欧美视频一区二区在线| 国产一区二区三三视频| 欧美激情专区| 久久精品无码专区| 91亚.色| 综合婷婷| 中文字幕狠狠玩| 日韩一级欧美一级国产一级台湾| 裸体美女久久久| 色播五月丁香| 国产精品老师| 中国大陆国产高清AⅤ毛片| 国产午夜精品在线观看| 夜夜高潮夜夜爽夜夜爱爱一区| 欧美性爱一区| 欧美爆操91| 九九热精品| 亚洲精品天堂久久A∨51成人漫| 欧美性爱一区二区三区| 一起草高清无码| 久久r精品| 99国内熟女露脸视频| 亚洲中文字幕乱码无码一区二区 | 国产成年女人免费视频播放a| 超碰97极品9| 超碰1997| 超碰97综合在线| 久9爱经典视频| 加勒比伊人综合| 久插综合| 色狠人在线99| 麻豆乱码久久精| 男人天堂2012| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 国产一区96在线| 亚卅熟女乱色| 色色激情| 日本三级黄页| 熟女AV一区| 91色香| 亚洲中亚日激情视频| 中文字幕在线日亚州9| 午夜福利免费福利视频| 亚洲蜜乳av| 一起草欧美| 日韩欧美午夜一区二区| 在线观看精品国产免费| 加勒比海成人视频网| 中文字幕在线观看网页| 日日妻色网| 亚洲中亚日激情视频| 色女免费在线观看视频网址| 热热色AV| 久久成人国产精品| 日本午夜精品理论片A级APP发布| 丰满人妻av一区二区三区| 欧美 亚洲 偷拍自拍| 去干网最新版| 伊人久久国产免费观看视频| 久久精9| 欧美青青视频| 日本高清免费一本视频在线观看| 日本三级R| 亚洲国产一区二区三区在线| 亚洲 日本 国产 综合| 天天干天天舔| 国产精品一区在线播放| 日本久久久久久久久久| 午夜精品久久久久久久第一页按摩| 加勒比海人人操超碰在线| 国产激情视频一区区三区| 先锋影音av先锋一区| 亚欧成人综合影院| 春色校园综合网| 9久精品视频在线观看| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 2020久久免费视频| 网页导航五月天免费一二三区 | 伊人麻豆传媒| 五月丁香婷婷啪啪| 天天日天天射天天干| 曰韩少妇无码| 国产女人和拘做爰视频| 五月天婷婷色色| 久久一二三四不卡 | 日韩国产在线观看av| 91色婷婷综合久久中文字幕二区| 国产熟女| 成人怡红院| 逼逼逼逼操操操操操操操操操午夜剧场| 午夜精品久久久久久久99蜜桃一| 91熟女丨91老女人| 操逼操网| 亚洲Av噜噜一区二区三区妖精| 熟妇一区二区| 久久亚洲精品成人av| 真实高潮91| 精品国产乱码久久久久久日本公司| 两女互慰AV高潮喷水在线观看| www.狠狠| 欧美丝袜亚洲| 国产精品一级特黄aaa大片在线观看| 女色视频社区| 亚洲色图91| 国产日本久久免费精品| 午夜精品久久久99热蜜桃的功能特点| 欧美爱三级日韩久久| 99色热| 欧美高潮| 午夜无码精品免费看性色| 玖玖爱综合| 蜜臀久久99精品久久久久久无删减 | 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 91色s| 97超碰资源网| 欧美色另类| 国产久久一区二区| 超碰久久中文| 亚洲在饯| 小少妇| 精品妇操一区二区三区| 国产乱人伦AVA麻豆软件.| 91久久久视| 日韩欧洲操屄视频| 欧美激情 日韩精品| 亚洲不卡三级手机播放| 久久久久久久久久久人妻| 天啪| 欧亚第一综合网| 亚洲国产成人7777| 青青草玖玖爱| 免费观看的av| 五月丁香六月综合缴清无码| 精品人妻一区春色| 亚洲高潮少妇| 久久av一级av少妇av高潮| 中文字幕片| 久久免费99精品久久久久久| 久久大陆| 久久久成人国产精品无码| 97干综合网| 国产综合永久精品日韩鬼片| 精品亚洲| 天堂亚洲精品久久老牛| 欧美国产日韩高清在线| 女性喷水高潮在线观看| 北野未奈加勒比av| 欧美亚州手机在线| 久久久久久大| 精品无码一区二区三区| 亚洲综合情色| 五月天婷婷基地| 精品视频在线观看精品| 亚洲天堂电影网| 六月丁香五月婷婷| 日韩人成网站在线播放| 麻豆精品.欧美精品.日韩精品.| 天天综合~91入口| 天堂九九九九九九九九九| 亚洲AV无码成人精品久久| 日韩久久三区| 亚洲青色欧美| 玖玖爱在线视频免费观看| 欧美最婬乱婬爆婬性视频| 亚瑟国产精品久久无码| 色综合天天爱去电影网| 亚洲凸凹超碰成人| 色女综合| 国产亚洲精品无码三区| 九九伊人网| 十八禁av无码免费网站APP| 测评在线观看AV| 日韩中文字幕2020| 欲香欲色天天天综合和网| heyZO天然素人无码AⅤ专区| 亚洲精品天天影视综合网 | 日韩午夜国产| 91爽啪| 久久91视频| 国产97亚洲| 亚洲欧美日韩国产丝袜自拍中文| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 国产欧美美女免费观看视频| 韩国一级婬片A片AAAAA| 啊啊好多水| 无码日韩人妻av一| 国产AV天美| 五月天色图影视| 婷婷中文字幕| 亚洲欧美中文日韩视频中国语| 欧美狠狠狠| 搞中出视频在线观看| 日日夜夜干| 国产AV超爽| 曰韩精品视频一区二区| 久久久久久精品免费看A级| 欧美亚洲天天| 麻豆尤物视频网| 久久大| 亚洲AV秘 精品久久老牛影视| 密臀在线免费观看| 岛国小电影| 亚洲图片视频小说| 欧美熟妇操操视频| 高清不卡视频| 97资源欧美| 大香蕉在线视频15| 69人妻人人揉人人躁人人精品| 精品毛片久久久精品毛片| 妇女性内射冈站HDWWWCOM| 九九九九九精品视频| 亚洲图片欧美另类综合免费视频大大香| 久久av色| 精品中文一区二区| 欧美色97| 亚洲欧美97| 91热热色| 超碰97人妻| 久久久久久中文| 大香蕉之青青草原| 人人爽人人精品乱人伦AV| 中文字幕 一区二区 亚洲无码| www九九热| 色999亚洲人成色| 免费A V在线| 久久婷婷色| 激情综合97| 天天综合网国产| 欧洲无码一区二区| 99re99视频在线免费观看| 91中文精品日韩欧美在线| 色老汉色| 九九五月天| 天堂性色| 亚洲图片激情综合另类| 91三级理论片播放器| 亚洲国产欧美中文永久| 亚洲成人一二三区| 男女香蕉一区二区| 97超碰精品| 蜜桃成人1区2区3区| 无码人妻丰满热妇又大又粗| 99精品网| 欧美成人综合| 97超碰站| 天天综合网日韩7799| 亚洲四虎熟女精品| 激情图片伦理国产一区二区日韩| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 九九九久久久W精品| 久久久久久久97| 亚洲国产婷婷在线播放| 91 国产丝袜在线放观看 | 亚洲码在线中文在线观看| 亚洲天堂人妻熟妇视频| 夜色五月天| 久久综合女优| 私人尤物在线精品不卡| 日韩性爱小视频在线观看| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 日本 情色 1区2区3区| 极品后入免费视频| 家庭乱伦性爱av| 4141514逼喷水三级片| 97久久精品国产| 成人精品水蜜桃久久久久久久| 亚洲美女精品九九视频| 成人性爱视频在线看| 婷婷五月花| 亚洲人码13| www.av家庭乱伦| 色色色色网站| 日本中文字幕熟妇| 亚洲国产91精品一区二区久久| 91狠狠综合久久| 日韩电影天堂视频二区三区| 黄片视频观看| 伊人影院在线理论播放| 视频二区美腿制服人妻欧美| 在线性黄高清免费视频| 精品美女久久一二三| 亚洲成人激情小说视频| 精精夜夜| 鸥美中出| 人夜夜精品网站香蕉嫩草| 麻豆区久久久久亚| 免费强奸av| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 国产精品农村妇女| 国产成人久久久精品免费AV| 日日摸日日碰| 久久精品国产亚洲AV嘿嘿| 97超碰色屌| 福利视频合集| 久婷婷一区| 内射老妇BBWX0C0CK| 日本不卡卡一区| 精品国产Av无码久久久伦古装| 久久精品国产精品亚洲艾通辽熟妇| 欧美激情精品久久久| 日韩在线一区二区| 超碰97人人乐| 亚洲精品久| 男女啪啪网站免费视频| 97综合国产精品高潮久久| 综合伊人网12色| 久久久久久91香蕉国产| 99精品久久久久久久婷婷| 精品中文一区二区| 玖色av| 男人天堂综合| 国产综合永久精品日韩鬼片| 超碰 欧美| 屌逼麻豆| 超碰免费人妻人人| 青娱乐91| 男人的天堂亚洲| 97久久精品| 狠狠搞 亚洲91| 国产精品干干干| 97久久天天综合色天天综合色电影| 久久精品国产亚洲AV无码电影| 日本亚欧爱爱| 亚洲激情网一二三四区| 人妻干天天| 青操影院| 天天添天天干电影| 亚洲国产91精品一区二区久久| 无码人妻精品一区二区三区九九 | 丁香六月东京热| 91美女视频。| 超碰这里只有精品| 91综合在线| 亚洲欧美人妻| 久久华人网| 久久久A∨| 久久国产性爱| 亚洲图片另类| 果冻传媒一区二区三区| 翘臀vidoes| 99在线无码精品秘 入口黑人| 大香蕉手机在线| 久久亚洲影院一区二区| 欧亚在线视频| 91香蕉视频在线观看免费| 色欧美在线| 天操老女人| 啊啊啊操一区| 天天草天天干天天日| 翔田千里AV无码秘 三区| 久久精品视| 青青草视频爽一爽| 98一区二区精品| 大香蕉免费乱伦视频| 欧美性爱精品七区| 亚洲97| 久久三区四区| 好色美女九七第一页| 黄呦呦在线| 大香蕉操久久| www九九热| 欧美性爱日韩性爱| 思思视频免费看网站| 久久久久熟女| 99在线观看视频在线高清| 中文字幕综合人妻| 人人超碰在线观看黄| 精品少妇后入一区二区三区四区人妻巨乳| 九九黄色网| 久久久久国产一区二| 国产精品毛片?v一区二区三区 | 一级做a爰片性色毛片久久| 揉揉揉夜夜| 日韩青久久| 国产青青美女玩逼视频| 又摸又舔在线观看网站| 色第一页| 91久久18禁| 大吊色| 欧美最婬乱婬爆婬性视频 | 亚洲欧美天| 一级性爱视频免费在线| 欧美18老人禁| ji熟女.com| 超碰精品日韩欧美国产| 久久久久网站-538在线视频-欧美永久乱码 | α√在线| 国产亚洲精品玖玖玖在线观看| 大屁股人妻女教师撅着屁股| 久久人妻| 亚洲天堂男人天堂| 成人小说另类在线| 日韩欧美亚洲自拍偷拍| 青娱乐淫乱1314| 国产日韩无码一区二区三区久久区| 少妇蹲下露出大唇5| 后入式999| 97se综合| 四虎免费视频| 久久粉色| 人妻欧美| 亚洲国产精品久久久久久久久久| 91国产丝袜白虎| 五月天色色网站| 国产福利av精彩对白| 亚洲一区二区久久久久| 免费的很黄很污的全部视频| www.色综合| 99久久综合网| 97人肏| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 美女黄码视频午夜| 日韩欧美蜜桃精品久久中文字幕久久| 九九国产热| 日本 情色 1区2区3区| 日韩综合色网| 爱逼综合| 在线无码操| 免费一级欧美片片线观看| 五月色网| 中文字幕少妇色| 中文字幕AV片| 中文字幕一区二区三区四五区| 人妻夜爽夜夜爽| 一级乱伦网站| 亚洲天堂无码| 91成人国产综合久久精品蜜月| daxiangjiao你懂的| 欧综合网| 亚欧性爱ab| 在线观看午夜婷婷久久久久清性观看| 97人妻人人躁人人玩人人| 久草色在线观看| 五月婷亚洲精品天堂| ji熟女.com| 成人免费不卡在线视频| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 福利社区午夜一区二区| 人妻激情偷乱视三区频一区二区| 黑人精品欧美一区二区蜜桃| 五十路熟女人妻一区二区三区四区五| 2024黄色视频| 伦伦成年午夜免费视频| 天天舔天天 | 开心婷婷五月| 欧美高清在线| 国产第12页| 婷婷五月天激情网| 亚洲人人夜夜澡人人爽| 思思热在线视频免费| 九九九九精品精| 精品国产无码中文| 国产Av超碰| 久久久久久精品免费看A级| 探花一区在线| 超碰69| 国产高清1234区| 亚洲骚男同com| 亚欧无码线免费观看视频| 日本操BAV| 91丨国产丨白浆| 久久精品无码专区| 黄色高清无码无码破解免费暗网 | 亚洲色图欧美色图制服诱惑| 成年人网站在线免费观看| 97婷婷色| 亚洲精品国产拍免费91在线| 精品一区二区成人| 欧日韩在线观看| 国产一区自拍欧美日韩| 91在线限制级| WWW.操逼.COM| 久久久久久久久久久久黄色 | 女优免费一区二区永久| 久午视频| 天天影视色香色欲| TS人妖另类精品视频系列 | 91 丝袜在线| 国产精品黑人一区二区三区| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 成人26uuu| 色第一页| 欧美v亚洲v综合v国产v妖精| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 97在线观看播放视频| 久干网| se吧提供91精品国产91久久久久久| 男人的天堂在线有码| rivers-china.com| 久久婷婷五月| 欧美性暴力| 综合av影片| 围产精品一区二区三区视频播放| 免费超碰97久久| 操美女高潮抽搐白浆| 99少妇| 日韩精品国产精品五码一区二区| 欧美一级在线观看成人| 欧美日韩少妇色情| 国产成年免费大片黄在线观看| 欧美精品久久| 久操精品网| 国产一区在线看| 性爱Av免费| 亚洲精品1区| 尤物一级在线免费观看| 色拍偷亚洲| 久久av无码| 色男人色天堂东京热| 色婷婷综合网站| 天天干嫩逼网| 大香蕉啪啪网| 性色亚洲| 玖玖大干人妻| 日欧美色| 在线岛| 天天天天天超碰| 亚洲色综合| 国内毛片热久久思思热| 婷婷五月天久久精品视频一区二区三区 | 九九九九久久久久| 精品999日本| 久久五月综合| 国产精品久久久无码aV去| 天天综合,91入口| 亚洲综合色男人网| 天天日天天干天天整| 日韩成人高清一区二区| 影音资源男人日韩| 久久久久久久久久久97| 精品国产www久久| 成人一道本免费视频| 亚洲激情欧美色图| 成人精品视频一区二区| www.超碰在线| 精品国产丝袜一区二区三区乱码| 国产精品操| 舔人妻中文免费视频| 国产日本熟女顶级一区二区三区视频 | 天天做天天爱夜夜爽毛片试看| 清纯唯美第一页| 男人的天堂欧美| 东京热亚洲一区二区| 8050无码八戒| 黄色AAAAAAAAAAA大片| 欧美九九九| 欧美操逼录像国产黄色国产| 少妇极品熟妇人妻无码| 97人肏| 亚洲图片偷拍视频区| heyZO天然素人无码AⅤ专区| 五月天日日操夜夜操| 久久6热精品99视频| 中文字幕一区 二 区 三 四 五 区日 日 骚| 无码伊人久久大杳蕉中文无码| 国产成人无码啪| 亚欧免费观看视频| 午夜性生活av免费在线看| 国产丝袜啪啪| 亚州黄站| 欧美亚洲综合高清在线| 欧美色亚洲色| 骚日日av| 男人的天堂视频精品乱在线| 亚洲欧美国产精品久久久久久久| 成人av毛片在线观看| 春色综合免费| 91青青在线视频| 日韩丨制服丨中文|在线| 国产精品天干天干综合网麻豆 | 中文字幕女同在线| 伊人操操| 女人18精品一区二区三区| 亚洲性猛| av久日| 精品在线78| 中文三一区| 欧美高清91| 美女诱惑一区| 性饥渴少妇av无码毛片| 中文人妻av高清一区| 亚洲高清无码在线桃色| 大伊香蕉在线视频免费| 99热亚洲| 91暧暧| 91国产在线精品| 免费亚洲国产精品久久一区| 97久久精品不卡| 日韩在线电影| 欧美大香蕉久| 成人性爱av.com| 综合色色网| 男人天堂久久精品| 欧美中文字幕一区| 超碰色美女| 亚洲se电影| 久久直播国产| 东京热激情视频一二三区| www.97在线| 操逼操2| 欧美十八禁视频| 午夜欧美J进J出白浆流出久久久 | 色色色色电影网| 日本有码久久| 蜜桃精品视频一区二区三区| 中文三一区| 日本淫乱女一区二区三区视频| 啪啪视频亚洲第一| www九九热| julia在线观看久久| 97精品视频在线播放| 香蕉综合网| 欧美日韩97在线| 在线观看黄色电话| 国产av又色又爽又黄| 天天干天天插| 激情终合网| 四虎精品永久在线观看| 99精品视频在线观看免费| 麻豆这里只有精品| 啊啊啊啊二区好大| 激情五月天中文字幕色| 中文一区在线视频| 一二三啪啪专区| 九九操久久国产免费视频| 美国黄片aaa| 超碰在线91| 欲女人妻性色av| 精品九九| 欧美视频一区二区在线| 无码91| 男人天堂最新手机版在线青青草| 日韩性爱视频在线免费观看 | 熟女丰满人妻一区| 情色大香蕉| 久操网无码在线| 天美国产精品| 亚洲欧美黄| 欧美色综合影院| 宗合情欲网| 91美女小视频| 最近的最新的中文字幕视频| 天天弄欧美| 色香综合天天影视综合 | 高清无码人妻久久久一区二区三区aⅴ| 98久久| 欧美白嫩女HD| 最近二区三区视频大全| 99操碰| 999热日韩精品| 日本国产高清色www视频在线| 啊操爽品善一区二区三区| 老女人老91妇女老热女| 免费视频在线观看啊啊啊啊啊| 91狠狠狠| 中文字幕成人| 少妇贴图| 免費黃色視頻觀看一| 后入式五六区| 最新日韩黄片| 97超级久久| 99色色网| 超碰97久| 亚洲,欧美,春色,另类| 99热欧美| 婷婷五月天AV| 超碰97欧美| 成 人 影视 一区 二区 三区 四区| 久久久久99精品成人片蜜臀| 人妻激情另类| 亚洲一区日韩精品中文字幕| 美女大乳久久久久久久女人18| 国产免费一区2区3区| 97大色网| 久久99久久99精品免视看婷婷| 亚洲国产ⅴ高清在线观看| 天天爱天天韩国日本牛牛牛牛 | 欧美日综合| 加勒比性爱成人在线| 麻豆AV一区二区| 中文字幕 一区二区 亚洲无码| 久热香蕉精品在线视频| 岛园激情| 99超级碰免费视频| 人妻乱仑一区二区三区| 麻豆天美一区二区| 国产中文大片资源中文字幕| 欧美真人抽搐一进一出gif| 啪啪视频免费在线观看| A片A5445444| 岛国大片国产| 久久欧美性爱视频| 99久久久无码国产精品性男| 天天操夜夜嗨| 大香蕉乱伦视频网| 亚洲天堂区| 天天摸夜夜摸| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 天天色悠悠激情| 欧美午夜色妇色鬼| 日日玩天天干| 人妻一区二区三区视频| 成人性爱AV在线免费观看| 久久久久久国产手机AV| www.婷婷五月天| 欧美熟女丝袜| 啪啪视频免费在线观看| 国产精品一区av在线| 国产农村一一级特黄毛片| 久久久久中出| 97自拍一区| 亚洲熟女av中文字幕| 岛国片国产成人亚洲播放| 蜜桃成人1区2区3区| 啊啊啊啊啊舒服| 黄片免费看的| 欧美日韩222| 搡老女人老熟女91老熟女综合网| 日本性爱少妇| 男人的天堂久久狠| 影音先锋每日最新资源在线观看 | 国偷自 一区二区| 秋霞 色色| 人妻出轨一区二区三区| 久草成人| 能看的AV| 2019精品国产无码成人| 97综合在线观看| 九九九九九九视频免费| 99精品在线| 91精品国产91久久久久久久久久久久| 婷婷丁香五月天综合东京热| 97在线欧洲| 丰满人妻无码一区二区三区| 97视频www| www.久久制服糖| 欧美精品亚洲精品日韩传电影| 精品一区二区人妖| 少妇高潮一区二区三区在线| 一区二区你上我| 91丨国产丨白浆秘 洗澡动漫| 亚洲一二三| 性爱乱伦视频免费| 亚洲AV在线资源| 婷婷九月| 亚洲色交| 免费99精品国产自在在线| 国产 三级自拍| 97AV在线观看| 久久国产精品熟女人妻| 久久小视频| 亚洲欧美国产成人综合不卡| 亚洲男人天堂网站| 国产精品丝袜久久亚洲不卡| 人人色97| 国产亚洲99久久精品| 黄色片一区二区三区四区五区| 国产精品久久久久999| 91麻豆天美国产欧美| 眼镜人妻101.com| 大香蕉在线视频重口味毛片在线| 一级啊性爱在线视频| 亚洲图片欧美色图| 亚州男人天堂| 亚洲 日本 不卡| 亚洲蜜臀精品视频久久| 蜜桃网熟妇| 96久久久精品| 大屁股国产在线视频| 国产精品97超碰| 天天拍天| 夜夜免费视频| 久久精品日韩专区免费观看| 天美传媒av一区二区| 少好三P| 丁香五月大香蕉| 精品欧美А∨无码黑人大荫蒂| 国产乱伦视频污| 偷拍亚洲熟女视频播放| 极品综合| 精品一区二区人妖| 国产高清精品福利| 久久性爱视频| 97视频在线免费看| 9久精品视频在线观看| 夫妻AV网站| 偷拍 亚洲 欧美| 黄色大片免费在线| 91三级理论片播放器| 欧美在线视频99| 91麻豆天美国产欧美| 日韩少妇丰满亚洲| 激情婷婷黑人91| 国产精品白丝在线播放| 能直接看AV的网站| 国产亚洲人妻综合日韩 久久| 东京热一区二区三区四区五区六区| 日本青青草在线| 亚州日韩97| 97在线视频免费观看| 97资源视频| 精品 码产区一区二-1080P高清在线www-B029AV| 操美女人妻| 国产精品999aaa| 久久久久亚洲Aⅴ无码| 一区二区你上我| 超碰久久网| 亚洲三区视频| 中文字幕亚洲欧美在线不卡| 99re99在线视频| 91被操| 日韩99神马视频播放片在线播放| WWW美腿丝袜香蕉中文| 亚洲熟伦熟妇AV无码春色| 日韩中文字幕二区| 91美女視頻| 日韩精品碰碰| 伊人网在线视频| 乱伦av麻豆| 老女人91| 激情五月综合| 日韩三级伊人| 一区二区蜜臀| AV无码久久久精品| 欧美激情精品久久久| 92性色国产午夜福利在线661| 夜夜一区二区| 91丝袜在线观看| 男人的天堂不卡一区二区| 久久超碰com| 宅男91视频在线播放| 日韩黄片影院| 97久久超碰亚洲| 91熟女熟妇视频网站| 老外又粗又长一晚做五次| 国产精品制服丝袜中文字幕日韩一区二区三区| 91在线欧美| 亚洲美女 晚间男人天堂 | 久久九操在线观看| 国产精品无码论坛| 亚洲天堂男人天堂网| 欧美亚洲国内自拍| 精品中文字幕第一页| 久久婷婷苹果| www.高清无码诱惑一区.com | 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 欧美色66| 高潮毛片无遮挡高清免费| 日本男人插女人的逼黄色| 熟女突然公开看18禁影片 | 91一区二区三区蜜桃| 久久9精品| 日日干夜夜欢| 91人妻丝袜无码| 免费人成在线观看网站品爱网| 99这里只有精品| 大香蕉啪啪啪啪在线| 97超碰碰碰| 综合五月天| 日本久久99| 免费作爱一级视频| 尤物黄色在线观看网站| 久久精品一区二区三区四区五区| 久草成人影片| 黑人精品久久97| 91性高| 熟妇人妻一区二区三区| 五月婷婷影院| 久久精彩视频| 国产激情综合| 色九区| 99热免费| 清纯唯美激情四射| 青青草啪啪网| 免费超碰97久久| 9九九九九视频在线观看| 91啪啪| 91色五月俺来也| 熟女欧美日韩综合婷婷| 超碰95| 精品一区二区国产日韩| 在线亚洲 欧美 日本专区 | 正宗无毛一线天嫩逼| 青青草女人天天干| 老熟女网站| 情趣丝袜无码操逼视频| 中文字幕精品一区二区精| 免费簧片在线观看| 久久婷婷色综合一区二区三区| 日韩精品人妻系列无码天堂| 欧美国产有色电影| 久 久无码人妻AV| 91在线视频免费播放| 久久久精品成人国产| 亚洲天堂 视频你懂的| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 337p大胆噜噜噜噜噜91Av| 四月丁香婷婷| 国产精品久久久九九九| 欧洲人妻视频| 国产伦乱91| 亚洲一二三精品久久网| 青青草久草AV| 久久久精品网站| 日韩免费三级黄片电影| 天堂а√在线最新版在线 | 亚洲欧美色图片| 色呦呦呦在线观看视频| 国产农村妇女精品一二区| 伊色久人大在线| 久久婷婷综合国际产色怕| 日韩美女,国产传媒,视频一区| 另类欧美色| 丰满人妻大屁一区二区| 九九九九九九视频| 国产成久久综合片| 天天综合网国产| 综合色区偷拍| 色五月婷婷五月天| 97久久天天综合色天天综合色电影| 日本αv| 亚洲日韩AV视色| 曰韩人妻中文字幕在线| 中文字幕精品一区二区精品| 深喉吞精| 婷婷丁香六月天| 婷婷色综合欧美日韩| 看看小穴| 亚洲 一区二区 自拍| 大逼色网站| 老熟妇一区二区三区啪啪| 色色婷婷丁香| 飘花国产午夜精品不卡| 亚洲A色| 欧美日韩性爱操大逼| 人妻少妇精品视频一区二区三区| 国产剧情一区在线观看| 国产福利电影| 欧美肥臀在线| 欧美黑人猛交春色影视大全| 欧美精品三级黄片| 九九热超碰97亚洲最新香蕉| 秋霞网—男女啪啪亚洲免费体验区| 青青草久草AV| 99热这里是精品| 岛国片在线播放| 欧美人与动性人交a| 啊啊啊不要好爽日韩无码一区| 亚洲精品日韩国产欧美| gogogo免费高清看中国国语| 日韩无码服务区| 欧美性爱一区二区三区四区| 日韩成人网址| 国产精品极品美女视频| 狠狠操,使劲操| 免费视频观看60秒| 超碰98综合网| 亚洲天堂另类小说男人| av在线观看不卡网站| 美女91| 欧美熟妇色| 超碰在线在公开超碰在线在公开| 亚洲91色在线| 欧美天天综| 精品176精品2| 国产不卡中文字幕免费avi| 色97| 精品一区二区三区蜜桃臀赵总 | 欧美青青视频| 91欧美性| 欧美亚洲高清不卡| 日韩av色图| 久久亚洲熟妇在线视频| 色天使大香蕉| 打av高清| 日本久久999| 麻豆 欧美 日韩| 久久久久9999| 91 手机在线播放 绯色| 精品久久在线区一区| 91 丝袜在线| 九九成人精品| 欧美中字不卡| 另类欧美色| 91精品无码久久久久久久| 中文日本免费高清| 91粉嫩萝控精品福利网站_精品影音先锋国 | 宅男91视频在线播放| xxx亚洲午夜天堂| 精彩久久中文| 亚洲 在线| 日本免费专区| 精品色色| 蜜臀久久久国产| 国产熟女一区二区| 久操网视频| 91色艳| 国产成人精品一区| 少妇无码999| 国产福利在线视频网站| 久9视频| 男人的天堂久久狠| 超碰色综合| 双插性欧美一二三区| 国产伦精品一区二区三区视频女| 欧美在线l亚洲| 久久精品一区二区一8| 狠狠干狠狠干| 欧美日韩系列| 美女视频尤物网在线看| 97色冈| 天天综合亚洲综合| 性爱综合网| 国产精品农村妇女精品| 日韩肏逼视频| 91 丝袜在线| 久久超碰网| 久久侵犯人妻爽爽爽| 91亚洲欧美| 国产日本熟女顶级一区二区三区视频 | 88xx成人精品视频| 欧美一级三级| 欧美黑人与女人91| 午夜精品久久久久| 亚洲无码精品AV久久久| 久操99| 午夜福利1区2区3区| 91色黑人少妇| 欧美1区二区三区公司| 日韩钢筋无码高清啾啾啾| 91福利网在线观看| 亚洲免费97免费| 欧美成人A√在线一区二区| 91l欧美在线| 国产高清成人传媒影视| 美女啊啊啊啊啊| 青青草吊丝| 色小视频蜜乳| 无码一区二区精品视频久久久春药| 97久久精品国产| 日韩另类| 日韩人妻播放| juliaann欧美丝袜办公室| 色爱综合网欧美| 日本视频在线观看污污污| 欧美中文综合| 麻豆区久久久久亚| 亚洲国产成人精品999| 无码操逼天堂| 江都AV在线| 激情开心五月天| 综合自拍| 国产黄色小视频网站| 久热这里只有精品9| 中文字幕人乱码中文字的预防方法 | 亚洲色图 欧美| 久久久久久中文| 999久久久久久久精| 欧美顶级黄片AAAAA在线免费看| 午夜男女爽爽爽影院视频| 亚洲天天更新| 天堂网亚洲区手机版| 蜜臀99999| 伊人五月天青青草婷婷| 伊人久久88国产女| 国语av最新自产拍在线观看| 无码WWW免费视频网站| 911av网站免费观看| 色官网色综合| 97天天日| 日韩激情电影中文字幕| 操逼视频国产无套| 欧 美 自 拍 偷 拍| 91看黄片| 强奸乱伦中文字幕AV| 强奸xx国产| 97香焦色区| 欧美极品少妇交| 亚洲精品国产无码高清| 凹凸视频特色日本特黄| 日日夜夜干| 富女玩鸭子一级毛片| 亚洲熟久久| 日本三级日本三级99| 人妻少妇久久中文字幕一区二区 麻豆 | 欧美色道啊| 日韩无码专区| 3PAV乱伦视频| 国产精品制服丝袜中文字幕日韩一区二区三区 | 老熟女综合网| 插入综合网| 偷拍亚洲熟女视频播放| 日本道日本道中文字幕日本道最新日本道在线观看| 狠狠干婷婷| 无遮挡又黄又刺激的视频| 爱丝福利| 中文字幕精品丝袜| av资源在线观看少妇| 97免费在线观看| 香蕉色网| 最新AVzaixian| 亚洲图片偷拍视频区| 亚洲91网| 91老妇女| 人妻精品一区二区全免费| 亚洲综合色网| 久久综合国产精品国产| 亚州综合| 另类欧美| 色色色色色色色色综合| 91欧美性| 中日无幕一二三四区| 日韩欧美午夜视频在线| 亚洲精品免费中文字幕| 成人草草视频| 人妻天天爽| 伊人国产av| 亚洲色吧网| 夜夜操青青草| 欧美岛国精品在线观看| 丰满熟女人妻一区二区三五十一路| 久久久一热在线播放| 久久久久久久久成人av解说| 久久久久国产精品久久久| 色九九久九九| 91超碰在线播放| 无码视频一区二区| 久久国产三区| 五月天开心网| 睡产熟女乱伦| 国产午夜无码片在线观看影视| 日本人妻丰满熟妇久久久久久| 无码人妻一区二区三区四区老鸭窝| 美女AV一区二区| 日韩人妻精品中文字幕| 久久99国产综合精品女同| 国产成人亚洲精品自产在线| 夜嗨影院| 少妇干B| 精品成人亚洲午夜电影| 日韩激情毛片一级久久久| 夫妻天天操岛国视频| 久久东京热久久| se,,,亚洲欧美| 国产乱码精品久久久久久| 欧美韩国你懂得在线| 在线视频一区二区传媒| 欧美亚洲20p| http://qxhbdz.com| 99999精品视频| 久久色人体| 欧美丝袜激情| 天天摸夜夜摸| 啊操爽品善一区二区三区| 久久婷婷国产一区二区色| 67194无码不卡| 妇女视频网站|