久久亚洲成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
返回資訊列表
成人午夜无码视频| 日韩成人精品| 婷婷五月天激情网| 日本裸体久久色噜噜| 九九免费影片| 欧美日产国产在线成人第一区| 婷婷色综合| 青青青草伊人精品| 大香蕉黄色一区| 亚洲精品骚逼| 老熟女乱伦一区| 人妻啊啊人妻啊啊| 啪啪啪综合| 成人性爱高清视频免费看| 亚洲男人的天堂AV| 91黑人狂躁丰满熟妇| 天天爽夜夜操| 国产精品白丝AV| 日本高清一区二区在线| 久久超碰97中文字幕| 日本精品999| 99热这里只有精品9| 亚洲熟女综合| PMv在线观看| 国产欧美一区二区| 91久久| 激情丁香五月婷婷| 亚洲Av诱惑| 久久久久婷婷| 久久三| 五月丁香啪| 亚洲 综合 第一页| 啪啪资源网| 黑人免费福利视频| 翘臀vidoes| 亚洲天天操| 天天综合日韩网| 人妻夜夜爽天天爽三区麻豆AV网站| 欧美日不卡| 亚洲在线91| 激情小说五月天| 懂色Av一区二区三区| 乱伦熟女区| 91无码人妻精品一区二区三区蜜桃 | 超碰色美女| 很很热性爱视频| 亚洲精品人伦一区二区| 综合欧美日本三级| 欲色综合| 中文字幕av色| 激情小说图片亚洲首页| 国产一区免费午夜视频| 欧美亚洲性爱一区二区| 欧美色图91| 中文啪啪视频| 国产日韩精品无码去免费专区国产| 精品一区96| 少妇人妻太紧太深av| 欧美日动态视频| 97国产高清视频在线观看| 中文字幕第7页| 啊啊啊操一区| 嫩呦国产一区二区三区AV| 大香蕉综合在线| 国产浮力影院第1页| 伊人视频| 欧美日韩夜夜| 草草影院日本第一页| 91美女视频电影| 九九九九久久久| 亚欧性爱无码| 中出欧美| 欧美日韩人妻婷婷一区| 欧美黑人性猛交91| 色色色色日本| 蜜臀AV午夜精品久| 在线亚洲丝袜视频网站| 九九色精品| 欧美一级AAAAAAA| 国产诱惑| 另类图片五月| 日韩精品99999| 亚洲无码超碰免费| 清纯唯美第一页| 九九热免费国产视频婷婷伊人五月| 国产精品极品美女视频| 欧美美女视频| 淫穴高潮色图| 黄日韩| 十八禁啪啦拍视频无遮挡| 熟妇色99| 欧美午夜视频| 欧美狠狠弄| 综合国产影视三级| 97在线免费看视频| 9久久久久久| 日韩欧美丝袜诱惑| 大香蕉伊人色偷偷在线| 国产超碰| av网站国产主播在线| 青青草在线视频美女| 台湾佬中文娱乐自偷自拍| 免费作爱一级视频| 韩日性爱av| 日本不卡一区二区| 亚州黄站| 精吧天堂| 久久久久久久六六| 久草男人天堂| 少妇蜜汁| 成年女人一区| 丁香婷婷久久 | xxx0国产在线播放| 84YTCOM性无码| 99re28在线观看| 日本精品一区二区三| 黄色不卡视频| 97大色网| 800zy一区二区| 久99| 成年女人18级毛片毛片免费观看| 久久透逼视频| 亚洲日韩在线a不卡99精品| AV色女综合| 日韩射图| 欧美日韩97在线| 好屌色综合| 亚洲淫乱骚妇AV| 99re这里只有精品3| 熟女精品一区二区三区| 五月婷婷色色| 国产日韩精品一区二区三区| 久热69九色熟妇97| 精品久久久亚洲AV成人网站| 亚洲天堂7777| www.91久久| 日本精品不卡一二三区| 亚洲一本大道中文字幕无码在线| 另类小色呦| 成人麻豆av电影网站| 超清福利精品视频在线| 嫩草在线视频| 日本色色色色色视频| 一起草日韩| 神马久久久久久伦理片| 韩国午夜理伦三级好看| 日韩在线观看中文字幕视频| 亚洲天堂,男人| 婷婷综合| 久久婷婷国产一区二区色| 麻豆天美久久91| 婷婷情色综合网| 后入内射蜜桃臀| 97干在线看| 欧美熟妇乱码在线一区| 91久久久老司机| 综合激情一一91| 另类专区加勒比| 午夜福利 成人 91| 91美女视频| 天天综合网~91| 欲射影视| 伊人视频| 人妻丝袜无 码视频专区| 国产狂喷潮在线精品| 午夜九九| 97伪v| 天天干美少妇一区| 91动漫操逼视频| 乱伦熟妇一区二区| 超碰97人妻在线| 精品中文一区二区| 欧美一二在线| 超碰亚洲97| 九九综合久久| 五十路三级片| 第四色奇米影视777| 欧美色图欧美| 日本久久久久久久久久| 丝袜亚洲91| 久久久久久久极品香蕉视频| 久久98| 亚欧Av| 免费久久一级毛片大黄| 在线毛片片免费观看| av天堂电影网| 热热色中文无码| 色欲久久99精品久久| 国产精品视频在线播放 | 在线可观看的黄色网址| 午夜精品久久久久久久久久蜜桃 | 1204av韩国| 台欧久久精品视频| 色性综合| 92福利社视频| 五月天婷婷小说| 色欲久久综合| 久久99亚洲精品久久99果| 日本精品无码三级网站| 黄色AAAAAAAAAAA大片| 84YTCOM性无码| 天天日夜干| 日本亚洲嫩草影院啪啪| 中国91AV| 亚洲国产日韩精品久久久| 91痴汉| 日日AAvv| 天天欧美97| 91网站18+| 2017天天透天天通天天擦| 老女人老91妇女老热女| 国产一区二区三区,在线观看观看| 欧美少妇一区二区三区| 色999偷自拍拍| 九九九九九九亚洲| 久久精品免费| 日本天堂网| 精品久一区免费| 超碰超碰欧美| 亚洲情色1区| 色性荡荡荡荡视频| 久久神马影院| 国产在线精品电影观看| 国产精品动态一区二区三区四四| 久久后入制服| 丝袜AV一区二区三区| 9999久久久| 丝袜亚洲综合| 日本性感人妻91| 日产操逼| 亚洲综合性网址| 伊人久久大香大香线蕉中文| 欧美少妇性乱| 欧美在线视频观看一二三四区高清| 亚洲综合骚逼| 乱人乱色一区二区三区免费| 人妻一区二区三区熟女| 操逼网站网站| 国产女人操逼视频| 九色视频91| 私色综合网| 91最新综合| 欧美午夜视频| 精品二区三四区五电影 | 亚洲国产亚洲天堂| 97精品视频在线播放| 男人的天堂视频精品乱在线| 婷婷色综合欧美日韩| 26uuu成人影片| 日韩国产乱子伦App| 日韩中文字幕在线视频观看| 高清不卡视频| 天天天天做夜夜夜夜做| 综合熟妇一区二区三区| 国产自制av蜜乳| 亚洲国产精品成人综合| 97婷婷色| 综合网~91综合网| 久久久久久99999国产精品| 友优传媒精品在线一区二区| 午夜视频好爽啊| 美女写真| 九九毛片这里只有精品| 大香蕉琪琪日本女优不卡| 91 亚欧| 日本一区二区中文字幕久久| 国产精品白丝在线播放| 色五月激情网| 久无码| 欧美色九九九| 欧美人妻另类在线| 激情小说在线视频| 中国女人内射6XXXXX| 天天插天天干| 久久华人网| 国产日本顶级一区二区三区| 综合国产影视三级| 超碰97久| 一级做a爰片性色毛片久久| 欧美专区日本专区| 欧亚不卡| 日本色日夜干| 亚洲少妇中文字幕网址| 天天综合网1| 成人小电影网站tex| 久久精品国产亚洲AV高清演员表| 涩涩五月天| 60秒免费小视频| 人妻精品一区二区| 亚洲AV操| 九热大香蕉| 91国产丝袜白虎| 精品人妻中文字幕4399| 99re视频在线观看这里只有精品| 91爱看| 中文字幕欧美丝袜07资源| 久久久成人免费av电影| 久久久性| 96AV精品| 淫纸中9区| 亚洲 中文字幕 精品| 亚洲国产精品9999在线观看 | 欧美色偷拍| 国产蜜臀在线| 蜜乳av一区二区| 炮色五月| 呦呦一区| 九九av| 97国产精品久久久久| 一级成人性爱| 抽查国产福利主播| 四虎影视精品| 色综合色色| 九九九九97| 亚瑟国产精品久久无码| 亚洲情色一区三区| 久久在线观看免费视频 | 超碰在线97国产| 欧美在线官网| 九九九精品美女| 亚洲欧美精品福利在线| 天天操福利视频综合网站| 国产日韩欧美中文在线播放| 久久超碰免费的| 久久久精品网站| 一区二区激情国产熟女 | 三级日本一区二区三区| 欧美亚洲清纯| 国产无码精品成人| 好爽视频在线观看视频| 99免费在线视频| 午夜福利合集| 激情五月婷婷| 黄色一区三区| 日操粉逼逼| 亚州综合电影| 被男人吃奶很爽的毛片| 国产日韩人人| 成人精品一区二区91毛片不卡| 九九九久久久久| 欧美综合色图网| 国产91 丝袜在线播放| 综合色图区| 啊啊啊啊嗯嗯在线久久久| 色欲av国内精品久久久久久| 欧美页片| 中国黑人三级片网站上区| 亚州91| 多乙久久久久久| 超碰这里有精品| 亚洲第2页| 日韩中文字幕宗合在线| 欧美A片中文字幕| 97久久精品国产| 探花视频免费观看国产专区| 无码视频一区二区| 亚洲性爱无码乱伦av| 后入综合久久| 91在线无码精品秘 软件| 久艹免费| 久久人妻四季| 一本精品日本在线视频精品| 久久精品一区二区三区蜜桃臀| 欧洲色综合| 97人人操人人干| 老女人综合网| 五月天伊人| 99热导航| 91女优在线观看| 黄色一级视| 欧美色老汉| 国内91熟女人妻丝袜天天精品视频在线| 香蕉视频欧美一卡二卡| 无码人妻一区二区一牛影视| 国产精品视频自拍在线| 天海翼久久| 99热9| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 五月丁香成人网| 日韩伦理久 久久 清纯| 无码WWW免费视频网站| 蜜臀va69| 欧美亚洲影视| 91深夜夜| 九t超碰| 97综合日韩| 午夜爽爽爽在线观看永久入口姬片| 欧美,亚洲,日韩,v,天堂,手机在线观看| 国产激情综合五月久久| 舔足天天操天天射| 久久夜夜夜| 五月综合激情网| 丁香婷婷五月| 久久久成人免费av电影| 超碰性爱97| 九月丁香婷婷色| 香蕉精品二区二区| 久久一二三四不卡| 97天天搞在线| 女人双腿搬开让男人桶| 五月丁香黄色网| 精品人妻一二三四区视频| 色婷五月天| 最新三级网址| 91丨国产丨白浆| 亚洲伊人a线观看视频| 97在线免费公开视频| 久久超碰亚洲人| 亚洲高清无码在线桃色| 日韩精品-原创伙伴| 亚洲日产专区婷婷| www老逼91| 手机看片1024你懂的国产| 色香欲影| 日本熟妇自慰性高潮一区二区三区| 67194无码不卡| 超碰人人色| 日韩中文字幕精品一区在线| 亚洲色欧美| 五月天AV资源| 国产成人精品午夜福利| 区一在线观看| 美女诱惑爱爱| 国产成人久久久精品免费AV| 日本激情免费大片| 韩国三级一线观看久| 大香网伊人久久综合网eew| 丁香六月婷婷久久综合| AV无码久久久精品| 一区二区三区高清天码| 亚洲欧美日韩制服另类| 啊啊啊免费视频| 亚洲综合69| 蜜臀99999| 美女自卫慰黄网站免费| 18禁的网站在线| 极品综合| 尤物av网站免费在线播放| 97国产|免费| 在线强奷到舒服的无码视频 | 天天射日日干| 大但人体久久久久| 国产欧美黑人丰满在线| 日日干男人的天堂| 五月天综合网| 日韩熟女精品无码专区一区二区| 色色色99| 在线观看精品国产免费| 眼镜人妻101.com| 久久成年片色大黄全免费网站| 色香欲影| 亚洲一二三四区| 色九久| 一级AAA片一区二区三区| 久污| 超碰在线综合97| 亚洲欧美精品久| 激情欧美日韩女同久久| 成人热久久精品| 亚洲综合性感在线| 日本天天人人狠狠在线日美女 | 久久久久网站-538在线视频-欧美永久乱码 | 人妻人人澡人人爽人人| 大香蕉欧美伊| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 亚洲久久久久| 精品高潮| 亚91亚洲网| 97玖玖人妻| 91黄站| 亚洲综合九九| 啊啊啊男女| 中出在线视频| 国产又粗又长的视频| 97伦综合| 超碰在线一区二区| 亚洲在线网站| 18禁精品网站在线看| 美国一区二区三区视频| 黄色网址在线免费观看| 天天色播亚洲综合网站| 丁香五月性爱| 久久婷婷综合国际产色怕| 日韩另类| 97超碰69| 啊啊啊啊啊好大好舒服想要| 99re这里| 日本2020一区二区| 精品久久久久久久| 伊人五月天婷婷| 国产网红精品| 99久久9| 美女啊啊啊啊啊啊啊| 大香蕉97久久| 大香蕉99热| 日本久久999| 嗯嗯啊啊啊啊轻点视频| 国产精品亚洲高清在线| www..com操老师| 色官网在线| 欧美日韩夜夜| 日日夜夜噜| 国内外毛片在线观看| 国产精品噜噜噜日日日| 大香蕉乱级| 国产精品自在自拍视频| 九九热精品| 久久伊人网视频一区二区三区| 密臀AV在线| 91大香蕉伊人| 国模私拍一区二区三区神乳| 日韩精品中文字幕二区| 校园春色亚洲欧洲| 日夜尻逼网| 91丝袜在线观看| 日本狂喷奶水在线播放212| 国产精品亚洲一区二区三区四区| 91无码中出人妻视频| 97青青操视频| 东京热精品97综合网| 好一吊区二区| 国产黄色在线播放观看| 久精品无码av一区二免费国产在线观看| 亚洲色图久久精品蜜| 麻豆激情综合| 中文字幕后石码四区五区| 神马久久69| 午夜美女诱惑电源网| 国产精品久久久久久久久久梁医生| 午夜120视频在线观看| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 久热网| 黄色片A级一区二区三区| 精品-91人妻子系列| 91人妻视频| 99热婷婷一区二区三| 一类无码操逼视频| 精品一区二区三区蜜桃臀赵总 | 天天综合精品| 日日日大屁股骚女人精品| 曰韩人妻中文字幕在线| 97在线精品| 日本蜜桃| jizz啪啪| 中文字幕啊啊啊在线观看视频| 热热色色综合| {男男暴菊gay无套网站| 亚洲AV无码天美传媒一区| 久久99干一本高清| 韩国午夜理伦三级好看| 家庭乱伦国产精品| 热九九精品| 日日骚精品视频| 国产精品一区二区手机看片| 日韩人妻精品久久久久| 91色人| 免费观看国产不卡av| 日韩精品人妻中文字幕有码午| 老司机香蕉久久久久| 久久亚洲精品成人av| 久久夜嗨| 极品销魂美女一区二区| 好湿好紧好爽 视频| 大香蕉92| 亚洲无吗在线视频| 久草精品一区| 91人人看| 亚洲成人激情小说视频| 激情看片网站| 操老熟女AV| 日韩亚洲中文有码视频| 久久99手机免费视频| 人妻少妇久久中文字幕一区二区 麻豆| 天天天天天干夜夜夜夜夜操| 4虎在线视频| 国产av波波国产精品| 9999伦理视频| 大色综合| 国产精品一区二区在钱播放| 久久激情婷婷| 在线观看十八禁| 91天美| 欧日韩不卡视.频| 欧美亚洲手机在线| 日本三级中国三级99人妇网站| 91青青| 涩五月婷婷| 99精品人妻| 美女露胸露尿口| 碰碰97| 懂色AV一区二区三区| 天美麻花大全视频| 一摸二插三插| 婷婷五月综合在线| 亚洲男人电影天堂| 日韩精品人妻中文字幕有码午| 欧美v日韩v亚洲v最新在线| 啊好大好舒服| 国产综合在线视频网站| 欧美五区| 激情抓乳插进去啪啪啪日韩 | 欧美一区二区日韩传媒搭讪精品| 久久国产AⅤ| 青青草五月天| 殴美在线AⅤ| 人妻少妇精品无码专区二区密桃| 日韩久久三区| 日本熟女不卡视频| 中文字幕乱碼在线| 欧美日韩激情无码专区| 97资源站久久| 激情综合网激情五月天| 精品九九九九| www.高清无码诱惑一区.com| 久久久久亚洲Aⅴ无码| 97国产|免费| 熟女啪啪视频| 二男一女成人A片| 好爽要喷了| 亚洲欧美伦综合| 偷窥自拍亚洲色图| 色综合天天| 黄页网站成人免费| 久久侵犯人妻爽爽爽| 人妻献身系列第54部| 伊人96在线| 中文字幕啊啊啊在线观看视频| 亚洲国产成人精品久久久国产成人一区二区| 欧洲亚洲人妻无码中字久久三区四区 | 日本天天色| 亚洲av噜噜噜噜噜噜| 久久久久密臀视频| 97在线视频观看| 操逼无码操逼| 91激情国产| 操人妻丝袜高跟| 免费观看网黄| 96国产精品| 97人人爱人人做人人乐| 日韩av在线播放不卡| 亚洲日韩天堂| 日本孕妇孕交| 97在线免费视频| 久久九精品| 志村玲子视频一区二区| 亚洲国产一区二区入口| 亚州性色| 大香蕉欧美国产日韩高潮| 人妻少妇色综合| 韩三级a视频在线观看| 日韩无码第3页| 二级久久网| 东京日日夜夜| 26uuu国产成人综合| 日本道人妻久久久在线不卡色视频| 91 国产丝袜在线放观看| 26uuu国产免费观看| 精品美女久久久久| 99久在线精品99re8蜜桃| 91总综合网| 素人播放一区| 中文字幕狠狠玩| 国产成人亚洲精品无码最新在线| 精品人妻久久久| 任我爽视频在线观看| 大香蕉久| 国产无马视频| 日韩欧洲操屄视频| 丝袜美腿av女优在线| 男女性扦B| 久偷拍| 涩五月婷婷| 日本欧美亚洲高清在线看| 日韩福利综合一区| 美女久久久| 快播久久人人aV| 欧美亚洲涩涩| 中文字幕版| 久久人人妻| 337p大胆噜噜噜噜噜91Av| 国产中文字幕在线点播| 男人天堂网站| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 欧美亚州色的图| 中文字幕亚洲欧美在线不卡| 九九九九久久久| 欧美在线播放aaaa| 久久鲁干| 国产亚洲日韩欧| 69天堂| 九九九九九精品视频| 999久久芭蕾| 九9热伊人| 欧美中字二区| 75大香蕉| 亚洲一区二区三区麻豆传媒| 翘臀vidoes| 人妻熟女一区在| 五月丁香久久| 婷婷六月色开| 国产热RE99久久6国产精品首| 人人射人人操人人摸| 久操网视频| 国产精品久久久久久照片| 国产精品盗摄 偷窥盗摄| yw尤物av无码点击进入麻豆| 欧美v日韩v亚洲v最新在线| 性色亚洲| 人人妻人人爱人人玩| 欧美日韩久久精品爱爱| 综合熟妇一区二区三区| 夫妻AV网站| 尤物视频新赏网鲜网色诱网| 超碰在线在公开超碰在线在公开| 天美传媒av一区二区| 久久视频少妇美女| 青操影院| 91处女在线视频| 九九久久国产精品| 青春草A| 一牛一区二区三区久久| 精品乱码久久久久| 午夜综合在线| 欧美极品少妇| 精品超碰色| 欧美成97爱| 78超碰| 97国产人人| 日韩无码一级黄色av片| 九九视频黄色片| 午夜激情成人在线观看| 日本丝袜人妻内射| 看日韩操逼| 国产伦精品一区二区三区在线观| 亚洲第一综合| 九月丁香婷婷| 蜜臀99999| 97在线资源| 超碰欧美97资源| 99蜜桃臀久久久欧美精品网站| 96久久久精品| 97中文综合| 78久久| heyZO天然素人无码AⅤ专区| 欧美十八禁导航成人| 成人性爱电影一区二区| 激情综合五月天| 综合色播| 成人影 天天操 亚洲| 一区,二区,三区视频| 天天综合网亚洲综合网| 欧美天天搞| 日韩成人精品| 中文字幕亚韩| 97人肏| 欧美 亚洲 另类 综合| 国产午夜福利合集| 国产精品com| 强被迫伦姧在线观看无码网站| 国产Aα| 天堂8在线新版官网| 亚洲色鬼| 日日摸日日碰| 色图四区| 日韩激情毛片一级久久久| 伊人五月天激情| 久久久久免费少妇| 无码久| 日韩精品一二三| 久久伊人亚洲AV无码网站| 国产成人亚洲精品无码古代早漏男| 欧美黄色片AAAAA| juliaann精品熟女一区| 伦理日韩国产久久| 欧美亚洲| 91强奸乱轮| 久九九九九九九热| 后入式999| 日日摸天天爽夜夜欢| 黄色一区二区秘书性感| 毛片99-全集电影手机免费观看完整-B029AV| 中文字幕第23区| 人妻在线臀日韩| 久久9999 | 欧美日韩插逼视频| av一区二区三区 中文| 吉田爱美AV在线| 亚州色图欧美色图| 好吊色青靑草| 操逼1区| 亚洲人成色9999精品久久| 任你干在线视频| 国产偷拍网站| 亚洲欧美国产其他二区| 超碰精品| 亚洲熟女av中文字幕| 亚洲成人av电影在线| 91男女啊啊啊| 亚洲另类色综合网站| 国产精品不卡高清在线观看| 伊人五月天| 国内操逼视频二区| 久久久久久久97| 久久久国产亚洲精品系列| 色女网日韩| 国产精品69久久久久孕妇欧美 | 色女网日韩| 91少妇香蕉久久精品| 午夜操一操| 91啪啪视频| 中文一区二区| 秋霞一级A片黄色视频| 欧美 亚洲 综合 制服| 97视频在线视频| 国产精品久久久久久高清无码免费看 | 国产精品福利资源在线尤物| 九九热精品| 日本一级不卡一二区| 91影库| 亚洲男人的天堂一区二区| 大香蕉在线SuP| 一区二区三区黄色片a| 无码99| 亚洲美腿丝袜香蕉影视欧美成人| 丰满人妻无码一区二区三区| 男人天堂久久日韩| 欧美色女人| 99热| 97在线免费公开视频| 久久91精品国产9丨久久分亭| 大香蕉综合| 欧美一区二区男人天堂| 国内91熟女人妻丝袜天天精品视频在线| 一本色道久久综合狠狠操| 吖在线不卡一区二区国产剧情| 91人妻丝袜无码| 91骚熟女| 人人妻人人澡人人爽人人精品浪潮| 多乙久久久久久| 欧美天天综| 热思思免费视频| 日韩熟女精品无码专区一区二区| 丁香九月婷婷| 麻豆精品久久久久久久| 欧美亚洲系列| 婷婷97| 91性情| 亚洲.欧美.丝袜.中文.综合| 天美传媒婬乱在| 91久久精品国产| 操逼操逼操| 天天日日日射| 亚洲无码成人精品| 91美女看B| 永久免费发布性爱网| 天天性射网| 日本片日本片祼观看网站在线看中文版网页在线看| 超碰久久网| 岛园激情| 怡红院久久老司机| 日本在线一二 | 防屏蔽在线视频| 91bbbbbb| 97WW精品| 国产在线综合福利网站| 成人天天看站长推荐| 少妇无码av专区线| 久久精品电影| 国产一区二区三区影片| 校园春色美腿丝袜 | 91丨九色丨国产丨人妻在线| 免费看美国人人爽,人人操| 26uuu最新| 九九九九九九成人| 国产精品人妻熟女aⅴ| 91男同| 综合一区中亚洲国产成人综合精品 | 性色乱AV一区二区| 男人的天堂com| 亚洲综合网电影91| 搞中出久久| 99最新日韩偷拍视频| 玖玖婷婷五月天| 91黑丝在线| 久久111| 欧美性爱伊人| 亚洲 中文 女同| 人妻无码一区二区三区久久99| 日本网色| 蜜乳AV免费观看| 中文字幕一区二区三四五区日日骚| 大香蕉乱伦视频网| 亚州综合| 久久久久久裸体 | 亚洲乱色视频一区、二区在线| 亚洲天堂一区二区久久| 97久久久久| 日本不卡二三区| 狠狠穞A片一區二區三區| 国产免费一区2区3区| 中文字幕片| 欧美性爱另类综合| av毛片aaaaa免费看| 羞答答AV中文字| 小草精彩毛片| 亚洲免费人妻在| 欧美精品三区| 中文字幕日韩情色| 厕所偷拍在线| 日本网色| 国产午夜福利电影免费在线观看 | 亚洲欧美在线综合| 内射小黄片| 欧美,日韩,中文,另类| 奸色色 男人天堂 天天射| 国产AV激情无码久久无码| 亚洲欧美骚| 91老熟女91老女人| 色优久久| 被男人添B超爽视频| 中文字幕三四五区| 91 综合 色| 中文字幕视频在线观看一区二区| 激情视屏国产乱伦强奸| 国产精品爆乳懂色蜜乳| 超碰97.com| 亚洲激情天堂网| 爽爽淫人网| 婷婷中文网| 久久亚洲国产成人| 日本加勒比无码专区| 蜜桃丰满熟妇av无码区不卡| 密臀在线免费观看| 色色婷婷五月天| 综合久久六月久久婷婷| A 天堂| 欧洲视频在线| Julia Annxxxxx| 久久內射| 99这里有精品| 婷婷在线视频| 亚洲五码一区二区三区| 男女激烈网站最新| 欧美色乱| 久久精品无码一区二区三区| 97精品97久久| 亚洲色图国产另类| WWW4虎| 国产亚洲一黄| 人妻熟女av国产网站| 激情五月综合开心五月| 一区二区三区不卡视频| 成人三级片无码| 日韩福利综合一区| 日韩欧美~中文字| 中文久久96| 老师充足的奶水小说| 九月丁香婷婷| 精品国产一区二区三区av在线资源| 亚洲一区二区性爱电影| 亚洲精品三区在线观看| 国产真乱mangent| 亚州综合| 欧美后入| 久久久无码视频| 啊啊啊啊好爽好舒服一区二区易域| 欧美特黄视频网站| 91在线丝袜| 国产后入清纯| 欧美日韩美女精品久草一区二区三区 | 青娱乐国产剧情av一区| 亚洲综合999| 日本黄色精品| 天天天干977| 素人伊尹大香蕉免费下载视频| 超碰久在线天天做| 日本黄色天堂| 婷婷九月国产| 福利天天都操| 亚洲天堂一区二区| 密臀在线视频| 蜜臀99久久国产| 久久香蕉国产线看观看亚洲女人 | AV大香蕉| 国产av尤物| 操九九九九九九| 国产精品一区人妻精品阁在线| 青青草操逼逼视频| 国产大学生高潮在线播放| 91中出在线| 国产第二页| 日韩久草| 国产精品97超碰| 熟妇操花| 欧美视频边做饭边橾| 黄色高清无码无码破解免费暗网| 爽 好舒服 无码刺激久久| 日韩人妻一区二区精品| 噜噜噜狠狠色综合| 大香樵伊人网| 麻豆国产原创AV色哟哟| 九九英色视频| 狠狠2050在线观看| 麻豆黄站| 怡红院成人视频| 夜夜躁狠狠躁日日躁av| 亚洲一区二区三区在线激情| 啊啊啊操死我| 翔田千里爆乳巨臀无码| 国产高清视频无码在线| 久久伊人亚洲AV无码网站| 免费αⅴ在线观看| 日韩激情中文字幕有码| 色婷婷综合网| 91原创在线观看| 欧美老妇女内射网址| 亚洲性少妇| 啊啊啊慢点| 久热一区二区| 欧美aa一级片| 国产97视频免费观看| 青青草操逼逼视频| 国产精品制服丝袜中文字幕日韩一区二区三区 | 91东京热男人的天堂| 午夜久久无码1000合集| 亚洲色综合| 爆乳免费黄网站| 天天综合网1| aV中文麻| 日本视频在线中文字幕| 欧美aaaaaaa| 操逼视频免费日韩无码| 亚洲 欧美 91| 性爱AV天堂| 麻豆天天躁天天揉揉AV| 日本国产欧美一区三区二区| 91精品女厕偷拍视频| 精品久久99| 色哟哟-国产专区| 久久久天美| 天美精品原创av片国产| 波多野结衣先锋影音| 五月天激情国产综合婷婷婷| 欧美精品偷拍| 加勒比色99999| 三级日韩一区二区三区| 欧美性爱在线无码| 伊人一级免费黄片| 国产精品制服丝袜清纯唯美| 色五月婷婷在线| 91性高| 日日骚一区二区三区| 日本性爱欧美性爱| 色综合天天| 伊人991| 欧美天天弄| 一区操逼日比视频| AV天天综合| 97草草| 中文字幕天堂在线| 黑人嘿嘿嘿超爽免费视频| 欧美三级一级| 蜜臀网址在线| 国产综合在线视频网站| www五月| 99re99视频在线免费观看| 午夜毛片亚洲精品片国产久久久| 操逼片国产| 欧美色图亚洲色图成人在在线| 91在线丝袜| 尹人免费观看视频在线| 六月丁香网| 精品久久久不卡一区二区| 乱伦强奸区日韩| 深田咏美亚洲精品福利社| 在线观看A啊啊啊| 激情小说亚洲色图| 久久精视频美日韩在线视频| 口爆欧美91| 色欲久久99国产精品久久久久久| 亚洲最新av无码成人精品区| 国产欧美一区二区| 蜜臀久久99精品久久久久久成人小说 | 欧美性天天| 五月色网| 97欧美久久久久久久| 欧美亚洲国产91在线| 天美传媒国产原创中文字幕亚洲欧美另类 | 国产精品成人蜜臀AV在线| 欧美婷婷久久| 91老熟妇| 日本欧美成人片AAAA| 九九亚洲色在线观看| 尹人免费观看视频在线| 极品色社| 欧洲亚洲人妻无码久久三区四区| 午夜无遮挡男女啪啪视频| 玖玖97综合 | 成人自拍三级在线观看| 手机av天堂久久久久| 呻吟 欧美 日本 中出| 97在线青| 大香蕉黄色一级片免费看| 暖暖精品二区三区观看| 上特色A在线| 中文字幕性感少妇av| 欧美最大综合网| 乱伦av麻豆| 丰满人妻一区二区三区大胸懂色| 日本欧美国内在线| 日日噜噜夜夜久久亚洲一区二区| 国产狂喷潮在线精品| 日韩欧亚太美不卡| 性色A∨91| 中文字幕五区| 欧美se综合| 人妻AV 中文字幕的| 加勒比海人人操超碰在线| 秋霞视频一区二区 | 欧美在线视频99| 男人的天堂VA| 91色色色| 久久丝袜| 香蕉在线一区二区三区| 欧美天天综合在线| 女优视频第10页| 日韩综合97p| 色综合五月天| 东京热天堂网| 天天添天天干电影| 亚洲97综| 玖玖97综合| 国产欧美在线观看免费观看| 亚洲色图 欧美热图 清纯唯美 另类自拍| 亚州综合色| 久久久久国产亚洲一区欧美色图日韩| 精品熟妇视频一区二区| 日本九九九九| 国产精品乱码久久久| 99精品在线| 日韩亚洲欧美中文字幕| 嗯嗯啊啊操死我| 亚洲av国产av综合av卡| 中文字幕久久精品一区| 变态乱伦伪娘灌肠一区二区| 超碰69| 亚洲中文一区二区三区视频| 激情婷婷黑人91| julia高潮后不停追击中出| 国产人妻久久精品一区二区三区| www超碰| 九九九九九九视频免费| 亭亭丁香激情| 成年人三级黄色片视频| 啊啊啊久久久视频| 精品国产久热在线观看| 国产视频第二页| 天天干天天做| 欧美一级AAAAAAA| www.男人天堂|