日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满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
返回資訊列表
欧美亚洲厕所精品偷拍91| 五月丁香色综合| 九九国产热| 色天使亚洲综合在线观看| 婷婷香网站| 国产高清成人传媒影视| 亚洲日韩av专区无码| 大乔未久88一区| 色九区| 91n欧美| 欧美性,色九九| 秋霞影音一区二区三区| 热思思免费视频| 嗯嗯啊啊视频在线看| heyZO天然素人无码AⅤ专区| 91精品国产一区三一| 黄资源| 婷婷五月天影院| 人妻干天天| 91综合无码| 屌妞视频久久久久久久久久久久| 天天流夜夜操| 95自拍视频在线观看| 激情视屏国产乱伦强奸| 人妻三级在线中文字幕| 玖玖爱视频网站| 熟女AV一区| 欧美专利1区2区3区4区5区免费| 综合五月婷婷亚洲一区| 一区二区三区黄片免费观看| 蜜臀99精品国产高清在线观看| 热久日综合| www.婷婷| 青娱乐日韩无码| 家庭乱伦性爱av| 亚洲国产综合图区中文字幕| 天美传媒婬乱在| 久久宗合亚洲| 亚洲精品国产熟女久久久| 欧美大香蕉在线观看| 人人透人人操| 婷婷精品视频| 色色五月天婷婷| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 久操免费在线| 韩国免费播放一级毛片| 免费国产电影一区二区| 精品无码欧美三级| 97精品一区二区视频| 97av在线观看| 欧美色图片| 亚洲久久久| 欧美 亚洲精品首页| 99视频自拍区| 蜜臀99久久精品久久久久久| 啊啊啊水好多| 少妇三p| 人人操人人插人人摸人人干| 岛国A V在线免费看| 五码视频在线观看| 一区操逼日比视频| 99热这里是精品| 97国产成人精品免费视频| 强奸乱伦av电影| 99国产在线 精品 视频| 中文字幕狠狠玩| 色综合av男人天堂| 综合网色| 91网站18在线观看| 青青草视频爽一爽| 欧美亚洲高清不卡| 日韩在线观看AV| 亚洲狠狠入| 91第一页| 亚洲少妇综合在线播放| 99久热| www.色操逼| 丁香九月激情| www.狠狠| 亚洲人成色9999精品久久 | 色婷婷五月天| 国产亚卅97| 日本黄色天堂| 中国人高清www色视频免费| 欧美1区二区三区公司| yellow网站免费观看日韩高清无码| 欧美日韩中文亚洲v在线综合| 日本在线视频导航| 丁香婷婷五月| 日韩成人精品视频自拍| 蜜桃在线观看一区二区三区| 美女淫穴| 97爱综合| 欧美在线干| 91欧美高清| 欧美激情黑人| 污色区网站| 偷窥自拍A片| 亚洲国产精品久久久久久久久久| 看看日B真人视频| 99少妇| 97色伦97色伦国产欧美| 蜜桃久久一区二区三区| 96一区二区三区| 东京太热男人的天堂久久久| 日韩精品视频在线观看一卡二卡| 亚洲av总站| 97草草| 秋霞操逼片| 欧美刺激色黄片免费看| 色麻豆AV| 中文字幕乱码人妻二区三区 | 骚人妻少妇视频| 中文久久久| 精品区国产区一区二区三区| 久久做97| 国内外内射高清视频| 综合欧美激情网| 国产又黄又猛又粗又爽的网站| 老鸭窝日丰县女人| 日日操丁香五月天| 精品丝袜无码一区二区三APP| 色欲蜜臀AV| 91jk色拍| 中文久久久| 另类在线| 久久老熟女| 懂色天天爱天天日天天射天天澡| 又黄又粗又硬又长又大| 91美女视频| 男人的天堂啪啪| 做爱福利视频一区二区| 无码天天操| 亚洲限制级在线| 校园春色AV天堂| 丁香五月影院| 中英熟女操女| 色91综合网| 91在线视频国产网站| 性色一线| 婷婷色色五月天福利| 亚欧国产无码精品在线| 男人的天堂va在线| 亚洲无套久久嗯嗯| 久久丁香久草综合网| 国产91美女高潮| 久热一区二区| 亚洲综合小视频小说在线观看| 久久精品国产亚洲5555| 熟妇人妻一区二区三区| 日韩欧美亚洲一区二区三区影院| 久久人妻一区二区三区高清| 狠狠干综合| 五月天婷婷社区| 色情五月丁香| 超碰在线一区二区| 黄呦呦在线| 女生自91网站| 久久久久国产精品片区无码直播| 天堂亚洲精品| 91欧美成人色站| 97欧美性爱| 欧美精品,四区。五区| 秋霞视频一区二区| 国产美女高潮| 97视频在线免费播放| 亚洲AV无码久久久国产精品| 天天综合91入口| 少妇二级| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 福利大香蕉| 亚洲综合小说另类图欧美视频激情小说色五月天| 久操视频在线| 西西美女视频网| 九九探花视频在线观看| 中韩中文字幕在线观看| 99日免费视频中文字幕| 丁香五月成人| 97精品久久| 少妇人妻激情四射| 日本3级一区二区免费| 97欧美超碰| 亚洲色图欧美色图在线播放| 天天干人妻| 91oumei| 久久天天艹| 九九热re99re6在线精品| 欧美东京热青青草| 国产精品。| 国产精品久久久久久久毛片1| 四虎影视 亚洲无码| www.夜夜操| 一类无码操逼视频| 欧美激情综合| 欧美图片校园春色| 婷婷国产精品一区二区| 97色涩| 操人无码| 717影院理论午夜伦八戒| 亚洲国产精品V?在线播放| juliaann丝袜大战黑鬼| 乱伦a片视频| 天天享受天天看| 欧美成人黄网色网站| 亚洲精品一二牛牛| 久久无码成人| 日韩欧美午夜一区二区| 伊人991| 秋霞成人做爱| 肏逼视频日本| 另类图片综合| 中文字幕精品一区二| 人人妻人人爽人人精品| 久久99干一本高清| 欧美体内射精| 日韩 欧美 国产 麻豆| 国产白嫩精品久久| 日本不卡高清免v欧美日韩在线观看| 在线播放免费av福利片| 日韩免费看在线黄色片| 欧美黄色片在线播放| 国产中出内射一区二区| 久久成年片色大黄全免费网站| 99av| 偷拍盗拍亚洲色图图片| 欧美一区二区三区互相| 中文字幕第9页萱萱影音先锋| 精品国产乱码久久久| 国产女主播视频在线观看| 1204av韩国| 蜜桃精品视频一区| 黑人精品久久97| 1024手机看片欧美日韩| 色欧美色交综合| 激情四射婷婷六月天| 青青青草原| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 日比av无码| 日少妇视频| 亚洲国产av中文字幕久久| 国产精品美女在线一区| 天天欧美欧美亚洲网| 中文字日本乱码| 久久妇| 久九九九九九九九热| 98久久| 人妻干天天| 粉嫩在线一区二区懂色| 色综合中文字幕不卡| 国产熟女二区| 亚洲日韩美女丝袜美腿人妻视频| 综合久久久久久久综合网| 五月婷婷AV| 一区二区三区四区五区高清无码永久视频 | 丰满欧美少妇| 亚洲影视第一页| 久久久久久久唑| 天天躁日日躁AAAAXXXX国产| 天天爽天天操| 劲爆欧美人妖三区91| 精品九区| 国产女生在线| 免费看国产大AB| 91免费看一区二区三区| 九九色热| 国产精品一区在线播放| 亚爽爽爽爽爽爽爽爽| 国产精品久久久久久久久久二区三区| 国产精品久久aV| 日韩成人免费电影| 欧洲精品一二三在线| 久久久久久久性爱| 猛交交| 亚洲诱惑天堂| 欧美日韩香蕉| 久久m| 97精品国产| 秋霞视频一区二区 | 97鸡把在线视频| 郑州宾馆老熟女露脸啪啪| 9九九九九视频在线观看| 九一综合网| 东京热一区二区中文字幕| 国产女人成人精品视频| 不卡六六在线91| 天天干干天天干干| 国产久久一区二区| 国产欧美精选激情视频| 国产成人天堂| 在线人人人人人人精品超| 久久久禁| 国产成人无码啪| 国产久久日韩网站导航| 中文字幕精品免费一区二区| 国产精品经典一卡久久久 | 亚洲成人免费在线| 97在线免费看视频| 久久久久久亚洲精品不卡人乳| 九九九偷拍| 欧美疯狂做爰xxxx| 99国产女人| 色婷婷激情| 中国熟妇| 久久久9视频| 国产精品香蕉| 96爱综合| 久久久亚洲欧美综合| 中亚黄色三级大片| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 后入式免费视频| 亚洲欧美精品91| 男人的天堂网页| 亚洲人成色9999精品久久| 亚洲色欧美| 久热久一区二区三区| 国产精品96| 精品免费一区二区三区在线亚洲人成| 家庭乱伦国产精品| 中文字幕综合人妻| 五月天丁香| 人人操人人摸人人骑| 亚洲情色一区综合| 1禁看欧美黄片免费看| 欧美最婬乱婬爆婬牲视频| 99无码视频| 91av熟女人妻| 人人操人人精品影片| 狠狠穞A片一區二區三區| 综合夜夜| av橘色网站| 伊人影院在线理论播放| 精品亚洲国产成人av网站| 午夜九九| 日韩二级| 综合一区中亚洲国产成人综合精品| 欧美激情精品| 中文字幕久久亚州无码| 综合网欧美在线| 先锋色眉乱伦资源| 亚洲综合电影| 日日嗷| 超碰97爽| 日本在线不卡一二区| 欧美性xxxxx狂欢| 亚洲国产蜜臀系列在线观看| 天天干2019| 亚洲AV操| 国产精品国产自产拍高清AV| av日韩国产一区二区| 欧美天天干| 国产久久久久影院老熟女| 97五月天| WWW黄片COM| 十八禁啪啪视频| 男人成人黄色视频在线观看免费下载| 操死我干死我| 日本免费中文一区二区三区四区| 久久综合亚洲色1080p| 色九久| 综合一区二区影视| 青青草白白色| 亚洲欧美爆| 狠狠中文字幕| 激情五月天网| 亚洲免费人妻在| 高清国产成人无码| 久草视频观看视频在线| 国产精品无码成人精品| 女性91网站| 密臀在线视频| 亚洲熟女一区二区| 97久久久久久久久久| 欧美变态激情网| 国产性感骚丝袜在线| 91久久精品蜜臀| 99精品免费| 91一起操| 国产亚洲在线观看| 操99| 国产67194| 久久婷五月天| 99热精品在线| 五月天婷婷基地| 99热91| 久久天堂婷婷网| 九九久久99| 欧美中出1| 日韩啪啪视频| 日夜啪电影| 精品超碰中文在线| 国产九九久久久精品| 艳美熟妇先锋一二三区| 香蕉一区二区三区在线视频| 蜜桃在线观看一区二区三区 | 亚洲欧美综合| 啪啪性爱免费视频| 99国产在线 精品 视频| 探花熟女,姿勢到位,體驗感也到位| 国产精品人妻一区二区| 日本欧美一区二区三区免费| 国产高清成人传媒影视| 操人妻少妇中文 | 人妻天天爽天天爽三区| 大香蕉一区二区在线观看.| 大香蕉www.超碰| 久久国内| 色噜噜综合在线| 香一区二区三区| 97久久久精品| 亚洲欧美综合图片| 天天视频黄| 欧美日韩操逼动图| 很黄很污的免费网站| 国产丰满熟夫69mpp| 亚洲系列欧美| 性色A∨91| 被男人吃奶很爽的毛片| 大屁股xxxxx| 91人妻超碰| A男人的天堂| 校园春色美腿丝袜 | 六月婷婷综合| 中文字幕久久精品一区| aV中文麻| 日本人妻中文字幕| 国产 码在线成人网站| 91色黑人少妇| 伊人欧美大香蕉视频| 成人免费性爱视视| 欧美日韩999| 成人色女网| 99草精| 18禁在线视频| 91丨九色丨东北熟女| 蜜臀av中字字幕网站| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 婷婷香蕉| 亚洲人久久久网| 啪啪啪亚欧美视频| 99精品成人免费看| 青青欧洲黑| 国产91影院| 柠檬AV导航| 欧美变态激情网| 国产精品久久久啊| 人妻熟女一区在| 97干综合网| 91看黄片| 嫩草 人人网精品| 久久久久久久人妻丝袜| 99综合免费视频| 九九自拍伦理| 欧美一区二区一级岛国大片| 天天操天天射青青草| av天堂加勒比| 国产精品爽爽va在线观看98| 天天综合网入口~91| 91东北熟女| 男人的天堂亚洲| 人人操人人精品影片| 午夜激情成人在线观看| 人人污日韩一区二区| 亚洲久久久| 五月婷婷无码| 欧美性爱一区二区三区| 亚洲经典啪啪| 日韩成人小视频| 亚洲偷拍自拍在线视频| 人妻喷水| 日本片日本片祼观看网站在线看中文版网页在线看 | 中文字幕乱亚洲美女精品一区| 嫖老熟女A片一二三区| 亚洲Av噜噜一区二区三区妖精| 骚女天天综合网| 欧日韩不卡视.频| 男人的天堂一区| 婷婷五月在线视频| 免费成人自拍视频在线| 日本加靬比网站发布页| 国产高清无码一区三区二区| 青青伊人久久| 92人人操人人| 亚洲色图A| 精品少妇后入一区二区三区四区人妻巨乳| 五月天亚洲色图| 性色avv| 久久久久久亚洲Av无码精| 国产人伦精品一区二区三区| 亚洲视频1区| 亚洲老司机123专区| 国产精品美女在线一区| 天堂精品| 黑丝内射一区二区三区| 欧美 精品国产制服第一页| 欧美日韩一干二干| 国产av美女被艹的乱叫| 色综合91好| 久久久国产精品人妻丝袜| 国产人妖的免费的视频| 久久久96精品| 人夜夜精品网站香蕉嫩草| 日韩强奸av| 中国熟女91| 色色操| 91性高朝久久久久久久久| 粉嫩小泬久久久一区二区| 午夜福利成人免费视频| 午夜操一操| 色阁阁AV综合网| 五月婷丁香| 波多野42部无码喷潮在线观看| 997色在线| 青娱乐 成人娱乐在线| 人人操肉肉| 囯产乱伦一区二区三女 | 日日干日日| 欧美日韩电影成人在线| 亚洲精品熟妇1区2区3区。| 少妇诱惑视频| 久久久久久久人妻| 人人看欧美性爱| 综合 亚洲 欧美| 极品AV网站在线观看| 色性综合| 97人人模人人爽人人| 天天爽夜夜爽夜夜爽精| 清纯唯美亚洲综合| 欧美啪啪天堂| 日韩少妇在线视频| 色九月综合| 色情成人五月天| 国产免a费看黄片在线| 另类图片综合| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 国产三级在线现体验区| 欧美 亚洲| 天堂av最新电影网| 九一精品牛牛一区二区| caopeng97| 日韩av乱伦| 人人操,操人人| 国产精品视频自拍在线| 欧美性爱日韩高清| 精品亚洲| 校园春色综合网| 人人妻人人澡人人爽久久av| 校园春色 亚洲| 亚洲日韩XXX| 天天干天天中出av| 欧美久久婷婷| 二级久久网| 偷拍亚洲高清图片| 中美日韩毛片| 蜜桃久久久久久久| 高清不卡国产| 欧美爆操91| 久久不卡一区二区| 日本一区二区三区欧美日韩中文字幕| 国产91丝袜在线播放蜜月| 亚洲色悠悠久久88| 色天堂在线观看| 人妻黑丝袜电影| 久久夜精品一区二区三区| 伊人久久久日韩一区| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 男人的亚洲天堂| 夜夜嗨绯色| 欧美亚洲高清不卡| 蜜桃狠狠色伊人亚洲综合| 99re6国产精品99re| 啊啊啊不要嗯嗯在线观看| 曰韩香蕉97| 丝袜视频网国产90| 中欧人妻丝袜中文字幕| 国产自制av蜜乳| 国产高清视频无码在线| 日本成人A片免费看| 思思热er精品视频| 99精品在线播放| 91人妻人人妻| 伊人991| 欧美综合在线第一页| 日本布卡一区二三区| 91亚洲电影| 97资源视频| 91成人精品在线播放| 色人久久| 91撸色网 玖玖网 欧美| 精品无码产区一区二| 亚洲综合在线91| 国产成年女黄特黄| 自拍偷拍 日韩无码| 九九黄色网| 蜜奶av| 久久↗↗| 国产成人亚洲精品无码最新在线| 国内亚洲精彩视频在线| 激情婷婷| 久久草视频污视频| 中文字幕一二三| 精品中文字幕第一页| 亚洲超碰在线| 神马久久久久久久久久| 97伊人超碰| 精品久久久久久AV无码| 91亚洲丝袜| 91视频综合| 欧美日本国产日韩激情视频| 欧美激情亚洲色图| 97久久超碰亚洲| 丁香五六月啪啪| 99久re热视频精品98| 国产成自自拍在线观看| 这里只有精品97| 国产精品一区午夜福利| 亚洲 图片 综合91| 青青草华人在线欧美在线| 午夜国产成人精品视频| 久99| 超碰在线在公开超碰在线在公开| 日韩三级在线观看网站| 蜜桃臀av在线观看| 啊啊啊 在线| 啪啪视频亚洲第一| 91色黑人少妇| 热99这里只有精品| 伊人婷婷五月天| 欧苏综合色综合| 色香网| 久操凹凸视频| 爱啪精品一区| 永久电影三级在线观看| 国产激情综合| 91中文字幕在线观看| 欧美一级久久久久久久大片动画| 欧美中文字幕男人天堂久久精品 | 91在线秘 男同| 久久这里都是精品| 97日韩| 日韩人妻大香蕉| 91性网| 九九色逼| 精品国产乱码久久久久久久久久毛片| 91操人| 亚洲色资源| 欧美日韩另类在线播放| 亚洲中文电影| 免费av在线播放二区| 麻豆婷婷成人一二三| 精品无码欧美三级| 久九干| 亚州熟女乱伦| 中国黑人三级片网站上区| 黄色免费网| AV丝袜少妇| 99久久久无码精品国产人| 亚洲aw毛茸茸在线| 人妻熟女字幕一区二区| 国产精品久久泡妞网站| 精品 码产区一区二-1080P高清在线www-B029AV | 蜜臀中文字幕| 爱欲AV| 国产精品久久久无码aV去| 中文在线久久字幕| 日本激情免费大片| 久啪视频| 95精品在线| 性色AV蜜色av色欲av| 神马午夜久久久| 91成人久久 | 久久久9999| AV高清一区| 国产精品干干干| 97人妻人人躁人人玩人人| 乱老女人一区二区视频| 欧美狠狠| 国产精品久久久久久久久久久久久久久久 | 久久久久久精| AV在线资源| 国产精品青草综合久久| 97天天日| 色阁阁AV综合网| 97干在线| 97人人夜夜精品视频| 久久高清无码夜夜操| 亚洲天堂电影精品一区| 色婷婷六月丁香七月婷婷| 91精品久久久久久久久久| 99色婷婷| 美国一区二区三区视频| 无码粉嫩白虎一线天b区| 中文字幕视频2区| 日韩精品黄片免费观看| 综合网欧美| 97亚洲国产| 夜夜嗨AV蜜臀av| 亚洲偷拍自拍在线视频| 麻豆国产97在线| 97伊人超碰| 青青草乱入乱欲视频在线观看| 一区二区三区欧美激情| 欧美一区二区三区互相| 久久久啊啊啊| 加勒比伊人影院| 蜜桃久久久久久| 色婷婷九月| 东北丰满熟女国产一区| 五月婷婷综合在线| 欧美v亚洲v综合v国产v妖精| 日韩91网| 久久超碰av在线| 91伊人影视综合| 男人的天堂亚洲| 国产女性无套 免费观看| 久久久精品中文字幕爱豆| 视频二区美腿制服人妻欧美| 在线观看午夜婷婷久久久久清性观看| 日本免费一区二| 狠狠干,狠狠操| 屁屁影院一区二区三区国产| 中文字幕,人妻,日韩| 91精品国产91久久青草| 欧美大的香蕉有线电视视频| 久草老司机| 欧天美中出| 大香蕉色网| 不卡超碰护士AV在线免费播放| 在线日韩视频| 亚洲图片欧美在线视频| 国产精品无码在线| 成年人黄色小视频网站| 99久久精品无码一区二区毛片免费| 91美女小视频| 欧美中文综合| 少妇久久久久| 欧美高清第一页| 91亚洲人| 男人午夜天堂| 夜夜骑夜夜操| 伊人影院日本| 翔田千里A片一区二区| 极品国产内射| 亚洲欧美高清无码| 丰满人妻被猛烈进入中| 亚洲婷婷综合网| а√天堂资源官网在线资源| 午夜男女爽爽大片免费观看| 26uuu最新| 一个人免费视频观看在线WWW| 国产视频人人网| yw尤物av无码点击进入麻豆| 另类图片欧美激情综合| 91被操| 午夜超爽| 日韩av在线免费网站| 在线可观看的黄色网址| 无码国产精品午夜不卡(| 色色婷婷丁香| 久操视频免费在线观看| 国产视频一区二区三区久久亚洲天堂| 亚洲综合888| 成人一区二区三区四区| 狠狠爱夜夜干| 超碰碰97资源站| 男人天堂网站| 国产精品 久久久精品一牛| 国产高清无码一区三区二区| 干婷婷综合网| 日本一区三级韩国| 国产精品白丝在线播放| 国产精品永久免费10000| 国产aⅴ无码片毛片一级网站| 干婷婷综合网| 热久久精品| 久日91在线| 亚洲成人在线乱码色午夜| 白丝AV| 久久久久亚洲AV无码专区少妇| 精品一啪| 夜夜操老骚逼视频网站| 人妻熟妇久草在线| 舔足天天操天天射| 中文字幕一二区二三区人妻专区| 日本韩欧美在线播放a| oumeisetu综合| 久草草一二三四区久久| 九月伊人中文字幕| 国产欧美岛国精品一区| 日本天天吊| 亚洲天堂资源| 亚洲性爱成人| 综合色久| 天天拍天| 日韩一级性爱无码| 亚洲第一综合| 韩国国产欧美情侣视频在线| 四虎免费在线观看| 午夜理论片在线观看免费| 久草综合京东| 亚州五月| 精品亚洲国产成人精品| 亚洲18禁| 亚洲交性| 国产 v乱码一区二| 欧美韩国你懂得在线 | 亚洲97在线| 久久高清欧美国产| 一区二区 日韩 欧美 国产 传媒| 久久九九97| 國產尤物AV尤物在線觀看| 97激情97激情| 久久春色| 操91| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 一区,二区,三区视频| 97这里只有精品| 天天插天天射| 99re这里只有精品2| 乱伦3P视频| 狠狠夜色午夜久久综合在线| 在线日韩精品一区二区三区| 69精品人人人人| 日韩在线观看AV| 全免费a敌肛交毛片免费| 精品欧美老熟女一二区| 久久久精品成人国产| 超碰久久精品| 亚洲精品影视老司机| 啊啊啊快操我视频| 奇米四色网| 九热大香蕉| 蜜臀无码视频在线观看| 欧美少妇大量自拍视频在线观看| 大香蕉淫人| 9久热| 蜜屁av| 婷婷中文字幕| 2017天天拍大香蕉| 亚洲天堂性爱| 久久久新亚洲AV| 欧美精品成人亚洲| 国产综合日韩伦理| 久草色悠悠在线视频| 国产婷婷综合在线观看| 不卡九肏| 亚洲字幕一区二区| 亚洲色情在线影视| 亚洲Av无码成人精品国产| 色99久草| 能看的AV| 女性喷水高潮在线观看| 大香蕉十区| 国产对白刺激视频| 激情小说亚洲视频| 伊人五月天| 美女91在线| 精品无码一区二区| 国产美女销魂在线观看不卡| 91l欧美在线| 人人爱人人操人人性| 后入式福利| 日本特黄f c2| 免费观看网黄| 97超碰中文字幕| 婷婷色综合| av毛片aaaaa免费看| 97在线观视频免费观看| 久久AV无码网址| 一二三区精品视频| 三级片大波波| 免费A V在线播放| 欧美亚洲首页| 男人的天堂欧美| 免费在线观看AV无码网站| 老熟女综合| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 久操com| 可乐操亚洲蜜911| 夜夜操夜夜爽夜夜高潮| 日韩欧美tv一区二区在线观看| 亚洲天天自拍| 一级黄碟在线观看| 九热视频| 一本久道在线综合视频| 校园激情狠狠四射| 美国黄片aaa| 人妻少妇久久| 亚洲情色婷婷五月天| 欧美日韩在线国产在线| …亚洲黄色厕厕女女在线播…| 蜜臀久久久国产| 96精品在线| 久久久国产亚洲精品系列| 亚洲国产精品无石码久久| 中国熟女网站| 国产精品青青草| 欧美亚洲日本激情在线| 国产欧美在线观看免费观看| 青青草在线视频播放器| 91美女在线视频| 欧美午夜精品久久久久久3D| 久久国产热视频97电影| 啊啊啊在线观看| 麻豆色约约| 1204金沙人妻懂旧版免费| 五月丁香在线| 爽 好舒服 无码刺激久久| 少妇一区二区三区精选| 午夜毛片亚洲精品片国产久久久| 亚洲一二三四区在线免费看视频| 超碰97资源大奶| 丁香六月激情综合| 亚洲性爱无码乱伦av| 性爱视频啪啪啪啪| 一区二区三区免费视频入口| 久久久久久十| 91热色| 国产第11页| 久久99手机免费视频| 欧美天天插| 男人天堂一区二区| 中国亚洲呦女专区| 欧美系列在线一区二区| 再深点灬舒服灬太大了添视频| 国产色产精品在线观看| 欧美性色网| 色与欲影视| 97资源站日韩| 超碰色图| 久久啊啊| 91一区二匹| 天天综合网日韩| 免费视频一二三区| 欧美色院| 囯产精品久久久久久久久久二区三区| 啪啪啪综合| 黄页av| 国产精品国产精品国产| www国产精品| 久久超碰com| 日本一区二区三区四区五区六区七区八区九区| 激情婷婷黑人91| 青青草这里只有精品| 啊啊啊慢点| 97亚洲在线| 私人尤物在线精品不卡| 99婷婷一区二区| 中文字幕,人妻,日韩| 国产家庭乱伦性爱视频| 精品人妻av在线播放| 26uuu国产成人综合| 人妻99p| 激情丁香五月| 奸色色 男人天堂 天天射| 无码人妻一区二区一牛影视| 有码人妻系列| 夜夜嗨绯色| 九久久精品| 久9九综合在线| 成·人免费午夜在线观看| 亚州熟女乱伦| 色狠狠 - 百度| 午夜免费福利视频一区| h在线看免费版在线看| 伊人影院在线理论播放 | 婷婷色香伊人| 国产丝袜欧美在线视频| 久久精品国产亚洲AV嘿嘿| www.色99| 超碰 另类 欧美| 无毛精品| 综合久久9| 亚洲天堂一区二区久久| 久草视频分类在线| 天天操女人| 玖玖爱伊人玖玖爱| 五月天伊人网| 国产精品人人爽人人做可爱福利| 91动漫操逼视频| 97人肏| 久草精品视频| 欧美色性情| 色天使亚洲综合在线观看| 999国产精品999| 欧美亚男人的天堂| 久久久无码av精| 日韩三级一区 | 日夜尻逼网| 日本中文字幕不卡视频| 国产成人www免费人成看片| 久久本道| 啊啊啊啊,啊啊好多水| 99婷婷一区二区| 极品色www影院| 人妻人人澡人人爽人人| 91亚洲综合在线| 近亲乱伦一区二区| 亚91亚洲网| 蜜臀99久| 国产 丝袜 欧美中文 另类| 麻豆影音天美视频| 亚洲美女精品九九视频| 国产免费操逼| 天天日日日射| 黄页| 亚洲欧美精品福利在线| 亚洲欧美国产中文字幕| 欧美人妻少妇| 久久婷婷色| 亚洲综合大片| 日本十八禁免费看污网站| 中文字暮97| 欧洲精品二区| 手机看av网站在线看| 日韩电影天堂视频一区二区| V A在线| 99热只有| 清纯唯美第一页| 亚洲AV无码国产精品久久久久 | www.91人妻.com| 综合国产97| 欧美色涩| 日韩有码免费视频| 超碰精品97| 欧美一级做a爰片免费视频| 加勒比海成人视频网| 黄片qw| 日本加靬比网站发布页| 狠狠爱综合网| 九色 人妻 大香蕉| 女优大全 - 91n| 91久久久久久| 九九九成人| 国产福利影视| 亚洲人精品久久久| 人人考人人摸人人干| 亚洲欧美日韩中文久久自慰| 国内毛片婷婷六月色| 91久久堂| 性爱免费视频成人| 欧美青青视频| 欧美日韩操逼动图| 99久久9| 亚洲精品亚洲人成在线麻豆| 久久久一区二区| 最新日韩黄片| 青青草大香蕉视频| 五月婷婷深深爱| 熟妇一区二区| 九色97| 亚洲 欧美 日韩 国产一区二区| 黄色污污污污污污网站| 精品91| 97久久精品国产| 九月丁香婷婷色| 风月影院男女十八禁| 国产女性无套 免费观看| 天堂亚洲精品| 欧美黄页在线| 成人一道本免费视频| 婷婷另类小说| 久久久麻豆精品| 欧美激情在线观看视频| 91 手机在线播放 绯色| 国产精品不卡av免费在线观看| 人人摸人人干| 美國A片| 欧美综合1性辶| 一二三啪啪专区| 18禁免费视频| 国产区在线| 性欧美天天| 高清无码 国产精品| 国产91美女视频| 大香蕉伊人网WWWn0n| 18禁免费视频| 97综合激情| 综合网欧| 桃花色涩综合影院| 一区二区三区国产在线播放 | 人人操人人叉人人插人人| 亚洲色图A| 亚洲AV不卡在线观看尤物| 三级片网站在线播放| 精品亚洲| 99蜜月精品久久| 香一区二区三区| 久久久久久精品免费看A级| 91人人操| 久久久成人精品| 97AV爱| 懂色AV蜜臀无码精品APP| 放黄片放3级黄片没穿衣服| 亚洲综合射| 九九热九九热| 日本人人操人人操| 国内毛片欧美香蕉精品| 欧美性少妇| 一区二区三区无卡视频在线观看| 97自拍视频在线| 国产h片在线观看视频| 日韩一级二级三级免费看完整版 | 久久免费精品视频免一| 亚洲AV无码秘 蜜桃臀国精产品| 无码九九| 亚洲综合图色在线| 日韩97超碰中文字幕| 综合久久欧美| 男人的天堂午夜av| 97欧美视频| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 国产探花日韩援交| 97资源久久| 蜜桃久久一区| 好爽免费视频,| 鸥美插入视频| 久久本道| 香蕉在线一区二区三区| HEYZO高无码国产精品227| 欧美偷拍区| 国产操逼网站亚洲一级黄色| 亚洲女人91| aV中文麻| 九九九九九九免费视频| 日韩欧美资源| 伊人精品视频| 69人妻精品丰满熟女区| 九九玖玖精品| 国模限制级电影| 嗯嗯啊中文字幕| 国产 码在线成人网站| 大香蕉免费乱伦视频| 久久美女国产| 精品毛片av一区二区| 性爱综合一区二区| 超碰精品日韩欧美国产| 男人亚洲天堂| 蜜桃av色偷偷av老熟女| 97精品免费视频网站| 性91| 特色a在线上| 熟女人妻一区二区三区免费看| 精品久久97| 神马麻豆福利院| 九九热三级片| 不卡日本一区二区| 99久久99久久免费精品蜜臀| 欧美在线啊啊| 91亚洲综合| av网站国产主播在线| 九九精品美女高溯喷水| 亚春色色| 九九热av| 天天综合-91入口| 欧美91精品国产自产| 青娱乐休闲视频在线观看| 久久久久少妇| 综合亚洲欧美精品日韩?v| 无码精品久久| 日韩色欲久久一二三四区|