日韩精品一区二区三区在线视频放-无码中文字幕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
返回資訊列表
色图综合| 美国一区二区三区视频| 91neishe| 五月丁香激情综合| 激情抓乳插进去啪啪啪日韩 | 五月天开心网| 日韩Va亚洲va欧美Ⅴa久久| 少妇天堂| 男人的天堂三级| 精品十三区| 蜜臀少妇一区二区| 亚洲二区精品在线观看| 久久黄片国产一区二区| 亚洲国产另类在线中文| 狠狠超| 九九免费影片| 夜夜免费视频| 欧美色图在线视频少妇| 亚洲欲色9532548967一区| 97视频观看| 黄色网址在线免费观看| 欧美真人抽搐一进一出gif| 国产一区在线免费播放| 欧美久久人人网| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 国产福利合集| 黄页大片在线观看| 人妻丝袜无 码视频专区| 中国一区二区亚洲人妻| 免费的很黄很污的全部视频| 中日亚韩免费视频| 五月婷婷丁香六月丁香| 亚洲最大成人a毛毛片| 日韩成人精品| 中文字幕av色| 97在线免费视频| 中文字幕乱妇免费视频| 色图四区| 国产成人久久精品蜜臀| 91老司机在线| 91精品无码人妻系列| 性爱视频免费网址| 日韩av性爱在线播放| 久久久久久久精| 亚洲丝袜二区在线| 综合色欧美| 91亚洲人| 成人AV超碰免费在线| 被操高清无码视频| 性爱乱伦网址| 青娱乐导航AV| 欧美中文狠| juliaann丝袜大战黑鬼| 91精品人妻一区二区三区蜜桃| 欧美精品系列| 91AV入口| 国产人妻天天干精品| 欧美一级色| 欧美极品女人的天堂| 女同性恋一区二区三区精品视频| 天海翼久久| 欧美在线干| 大香蕉日韩| 国产午夜福利电影免费在线观看| 人妻少妇av在线观看| 亚 欧 美 综合| 精品国产污一区二区三区| 亚洲欧美setu| 免费视频观看60秒| 日韩精品一区二区日韩| 91久久婷婷| 久久噜噜噜精品国产亚洲综合| 伊人国产av| 精品九九九九九九九| 狠狠操狠狠燥| 国产传媒午夜理伦精品| 色色婷婷五月| 精品9999| 乱伦1色页| 91色碰| 天天操天天谢| 久久久夜夜嗨免费视频| 风流老熟女一区二区三区l| 91总综合网| 麻豆区久久久久亚| 波多野结衣之双飞调教在线播放| 超碰1997| 60秒不遮不挡| 亚洲综合五月天| 97色诱| 精品制服美女中文一区二区三区| 免费一级性爱久久| 97干在线视频| 久久亚洲天堂| 亚洲自拍天堂| 嫩草 人人网精品| 中文字幕在线免费观看 | m欧洲一级午老| 人妻精品一区一区三区蜜桃91| 探花精品 一区二区| 久久成人午夜精品影院| 大肉棒导航| 精品免费视频国产一区| 岛国小电影| 日韩精品 欧美激情| 人妻日日干| 天天综合网合集91| 乱伦av麻豆| 69综合网| 熟女激情综合网| 99激情| 日本道人妻久久久在线不卡色视频| 操www| 夜夜嗷嗷一区二区| 不卡中文字幕aⅴ在线| 蜜桃传媒一区二区亚洲| 国产精品爆乳懂色蜜乳| xxx亚洲午夜天堂| 日韩国产精品人妻无码久久久| 屌逼传媒| 国产三区免费在线观看| 久久精品老司| 国产女人和拘做爰视频| 情色五月天就去干| 五月花婷婷| 人妻少妇精品视频一区二区三区| 91丝袜美女| 超清福利精品视频在线| 嗯~啊~快点 死我视频免费看网站| 国产精品999zyz| 亚洲综合射| 久操凹凸视频| 久久精品28| 丁香五月综合| 波多野结衣AV无码一区| 在线情色电影 91大| 国产精品视频白浆免费| 欧美78p| 国产97在线视频| 91欧美| 亚洲情色综合| 青久操| 1人人看人人摸人人操| 欧美成人综合| 中文字幕 人妻不满 在线视频| 欧美春色| 老司机免费视频在线91| 国产超碰| 啪啪啪精品| 91激情综合| 亚洲第一在线视频| 久久久一区二区三区三州| 999 久久久| 99色色| 欧美成熟性爱精品| 欧美综合亚洲| 大香蕉中文aV在线| 青草视频在线看看看看看看看看看| 亚洲福利影院一区久久| 97精品97久久| 99久久久无码| 国产热RE99久久6国产精品首| 深夜福利黄片| 88在线一区二区三区| 嗯嗯啊啊视频在线看| 无码精品人妻一区二区三区妖精 | 家庭乱伦国产| 97国产精品一区| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 精品国产av一区二区三区四区入口| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 日产中文字幕2020| 婷婷大香蕉| 在线99热| 久操操AV电影| 欧美黄页| 果冻传媒A片麻豆熟妇人妻| 黄色高清久久无码依人| 97免费在线视频在线观看| 午夜偷拍久久熟女| 欧美日本中字另类在线| 家庭乱伦国产精品| 欧美亚洲自拍另类人妻| 97免费在线观看| 97久久精品不卡| 午夜啊啊啊| 亚洲 欧美都市激情| 亚洲中文字母在线播放| 日韩亚洲中文字幕在线| 国产一区二区精品久久99| 欧美Ⅴ性爱| 日本加勒比无码专区| 少妇特黄一区二区三区| 国产自偷| 亚洲图片小说欧洲| 欧美色性情| 嗯嗯啊啊啊好爽| 人妻大香蕉| 神马久久啊啊| 久久亚码| 欧美国产操逼| 人人操人人射人人干| 青青草精玖玖69精品| 小草三级久久观看| 夜夜嗨AV蜜臀av| 国产不卡精品91| 美女诱惑爱爱| 亚洲色欲天天人妻无码系列专区| 精品国产肉丝袜在线拍国语 | 色综合久久夜色精品国产天堂| 亚洲情色电影网| 超碰人人妻| av天天在线观看| 亚洲精品一区中文字幕乱码| 久久久亚洲精品电影免费看| 男人下部插入女人下部 | 亚洲伊人成综合成人网| 中文字幕乱码人妻二区三区| 性爱Av免费| 午夜影美女日鸡鸡天天视频国产| av网页一区二区三区| 91c色| av天堂天堂av日韩| 国产激情片在线观看| 五月天婷婷色色| 久久久com| 男人天堂站| 亚洲自拍一区夜夜操| 亚洲欲| 天天舔日美女视频| 久久色网| 欧美国产伊人久久久久| 嗯嗯啊啊视频在线看| 久久中文色图| 欧美日韩小说| 亚洲色系另类精品国产| 97人人射| 欧美亚洲涩涩| 沈阳熟女高潮对白视频| 深夜激情无码| JULIA人妻风俗店中出电影| 亚洲成人精品久久久| 嗯嗯嗯啊啊啊干死我吧| 婷婷涩嫩草鲁丝久久午夜精品| JIZZJIZZ亚洲女人被躁| 欧美亚洲另类在线蜜桃| 欧美精品成人亚洲| 少妇熟女视频一区二区三区 | 黑人天8A∨高清网站| 龙兴卡官方查询| 超碰人妻97| 国产又黄又粗的视频| 探花精品视频| 日韩欧美天天爽爽爽天天爽爽| aV中文麻| 天天躁日日躁xxxxx| 亚洲日韩一区电影| 国产乱青青草久久| 免费岛国一级片| 亚欧高清v| 无码欧美有限公司| 日韩图色| 色婷五月| 黄久久| 一级@啪啪视频| 99久久久| 全国男人天堂网| 人妻熟女字幕一区二区| 91超碰在线播放| 黄色香蕉视频网站一区| 91黑丝在线播放| 夜夜无码| 国产人妻天天干精品| 大香蕉中文aV在线| 日本孕妇一区二区视频操逼免费看| 亚洲一区日韩| 一二三四区操操Av| av天堂5| 男人天堂 天天射| 国产精品国产亚洲区艳妇糸列| 无码丰满熟妇一区二区浪潮AV| 九月丁香| 韩日欧亚a级| 操逼操网| 天天欧美97| 国产福利小视频高清在线观看| 麻豆福利视频导航| 亚洲精品三区在线观看| 日本女厕偷拍| 色哟哟综合| 欧美性爱一内片一区二区三区| 熟妇人妻精品一区二区| 丁香五月天堂网| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 久久99视频| 色哟哟av| 色色丁香| 国产高清视频无码在线| 亚洲AV无码久久精品蜜桃小说| 蜜臀一区二区三区在线| 色九月综合| 操人人| 玖玖综合色| 在线观看亚洲成人精品| 啊啊啊啊啊啊好湿好爽视频| 俄罗斯一区二区视频在线观看| 伊人久久国产免费观看视频| 天天色黄色影院天天操| 久久后入制服| 日韩人体偷拍| 亚洲**2021在线观看| 闷骚老熟女15P| 99国产精品视频尤物| 91美女视频在线免费观看| 日韩色欲久久一二三四区| 欧美日韩精品青青| 狠狠狠一区二区三区| 在线视频亚洲无码| 久久伦理视频久久大香蕉视频| 伊人影院综合是一个与深夜成人在线| 天天综合欧美黑人| 五月久久HDAV| 最新中文字幕精品在线| 人妻熟女一区二区三区视频| 麻豆天美传媒在线视频天堂| 嗯啊抽插大香蕉网页| 91久久国产精品| 天天操天天射青青草| 久久受www免费人成| 十八禁电影伊人网| 国内黄色精品| 强歼乱伦资源网| 99re这里只有精品9| 大吊色| 亚洲欧美性生活| 在线观看无码三级少妇| 噜噜噜噜天天狠狠| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 蜜桃久久综合视频| 日本三级一区二区 在线| 香蕉国产97| 爱干爱射网啊啊啊| 91人妻Pr| 91快色色色色色| 在线欧美亚洲| 九热超碰| 蜜臀99999| 91oumei| 99精品视频在线观看免费| 72av视频| 97欧美资源| 1204av韩国| 人妻少妇一区二区| 成人综合久久精品色婷婷| 无码操逼视频一下| 伊人麻豆传媒| 欧美第五页| 国产男女无套97| www.夜夜| 啪啪91| 在线人人人人人人精品超| 97超碰碰| 日本成a人v网站在线观看| 欧美性Fer办公室秘书| 亚洲 图片 欧美 色图| 午夜精品久久久久久久男人的天堂 | 免费啪啪av| 欧美日韩1234| 久久久久少妇| 欧美一级A一级a爱片久久| 蜜桃午夜视频一区二区| 亚洲欧美综合网站| 大香蕉之青青草原| 最新9久久久9免费视频| 欧美日韩另类字幕中文| 性交一区二区在线播放| 日日夜夜模| 九九九九九九九九九五码| 欧美性暴力猛交XXXX| 欧插网站| 少妇一区二区三区在线观看| 日本最新免费韩国1区2区视频播放| 亚洲色图久久成人| 青青草自拍视频在线播放| 国色天香av| 台湾佬激情综合| 色色色色色色色色色色色色色色综合 | 蜜桃视频精品一区二区| 美女黄页| 丝袜无码a片| 又摸又舔在线观看网站| 夜草欧美| 丁香7月婷婷| 超碰色美女| 好属操| 人人搞人人插人人操| 午夜精品久久一区二区| 超碰成人最新最好看| 大色综合网| 国产精品国产拍高清AV| 蜜臀久久99精品久久久老,,| 丝袜性亚洲| 99RE在线视频精品,这里只有精品| 亚洲综合影片| 欧美大波激情xxxx| 精品日韩中文在线| 99热精品在线观看| 国产女上位好爽在线| 天天做天天爱天天爽AV| 久久久草草精品| 欧美日韩精品久久久久久久久东北老熟妇| 日韩无码极品| 国产精品熟女丝袜一区二区| 98一区二区精品| 后入式在线免费观看60秒| 亚洲第一页综合在线| 97精| 欧美强奸一区二区诱惑| 欧美日韩222| 色香伊人| 超碰78| 成人5码视频| 激情综合亚洲| 午夜毛片高清免费不卡| 色汉综合| **一级毛片国产| 青青草吊丝| 亚洲在线观看| 黄色人人| 热久久91婷婷| 欧美色91| 国产成年免费大片黄在线观看| 9久精品| 玖玖爱一区在线| 久草免费在线视频| 国产原创剧情在线丝袜 | 熟女人妻精品一区二区视频| 亚欧成人中文字幕一区| 青青草吊丝| 欧美成人贴图| 国产精品极品美女视频| 日韩精品熟妇| 欧美超碰97| 91干熟女| 十八禁电影伊人网| 操逼视频色| 黑操B| 深夜激情| 91成人久久| 粉嫩AV一区夜夜嗨| 成人26uuu| 亚洲欧洲视频小说在线观看| 3P丝袜熟女 色综合| 操逼不卡中文字幕| 麻豆一区二区三区精品| 久久透逼视频| 国产精品久久久久久夜夜夜| 淫荡网址| 欧美亚洲激情小说| 久操91视频| 欧美日韩国产传媒在线精品| 一区二区视频在看| 五月丁香网站| 97超碰色色| 日操粉逼逼| 日韩欧美偷拍美女视频| 黄色大片免费在线| 久久精品老司| 国产精品蜜臀久久久久无码AV| 天天干天天日天天射黄色| 天天综合网~91| 大香蕉啪啪啪| 亚州一区二区| 亚洲综合码| 色婷婷六月丁香七月婷婷| 殴美日韩m| 十八禁视频一区二区| 人妻熟女一区二区三区在线| 99在线无码精品秘 入口黑人| 久久超碰大香蕉| 真实高潮91| 91亚洲欧美| 日韩传媒在线| 国产自产自拍| 蜜汁欧美| 少妇诱惑视频| 国产精品久久久久久无码红治院| 国产情色第一第二页在线观看| 欧美日韩国产高清在线一二三区 | 日日躁狠狠躁天天躁精品| 精品一区二区亚洲国产| 78精品| 国产精品久久久视频| www.99色| 激情文学亚洲| 宅男91视频在线播放| 国产特级毛片AAAAAA高潮流水| 欧美极品少妇| 北条麻妃99精品青青久久| 9国产超碰| 国产风韵犹存熟妇三区| 小少妇| 欧美精品日韩久久久九| 老熟乱一区二区三区四区| 久妇网| 可以在线观看的黄色网址| 噜噜噜噜天天狠狠| 97色色色综合网站| 久久久久9| 亚洲黄片免费在线播放| 91男人综合| 亚洲男人的天堂一区二区| 国产熟女免费观看久久| 女人天堂av在线播放| 亚洲综合射| 国产乱码久久| 久久免费精品视频免一| 91视频精品| 亚洲图片 欧美电影| 日韩欧美丝袜诱惑| 99在线精品视频| 不卡一区二区日本视频| 蜜乳中文字幕a在线| 99热线麻豆 | 色欧美在线| 蜜桃视频一区二区三区| www鬼畜国产男人的天堂| 很很热性爱视频| 中文字幕人妻资源在线| 97超碰香蕉| 国产三级中文字幕粉嫩| 色综合20p| 亚洲色图a| 色五月婷婷五月天| 欧美在线干| 上海一级黄片| 黄色视频60分钟| 久久久新亚洲AV| 欧美性爱一区二区三区| 天天碰久久入| 人妻少妇精品无码专区二区密桃| 久草热制服丝袜在线观看| Av色五月| 精品久久在线区一区| 久久性爱视频| 一区二区 韩日AV| 天天综合色| 99久久久| 久久久精品国产亚洲伊人| 婷婷成人五月天| 天美传媒AV国产在线| 日韩激情无码影院| 免费精品无码一级毛片牛牛影视| 大色网久久| 日韩中文字幕精品一二三事国产精品| 99精品伊人| 欧洲乱码视频| 久偷拍欧美日韩三区| 色婷婷久久综合超碰| 91天美传媒精品| 大吊色| 久操操| 精品999一区二区| 97久久久网站| 啊啊啊好大好深| 亚洲精品 欧美97色色| 久久亚州大香蕉| 久久禁| 亚洲天堂久久| 中文字幕精品码亚洲| 亚洲欧美精品91| 啊啊啊好爽快点啊啊啊嗯嗯| 人妻精品一区二区三区| 狼人久草| 97超碰69| 欧美日本天堂| 69丨亚洲丨精品丨入口免费播放| 亚洲在钱| 亚洲 在线| 男女一进一出视频久久| 在线中文字幕| 在线看免费无码AV天堂的| 久久性爱免费送| 天天综合色| 一道本东京热加勒比一区二区三区| 麻豆婷婷成人一二三| 亚洲日韩久久精品一区| 久草免费在线视频| 一区二区三区亚洲| 婷婷五月天色| 欧美久久婷婷| 久久久久成人网| 亚欧高清| 亚洲欧美激情在线视频| 91大神电影天堂| 国产第11页| 大香蕉伊人75| 久久国产免费激情视频| 色久综合| 一区二区三区色综合| 99精品九九九九九九| 尤物av网站免费在线播放| 久久久久久久国产视频| 伊人97超碰| 日产成人久久| 成人av毛片在线观看| 手机看av网站在线看| 国产精品久久久久久夜夜夜| 高颜值美女口爆高潮浪叫| 欧美人与动性人交a| 在线观看精品国产免费| 少妇与黑人高潮在线| 東南亚性呦成人伦理资源在线视频| 91精品微拍福利| 蜜桃视频精品一区二区| 亚州高清AV| 国产女人和拘做爰视频 | 亚洲最大无码中文字幕网站| 99爱久久视频频| 欧美色图20P| 啪一啪免费视频| 亚洲伊人久久精品狠狠在线| 少妇天堂| 色大师网站www永久网站视频| 欧美日日人人天天| 久久毛卡| 性色av一区二区| 思思久热在线精品66| 日本99视频| 亚州,欧美在线| 久久国内| 久久机热| 在线观看中文av字幕| 蜜屁Av| 五码视频在线观看| 亚洲最大的黄色电影网站。| 91亚洲综合| 日韩草久视频| 欧美夜夜| 天天摸夜夜摸| 日韩激情电影中文字幕| 东北黄色电影| 无码精品久久久久久亚洲| 精品国产乱码久久久久久影片| 天躁夜夜躁2021| 欧美久热| 火箭成精品视频884必出精品| 另类在线| 亚洲色人| 国产精品亚洲四五区在线观看| 精品无码欧美三级| 麻豆AV短剧| 又大又长又粗又爽又黄| 综合九九| 国产成人无码网站在线视频| 清纯唯美第一页| 蜜桃色色网站视频三区| 亚洲欧美日韩免费观看| 97香蕉人人乳| 成人八戒网站| 精品无码少妇| 亚洲AV资源| 午夜视频好爽啊| 91少妇通奸网站| 任你爽视频| 一二三区操逼国产91| 啊啊啊97视频| 人妻熟女av国产网站| 欧美激情片一区二区| 久久国产精品一级二级三级| 亚洲学生妹高清av| 色婷婷成人综合| 91社操逼| 久久系列| 热久日综合| 亚洲第一无码播放立川理惠| 超碰97 线线 在现| 久草婷婷| 人妻AV在线| 日韩欧美操逼xxx| 伊人四虎综合| 91久久精品国产| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 色爱欲亚洲| a v网站在线播放| 91丝袜| 性生活无遮挡纯毛片在线看| 久热9| 久久精品人人做人人看| 日韩无码服务区| 天天干天天日天天射黄色大片| 美國A片| 91视频综合网| 欧美精品欧美精品系列| AV一二区| 香蕉综合网| 91精品国产日韩欧美综合| 72av视频| 国产99999久久精品| 中日无幕一二三四区| 亚洲操逼视频网站| 天天爽夜夜爽夜夜爽精| 岛国毛片手机在线观看| 亚洲色宗合| 亚洲久久东京热一二三四五区视频| 欧美制服网站美腿丝袜| 在线精品福利免费播放| 影音先锋日本一区二区| 精品国产乱码久久久久久蜜臀| 操淫穴亚洲五月丁香 | 欧美性生活综合| 黄片免费视频2019| 日本天天干天天操一区| 99色在线| 97久久国产精品| 久久曰曰| 91女神在线视频| 五月丁香综合激情| 91高清无码下载| a男人的天堂久久一级A毛片| henhen91| 伊人9| 日本三级韩国三级美三级91| 九九九九日本 | 亚洲欧美国产中文视频| 中文字幕一二三| 欧美亚洲丝袜人妻制服中文99| 97亚洲国产| 欧美与日韩97| 亚洲日韩熟女人妻高清在线| 久久神马影院| 亚洲熟女乱熟乱熟妇综合网二区| 蜜臀av中字字幕网站| 久久日韩毛| 91蜜臀熟女| 日本激情免费大片| 综合久久99| www.99在线| 免费毛片在线播放| 午夜精品探花| 亚洲综合一区二区| 不卡啪啪视频| 久久五月丁香| 小泽玛利亚一二三| 精品91摸| 乱码熟妇人妻久久久| 综合久欧洲| 99国产精品久久久久久久成人热| 97国伦国色| 日日骚 av| 欧美性爱网97| 欧美激情一| 欧美日韩一二三| 九九草| 日韩一级久久毛片| 八戒无码国产午夜福利| 欧美日韩国产高清在线一二三区| 久久久亚洲欧美综合| 亚洲国产高清福利视频| 91精品久久久久久77777| 五月天婷婷欧美三区| 啊啊啊啊啊啊啊国| 无码视频一区二区| 久久久一区二区| 天天综合网在线91| 老司机午夜精品视频| 波多野结衣被操50分钟免费视频| 亚洲成人美女无吗| 婷婷六月色| 中文字日本乱码| 肉丝无码中文高清| 久久东京热久久| 国产一区二区在线播放量| 人人爱人人操人人性| av九九| 亚洲天堂第一页| 女人18精品一区二区三区| 日韩有码专区| 岛国网址国产| 大香蕉伊人色偷偷在线| 国产精品第二页| 一二三区精品视频| 成人日韩3| 色色99| 日影院久久婷婷夜夜网| 亚洲色交| 美国aaaaa一级黄片| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 色婷婷六月丁香七月婷婷| 啪啪啪精品视频| 日本免费不卡二区| 97精品人妻一二三四| 国产无码精品成人| 欧洲色| 激情人妻另类| 日韩av电影成人在线| 99色在线观看| 精品中文一区二区| 免费观看网黄| 91 亚洲 欧洲| 天天日骚逼熟女| 国产超碰AV在线精品| 综合五月天| 啊啊啊在线看| 三级特黄60分钟播放| 日本久久久久久久久| 亚洲欧美变态| 国产第25页在线观看| 久久只有精品一区二区三区| 九九热三级片| 国产精品大香蕉| AV色图| 色就色综合| 精品久久久久黄少妇| 九九九精品美女| 伊人色综合网电影| 中文欧丝袜诱惑| 草莓精品视频在线免费观看| 九九热免费国产视频婷婷伊人五月| 久久成人网站| 大香网站| 天堂综合| 乱伦图一区| 330dv亚洲成年视频网| 国产精品亚洲色婷婷久久久| 久久久精久久久| 欧美在线91| 伊人影院在线理论播放 | 精品久久視頻在线| 中文字幕三四五区| 国产精品色| 97天天| 99热免费| 亚洲综合999| 亚洲性综合9| 天天做天天爱| 91精品成人www| av网站免费看| 91夜色chaopeng| 俄罗斯一区二区视频在线观看| 鸥美插入视频| 岛国AB视频| 精品人妻视频一区二区在线播放 | 一区麻豆 高清中文字幕| 男女一进一出视频久久| 大香蕉综合| 超碰无码加勒比| 久久AV色| 91Chinese在线| 久久这里只有精品9| AV天堂电影网| 国产AV激情无码久久无码 | 凸凹视频在线观看| 欧色网址| 在线综合 亚洲 欧美中文字幕 | 麻豆婷婷成人一二三| 免费一级精品啪啪视频| 男人的天堂无码| 婷婷中文字幕| 91被操| 美国三级日本三级久久99| 婷婷精品视频| 国产精品不卡av免费在线观看| 97色欧州| 天堂8在线新版官网| 偷拍 亚洲 欧美| 亚洲中文电影| 曰韩av中文字幕专区| 国产熟女精品一区二区| 日韩人妻精品中文字幕| 久久艹逼视频| 亚洲婷婷综合网| 天天操天天7| 蜜桃视频精品一区二区| 岛国片在线播放| 91情色在线| 中文字幕人妻色偷偷久久皮| 国产成人无码久久精品| 9色国产精品一区粉嫩| 粉嫩av一区二区三区四季| 色色色网站| 国产精品久久久久久久AV大片 | 日韩精品永久在线观看| 91骚熟女| 欧美天天在线| 中文字幕丝袜人妻| 狼人久草| 岛国片国产成人亚洲播放| 无码78| 天天情欲宗合网| 欧美成人精品一区二区三区| 国产夫妻性生活视频| 久久婷婷综合国际产色怕| 麻豆成人影音在线| 97热视频在线观看| 黄色二级片网站| 久久性爱城| 国产一级特黄大片处女| 国产精品欧美在线观看| 亚洲人码13| 少妇人妻精品| 素人美腿视频网站| 九九av| 7777欧美成是人在线观看| 先锋影音av先锋一区| 无码人妻一区二区三区四区老鸭窝| 欧美猛交黑寡妇中文字幕| 97日本超碰综合| 九九色热| 亚洲一区日韩| 国产精品视频白浆免费| 亚洲天堂一区二区久久| 日本乱人伦片中文三区| 日韩有码专区| 蜜臀网址在线| 亚洲素人综合| 成人一级二级| 青青草玖玖爱| 校园春色中文字幕AV| AV丝袜少妇| 久久精品一区| 性欧美天天| 欧美亚洲丝袜美女电影| 九九视品黄色| 1区2区3区在线视频| 天天插天天插| 盗摄 精品 另类 一区| 五月丁香啪| 国产这里只有精品| 激情综合五月| 四虎AV在线观看| 亚洲综合小说另类图欧美视频激情小说色五月天 | 亚洲一区中文精品| 12一15性XXXX粉嫩国产| 男女啪啪啪18禁网站| 国产一区二区二区按摩精品啪视频| 九九九九九九九九九国产精品| 亚洲清纯综合| 91白嫩| 亚洲日韩电影| 福利视频香蕉免费一区二区在线| 另类图片综合| 100啪啪视频大全| 国产久久成人| 色嗨嗨在线| 九一综合精品视品av| 天天添天天干电影| 日韩 人妻 精品| www.高清无码诱惑一区.com | 无码粉嫩白虎一线天b区| 国产精品欧美在线观看| 成人线上超碰| 成在线人在线观看视频| 26uuu国产成人综合| 亚洲精品三| av天天在线观看| 精品97精品97| 后入福利| 国产三级片在线观看| 久久超碰国产一区二区三区| 伊人精品久久网站| 欧美顶级黄片AAAAA在线免费看| 婷色五月| 免费人人搞97| 亚洲色图第四色| 国产综合久久久麻桃个| 亚洲在线网站| 丰满人妻一区二区三区大胸懂色| 天天拍天天操| 亚洲综合113页| 久久是精品| 99re98| 亚洲?V无码专区在线电影| 交换娇妻呻吟声不停中文字幕| 久草免费在线一区二区| 嗯啊不要啊在线 | 日本一级特级毛片视频| 中文字幕亚洲永久精品| 99∨VTV| 美日韩在线不卡人妻| 国产9熟妇视频网站| 人人看黄色视频| 92午夜免费福利视频| 青娱乐亚洲热| 97在线欧| 综合亚洲欧美精品日韩?v| 国内自拍 日韩激情 99| 久草婷婷| 亚洲熟女一区二区| 欧美日韩*字幕一区| 日本三级R| 超碰在线974| 欧美综合色| 91人妻精华帖| 久久黄色网址| 97欧美色| 日本免费一级AAA大片器 | 综合亚洲欧美| 日本一级婬片试看三分钟| 天天做天天爱天天高潮| 丁香婷婷九月| 九月丁香| 天天看特黄的免费网站| 一二三四区电影| 国产精品人人爽人人做可爱福利| 一区二区日韩欧美久久| 裸体美女久久久| 黑人娇小av在线播放| 中文字幕性感少妇av| 色综和网| 岛国免费视频在线| 婷婷五月天补不补| nuu12国产麻豆精品| 国产久久成人| 欧美成不卡网| 91亚洲人| 2010男人的天堂| 97色欧洲| 欧美国产日韩高清在线| 久久综合久色欧美综合狠狠| 另类亚洲一区二区三区| 91麻豆天美国产欧美| 国产白丝网站| 天天干人妇| 婷婷色色五月天| 国产午夜精品理论片a大结局| 日亚韩精品视频二区三| 少妇人妻激情四射| 国产精品一区午夜福利| 热久日综合| 日韩操p| 九一综合精品视品av| 在线a亚洲视频播放在线| 91狠婷| 日韩精品人妻| 青青草日本无码| 久久精品人妻一区| 色av中文字| 26uuu最新| 亚洲日韩青青草色月| 性色AV蜜色av色欲av| 日本丝袜美腿人妻九九| 日熟女| 狠狠躁天天躁日日躁| www.伪伪| 国内成人圈中文字幕无码视频| 色情乱伦AV| 四虎影视国产精品| 开心五月婷婷| 97香蕉网| 插老姨肥穴| 欧美一级国产一级| 男人的天堂日韩| 91啪啪| 无遮挡男女激烈动态图| 99re3这里只有精品| 免费的黄片有限公司| 青青欧美| 天堂8在线新版官网| 精品国产乱子伦一区二区三区,精品一| 大香樵伊人网| 国产又粗又大硬免费色网视频| 九九久久国产精品| 午夜啪啪片| 欧美激情 一区| 麻豆国产av网| 国产精品麻豆视频网站| 99视频自拍区| 欧洲Au麻豆| 日韩色| 加勒比综合88| 91网站视频在线观看| 综合欧美日本三级| 69一区二区三区 | 大香蕉日韩| 夜夜狼人妻| 久久无码电影| 久久91| 夜夜夜夜爽| 久热69九色熟妇97| 国产AV久久野战精品| 好涩综合| 亚av顶级裸体一区二区三区四区五区 | 午夜免费视频1000| 国产精品ⅴ无码大片在线看.| 激情婷婷丁香网| 大香蕉伊人网WWWn0n| 欧美极度丰满熟妇hd| 男插女青青影院| 久操电影网| 超碰97玖玖爱| 五月天婷婷综合网| 久操凹凸视频| 999精品久久久久久久| 97精品在线| 色999偷自拍拍| 天天爽人人综合免费7799| 免费福利视频中文字幕| 精品传媒在线一区| 欧美 亚洲 综合 制服 另类| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 丁香五月自拍| 亚洲第一精品在线视频| 亚洲精品99999| 色天使AV天堂| 五十路二区在线| 黄页大片在线观看| 综合色99| 男女激情黄色网址| 精品人妻免费观看| 密臀在线一区尤物| 色香91| 久久久久9999精品九九九| 嗯啊啊啊轻点视频 | 日韩AV片| 激情久久久| 人人操人人操人人操人人操人人操人人人11.CM | 激情小说日韩无码| 中文字幕在线免费观看 | 五月天激情小说网| 强奸a片网| 久久久久久国产无码精品| 一区二区免费电影久久| 欧美91精品国产自产| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 日本三级精品| 久久久久幕乱码| 97国产伦理| 精品人妻一区二区三区夜夜| 亚州综合电影| 久久久亚洲精品电影免费看| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 日本免费一级AAA大片器| 久热精品在线国产| 欧美18老人禁| 国产欧美在线观看免费观看| 亚洲精品97| 国产精品久久久| 97天堂| 亚洲97综| 久久性爱视频免费看| 蜜桃狠狠色伊人亚洲综合网站| 欧美亚洲综合高清在线| 欧美人妻少妇| 日韩福利电影网| 老熟女乱伦片| 国产亚洲精品A在线观看下载| AⅤ片水多多| 午夜a成v人电影| 在线一道啪| 综合欧美日韩在线观看| 成人三级片无码| 中文字幕在线高清男人的天堂| 综合色99| 91久久久久久久久久久| 欧美亚洲丝袜美女电影| 男生女生啊啊啊啊| 国产女人9999| 久久久亚洲熟妇资源| 天天射夜夜骑|