色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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
返回資訊列表
高潮精品| 日本精品人妻少妇一区二区| 成人自拍三级在线观看| 欧美,亚洲,日韩,v,天堂,手机在线观看| 国产毛片精品一区二区色欲黄A片| a男人的天堂久久一级A毛片| 婷婷爽人人婷婷爽视频| 另类专区加勒比| 激情四射婷婷四五月天| 免费中文在线| 99久久久久久亚洲精品不卡| 欧洲精品二区| 亚州高清av| 1二区9| 99在线精品观看99| 国产区91柔拿会所技师| 久久精品国产Aⅴ| 99在线精品观看视频中文| 国产精品网站免费| 奸色色 男人天堂 天天射| 国产一级作爱毛片| 熟女这里只有精品6| 国产传媒日韩欧美| 91在线丝袜| 久久日本熟女精品一区| 久久综合18p| 日韩黄色成人性爱| 无码av永久免费专区网站| 久久久96| 啊啊啊好多水| 青青草好吊色| 97操B| 嗯嗯嗯不要不要免费视频| 国产精品视频精品一二| 欧美aaaaaaa| 国产三级资源在线观看| 毛片久久| 91久久| 97碰碰色| 亚洲色图 91| 亚洲综合69| 日产中文字幕2020| 青青青操| 欧美亚洲国内自拍| 五月丁香在线| 久久无码电影| 日韩一区二区三区四区五区| ..日韩av毛片精品久久久| 国产无码精品久久久久久| 亚洲性高潮| 国产精品农村妇女精品| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 久久久久久久久久久久色网| 国产精品国产精品国产| 久夜视频| 色汉综合| 女沟厕偷窥piss小便| 欧美97| 久久 精品| 国产综合久久久麻桃个| 天天躁日日躁狠狠狠躁| 凹凸 69堂 在线播放| 精品人妻一二三四区视频| 午夜欧美神马久久久久| 97久久精品国产| 96精品久久久久中文字幕| 久久久久久久极品香蕉视频| 天美麻豆精品视频99| 亚洲一区深夜| 亚洲国产剧情少妇激情| 91性生活久久久| 嫩草伊人久久精品| 最新av在线| 美女淫穴| 91少妇香蕉久久精品| 日本大香蕉| 美女主播色欲91抠b在线播放| 蜜臀99999| 天天拍天| 岛国天天午夜影院传媒网| 久久成人东京热人妻| 亚洲高潮影院| 999精品久久久久久久| 狠狠爱大香蕉| 国产免a费看黄片在线| www.av在线视频| 日韩国产乱子伦App| 高跟丝袜AV专区国产| 国产99久久99热这里只有精品15| 中文字幕亚洲在线一区 | 69综合网| 亚洲国内精品成人不卡| 日韩欧美中文字亚洲慕| 亚洲资源站| 中文字幕欧美丝袜07资源| 国产一区二区三区高清视频| 国产精品毛片?v一区二区三区| 欧美日韩黄片精品在线| 日韩乱伦影音先锋| 激情综合亚洲| 欧美综合骚| 亚洲日本韩国极品一区二区| 超碰爽人妻熟女Av| 艳尻美人妻| 久久精品无码不卡| 五十路三区在线| 偷拍 欧美 日韩| 日韩国产欧美伦理在线| 成人看片网站| 午夜天堂网| 97在线青| 国产精品久久久久久久久久久久久久| 天天影视色香欲综合网小说| 日本操逼视频导航| 人妻熟女一区在| 4141514逼喷水三级片| 亚州人妻| 国产热av| 亚洲精品久久久久毛片A片拉屎| 熟妇的味道HD中文字幕| 久久免费精彩视频| 97超级欧美| 亚洲高潮影院| 日欧操屄| 337p大胆噜噜噜噜噜91Av| 欧美日韩m| 亚洲日韩XXX| 999精品久久久久久久| 日日操免费视频| 亚欧高清v| 成人精品电影| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 欧美亚洲中文字幕| 欧美日韩不卡a片| 丁香六月婷婷久久综合| 亚洲免费97免费| 香蕉精品二区二区| 欧美一区二区日韩三区| 亚洲一区二区麻豆影院| 久久超碰97中文字幕| 久伊人网78| 久久久久久久久久va| 综合色色婷婷| laoshunv91| 91精品91久久久中77777| 中文人妻av高清一区| www.夜夜操| 亚洲综合小视频小说在线观看| 91久久国产精品| 久久这里是精品| 青草视频在线看看看看看看看看看| 免费久久9999| 人妻夜夜爽天天爽三区麻豆AV网站| 操逼啊啊啊91| 亚洲欧美一区二区三区在钱蜜桃| 97欧美久久久久久久| 人人爱人人乐人人操| 成人乱码一区二区三少妇| 黄色成品网站| 色五月AV| 久久人人爽人人爽人人片Ⅴ| 一本一首道人妻少妇免费久久| 中文字幕视频二区| 免费看久久久性性| 91欧美性| 在线播放免费av福利片| 蜜臀少妇一区二区| 精品视频一区二区| 超97在线精品视频| 国产性爱欧美性爱在线| 在线日韩精品一区二区三区| 67914亚洲精品| 欧美美逼| 免费一级视频特黄色大片| 啊啊啊好大好湿| 伊人影院日本| 蜜臀少妇一区二区| 久热伊人| 亚洲成人在线播放| 麻豆色约约| 国产精品亚洲高清在线| 九九九久久久久| 男女啪啪网站免费视频| 美女高潮视频91| 少妇精品久久| 亚洲va综合va国产va中文| 亚洲图片偷拍欧美| 欧美人妻久久精品二区三区| 久草在| 日韩无码精品综合久久| 国产性刺激| 9久精品| 大香蕉操久久| 四虎精品永久在线播放| 欧美爆操91| 丁香色狠狠色综合久久小说| 老色69| 亚洲图片激情小说| 91色图片| 高清无码一区二区三区| 大香蕉欧美国产日韩高潮| 火箭成精品视频884必出精品| 91色婷婷综合久久中文字幕二区| 91老妇女| 亚洲欧美精品91| 操熟女91| 国产精品肉丝自拍| 欧亚性爱在线视频| 天天摸天天舔天天操| 九九综合久久中文字幕| 欧美 熟女 日韩| 一类无码操逼视频| 东北操逼| 高清无码国产亚洲| 久久9精品| 国产女人高潮视频| 国产精品人妻无码久久久互動交流 | 欧美日韩不卡a片| 亚洲和欧美裸体美女双飞视频| 日本操逼视频不卡直接放| 亚洲棕合电彰| 性色生活片久久毛片婬片免费放女人一级毛片| 秋霞福利网| 精品一啪| 日本道日本道中文字幕日本道最新日本道在线观看| 乱伦Av网| 成人草草视频| 国产欧美精品日韩区二区麻豆天美| 中文字幕一区二区三区50路| 精品久久久久,69国产成人精| 中文字幕97| 操香逼| 日韩av不卡在线看| 超碰欧美COM| 欧美男人一区| 色哟哟AⅤ| 色网在线| 亚洲日本韩国在线| 欲香欲色综合天天伊人| 最新一二三区视频| 国产欧美日韩一区二区三区| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 91欧美色| 国产久久视频| 日本性爱不卡视频| 校园春色亚洲色图| 欧美 青青草| 日逼国产| 天天肏视频| 亚洲视频,小说| 亚洲精品天堂久久A∨51成人漫| 玖玖无码超碰| 黑人天8A∨高清网站| 亚洲精品人妻吞精av| 思思热一热婷婷热一热| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 黄色AAAAA欧美| 日韩综合色网| 95人妻爽爽人人做人人澡| 伊人久久综合影院精品久久久| 青草地一本线一区二区三区| 中文字幕精品专区搜索结果91| 国内三级自拍小视频在线观看| 日本97久久| 加勒比大香蕉视频在线| 美女天天干| 成人一级性爱| 一二三四区操操Av| 日本午夜福利影院| 亚洲av性爱电影| 桃色人妻在线视频| 97bbn| 国产高清1234区| 麻豆精品三区视频| 国产精品久久久无码AV网站| 九热中文字幕| 黄色一区三区| 最新av在线| 久久人妻办公室视频| 人人贴人人摸| 久久色网| 婷婷20月天青娱乐| 加勒比伊人综合| 老女人爆菊| 国产黄色av大片网站| 日韩精品资源专区二区| 9丨久久九九九| 性九九九九九九| caopeng97人妻| 丁香六月啪啪| 国产成人精品亚洲日本| 日韩人妻一二三区视频| av亚欧| 国产精品丝袜在线| 亚洲怡春院| 欧美精品第四五页中文字幕在线观看| 屌逼麻豆| 婷色五月| 国产成人无码久久精品| 立川理惠无码一区二区| 欧美日本国产日韩激情视频| 高清无码一区二区三区| 国产多人在线观看视频| 国产在线播放成人免费| 九九热精品| 欧美九一精品久久久熟妇| 青青草国产盗摄一二三区| 青娱乐av在线| 混色激情av| 91狠狠综合久久久久久| 91人妻Pr| 日本精品成人无码| 爱av免费| 亚洲二区精品在线观看| 亚欧性爱ab| 99精品欧美一区二区三区桃色| 一级婬片120分钟试看| 啊啊啊啊啊啊啊啊在线观看| 校园春色亚洲色图| 国产路线专区| 欧美色图 色综合图| 香蕉精品二区二区| 黄色成年| 91白虎| 新怡红院| 色色97爱| 97在线免费看视频| 欧洲精品一级二级精品综合视频综合| 精品国产乱码久久久| 九九九国产精品| 天天热精品| 久久精品高清无码一区| 婷婷探花久久精品一区| 嗯嗯嗯啊啊在线观看| av橘色网站| 蜜桃久久一区| 亚洲毛片久久| 国产精品com| 亚洲国产综合视频| 欧美精品69性爱| AAAA欧美日韩| 男人的天堂在线| 射丝袜大香蕉| 热热色综合网| 国产精品久久久午夜夜伦鲁鲁| 欧美激情亚洲| 青青青青操国内视频在线| 97在线免费看视频| 午夜舔阴达高潮视频免费看| 麻豆视频国产一区二区| 老子午夜伦不卡影院| 午夜亚洲国产理论秋霞| 亚洲五码一区二区三区| 日韩无码专区| 青青草原人妻| 性老妇一区二区三区| 久久久免费懂色| 91痴汉| 天美传媒婬乱在| 亚洲av噜噜噜噜噜噜| 国产无吗在线播放| 国产精品久久久久久片| 密桃99999| 久久综合日韩亚洲欧美| 青青欧洲黑| 少妇高潮喷水无套久久久久久| 婷婷8月天青娱乐| 性猛交| 亚洲精品乱码线路中文字幕| 亚洲免费人妻在| 六六久久日韩不卡| 91国产美女丝袜足交精品视频| 精品久久艹| 最新AV在线| 精品国模无码| 亚洲一欧洲中文字幕在线| 欧美性爱五月天| 日韩一999精品| 天天看高清麻豆| 蜜臀网址在线| 婷婷操视频| 天堂无码精品国产久| 日本精品第一视频在'| 91欧美高清| 伊人一区二区三区| 高潮9999外国| 欧美日韩在线视频网站| 欧美成人午夜免费福利785| 日韩精品 资源| 97精品综合久久网| 男人的天堂久久久| 在线综合色| 色噜噜综合在线| 去干网最新版| 欧美少妇第一页| 激情内射| 一本色道综合久久欧美| 国产亚洲精品第一最新| 日本伦理一区二区| 精品二区久久| 免费观看国产不卡av| 亚洲激情综合| 久久人人爽av亚洲精品天堂桃色| 探花精品 一区二区| 欧美性巨大╳╳╳╳╳高跟鞋| 亚洲精品 大香蕉| 香蕉色网| 黄色免费网| 九九色逼| 夜夜 中文视频rt| 999综合网| 欧美久久伊人| 亚州春色| 色激情综合网站| ?亚洲伊人伊成久久人综合网| 亚州成人A√| 精品人妻久久久久一区二区三区| 91av一区二区在线观看| 欧美有码激情视频一区二区三区| 男人成人黄色视频在线观看免费下载| 久久国产熟女影院| 韩国一区二区精品亚洲| 99热线麻豆| 日韩综合无码色欲vv| 欧美黑人猛交春色影视大全| 中日韩久久久免费看| 无码 黑人一区二区三区| 国产欧美精品日韩区二区麻豆天美| 死我十八禁| 成 人片 黄色大片| 18一区二区三区| AV天堂因数| Blackedraw视频一区二区| 黄色AAAAA欧美| 亚洲最大黄网| 加勒比伊人| 国产精品青草综合久久| 国产熟女高潮一区二区三区| 樱花蜜乳av| 亚洲中文字幕妇伦久久| 国产97色在线| 志村玲子视频一区二区| 久久老熟女| 久久肏大逼| 亚洲综合贴图91 | 人妻熟女一区二区三区视频| 蜜乳AV一区二区三区四| 欧美一区二区成人一卡| 内射老妇BBWX0C0CK| 国产欧美美女免费观看视频| 91观看 国产白丝| 日韩精品中文字幕二区| 小电影欧美91| 国产伦乱91| 国产99999久久精品| 国产网红精品| 成人在线永久| av天堂精品久久| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 蜜臀99久久| 久久麻豆一区二区| 色臀AV| 日本在线一二 | 日韩精品国产精品五码一区二区| 日韩精品人妻一区二区| 人妻激情另类| 97超碰精品| 天天欧美色| 色香欲影| 午夜免费视频1000| 美女久久久久久久久久久| 激情五月婷| 亚洲色电影在线| 少妇一线天久久久久久| 97久久超碰| 超碰国产情侣自拍网| av网站在线看| 久久超碰亚洲人| 一区二区三区免费视频入口| 天天摸天天碰天天添青青| 丁香九月 婷婷| 久热久| 韩国午夜理伦三级好看| 一区超碰一区| 激情综合亚洲| 日韩兔费看黄片| 亚洲国产一级中文综合久久天堂在线免费观看| 成年人黄色视频免费| 狠狠干精品一二三四五六2022| 欧美一区二区一级岛国大片| AV女优男人的天堂| 九七超碰人人乐| 亚洲视频二区| 日本新免费二区三区| 天天日老熟妇| 欧美综合骚| 九九九久久久久| 在线观看成人性爱免费小视频| 精品性爱一二三区| 女同在线视频一区| 精品久久九| 亚洲同性aV综合| 中文字幕三四区| 蜜臀人妻少妇久久在线观看| 飘花国产午夜精品不卡| 香蕉久久国产AV一区二区| av婷婷色网| 天天躁日日躁AAAAXXXX国产| 久久成人网站| 淫淫总合网| A一区片| 中文字幕视频免费| 99久久综合| 天堂v无码免费视频| 天堂伊人久久| 久操大香蕉| 欧美人黑A片无码免视费| 91真人天天在线| 国产精品久久久鸭无码的功能| 日本精品五区| 天堂涩涩| 欧美亚洲国内自拍| 色狠狠 - 百度| 97se亚洲综合自| 久久精品一区| 精品国产片亚洲一区| 久久国产成人精品国产成人亚洲| 精品国产国产AV| 91Chinese在线| 欧美日韩插逼视频| 97久久久久久久久久| 青青11操操操操操操操操| 一区操逼日比视频| 四虎在线观看视频| 亚洲综合图片在线| 97舔舔| 激情综合网五月婷婷五月天| 亚洲图片激情小说| 国产风韵犹存熟妇三区| 99久久无色码| 欧美特大黄一级片片免费| 91欧洲国产成人久久精品网站| 91嫩草在线| 亚洲。日韩。欧美| 中字乱伦AV| 国产成人无码a| 欧美激情高清性猛交| 热热热热日日漂亮永久永久国产日| 99热最新| 日韩Va亚洲va欧美Ⅴa久久| 精品国产乱码久久久久久蜜臀| 色哟哟1区2区| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 欧美天天拍| 1禁看欧美黄片免费看| 日本一级特级毛片视频| #NAME?| 丁香婷婷激情五月天无毒不卡| 九九热视频在线观看| 不卡一区二区日本视频| 老熟女乱伦片| 中文字幕一二三| 国产乱不卡| 蜜臀久久在线视频| 青青草自拍视频在线播放| 性色av婷婷久久一区二区点复制| 蜜乳AV.COM| 亚洲综合电影| 神马麻豆福利院 | 亚洲欧美骚| 日韩黄色小说| 日韩天天本| 青青草吊丝| 黄色网址久久精品欧美喷水| 国产尹人在线视频免费| 欧美精品99久久久**| 91视频精品| 1240青青草一区二区三区视频天爱| 中文字幕欧美日本乱码一线二线| 99xav| 亚洲AO在线| 成人在线视频二区| 五月婷婷影院| 97人人干| 日韩成人综合网| 国产精品久久成人免费| 欧美一区二区三区另类精品| 午夜a成v人电影| 中日韩免费看男女操逼大全| 国产精品扒开腿做爽爽爽视频| 欧美色97| 人人操人人操人妻人| 大香蕉日亚洲日本亚大| 无码人妻系列少妇| 性交一区二区在线播放| 日韩美女高潮喷水视频| 亚州色图欧美| 91日产欧美| 北条麻妃性愛视频| 亚洲揄拍网| 中文字幕久久精品一区| 亚洲视频一二区| 久久99手机免费视频| 青青草视频在线观看一区二区| 久久9精品视频| 富二代亚洲精品99| 免費人妻夜夜爽天天爽爽一区| 超碰公开久久网| 精品人人| 国产熟女一区二区丰满| 另类av天堂| 一区| 亚洲精品不卡一二三区| 天天操天天7| 941超碰| 97精品视频在线播放| 夜夜骑日日| 91欧美情色| 97日亚洲欧美| 91美女视频| 国产成久久综合片| 乱伦一区二区三区‘| 综合久久久久久久综合网| 亚洲成人av电影在线| 青草青草久热| 五月天婷婷色色| 97资源制服丝袜| 久久久久久久久久久久久久9999| 麻豆婷婷成人一二三| 久久久久久9999| 色爽——AV| 密臀成人视频久久久| 好涩综合| 伊人热综合| 国产最新小视频在线播放下载| 亚洲国产精品无码AV在线| 五月综合婷婷久久网站| 丁香六月婷婷久久综合| 亚洲欧洲美腿丝袜| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 物尤视频一区二区| 久久偷偷色综合蜜桃| 91中文字幕在线观看| 欧美日韩在线小说| 国产操逼视频在线观看| 国产福利影视| 后X久久| 97精品视频网站| 黑白配性爱AV成| 97免费在线视频| 精品少妇人妻av久久免费| 最新日韩黄片| 黄页大片在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 97色论| 蜜臀AV成人精品蜜臀| www.acm成人黄色毛片| 亚州性色| 免费人成在线观看网站品爱网| 久久99人妖视频国产| 久久超碰爱| 97在线观视频免费观看| 久久老熟女| 夜夜操美女| 亚洲国产成人高清在线| 中文字幕视频一区视频二区| 97jingpin| 超碰97人妻在线| 日韩A优精品在线观看| 25国产精品免费观看| 撸撸成人在线视频| 大逼色网站| 蜜臀亚洲综合一二三四区| 欧美—性—交—色| 高潮毛片无遮挡高清免费| 亚洲另类电影| 91黑丝美女| 国产精品一区二区三区免费视频| 欧美日产国产在线成人第一区| 久久五月综合| 97bbn| 欧美天天弄| 色综合久久88色综合久久天天| 欧美亚洲国内自拍| 搡老女人老91妇女熟女| 秋霞Av理论一级在线| 成人无码影片视频在线| 香蕉一区二区三区在线视频| 天天干夜夜操一区二区| 国产a片操逼| 婷婷五月丁香五月| 亚洲熟女乱综合一区二区三区| 男人精品区| 强奸乱伦中文字幕AV| 人妻天天爽夜夜爽爽| 蜜桃久久久久久久久久久久| 精品9999| 无码人妻一区二区三区色欲aⅴ | 偷看洗澡一二三区美女| 青青色综合| 97K超碰在线| 午夜操逼不卡| 偷窥自拍亚洲色图| 超碰97人人乐| 在线一道啪| 99re6国产精品99re在线| 日本不卡免费二区| 国产一区二区在线播放量| 亚洲色图久久精品蜜| 射丝袜大香蕉| 国产久久免费精品视频| 亚洲va综合va国产va中文| 欧美综合网1| 色色毛片| 欧美成人9797| 啊啊啊啊,啊啊好多水| 另类小说综合网| AV天天在线观看| 九九九九九九精品| 国产亚洲精品美女久久久久久2021| 一牛影视久久久一区二区三区| 日本黄色精品| 日韩乱插| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 91激情综合| 白丝一区| 99精品在线| 蜜区区视频79 | 亚州 综合 色图| 2024黄色视频| 性爱动态120秒| 大香蕉2017| 亚洲无码久久久久久久| 大香蕉男人的天堂| 国产福利合集| 婷婷久久综合| 久久99久久99精品天美传媒棢·纸:. | 欧美在线官网| 蜜臀网 一区| 操操啪| 国产夫妻性生活视频| 国产精品自拍欧美在线| 91少妇香蕉久久精品| 日韩无码精品综合久久| 亚洲精品久| 久久岛国| 激情五月综合网| 精品少妇高潮久久| 国产黄色av大片网站| 久久精品成人一区二区三区蜜臀| 国产精品无码久久久久2025| 欧美 日韩 另类 亚洲| 亚洲日韩精品久久久久一区壹牛| 欧洲Au麻豆| 丁香色狠狠色综合久久小说| 亚洲天堂女优在线| 成人羞羞视频国产| 不卡码视频| 91网九色蝌蚪操熟女| 中文字幕片| 国产精品无码成人精品| 99久久久er直播网址| 国产 大胆 对白| 日韩 欧美 另类 人妻| 麻豆精品三区视频| 亚洲成熟国产精品美女| 伊人991| www.伪伪| 久久精品国产久精国产| 久久激情亚洲精品无码?V| 日本熟妇色熟妇在线视频播放| 国产探花日韩援交| 91视频成人福利网站在线一区| 麻豆综合一区av| 色av中文字| 女人精品内射国产99| 第45页一区二区| 国产av激情无码久久天堂| 大香蕉之青青草原| 日本三级一区二区 在线| 精品中文一区二区| 超碰在线看| 人人妻人人澡人人爽久久av| 97国产精品国| 国产精品4p在线观看| 老司机免费视频在线91| 郑州宾馆老熟女露脸啪啪| 一区超碰一区| 国产亚洲在线观看| 国产精品久久久啊| 物尤视频一区二区| 国产一级作爱毛片| 人妻少妇无码| 麻豆 欧美 日韩| 日韩精品在线放| 曰韩香蕉97| 久操精品网| 午夜美女福利视频| 中文有码第五页| 日本Xx性爱| 日韩猛交| 麻豆精品A片免费观看| 思思在线免费视频| 青娱乐黄色录像| 伊人久久国产免费观看视频| 一区二区三区黄色片a| 97超碰伊人| 久久久久13| 精品少妇人妻av久久免费| 日本亚欧爱爱| 亚洲精品蜜桃久久久一区二区三区| 国产日韩欧美中文在线播放| 男人天堂无码| 日韩天堂av电影在线观看 | 91九色丨国产丨爆乳| 久久91视频| 91美女片在线| 粘花网06av视频| 色青青久久影视| 国内一级精品| 三级网站超变态精品| 99ri精品| 在线人成亚洲视频免费观看| 大香蕉日韩欧美| 久久久久性熟视频| 日本国产高清色www视频在线| 好涩综合| 无码人妻精品一区二区三区九九| www.91色| 一本大道不卡一二三区| 97超碰影音| 台湾佬中文娱乐自偷自拍| 久久久 国产精品| 百度百度日本操逼| 性欧美| 超碰性爱97| 久久久97| 丁香九月 婷婷| 天天射夜夜骑| 97这里都是精品| 操人91| 国产日产精品久久快鸭的功能介绍| 亚洲中文字幕av | 天天爽天天操啊啊啊| 色在线69堂| 天美av在线观看| 日韩久久激情精品| 被窝影院午夜看片无码| 中国熟妇| 男人的天堂在线| 高清不卡一二三区视频......| 国产版a级片直播在线| 澳门黄片一香蕉视频| 国产精品在线免费| 欧美精品三区| 久久亚洲不卡一区二区三区| 色优久久| 超碰人人超在线观看| 日韩熟女乱伦中出| 97超碰久久| 中文字幕精品亚洲熟女| 九九英色视频| 久久黄色网址| av凤凰久久久| 乳欲人妻办公室奶水| 97色碰| 亚洲成成熟女人综合一区二区| 曰本熟女视频| 韩国女主播青草福利视频| 色5月婷婷| 高清无码 国产精品| 夜夜操美女| 国产久久久| 色狠狠一区二区三区香蕉| 97欧美色资源| 亚洲97P| 亚洲日本男人天堂网| 色婷婷久久| 国产福利精品最新在线| 国产精品一区午夜福利| 极品欧美一区二区三区| 丰满熟女一区二区三区在线播放| 超碰97久| 天天综合91入口| 玖玖草久草99蜜月一区二区三区| 中国黑人三级片网站上区| 国模限制级电影| 男人的天堂2010| 天天躁日日躁AAAXX| 日韩精品亚洲专区在线影视| 免费伦费视频在线观看| 伊人丁香五月婷婷| 亚洲黄色视频在线观看视频| 午夜操一操| 色欧洲| 欧色网址| 天天狂操夜夜狂日| 熟妇色99| 日韩欧美女求操每天更新| 日本三级精品| 亚洲精品九九九九九九| 91插B网站| 色网亚洲人| 96精品久久久| 青青草依人大香蕉| 亚洲不卡一| 91少妇高潮| 国产精品日日摸天天碰| 精品人妻一区二区三区免费视频| 久久久96精品| 岛国天天午夜影院传媒网| 久久大香蕉97| 18精品一二区| 欧美美女视频| 97欧美超碰| 18禁看网站一区| 影音先锋日本乱伦| 亚洲图片激情综合另类| 国产一区二区a毛片| 最新中文字幕精品在线| 日韩免费看黄片| 国产无套粉嫩白浆在| 婷婷色综合| 国产久久一区二区午夜| 久久精品人体| 97欧美精品综合| 色婷婷综合久久久久中文一区二区 | 色99在线| 国产欧美美女免费观看视频| 色综合91| 久久精品天美| 亚洲AV不卡在线观看尤物| 欧美一区二区三区黄色影视| 日韩欧美蜜桃精品久久中文字幕久久| 成人精品水蜜桃久久久久久久| 日日爽熟女| 亚洲无码一区成人免费午夜| 夜色91| 视频一区二区三区精品| a一区二区三区乱码在线| 国产强上视频在线观看| 色综合网1| 大胆91| 精品视频专区| 精品无码久久久久| 欧美啪啪啪91| 色五月av| 国产探花日韩援交| 亚洲 国产 精品一区| 国产AV高清AV无码| 性站| 亚洲激情 欧美色图| 超碰97最新人妻| 久久99干一本高清| 97视频在线免费观看| 隔壁邻居波多野结衣中文字幕 | 成年人网站在线免费观看| 久久久一区二区三区三州| 日人妻视频91| 日韩乱码av| 97久久免费| 伊人网在线点播| 久久粉色| 国产在线视频二区| 国产乱伦性爱AV| 2001天天操| 9999亚洲精品| 美女久久久久久久久久久| 无码动漫av中文字幕| 欧日a| 午夜精品一区二区三区三上悠亚| 欧美日韩大陆黑人少妇99| 一二区在线观看视频| 99国产精品| 国产精品女久久久久av爽| 日本午夜久久电影| 不卡超碰护士AV在线免费播放| 伊人aaa| a啊啊啊啊啊啊啊啊一区二区| 成人性爱免费播放| 强免费黄色网址| 日本免费一区二| 在线 欧美 亚洲| 极品肉射| 欧美少妇性爱网站| 欧州色图区| 久久人爽| 亚洲色91| 亚洲精品亚洲人成在线麻豆| 亚洲 欧美 91| 天天日熟妇| 88xx成人精品视频| 美国一区二区免费视频| 91大神电影天堂| 好舒服视频| 色噜噜狠狠色综无码久久合欧美| 国产AV毛片| 玖色AV| 亚洲97网站| 乱伦一二三区| 99操碰| 91色伦综合| 日韩亚洲欧美中文字幕| 无码高清专| 第45页一区二区| 后入人妻无码| 性影在线视频| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 任我爽视频在线观看| 久久久九精品| 2023天天操夜夜操| 伊人久久艹| 污污污8888| 九久精品| 亚洲欧洲国产综合av| 天天日日日射| 中文字幕精品码亚洲| 日韩欧美国产高清视频| 欧美中文字幕一区| 亚洲图片第一页| 抽插无码高清一区| 国产精品欧美激在线| 亚洲在线欧美| 久久97| 1024午夜激情男人的天堂| AV麻豆免费一区| 欧美极品少妇交| 97久久超碰国产精品| 国产精品久久久无码AV网站| 在线人妻熟女一区二区三区四区五区| 日日骚网站| 亚洲欧洲国产综合av| 欧美日韩亚洲高清不卡一区二区三区| 欧亚日韩一区在线| 成人精品在线观看| 青草伊人久久| blacked精品一区国产| 91夜色chaopeng| 激情综合网激情综合| 爽爽淫人网| 久久九九热| 日本性爱不卡视频| 天天综合网AV91| 精品无码一区二区三区色欲| 欧州色图区| 成人性交免费视频| 日韩性爱高清免费视频| 欧美极品少妇| 综合操逼| 天堂涩涩| 福利视频一区二区微拍| 97在线欧洲| 久久国产逼| 伊人97色天使| 东京热毛片177b2viP| 天天插天天射| 9Ⅰ超碰| 日韩婷婷| 国产人妻久久精品一区二区三区| 色综合网1| 人妻人妻天天碰| 国产探花精品在线| 东京热精品97综合网| 波多野结衣被操50分钟免费视频| 欧美亚洲丝袜美女电影| 无遮挡又黄又刺激的视频| 免费的av网| 99色网| ,国产乱人伦精品一区二区三区| 97久久久| 久久日韩毛| 蜜臀在线看片| 无遮挡h肉动漫在线观看| 久久久国产精品亚洲精品| 欧美 日韩 亚洲 春色| 久久大陆| 风流老熟女一区二区三区l| 精品一国2| 天堂中文日本在线观看| 五月天亚洲网| 日韩丝袜二区| 91美女视频直播| 五月丁香在线| 97在线免费看视频| 日本曲间由美性生活片| 免看60秒涩涩视频| 久久久久久AⅤ无码免费肉站| 成人AV在线网站| 99免费在线视频| 久久久久久中文| 无码99| 另类图片综合| 久草精品国产蜜臀| 99在线精品视频| 亚州操操穴网| 91丨九色丨国产丨人妻在线| 亚洲男人的天堂AV| 最新的亚洲无吗| 久久久久久中文| 秋霞视频一区二区| 欧美翘臀视频网站一区二区三区| 奸色色 男人天堂 天天射| 色五月av| 97色色色综合网站| 在线观看亚洲专区| 97久久综合网| 韩日精品四区| 久区视频| 人妻夜夜爽天天爽麻豆三区网站| 日韩性爱一级片| 91欧美另类| 国产伦精品一区二区三区在线观| 久久超碰天天| 91色艳| 俄罗斯一区二区视频在线观看| 国产精品久久发布| 草草影院最新网址| 久久精品无码熟妇一区二区三区视频导航 | 日本一区二区不卡精品| 可乐操亚洲蜜911| 热天堂一区二区| 被男人添B超爽视频| 国产精品久久久午夜夜伦鲁鲁| 天天综合色电影| 乱抡国产91| 99热8| 日本精品一区三区| 国产精品爱欲| 日韩色图 一区二区| 超碰79人人乐| 中国少妇XXXX做受| 国产日产欧产美韩系列麻豆免费| 日韩一级片在线看| 97情超碰色| 日本久操视频| 免费精品人妻一区二区三| 国产精品丝袜在线| 美女淫穴| 久草免费在线一区二区| 好爽视频在线观看视频 | 亚洲高清视频在线免费观看| 国产视频第2页| 国产999精品久久久久久| 91久久免费视频互動交流| 国产超碰97| 亚洲瓯美色图| 一区二区娱乐网站| 免费AV中文网在线观看| 中文在线视频| 性色乱AV一区二区| 国产三级电影免费观看| 久操电影| 超碰欧美97资源| 中文乱码99| 亚洲第一成人影院色播| aaa亚无码专区| 自拍啪啪视频| 久久深夜无码| 天天干,天天日| 天堂俺去俺来也www久久婷婷|