色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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| 在线国产福利网址导航| 一级片在线观看高清无码| 丝袜足交视频| 久久97视频| 五月天久久婷婷亚洲| 五月天激情四射| 国产尤物AV尤物在线观看不卡| 亚洲精品97久久中文字幕| 大香蕉综合在线| 日逼逼免费看| 涩涩涩综合| 9精品久久久久| 欧美色图 人妻| 秋霞视频一区二区| 欧亚无码视频| 97公开久久| 日本三级日本三级99| 一级性爱视频免费观看 | 91网站18| 九九碰九九爱97超| 干少妇视频| 欧美啪啪啪91| 夜夜嗨一区二区三区直播内容| 禁十八久久| 男人的天堂啪啪| 中文字幕精品资源在线| 福利在线观看一区二区| 秋霞一级A片黄色视频| 综合五月天| 日本一卡二区在线| 男人的天堂Va| 漂亮人妻被强中文字幕hd| 国产精品久久久久久久免牛肉蒲团 | 色婷五月天| 亚洲AV无线| 亚洲激情综合另类男同| 欧美国产精品| 婷婷色中文字幕| 亚洲一区二区性爱电影| 亚洲精品乱码久久久久久蜜桃麻豆| 久久久久亚洲三级电影| 亚洲97久久精品亚洲| A级国产欧美激情在线| 国产伦精品| 九九九国产精品| 亚洲诱惑天堂 | 97亚洲在线| 国产传媒一区日韩| 囯产精品久久久久久久久久梁医生| 操高情无码| 欧美综合娱乐久久| 久久国内| 91原创在线观看| 婷婷五月丁香五月| 久久久久久性爱片| 国产夫妻一区二区| 超碰97久久国| 一区二区三区国产在线播放| 亚洲精品一二牛牛| 强奸国产在线| av资源在线观看少妇| 韩国一级婬片A片AAAAA| 67194国产| 亚州少妇| 青青伊人加勒比海| 97超碰站| 伊人影院综合是一个与深夜成人在线| 日韩乱插| 日韩美一区| 黄色二级片网站| 欧美成人综合| 玖玖资源视频一区二区三区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 人人操欧美风骚| 国产精品人妻无码久久久互動交流 | 欧美性爱超碰97| 91亚洲网| 曰韩av中文字幕专区| 丁香六月啪啪| 亚av顶级裸体一区二区三区四区五区| 大香蕉99re| 国产美女销魂在线观看不卡| 亚洲丁香花色| 9精品久久| 日韩三级av片| 性在久久久久久| 久操大香蕉手机视频在线看 | 精品制服美女中文一区二区三区| 四方色播| 操迟操逼在巾线Fre看| AV大香蕉| 国产九九九九九九| 中文字幕精品一区二| 睡产熟女乱伦| av日韩中文字幕| 亚洲影院365| 国产伦乱91| 亚洲国成人情色好看电影| 久久精品99久久久久久| 综合影院永久入口国产| 四虎永久在线精品免费网址| 97欧美色| 黄色av网站在线播放| 好淫网一二三视区| 国内一级精品| 国产综合永久精品日韩鬼片| 日韩亚洲97| 亚洲无码精品AV久久久| 粉嫩小泬久久久一区二区| 欧美熟妇精品黑人巨大91| 93人人操人人| 91艹逼精品| 久久精品超碰| 四虎影视在线| 手机看片91人妻| 天天日天天爽| 九九九精品美女| 成人福利视频网| 青青草啪啪网| 色在线综合| 日韩精品人妻系列无码天堂| 国内毛片热久久思思热| 日韩国产品视频中文字| 色视频蜜乳| 乱精品一区字幕二区| 超碰在线综合97| 麻花传媒免费网站在线观看| 亚洲污一污二| 国产婷婷一区| 成人26uuu| 亚洲天堂自拍| 夜夜天天噜狠狠爱2021| 国产第11页| 可能人人看人人摸| 91路www| 手机在线播放国产福利| 中文子幕一二三| 懂色av色欲av蜜臀av| 60秒免费小视频| 欧美精品日韩久久久九| 清纯唯美亚洲综合| 67194无码不卡| 日韩一级二级三级免费看完整版| 人妻久热在线| 熟女这里只有精品6| 日韩精品人妻系列无码天堂| 免费簧片在线观看| 天天日天天干天天操| 欧美淫穴| 唐山老熟妇露脸啪啪叫| 九热久| 亚洲成人一二三区| 狠狠色狠狠色狠狠五月| 精品国产乱码久久久久久免费| 女人高潮抽搐喷水视频网站| 蜜臀久久99精品久久久久久无删减 | 欧美一级黄片免费播放| 日韩av在线精品观看| 国产污视频麻豆传媒一区二区| 精品久久无码午夜福利| 亚洲怡春院| 丁香六月天| 激情小说图片亚洲首页| 国产日韩中文字幕欧美| 亚洲有码 视频一区| 欧美在线啊啊| 夜夜騷av、一區二區| 亚洲av噜噜噜噜噜噜| 日韩女优在线| 美女自卫慰黄网站免费| 99re免费视频精品全部| 老鸭窝在线视频播放| 夜夜爽77777| 1人人看人人摸人人操| 国内一区二区三区| 亚洲少妇激情视频| 亚洲人成色9999精品久久| 欧亚性爱在线视频| 欧美黄色手机在线观看| 91色欧美| 成人免费毛片| 熟女熟妇一区二区三四区| 少妇毛片久久| 97操操| 免费看黄片现成| 一二三区视频在线观看| 亚洲男人的天堂网| 磁力99AV| 国产丝袜美女诱惑| 婷婷五月天福利| 亚洲导航深夜福利| 一本大道不卡一二三区| 久久久精品网站| 国产97av| 97久久久久久久久久| 精品国产网站| 欧美黑人性猛交91| 日本久久网| 亚洲成?V人片在线观看福利| 天天懆天天日| 伊人网青青| 日产欧美电影一区二区三区| 精品免费囯产一区二区三区 | 欧美日韩香蕉| 日韩精品一区二区高清 | 97在线国产精品| www.婷婷| 亚洲男人bt天堂| 免费看一级a性色生活片久久无| 国产一区二区三三视频| 午夜男人av| 岛国免费黄色网址| 少妇无码av专区线| 中国乱伦一区二区| a级成人毛片免费视频高清| AV一区观看| 国产日韩精品无码去免费专区国产| 天天视频黄| 欧美岛国精品在线观看| 久久精品人人做人人看| 国产精品婬乱一级毛片彝族| 蜜臀操逼黄色视频操的好爽| 久久国产视频性吧| 禁止观看美女黄| 性欧美体内射精| 成年男人的天堂| AV天堂男人的天堂| 亚洲 无码 有码 中文字幕| 国产99999久久精品| 99热日| 99re视频在线播放青草| 亚洲97在线| 日本一区二区三区午夜观看| 国产精点久久久成人| 亚洲午夜福利在线影院| 97香焦色区| 91高跟美女在线播放| 国产极品久久久| 日本大香蕉| ,成人免费啪啪视频| 91成人高清在线观看| 欧美一级特黄淫片在线观看| www.99视频| 日韩久久三区| 狠狠色一区二区中文字幕| 夜夜做夜夜爽精品视频| 91亚洲影视| 日本人妻丰满熟妇久久久久久| 亚洲 自拍偷拍 欧美| 日本一级性爱| 99青草| 一区二区亚州激情久婷婷欧美| 99999这里都精品| 久久久久白虎| 在线综合色| www.婷婷| 国产乱人妻精品入口| 十八禁电影伊人网| 国内偷自视频区视频综合| 国产亚洲综合欧美一区| 亚洲综合网图| 校园春色亚洲色图| 日本视频一区二区三区| 男人的天堂2018东京热啪啪啪| 狠狠操一区二区| 97欧美色| 久操凹凸视频| 日本日日色视频| 亚洲欧美综合图片| 午夜福利精品| 天天夜夜久久| 精品对白久久不卡| 色青青久久影视| 欧美18禁91| 九九九九精品视频| 欧亚乱色熟女一区二区| 欧美日韩国产电影| 国产精品久久久无码aV去| 天天色播| 91九色丰满高潮| 青娱乐国产精品| 玖玖爱综合| 天天久久| 五月天婷婷影院| 99福利社| www黄片免费看com| 大屁股国产在线视频| 天天肏天天干| 日韩99神马视频片| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 日本久久女同性恋视频| 高凊专区人人操| 久久日韩肥臀| 日韩中文9| 色在线视频导航| 日韩三级视频一区二区三区| 人妻精品一区二区三区| 天美麻花大全视频| 美女骚尻视频| 欧美日韩另类在线播放| 国产不卡精品91| 人妻天天爽夜夜爽2| 级做a爱无码性色永久免费| 9 9精品一区二区三区| 少妇第一页| 人干人人人操人人摸| 日韩情色AV| A 在线网址| 久久草视频污视频| 377p欧洲日本亚洲大胆| 美女91色黄18| 伊人黄色视频免费观看| 亚州欧美一区| 精品国产一区二区三区香蕉欧美| 欧美综合色站| 熟女精品日韩一区二区三区| 天天爽爽爽爽| 天堂69亚洲精品中文字| 国产精品69久久久久久久| 5278欧美一区二区三区| 久久一二三四五六七八九区| 五月天偷拍| 91亚洲影视| 中文字幕制服欧美久久一区| 免费一级特黄特色大片在线观看看| 国产噜噜噜噜噜久久久久久久久| 大香网站| 国产精品午夜AV完会免费| 爱啪精品一区| 国产精品老师| 夜草网站| 毛片麻豆91糖心精品毛情片| 婷婷色婷婷| 国产无马在线| 就去色综合| 久久9亚洲| 女人午夜视频777| 午夜在线播放| 亚洲人码13| 色色色色电影网| 天美精品原创av片国产| 伊人少妇久久久| 99热精品免费| 93人人操人人| 丰满人妻一区二区三区色-百度| 91在线丝袜视频| 国产一区二区视频在线播放| www.久久制服糖| 欧美黑人168页欧美黑人167| 九九热九九热| 懂色AV蜜臀无码精品APP | 久久天天摸| 日韩美女,国产传媒,视频一区| 91天堂色男人的天堂| 日韩欧美日韩| 亚洲国产福利视频| 亚洲少妇激情视频| 国产久久日韩网站导航| 久久久爆乳翘臀一线天伦理视频| 岛国免费黄色网址| 性色AV网站| 精品成人久久久人人亚洲| 黄色小说亚洲| 花野真衣| 欧美综合站| 日韩黄色一区二区三区| 欧洲亚洲国产综合在线| 欧美夜夜| 2017天天插| 欧美人妻另类在线| 色拍偷亚洲| 天天看少妇| 天天爽天天| 无遮挡猛进视频免费无限观看| 青娱乐福利99| 美女被啪到深处抽搐视频| 国产精品另类一区大香蕉| 今日头条成人一区二区三区四虎精品| 亚洲国产剧情少妇激情| 色一射色一射| 极品五月天噜噜| 色色操| 高清无码国产亚洲| 99自拍视频| 国产精品亚洲一区二区三区四区| 欧美精品1区2区3区| 国产成人欧美一区二区三区的国产| 亚州一区二区| 精品视频一区二区| 97日韩| 蜜臀中文字幕| 欧美Ⅴ性爱| 欧美不卡五十路| 日本淫乱女一区二区三区视频| 一本久道久久综合狠狠爱一密臀精| 超碰在线日韩一区| 亚洲同性aV综合| 91性片| 日日夜夜精品视频| 天天做天天爱夜夜爽毛片试看| 日韩三级伊人| 欧美色视频在线| 国产野战露脸在线播放| 综合操逼| 九九色色| 欧洲无码一区二区| 97视频620| 是还免费视频1727我| 久久综合久色欧美综合狠狠 | 国产二区三区粉嫩在线| 日本中文字幕一区| 亚洲Av诱惑| 亚洲欧美日韩中文播放| 先锋影音av先锋一区| 岛国激情视频软件| 五月丁香综合啪啪| 亚洲精品欧美专业| 欧美在线干| 成人青青草原伊人| 日韩成人精品| 熟女乱伦二区| 日小BB小视频| 亚洲精品97在线| 风月影院十八禁| 色踪合AV| 四虎在线播放| 97日韩| 精品九九国产无码| 六月婷激情福利天堂69| 久草草一二三四区久久| 日语五十路和六十路亚洲国产精品| 一本色道无码DVD中文字幕| 老司机福利青青草| 99久久99久久综合| 久久久久9999妇女| 2020久久免费视频| 国产精品久久久久无码A√| a网站免费观看| 伊人丝袜美腿高跟在线观看高清 | 四虎在线观看视频| 天天躁日日躁XXXXYY| 日韩紧密久久| 啊啊啊啊啊在线| 粉嫩在线一区二区懂色| 91欧美偷拍| 天天做天天爱| 日韩无码专区| 偷拍亚洲情色| 亚洲精品无码久久AV| 中文字幕乱码人妻一区二区三区,99精品 | 亚洲日韩久久精品一区| 欧美日韩黄片精品在线| 性吧在线视频| 亚洲人精品久久久| 中日韩欧美精品无码AⅤ一区二区| 日韩丝袜人妻AV| 日本媚薬中文字幕在线| 国产精品免费视频人成| 超碰是碰在线观看| 亚洲一区二区三区四区视频| 男女香蕉一区二区| 丰满人妻无码一区二区三区| 97色妞| 人人模人人看| 中文字幕少妇色| 91天天| 熟妇人妻一区二区| 人人操人人爽人人操人人| 精品国产网站| 国产成人超碰在线| 熟妇高潮一区二| 无码人妻一区二区三区色欲aⅴ| 夜夜高潮夜夜爽高清视频一| 精品欧美老熟女一二区| 日韩三级网址| 特级毛片特黄久久免费看| 极品久久久久久久久久久久久久| 色呦呦呦在线观看视频| 啊啊啊在线看| 午夜天堂精品久久久久91| 人妻精品一区二区| ,国产乱人伦精品一区二区三区| 97干在线视频| 大香蕉一人在线| 在线播放一级无码视频| 亚洲av总站| 日本东京热加勒比久久| 久久久久斤小| 色色无码| 免费观看性欧美一级| av久日| 欧美日韩操逼嗦吊| V A在线| 丝袜无码a片| 乱伦系列一区二区| av中亚| 国产九区| 激情丁香五月| 8050午夜少妇无码| 五十路一区无码| 狠狠久久亚洲欧美专区| 国产精品美女在线一区| 哈哈操 大香蕉| 精品久久久久黄少妇| 91久久精品中文字幕| 加勒比综合在线| 天美av在线观看| 男女激情黄色网址| 欧美亚洲今日在线| 亚洲综合情色| 成人AV素股で擦久久| 亚洲一区二区三区AV无码 | 成人午夜无码视频| 青娱乐福利99| 中文字幕人妻丝袜乱一区三区| 富二代亚洲精品99| 超碰在线人妻| 精品国产91内射久久| 日韩精品资源| 亚洲老司机123专区| 香蕉久久AⅤ...| 日韩中文字墓| 91久热| 蜜臀th| 欧美少妇大量自拍视频在线观看| 免费的黄片wwwwww| 日本三级A片网站com| 欧美天天干| 青青草色插素人| 爱干爱射网啊啊啊| 麻豆精品久久久久久久| 国产又色又爽又舒服的三级视频| 性饥渴少妇av无码毛片| 91人妻少妇| 久久精品无码熟妇一区二区三区视频导航 | 亚洲一区日韩精品中文字幕| 欲色综合| 久久日韩肥臀| 99热线麻豆| 色欧洲97| 激情小说亚洲视频| 国产一区二区三区,在线观看观看| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 四虎国产精品永久在线囯在线| 熟女91网| 大香蕉日亚洲日本亚大 | 99热99在线播放激情| A一区片| 九九九九精品九九九九| 欧美亚洲宗合色性图| 一区二区不卡| 色九九九综合| 青草视频人妻在线观看| 国产中文福利| 人妻熟女一区二区| 97欧美色综合| 久草综合网| 色欧美在线| 超碰色97| 五月丁香激情四射| 成人蜜乳小视频网站| 无码天堂| 老司机天天操| 色呦呦呦在线观看视频| 日韩丰满熟妇| 99在线免费观看| 丁香五月激情综合| av操操不卡| 青青草吊丝| 日日摸日日碰| 色综合1991| 亚洲毛片久久| 国产色图乱伦| 精品欧美А∨无码黑人大荫蒂 | 蜜桃中文字日产乱幕4区| 亚洲最大黄网| 是还免费视频1727我| 啊啊啊啊啊啊啊在线| 亚洲欧美国产精品久久久久久久| 久久三区四区| 蜜乳AV免费观看| 无码操逼网| 日本久久99| 欧美日韩情色一区二区| 色婷婷香蕉| 7月婷婷综合| 91在线免费观看处女| 熟女网站最新| 91精品免费| 熟女精品日韩一区二区三区| 国产粉嫩蜜臀av一区二区三区| 亚洲男人综合| 久久丁香| 你草精品在线视频| 97资源亚洲| 性爱综合一区二区| 日韩在线欧美精品一区二区| 久操大香蕉| 中文字幕一区二区三区人妻少妇在线| 97超碰人操| 国产AV中文| 亚洲三区视频| 亚洲熟妇极品| 日本五区不卡| 91一区二区三区蜜桃| 国产精品久久伊人| 91在线综合网| 淫淫综合网| 亚洲成人日韩小说| 大香蕉欧美伊| 久久久啊啊啊| 久久精品国产72国产精品福利 | 久久国产AⅤ| 久久九九综合| 天天操人人操骚逼网站| 精品人成视频在线观看| 亚洲欧洲综合视频在线| 夜夜青青无码影院| 一中国女人毛片水真多| 天天操夜夜操| 亚洲欧美天| 狠日操| 中文乱码99| 精品78| 国产精品免费视频不卡| 超碰97欧美日韩| 国产精品99精品视频网站| 欧美视频在线第3页| 久射吧| 91成人精品在线播放| 大香蕉99热| 日韩国产精品人妻无码久久久| 9久久精品| 欧美女同在线| 无色无码| 丝袜视频网国产90| 全免费a敌肛交毛片免费| 九X超碰| 中文字幕第9页萱萱影音先锋| 色蜜AV| 色路综合| 插入综合网| 国产97色在线| 女人的久久久| 啊啊啊啊啊在线| 极品丝袜无码| 色姑娘综合网| 久久9精品视频| 亚洲欧美日韩偷拍色图| 91色爽欧美| 国产欧美在线观看免费观看| 韩国轻伦国内自拍一区| 日韩亚洲欧美中文字幕| 香一区二区三区| 国产白丝精品在线观看| 综合网久久| 在线观看不卡一区二区三区| 九九九九九九九九九九九九九九九女| 乱伦色图网址是多少| 天天舔天天日天天射| 精品欧美А∨无码黑人大荫蒂| 欧美亚州综合图片| 亚洲精品国产熟女久久久久久| 美女丝袜激情小说| 超碰人人超在线观看| 美女性91| 观看免费区二区三区二| 超碰人人操97碰| 精品人妻一区春色| 五月天激情小说| 久久久96| 激情黄色五月天| 免费一级视频特黄色大片| 日韩欧美加勒比| 亚洲欧美中日韩| 男人高清无码一区二区| 69丨亚洲丨精品丨入口免费播放| 婷婷五月天基地| 淫淫综合网| 麻豆乱码久久精| 被体育老师抱着c到高潮| 大香蕉视频啪啪啪啪| 亚洲一二三精品久久网| 久久美女国产| 97资源久久| 大香网伊人久久综合网eew| 日本在线激情一区二区三区| 亚洲熟女综合网| 亚洲自拍一区夜夜操| 久久久夜夜嗨免费视频| 天天懆天天日| 亚洲情色 自拍| 大香蕉在线免| 99ri精品| 天天做日日做| 欧美AB在线| 久久久91福利姬| AAA久久| 欧美一级特黄淫片在线观看| 91高潮| 亚洲电影91| 区一二区日韩亚洲乱码av电影| 日本www操操操| 亚洲天堂五月天国产| 久久9免费视频| 成人十八禁日韩欧美一二三| 久久综合九九| 亚洲av无线观看| 午夜小电影在线插入淫高潮| 国产蜜臀精品一区二区尤物| 日本 免费 一区二区三区 久久香蕉| 97碰在线视频| 97人妻免费中文字幕| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 中文字幕av片| 日本不卡高清免v欧美日韩在线观看| 激情五月天社区| 日韩少妇无码| 青青青草原| 国产小炒后入式| 婷婷亚洲中文字幕在线| 婷婷综合五月天| 国产精品自在线发布| 天天草夜夜草高潮片| 国产在线播放成人免费| 蜜臀久久99精品久久久久久婷婷| 超碰97最新人妻| 青青草视频爽一爽| 精品久一区免费| 久久草草欧美精品| 婷婷五月天福利| 欧美性爱另类综合| 天天色播亚洲综合网站| 男女激情黄色网址| 欧美亚洲尤物久久| 色色色欧美| 欧美性爱视频免费一区一A | 亚洲天堂日本| 高跟伊人julia ann| 欧美韩国你懂得在线 | 综合色久| 91爽啪| 综合婷婷| 丁香五月性| 丁香五月电影| 一区二区三区精品视频| 婷婷亚洲五月***久久| 亚洲A曰本VA欧美VA视频| 在线观看中文字幕| 小视频国产| 大学生口爆吞精| 自拍偷拍 日韩无码| 国内偷自视频区视频综合| 在线观看免费视频国产| 国产精品久久伊人| 亚洲成人综合在线| 夜夜狼人妻| 日韩三级在线观看mp4| 欧美色图 人妻| 亚洲麻豆18发?| 97日韩超碰超碰中文字幕| 性91| 豆花视频操逼网址| 亚洲日韩精品一区视频在线| 去干网最新版| 色综合20p| 亚洲天天精品| 亚洲牲交| 日韩图区 偷拍| 欧美视频在线视频免费va| 97天堂| 欲色影视综合吧| 97超碰天天爱天天爱| 东京热熟女亚洲视频网站| 欧美小说区视频区| 熟妇一区二区| 久久毛卡| 欧苏综合色综合| 亚洲欧美日产国产91毛片| 亚洲啪啪啪啪视香蕉| 97亚洲欧美| 又粗又长又爽在线观看| 99久久九九| 伊人 俄罗斯 a v| 香蕉精品二区二区 | 91麻豆va国产精品| 日本999精品视频| 国产精品毛片| 无码直播久久久| 综合自拍| 九九九九九九九九九九精品视频| 超碰97久| 日本欧美一区二区三区免费| 日本久久99| 欧美性生活内射| 青草综合| 午夜精品探花| 精品无码一二三四区| 天天躁日日躁狠狠狠躁| 乱伦1色页| 久久久久久夜夜夜夜夜| 欧美综合综合| 永久免费发布性爱网| 毛片视频白嫩| 欧美丝袜中文字幕07在线| 国产精品ⅴ无码大片在线看.| 色五月婷婷五月天| Aa东京男人的天堂| 麻花豆传媒剧国产MV出差| 夂久色| 啊啊啊水好多| 免费人成?大片在线播放| 亚洲精品欧洲精品| 丁香五六月啪啪| 91美女丝袜诱惑视频| 亚洲成人在线资源| 久久综合亚洲色1080p| 午夜福利区| 九九热精品视频六| 两女互慰AV高潮喷水在线观看| 亚洲伊人a线观看视频| 亚洲美女精品| 欧美岛国精品在线观看| 丝袜美腿诱惑亚洲欧美视频在线观看 | 日本熟女中文| 91视频女生| 亚洲成人美女无吗| 台湾佬中文娱乐网久久久久久久久久com | 麻豆三极片| 欧美专区第一页| 青草精品视频日本久久久久网站在线| 中文字幕一区二区三区视频播放| 亚洲日韩东京热一区| 少妇一区二区三区高速| 白丝jkav| 欧美精品日韩久久久九 | 东北黄色电影| 色噜噜国产精品视频一区二区| 激情色色| 91人妻在线视频| 综合色图区| 乱伦一二三| 5252色欧美在线| 这里只有精品视频在线观看麻豆 | 亚洲蜜乳av| 亚洲综合69| 婷婷操逼| 久久岛国| 极品内射| 青娱乐二区免费| 亚州久久9| 翔田千里AV无码秘 三区| 淮穴色AV| 午夜一级免费毛片| 久久综合久色欧美综合狠狠 | 91粉嫩萝控精品福利网站_精品影音先锋国 | 秋霞午夜视频一区二区| 久久三| 综合激情一一91| 日韩无码专区| 日本中文字幕不卡视频| 91成人社区| 91人妻PORNY九色大屁股| 久久久性爱| 亚州人妻| 最新日日夜夜天天干干| 欧美色图片欧美色图| 97亚洲综合电影| 亚洲密乳AV| 99超碰网| AV一二区| 欧美一级A片在线看视频性色| 老鸭窝日丰县女人| 亚洲熟妇极品| 欧美视频一区二区在线| 四虎影视精品| 伊人 俄罗斯 a v| 久久老子无码午夜伦不卡| 夜夜骑夜夜操| 青青草原成人| 美女高潮视频91| 色五月首页| 久久精品午夜国产亚洲AV无码 | 人妻少妇一区二区| 男人天堂黄片| 91东北熟女| www.操| 视频国产精品未满十八禁止在线观看| 中国91AV| 国产亚洲 中文欧美久久| 男人天堂新在线| 亚州熟妇精品| 亚洲天堂中文字幕无码男同| 你想操日本小逼吗| 亚洲无码视频免费在线观看网址!| 青青青艹在线视频| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 午夜精品久久久久久久男人的天堂 | 尤物黄色在线观看网站| 三四中文字幕| 日本天堂在线播放| 国产美女91视频| 蜜桃久久综合视频| 国产在线综合网| 中文字幕黄色一起草| 欧美日韩亚洲五月天婷婷| 亚洲高潮少妇| 色情综合| 综合国产影视三级| 五月亭亭六月丁香| 中国少妇啪啪视频| 啊啊啊好疼| 亚洲天堂日本| 欧美熟女妇同| 国产少妇与亚洲av| 九九碰九九爱97| 亚洲欧美在线观看2021| 无码高清国产AV| 国产对白刺激视频| 国产日韩精品suv| 一起草三级AV电影在线观看| 日韩精品资源| 99少妇| 日韩精品资源| 破处bbq| 国产精品高朝久久久久久久| 国产刺激视频| 狠狠色婷婷7777久| 五月丁香激情综合网| 欧美专区日本专区| 久久一区二区高清免费| 日本操逼视频免费| 中文字幕乱码在线| 天天cao在线| 丝袜 中出 制服 人妻 美腿 中文字幕| 另类图片五月天| 亚洲少妇视频| 欧美在线电影| 99人妻| 人妻色偷色噜| 一级婬片120分钟试看| 久久性爱视频99| 欧美精品庄| 欧美懂色综合网| 国产精品一区二区a| 亚洲在线网站| 波多野结衣被操50分钟免费视频 | 操少妞在线视频| 天天在线91| 亚洲欧洲日韩中文字幕一区| 91亚洲图片| 国产免费黄色一级大片| 一区二区三区免费视频入口| 国产日产精品久久快鸭的功能介绍| 久久国产乱子伦精品免费女人| 欧美天天干| 欧美日韩国产色图在线| 色婷婷亚洲婷婷| 亚洲欧美激情另类色图| 亚洲 欧美 小说| 99热 按摩 日韩| 日本一卡二区在线| 热思思免费视频| 久久久亚洲高清不打码| 九九探花视频在线观看| 婷婷在线精品| 真实高潮91| 性爱AV天堂| 黑人在线91| 国产中文字幕在线点播| 午夜理论片在线观看免费| 无码又爽又硬又激情免费视频| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 懂色Av一区二区三区| A片大香蕉在线| 乱伦图一区| 2010男人的天堂| 91国产美女丝袜足交精品视频 | 国产在线视频午夜精华在| 国产成人亚洲精品无码古代早漏男 | 密臀视频一区二区三区| 99re视频在线播放青草| 日本高清视频xxxx| 无遮挡h肉动漫在线观看| 日韩中文字幕熟妇人妻 | 五月婷婷性爱| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | AV在线资源| 熟女精品日韩一区二区三区| 日本韩国国产精品一区| 日韩啪啪网| 亚洲Av噜噜一区二区三区妖精| 亚州五月| 欧美性爱日韩性爱| 亚洲少妇色| 欧美线天码中字| 人人做天天爱| 久久这里| 久久婷婷电影网| 乱伦a片视频| 人妻久热在线| 国产精品乱码久久久久久| 操逼视频免费日韩无码| 强奸乱伦AV一天堂网| 亚洲人妻中文高清| 97干日韩| 人妻少妇精品久久久久久| AA级电影三区| 欧美|91色综合| 日日骚av| 蜜乳Av成人片网站| 在线人妻熟女一区二区三区四区五区| 欧美一区二区传媒| 精品无吗m| www.zbzhongsen.com| 99只有精品| 自拍偷拍国产欧美日韩韩| 久久久九97| 校园春色 亚洲| 911粉嫩人妻| 伊人精品国产| 国产又黄又爽又刺激久久久久久| 99中出在线| 欧美精品97| 人人透人人操| 死我十八禁| 日韩成人私密一级精品av| 亚洲激情在线| 亚洲高潮影院| 岛国免费黄色网址| 亚洲成人色情五月天丁香花| 日本性爱欧美性爱| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 91亚洲色图| 七久久久| 亚洲色婷婷综合久久一区二区三区| 欧美性爱一级操| 亚洲男人天堂视频| 色官网色综合| 国产91丝袜在线播放蜜月| 黄色大香焦1级‘′‘| 亚洲性图91| 欧洲一级性爱视频在线观看| 后入福利视频| 伊人五月天激情| 91激情国产| 久久伊人大香蕉| 欧美性高潮在线| 乱人伦 国语对白:视频直接看| juliaann欧美丝袜办公室| 91精品久久综合熟女| 91性网| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 少妇超碰在线| 色激情综合网站| 久久综合中文国产| 五码视频在线观看| 人妻熟女一区二区| 99精品视频在线观看免费| 中文字幕av丝袜| 日韩在线观看中文字幕视频| 品亲网欧美品亲网| 日本欧美亚洲高清在线看| 东北老熟女| 91是天天| 日韩精品在线视频在线观看| 夜夜夜夜爽| 亚洲丝袜二区| 亚洲伊人久久综合97| 四虎在线播放| 91久久久久久久久18| 欧美丝袜中文字幕07在线| 极品粉嫩一区二区| 欧美日韩性爱无码| 亚洲色图欧美色18直播在线| 伊人大香蕉在线| 国产亚州精品美女久久久免费| 亚洲图片视频小说| 中文字幕少妇色 | 欧美性爱1080p| 日本加勒比无码专区| 91在线视频免费中出| 欧美系列在线一区二区| 中文字幕欧美日韩三级| 久久一二三四不卡| 国产精品午夜高潮呻吟久久av| 人妻精品一区二区| 欧美色图亚洲特色| 一二三啪啪专区| 国产精品久久久久久久黄无码| 日本色日夜干| 任你干在线视频| 亚洲综合春色| 自偷自拍的亚洲视频| 婷婷在线视频在线观看| 男人天堂久久精品不卡| 99青青草国产视频| 丁香六月婷婷| 欧美另类综合久久| 日本国产欧美一区三区二区| 超碰欧美97资源| 亚洲日本男人天堂网| 免费视频a级毛片免费视频| 伊香蕉综合久久久久久久噜噜噜| 欧美日韩精品国产91| 女优视频第10页| 看黄片视频免费| 日韩免费高清大片在线| 九久精品| 91精品少妇搡搡搡| 久插综合| 校园春色欧美色图| 五月婷婷性爱| 精品区国产区一区二区三区| 91伊人久| 99热| 亚洲色图欧洲| 婷婷人妻激情| 五月天久久婷婷亚洲| 怡红院视频在线| 91中文在线| 天天躁日日躁AAAXX| 操操操日本的逼| 26UUU欧美激情一区二区| 亚洲在线网站| 久草在| 色妺妺AⅤ| 96精品久久久| 中文字幕一区 二 区 三 四 五 区日 日 骚| 伊人激情五月天一区二区| 日韩无码三级影院| 国产超碰AV在线精品| 天天干嫩逼网| 超碰在线91| 97欧美资源| 91丨精品丨国产丨丝袜| 按摩中文字幕| 免费黄色视频网址| 亚洲国产精品9999在线观看| 黄色成人网久久久久久| 亚洲婷婷综合网| 日韩免费高清大片在线| 国产高清自拍视频| 国产精品人妻无码久久久互動交流 | 熟妇高潮一区二区免费视频| 六月丁香久久| 麻豆久久久一区二区| 精品人人| 欧美性暴力猛交XXXX| 91欧美偷拍| 超碰综合色| 97爱b| 亚洲宗合网| 国产精品一区在线播放| 精精品人妻一区二区三区| 91精品国产综合久久久蜜臀酒店|