亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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
返回資訊列表
日本三级中国三级99人妇网站| 日韩AV电影网站 | 久热这里只有精品9| 国产精品久久久久综合| 免费一二区| 精品国产72| 国产成人网站在线观看| 欧美日韩国产成人高清| 老熟女熟妇| 韩国一级做A片免费的| 中国特猛少妇色xxx| 东京热熟女亚洲视频网站| 九九英色视频| 亚熟hd视频在线| 久久精品成人一区二区三区蜜臀 | 亚洲熟久久| av资源在线播放天堂| 极品欧美一区二区三区| 外国免费性情大片| 久久人妻无码毛片A片麻豆| 97一区二区蜜臀| 欧美日韩一区二区三区四区蜜桃| 欧美在线亚洲| 啊啊啊啊啊舒服| 2025亚洲男人天堂| 97bbn| 亚欧成人中文字幕一区| 久久亚洲不卡一区二区三区 | 99xav| 欧美日韩婷婷中文| 亚洲熟女乱色一区二区三区久久久| 夜夜嗨绯色| 日本免费不卡二区| 在线观看黄色电话| 日韩精品国产精品五码一区二区| 亚洲欧美国产中文字幕| 欧美色色色| 五月婷婷激情网| 97爱啪| 摸奶性爱视频网站在线免费播放| 日韩三级在线观看mp4| 激情九月婷婷| 97精品97| 无遮挡男女激烈动态图| 91久精品| 亚洲91少妇| 天天综合-91入口| 综合婷婷| 久久美女国产| 骚日日av| 亚洲码专区| 99999久久精| 午夜一区| 无码一区免费在线不卡| 十八禁黄色成人网站观看| 亚洲好看强奸乱伦| 夜夜国自区| 91久久国外网| 亚洲色图欧美色图日韩色图| 97chaopenrihan| 亚洲图片 欧美电影| 亚洲精品中文字幕一区在线视频| 色眯眯av| 亚洲超碰97| 天堂中文资源在线bt| 91大神精品长腿在线观看网站| 欧美色青| 超碰99在线观看| 天天噜| 96久久久| 2017大香蕉国产精品久久| 影音先锋日本乱伦| 亚洲素人综合| 人伦四五区| 国产欧美一区二区| 国产精品人妻熟女aⅴ| 夜夜国自区| 亚洲天堂男人在线| 韩国一级婬片A片无码天美| 91麻豆一二三区| 99精品在线观看| 日韩黄色av中文字幕| 欧美日韩精品久久久久东北老熟妇| 午夜精品99久久久久传媒| 亚洲男人天堂av| 男人成人黄色视频在线观看免费下载| 欧美日韩性爱操大逼| 欧美色就是色| 国内外毛片在线观看| 日韩熟女操逼| 在线无码视频| 久久久草成人网站久久久草成人久久久草久久久 | 大香蕉欧美伊| 婷婷色在线| 无码区蜜乳| 美女t无毒不卡不卡| 99热导航| 国产一区二区三区不卡手机在线| 久久综合激情| 淫荡熟女乱伦网| 久久久一区二区三区麻豆| 蜜臀AV一区二区三区激情综合| 欧美一级黄片免费播放| 天天综合精品| 在线精品福利免费播放| 91人妻最真实刺激绿帽| 97超碰人人模人人拍人人| 欧美热图99| 95人妻爽爽人人做人人澡 | 国产亚洲精品农村妇女| 91Chinese在线| 伊人影院日本| 欧美性暴力| 日韩av电影网站| 一区| 无码高清专| 91国模| 欧美日韩少妇色情| 久久婷婷一区| 国产成人精品日本视频| 欧美v亚洲v综合v国产v妖精| 啊啊啊啊啊啊啊好爽不要| 国产JDAV无码视频在线观看| 男女打扑克高清网站| 伊人AAA| 麻豆这里只有精品| 大香蕉日韩欧美| 超碰亚洲欧美日韩无| 亚洲精品天堂久久A∨51成人漫| 碰超人人在线一区二区三区| 乱伦熟妇一区二区| a片久久久久久久久久久久 | 日本东京热大香蕉a片| 男人天堂婷婷五月天校园春色| 国产精品岛国片在线观看| 8x福利精品第一福利视频导航 | 亚洲超碰综合网| 欧美页片| 日韩欧美天天爽爽爽天天爽爽| 欧美爆操91| 亚洲情色第一页| 久久五月份| 啊啊啊啊啊在线观看网址 | 日本Xx性爱| 欧美一级二级三级| 欧美综合网在线| 四虎免费在线观看| 强奸乱伦资源| 国产91美女视频| 综合免费无码中文| 少妇久久| 久草视频制服诱惑| 百度百度日本操逼| 四虎精品永久在线播放| 丁香六月婷婷综合| 欧美中字二区| 亚洲se电影| 日本孕妇一区二区视频操逼免费看 | 亚洲亚洲亚洲天堂天堂 | 国产精品毛片| 农村女一级毛卡片| 国产精品白丝在线播放| 99九九精品| a片久久久久久久久久久久 | 久久免费99精品久久久久久| 97碰碰色| 中日韩久久久| 五月丁香婷婷综合网| 欧美很很操视频| 大香蕉综合网| 国产馆极品诱惑| 日本啊啊啊啊啊视频| 和协影院中文字幕三区| 加勒比性爱成人在线| 免费草草草草草视频| 99少妇| 亚洲综合伊人| 国产女大学生AV| 热久久国产| 影音先锋乱| 揉揉揉夜夜| 人妻美腿丝袜日韩| 色九久| 久久国产逼| 台湾成人无码AV| 日本黄 R色 成 人网站| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 久久成人东京热人妻| 先锋女优在线观看视频| 中国AAAAAA黄色片| 日韩色| 97色伦欧美| 男人把坤坤插入女人的下体| 久久精品一区二区三区四区五区| 久草网站免费在线观看| 久久久999日本大片| 国产精品熟女九九九| 蜜臀一二三区| 9国产超碰| 99久久久无码国产精品性男| 九九十八精品| 日韩综合97p| 免费无码国产精品v片在线观看| 欧美丰满熟妇XXXX性ppX人交| 国产三级多多影院2022国产AA一级毛片无码 | 精品少妇一区二区三区在线视频| 诱惑人妻欧美一区在线播放| 91综合在线| 无套内射人妻在线播放| 电影69乱码96| 天天欧美| 久久五月天婷婷| 美国久久一二三四| 老熟女阿 国产91| 亚洲国产精品9999在线观看 | 久久色激情一区二区三区| 国产精品电| 性爱Av免费| 九九热免费国产视频婷婷伊人五月 | 91无码中出人妻视频| ...日韩成人一区二区三区字幕| 免费看污网站| 久久国内| 人妻美腿丝袜日韩| 人人噜夜夜操| 人妻二区| 欧美视频在线第3页| 欧美日韩另类在线播放| 亚洲国产尤物yw在线观看| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 福利天天都操| 天天精品| 97精品一区| 久草这里只有精品| 综合网,亚洲,欧美| 18禁精品网站在线看| 搡老女人老妇女老妇老熟女怎么读| 欧美激情性爱视频网站| av网站国产主播在线| 日本三级韩三级99久久| 久热伊人| 91操操| 在线电影亚洲色图| 岛国片在线观看视频亚洲| 亚州黄站| 99热色这里只有精品| 亚洲成人性爱在线观看| 99久久久无码| 懂色av中文字幕一区二区三区天美| 97中文字幕色| 久久精品国产97欧美精品亚洲 | 国产一区二区三区白丝| 亚洲欧美setu| 成人性爱免费播放| 色色综合网站| 婷婷在线精品| 超碰成人最新最好看| 色欲久久久久综合网| 97视频新免费| av天天在线| 午夜福利av电影在线| 户外裸露刺激视频第一区| 天天爽夜夜欢视| 欧美精品23| 欧美精品偷拍| 国产传媒午夜理伦精品| 青青草久久在线| 国产一区二区视频在线播放| 欧美美女视频| 欧美国产视频| 中文字幕亚洲在线一区| 无码外流操逼视频| 亚洲国产一区二区三区在线 | 日韩成人网址| 人妻三级在线中文字幕| 性生活性生大爱77AV国产| 91人妻做a观看视频| 97精品视频在线播放| 五月丁香啪啪啪| 国产午夜在线观看| 91色综合激情| 国产高清成人mv在线观看| 蜜臀在线网站| 99国产天美| 精品九九| 日韩精品视频在线观看一卡二卡| 国产乱人妻精品入口| 91少妇人妻| 99黄页网站| 日韩传媒在线| 国产日产欧产美韩系列麻豆免费| 国产尤物在线三区| 亚春色色| 国产67194| 婷婷人妻激情| 国内精品久久人妻性色av| 一区二区三区欧美激情| 婷婷色香伊人| 亚洲综合九| 最新日韩黄片| 中文字幕加勒比海高清无码免费视频| 欧美亚州色的图| 人人 操人人 操人人| 久久成人午夜狠狠| 天天综合在线4| 亚洲国产婷婷在线播放| 三级色影综合网| 草伊人高潮喷水超碰| 亚洲精品第一| 一区二区三区免费视频入口 | 2011国产精品| 日韩无码精品综合久久| 91精品国产91熟女| 男人的天堂日本东京热| 人妻精品4K4K4K4K4| 欧美性爱1080p| 丁香激情网| 91色图片| 亚洲日韩av一区二区三区百合| 国产美女在线精品免费看| 熟女探花啪啪| 久久久啊啊啊| 精品少妇人妻一区二区三区| 国产青视频| 99久久9| 四虎国产精品永久地址入口| 久久精品无码不卡| 国产精品乱人伊人网| 久久久久国产无av| 国产高清在线观看欧美| 亚洲无码偷拍| 青娱乐黄色录像| 中文字幕视频2区| 色综合久久88色综合久久天天| 毛片久久| 日韩欧美性吧婷婷乱伦大香蕉| 久久99久久99精品天美传媒棢·纸:. | 亚洲女人毛茸茸91| 东北老女人的激情视频| 俺去也婷婷| 欧美强奸乱| 99久久久无码精品国产人| 人人操欧美风骚| 亚洲天天自拍| 午夜啊啊| 亚洲欧美洲综合| 成人精品久久| 色吊丝 日日骚 清纯唯美| 色97国产69香蕉| 精品九九九九九九九| 伊人久久婷婷| 婷婷五月天av| 激情第四色| 91精品免费| 天天享受天天看| 久久久久久久久久久人妻| 强奸乱伦中文字幕AV| 成人av福利在线观看| 日B操| 国产 日韩,欧美 自拍| 大茄子熟女AV导航| 校园春色AV天堂| 天天色综合影视网| 97超碰人妻| 久久夜夜| 日韩福利电影网| 中国一级αV| 欧美成人性爱视频在线播放| 激情天天视频| 中文操逼字幕| 亚洲AV无码乱码| 日韩福利电影网| 日本羞羞的视频在线播放| 日韩成人高清一区二区| 国产日韩色综合| 岛国网址国产| 日韩av影片在线观看| 性爱1区| 97人人草| 欧美黑人猛交春色影视大全| 亚洲视频,小说| 99热9| 亚洲成人av色网| 97久久视频| 在线黄页看毛片| 摸奶性爱视频网站在线免费播放| 全国男人天堂网| 91网18| 亚洲一区二区性爱电影| а√天堂资源官网在线资源| 99精品综合久久久久五月天| 婷婷五月丁香五月| 一级免费精品| 日本操逼无码| 国产吹潮女在线观看| 日本免费二区三区| 欧美高清色| 17c嫩草51久久91嫩草| 女人天堂AV五区在线| 在免费jIzzjIzz在线视频| 国产又黄又粗又猛大片| 天天天天天天天天天天干美女| 婷婷视频在线免费观看| 色操逼网| 大香蕉伊人久久| 大香蕉在线视频15| 亚洲精品不卡一二三区| 亚洲丝袜少妇在线| av天堂精品久久| 熟女人妻一区二区三区| 99国产精品人妻人伦| 亚洲日韩久久精品一区| 欧美偷拍| 日韩乱中文 | 精品国产Av无码久久久伦古装| 69少妇一区二区| 强奸乱亚洲| 久久av网| 天啪| 亚洲男人电影天堂| 欧美黄色片在线播放| 九九视频黄色片| 九九干| 五月天色色网站| 亚洲av国产av综合av卡| 五月色网| 新精精品久久精品| 91在线免费精品视频| 免费av大片| 91欧美偷拍| 91 天天综合| 乱伦图av| 欧美页片| 国桃视频产巨乳精品一区二区在线| 美女91在线| 亚洲中文字母在线播放| 黄日韩| 人人人干干人人干| 国内91熟女人妻丝袜天天精品视频在线 | 精精品人妻一区二区三区| 国产99精品一区二区三区免费| 婷婷六月色| 婷婷九月国产| 操日韩第| 欧美中字二区| 91成人高清在线观看| 久久五月份| 日韩91网| 这里只有精品视频在线| 大香蕉日韩欧美| 亚洲精品人妻在线| 日本黄色裸日本黄色裸体 | 激情综合网五月婷婷五月天| 97一区二压| 久久草草亚洲蜜桃臀| 美女刺激久久国产欧美| 人妻少妇精品久久久久久| 人人操人人操草草| 欧美 综合 亚洲| 国产亚洲日韩在线三区黑人| 超碰这里只有精品| 国产最新小视频在线播放下载| 亚洲色欲一区二区三区| 国产精品久久久啊| 男人的天堂.com| 日韩欧美~中文字| 日本黄色精品专区网站| 日欧美色| 久久精品国产AV一区二区三区| 五月婷婷激情综合| 色99视频| 1204av韩国| 婷婷丁香人妻 | av凤凰久久久| 久久夜精品一区二区三区| 亚洲国产一区二区入口| 中文字幕 av v| 91精品人妻啪啪间| 殴美日韩m| 国产久久一区二区午夜| 一本色道久久综合亚洲二区三区| 亚洲午夜精品久久久中文影院| 91麻豆va国产精品| 超碰97 线线 在现| 日韩 人妻 精品| 天天天天天干夜夜夜夜夜操| 精品无码少妇| 亚洲AV无码| 91老熟女| 99热精品国产| 操逼片中文| 色天天野狼综合社区| 91久久久久久| 国产精品第一区第一页| 95人妻爽爽人人做人人澡| 亚洲全色网| 三上制服丝AV| 国产超碰| 青娱乐福利99| 精久久久| 天天狠| 思思热在线视频在线| 爱爱久久| 伊人久久婷婷| 国产精品激情久久久久久久| 久久久青青草| 久久久久久久人妻| 羞答答AV中文字| 青娱乐亚洲自拍| 打av高清| 午夜福利一区二区影院| 精品9999| 亚洲偷拍欧美激情| 熟妇艹鸡八| 免费精品无码一级毛片牛牛影视 | 青青草十区九区爱夜| 香蕉视频欧美一卡二卡| 日韩操逼HD| 欧美人与动性人交a| 精品小视频在线| 99热国产| 天天摸夜夜添无码小视频| 97精品网站| 欧美少妇大量自拍视频在线观看| 日本欧美一区二区三区免费| 久久久久久97| 日韩毛片9| 欧美综合色站| 五月丁香综合网| 亚洲熟女性高潮久久久| 91精品国产91久久青草| 黄久久| 图色综合网| 97干在线| 国产99久久99热这里只有精品15| 日本αv| 欧美肥臀在线| 大乔未久88一区| 夂久色| 亚洲Av无码成人精品国产| 国产高清自拍| 天堂性色| 嗯嗯不要 视频| 国产亚洲一黄| 色就色综合| 夜夜 中文视频rt| 欧美三级不卡| 强奸乱伦资源| 国内精品久久人妻性色av| 国产91精品久久久久久久网曝门| 婷婷五月花| 性暴力欧美猛交在线直播| 国产AV中文| 久久久久13| 国产精品久久久久久高清无码免费看| 九九亚洲色在线观看| 国产无码成人无码| 韩国女主播青草福利视频| 91久久久久久久| 乱伦3P视频| 亚洲免费成人在线高清无码视频 | 后入式999| 精品美女少妇一区二区三区| 亚洲丰满很很操| 另类专区加勒比| 日韩人妻精品中文字幕| 欧美日日操| 无码免费在线观看黄色片| 免费试看60秒| 国内伊人久久久久久网站视频| 嗯嗯不要 视频| 亚洲偷拍欧美激情| 色九九综合AV| 免费99精品国产自在在线| 330dv亚洲成年视频网| 亚欧中文字幕在线视频| 久久久婷婷| 伊人国产视频| 日韩无码AB| 亚洲精品不卡一二三区| 久久同城AV| 久久九操在线观看| 嗯嗯嗯啊啊在线观看| 九九九九一区| 九九九网站| 超碰97久久| 天天看精品动漫视频一区| A 在线网址| 久久久久久久国产a∨| 亚洲欧美国产其他二区| 把腿张开老子CAO烂你| 日韩精品99999| 玖玖色综合| 十八禁啪啪视频| 日韩欧美性吧婷婷乱伦大香蕉| 淫淫综合网| 亚洲福利影院一区久久| 曰韩中文人妻视频| 翔田千里爆乳巨臀无码| 深夜福利黄片| 激情抓乳插进去啪啪啪日韩 | 屁股久久久久久久久| 91亚.色| 撸无码不卡免费视频| 日日夜夜骑| 成人一二| 黄色AAAAAAAAAAA大片| 欧美东京热精品A∨| www五月| 看黑丝美女操逼青青网站| 美女干逼2| 精品人妻久久久| 欧美色性情| 欧洲欧美视频一区二区| 精品高清一区二区三区三州| 动漫爆乳3D奶水一区在线观看| 激情五月天丁香社区| 大香蕉伊人色偷偷在线| 精品999日本| 欧美草草高清日韩视频| 老司机午夜精品视频| 人人看欧美性爱| 九九无码| 男人精品天堂一区| 91无码西班牙视频在线| 国产午夜福利合集| 精品国产Av无码久久久伦古装| 神马九九| 色嗨嗨在线| 国产树林里野战在线看| 人妻天天夜夜爽一区二区| 男人的天堂VA在线| 亚洲男人天堂2017| 国产中文字幕在线观看| 亚洲高清视频在线免费观看| 狠狠色噜噜狠狠狠狠狠色综合久久 | 碰人碰碰人人开房人肉| 97aiaiai| 蜜乳AV一区| 亚洲天堂东京热| 久久久久久少妇| 思思热国产高清| 极品极品色影院| 伊人9| 亚洲欧美大| 欧美综合第一页| 天天日老熟妇| 久久久久久亚洲中文| 欧美伦乱爱| 国产成人免费观看在线视频| 97资源亚洲| 国产91精品久久久久久久网曝门| 亚洲精品xxx| 欧美一级三级| 婷婷国产精品一区二区| 96精品久久久久中文字幕| 亚洲图片色图欧美另类| 一区二区三区 日韩欧美| 人妻在线臀日韩| 99热一区二区三区四区| 熟妇xxxxx性春色| 97视频在线视频| 欧美性爱97超碰| 亚洲成人在线高清| 日韩精品影视| 天天日日舔舔| 久热大香蕉网站| 亚洲小说视频| 亚洲一区二区三区不卡国产欧美| 69超碰综合| 欧美色图人妻| 久久精品日韩| 亚洲色性情三级| 日韩性爱长视频免费| 国产91精品福利在线| 久久久久久中文字幕中文字幕最新| 插插综合网天天影视网| 免费αⅴ在线观看| 东京热av男人的天堂| 日产欧美电影一区二区三区| 九九热精品免费视频| 亚洲电影91| 日本成a人v网站在线观看| 久久久久久久人妻| 97碰碰色| 亚洲熟妇自偷自拍另欧美| 欧美激情 一区| xxx0国产在线播放| 99久久9| 精品人妻av在线播放| 精品乱子一区二区三区99| 久久国产AⅤ| 色婷婷综合久久久久中文一区二区| 女色综合| 亚洲国产综合久久久性感熟妇| 欧美日韩97| 97超碰69| 日韩精品在线放| 夜夜爽妓女| 久久精品日韩| 天天影视网色欲色香| 日韩精品黄片免费观看| 欧美96交| 国产这里只有精品| 黄骗免费网站| 第45页一区二区| 亚洲国产一区二区入口| 久久久性爱视频| 国产精品一级毛片不卡视| 91久| 成人网站 免费观看| 欧美青青草视频| av一区二区三区 中文| 这里只有精品97| 五月激情小说| 思思热国产高清| 东京热一区二区三区四区五区六区| 黄片qw| 久久精品视| 亚洲超碰在线| 97操| 欧美91网站| 亚洲AV无码乱码在线观看性色| 精品日日人妻| 中文字幕日产av人| 天天爽夜夜爽夜夜爽精| 人妻素股| 亚洲国产欧美日韩人妻日中文| 摸奶性爱视频网站在线免费播放| 熟妇操花| 少妇熟女视频一二三区| 欧美天天干| 夜夜欢天天干| 国产乱伦一二三区| 久久久久亚洲精品| 色综合国产在线观看| 99热精品在线| 女人高潮抽搐喷水视频网站| 这里有精品| 国产精品一区在线播放| 亚洲欧美中文一区二区三| 99色色| 揉揉揉夜夜| 亚洲综合激情五月久久| 爽极品影院| 色99视频| 999九九九九国产动| 翔田千里AV无码秘 三区| 操逼操逼视频操逼| 亚洲第二页| 欧美丝袜中文字幕07在线| 情色大香蕉| 熟女少妇一区二区三区| 久艾草在线精品视频在线观看| 国产午夜福利合集| 欧美性生活免费网| 情色AV电影| 久久午夜神马| 国产做?爰片久久毛片?片美国| 青青草精品| 中国熟女老妇仑乱一区二区三区| 91av一区二区在线观看| 和协影院中文字幕三区| 天天综合网91入口| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 亚洲激情网一二三四区| 久久久久亚洲精品| 国产精品对白自产拍| 国产精品亚洲无码| 大香蕉之青青草原| 大香蕉淫人网| 丰满人妻一区二区三区免费| 91亚洲色图| 高清国产av无码| 五月天婷婷影院| 久久久久深夜无码| 精品国产Av无码久久久亚洲| 五月天色五月| 中韩中文字幕在线观看| 日本午夜福利影院| 大香蕉99re| 国产18精品亚洲精品| 狠狠操一区二区| 亚洲视频精选| 涩五月婷婷| 欧美日韩亚洲少妇寂寞影院正在播放| 日韩av性爱在线播放| 美女91在线观看| 天天摸,夜夜摸| 亚州色站 日韩电影| 青青青国产手线观看视频2| 91色鬼| 日韩成人私密一级精品av| 婷婷色婷婷| 国产伊人精品在线| 精品久久久av| 久久久久久亚洲Av无码精| 精品九九淫乱男| 韩国一级婬片A片无码天美| 精品综合久久久久久97| 九九热精品在线| 国产精品操| 久久綜合很很很| 欧美人妻一区| 91 丝袜在线播放| 欧美97视频| 综合久久99| 精品国产丝袜一区二区三区乱码| 自拍第一页| 欧美精品在线观看| 日本操嫩b网| 亚洲诱惑天堂| 亚洲成人综合在线| 久久国产热视频97电影| 91色射| 日本东京热大香蕉a片| 色狠狠综合| 日韩一级成人毛片免费观看| 可乐操在线| 亚洲熟妇综合久久久久久| 国产成人综合网| 超碰在线欧美性爱激情| 国产大学生口爆吞精合集| 国产久久成人| 国产亚州日韩欧美看片| 国产高清1234区| 免费视频观看60秒| 性爱视频无打码在线观看| 亚州综合AⅤ| 欧美一级色| 亚洲自拍天堂| 啊啊啊啊免费视频| 色哟哟-国产专区| 色色五月天激情| 亚洲天堂人妻熟妇视频| 96久久久久| 日日日啊啊啊| 国产丝袜视频| 亚洲AV永久无码一区仙野| 韩国国产欧美情侣视频在线| 久9热| 精品蜜乳AV免费观看| 97亚洲综合在线| 99re8免费高清在线| 亚 欧 美 综合| 久久五月丁香| 精品国产丝袜一区二区三区乱码| 国产乱伦视频污| 欧美性性性| 日本操逼视频导航| 久久人| 翔田千里A片一区二区| 高清一区AV无码| 国产99 中文字幕日韩小视频| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 欧美天堂超碰97| 久久久一区二区三区麻豆| 欧美在线91| 内射小黄片| 去干网最新版| 亚洲精品欧洲精品| 激情四射婷婷六月天| 福利风月五月天影院| 草伊人高潮喷水超碰| 99re6在线视频播放免费精品| 熟女91网站| 亚洲图片另类| 亚洲超碰97| 国产精品美女在线一区| 台湾成人无码AV| 欧美在线播放aaaa| juliaann精品熟女一区| 蜜桃精品一区二区三区久在线| 91狠狠狠| 亚洲日本激情| 夜夜草网站| surenchaopeng| 亚洲欧美啪啪| 99婷婷一区二区| 久久只有精品| 日本国产亚洲一区在线观看| se01国产在线视频| 日韩精品.久久精品.AV女优.天美传媒| 老鸭窝黄色视频网站| www.久久| 五月丁香综合啪啪| 啊啊啊啊在线观看网址| 丰满熟女一区二区三区在线播放| 91c色| 久九干| 欧美一区二区| 色欲日韩欧美在线一区| 精品人妻伦一区二区三区久久| 91精品人妻啪啪间| 天天色图| 亚洲第一页色| 日本久久久久久久久| 另类老少妇| 亚洲AV操| 91撸色网 玖玖网 欧美| 极品白嫩美少妇在地板上位骑射淫水泛滥| 国产成人拍国产亚洲精品| 嗯嗯啊啊视频在线看| 亚洲综合另类色图| 99精品视频在线观看免费| 久久亚洲不卡一区二区三区 | 美女AV一区二区| 竹菊一区二区三区AV线| 亚洲无码?第一页| 鸥美插入视频| 国产亚洲99久久精品熟| 麻豆人妻精品一区二区| 97超碰精品图片| 国产精品一区av在线| 福利风月五月天影院| 青青草国产欧美非洲黑人 | 蜜臀99久| 亚洲一区二区三区播放在线| 国产精品对白内射| 91成人无码| 黑丝少妇在线观看| 夜夜欢天天干| 欧美制服网站美腿丝袜| 欧美97免费| 91碰碰碰| 男同专区一区二区三区在线| 在线国产探花| 哈哈操电影| 安微少妇操BBB| 日韩精品碰碰| 婷婷10月天青娱乐| 四虎 精品 WWW| 久久久久久日韩| 性高潮久久久久久久久久久| 啪啪91| 日本一道在线播放高清| 人人噜夜夜操| 99re国产中文字幕| 欧美性爽xyxOOOO| 伊人青青一区成人视频在线观看区| 亚州熟女乱伦| 亚洲国产无码精品首页久久久| 亭亭在线资源| 伊人五月天激情| www.91欧美| 久99热| 色欲蜜臀AV| 亚洲精品一区中文字幕乱码| 在线综合 亚洲 欧美中文字幕| 亚洲国产成人精品999| 淮穴色AV| 国产JDAV无码视频在线观看| 日韩精品99久久久久久中文字幕| 草草影院日本第一页| 黑人粗大V S日韩女优视频| 午夜.DJ高清在线观看免费7| 国语av狠狠色丁香婷婷综合激情| 91视频综合在线| 色老汉色| 国产精品麻豆视频网站| 人人妻人人色一区二区三区| 吉川爱美98堂在线| 亚洲影视综合网| 日本三级精品| 国产精品无码成人精品| 美女主播色欲91抠b在线播放| 成人av影院在线观看| 色婷婷成人综合| 婷婷在线视频在线观看| 97网址97| 丁香激情网| 尤物av网站免费在线播放| 亚洲天堂综合AV| 久久久新亚洲AV| 熟女AV一区| 国产67194| 91AV入口| 亚洲91网站| 日韩午夜精品一区二区三区电影| 蜜臀AV一区二区三区| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 日韩啪啪网| 狠狠操,使劲操| 女人天堂网| 久久9亚洲| 色情乱伦AV| 欧美综合自拍| 欧美第二页午夜| yirendaxiangjiashipin| 九九九九九九九精品视频| 操逼逼中文字幕| 围产精品一区二区三区视频播放| 91精品啪在线观看国产城中村| 亚洲精品久久久久毛片A片拉屎 | 女人喷水视频在线观看| 97超碰超碰| 台湾佬中文娱乐自偷自拍| 人人看人人插| 超碰97伊人| 伊人国产视频| 天天弄天天操| 一级性爱视频免费观看| 少妇人妻无码| 婷婷99狠狠躁天天躁| 免费啪啪av| 综合欧美亚洲| 97在线播放| 国产乱人妻精品入口| 亚洲精品亚洲人成人网| 国产偷拍网站| 91天天c| 在线 制服丝袜中出 人妻| 国产av又色又爽又黄| 亚洲图片另类| 99re在线精品78| 9999伦理视频| 天天干天天做| 亚洲av无线观看| 黄片国产精品一区二区| 少妇精品| 99国内熟女露脸视频| 日本女厕偷拍| 一二三四日本视频高清| 久久婷婷热| 国产AV久久野战精品| 91性感在线| 九九九九一区| 男人天堂无码| 欧美性爱18观看| 亚洲一卡2卡3卡4卡乱码网站 | 欧美大香蕉久| 亚洲国产欧美日韩人妻日中文| 欧美乱欲| 亚洲色性情三级| 少妇干B| 蜜臀网 一区| 亚洲天堂人妻熟妇视频| 久久乐| 亚洲爽图| 情侣操 逼视频99| 婷婷丁香五月综合| 日韩欧美日韩| 中文字幕免费看| 91在线免费观看处女| 98人妻精品一区二区色欲| 国产在线视视频有精品| 熟女高潮精品一区二区| 强奸乱亚洲| 91久久| 91天美传媒在线观看| 亚洲风情在线观看| 看黑丝美女操逼青青网站| 国产女人与拘做受视频免费| 大屁股熟女一区二区三区| 九九Av| 人妻 中文 日韩| 97操B| 激情五月婷| 96国产精品| 日本3级一区二区免费| 极品粉嫩一区二区| 视频不卡中文字幕| 色色色色色色色色色色色色色色综合| 国产精品禁久久久精品| 午夜免费福利视频一区| 色综合一区二区三区| 美女主播色欲91抠b在线播放| 欧美色性爱| 亚洲网站一区二区在线| 精品人妻伦一区二区三区久久| 日韩熟妇二区| 欧美91变态| 好爽要喷了| 大香蕉天天看妹子| 亚洲中文字幕乱码无码一区二区| 久久久96精品| 在线国产探花| 午夜福利国产欧美日韩夜夜| 91N综合网| 大屁股熟女一区二区三区| 夜夜爽77777| 去干网最新版| 12一15性XXXX粉嫩国产| 久久春色| 老女人老91妇女老热女| 亚洲欧美中日韩| 无码色| 操迟操逼在巾线Fre看| 国产麻豆91欧美一区二区久久婷婷国产精品| 亚洲国产婷婷在线播放| 97精品视频网站| 亚洲欧美日韩免费电影| 91青青在线| 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 碰人碰碰人人开房人肉| 91熟女综合| 伊人色综合网电影| 国产精品久久久久久久AV大片| 快播久久人人aV| 久久9精品网站| 狠操91,com| 亚洲影院小综合| 99精品网站| 老鸭窝亚洲毛片| 精品国产肉丝袜在线拍国语| 蜜乳AV色欲AVAV无码| 色综合色综合网| 日本一区三级韩国| 久久超碰、| 精品久久大胆人体| 亚洲97网站| 91熟女丨老女人| 精精品人妻一区二区三区| 999久久久国产精品| 97日亚洲欧美| 婷婷久久五月综合激情| 99久国产精品午夜性色福利| 岛国网址国产| 欧美黄色片AAAAA| 99丝袜福利在线播放| 久久精品老司| 久热伊人| 欧美αv.com| 六月天婷婷| 成人精品一区二区三区| 国产狂喷潮在线精品| 日韩高清黄片| 中文字幕 国产 精品| 青青久操| 日韩精品第3页| 五月情色天| 一级aaaaa欧美中文字幕录像片| 婷婷久月| 绑缚麻绳人妻寝取完整版| 午夜操操操| 美女裸体无遮挡永久免费观看网站 | 国产在线视频二区| 另类一区| 欧美激情视频一区二区三区不卡| 色天使AV天堂| 激情 欧美 亚洲 小说| 啊啊啊好爽快点啊啊啊嗯嗯| 超碰人妻中文在线| av草草在线电影| 国产无码精品高清| 神马精品视频| 亚州五月| 浓厚中出中文字幕在线| 天天舔天天| 欧美午夜熟妇黑人精品91| 一,爱啪啪,在线免费视频| 第二页中文字幕| 伊人骚琪琪亚洲天堂网站| 激情五月婷| 丝袜视频网国产90| 亚洲欧美电影| 校园春色亚洲色图| 操逼无码操逼| 丁香五月激情网| 美女啊啊啊啊啊啊|