色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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
返回資訊列表
天堂69亚洲精品中文字| 日本性爰一道本| 亚洲一区二区三区播放在线| 天美传媒精品久久视频| 久久av网| 中文字幕在线观看视频www| 久9九综合在线| 国产精品高潮久久AV| 三级片网站在线播放| 96久久久久| 日韩欧美偷拍美女视频| 97色色婷婷| 日韩欧美午夜一区二区| 99人妻| 欧美人妻色| 国产激情在线观看| 亚洲AV无码久久久国产精品| 99精品欧美一区二区三区桃色| 骚鸭AV| 欧美性暴力猛交XXXX| 亚洲AV无码久久久国产精品| 国产日韩手机视频在线| 91制服丝袜| 国产欧美成人精品| 精品国产72| 激情视频网址| 日本中文字幕在线电影| 最新的亚洲无吗| 秋霞网无码| 黄色成年| 呦呦一区| 激情五月天中文字幕色| 久久东京热久久| 九草九九九| 精品视频在线观看精品| 国产性感骚丝袜在线| 国产黄色 A 片免费看| 色香天天| 欧美日韩性爱视屏免费看了| 国产精品爽爽v| 亚洲色图综合| 国产又粗又大硬免费色网视频| 久久国产对白激情浪潮| ,国产乱人伦精品一区二区三区| 午夜福利视频在线一区| 婷婷尹人大香蕉免费| 密乳AV免费观看| 亚洲欧美色图小说| 亚洲一区二区三区在线激情| 日本不卡一区二区| 无码精品蜜桃一区二区三区ww| 大香蕉视频啪啪啪啪| 国产精品熟女九九九| 中文字幕日韩国产传媒欧美精品| 国产在线精品偷| 26uuu性| 嫩草在线视频| 91社区拍啪人妻| 亚洲 自拍偷拍 欧美| 无码高清操逼| 另类 日韩 熟女| AAAAAAAAA黄片| 黄片qw| 岛国色情视频在线观看| 国产成人亚洲精品无码古代早漏男| 人妻性爱一区二区| 黄色片一区二区三区四区五区 | 日韩精品中文字幕人妻| 蜜桃视频成a人v在线| 国产精品女生av| 国产一区二区在线电影| 久久婷婷视频| 97这里都是精品| 都市激情人妻一区二区青青操视频| 蜜臀色乳| 国产乱码久久久| 欧美人人曰人人操人人射射| 国产一级黄色片在线观看| 蜜乳av首页| 蜜桃成人1区2区3区| 青青草视频爽一爽| 国产免费内射视频| 精品国产一区二区三区香蕉欧美| 日本中文字幕在线电影| 亚洲日本男人天堂网| 加勒比日本在线| 日产成人久久| 搡老女人老91妇女老熟女| 亚洲欧美清纯| 岛国片在线播放| 黑人精品XXX一区一二区| 首页中文字幕中文字幕免费| 中文字幕久久精视频久久大全| 亚洲天堂日本| а√天堂资源官网在线资源| 亚洲天堂 视频你懂的| 人人天天欧洲| 美熟女逼导航AV操逼| 人人摸人人叼| 骚熟女AV网| 国产无码精品无码| 亚洲精品视频在线| 亚洲欧美91√| 国产多人在线观看视频| 大香交伊人网| 国产后入式在线观看| 男人天堂网址| 青娱乐av在线| 精品无码一区二区三区色欲| 99热这里只有精品99| 大香蕉宅男伊人| 欧美色97| 偷拍自拍在线视频观看| 青青爽| 97精品视频在线播放| 操久久久久久| 日韩猛交| 久久久精品国产亚洲AV无码| 日日骚 av| 日本一级特级毛片视频| 五月丁香| 大香蕉99999| 日韩探花精品在线视频| 91性感网站| 国产一区二区成人av在线播放| 无遮挡h肉动漫在线观看| 三级网站超变态精品| 张柏芝国产一区在线观看| 九九久久综合| 我要色综合网站| 可以在线观看AV的网站| 亚洲十八禁止| 熟妇操花| 大色网久久| 国产92麻豆天美精品色欲5| 久久中文色图| 亚洲精品中文字幕一区在线视频 | 色天使亚洲综合在线观看| 欧美人人曰人人操人人射射| 操比国产| 中日韩久久久免费看| 一本一道波多野毛片中文在线| 91在线美女| 国产精品扒开腿做爽爽爽视频| 国产av强奸美女| 中文97国产| 欧美不卡在线一区二区| 国产视频小说| 久久9视频| 亚洲色图国产另类| 极品尤物自安慰| 国产第11页| 黄色一级视| 丝袜美腿91| 日本中文字幕在线视频| 天天操妹子| 韩国轻伦国内自拍一区| 国产中文字幕曰本毛片| 成人性爱高清视频免费看| 330dv亚洲成年视频网| 天天精品| 啊啊啊啊网站| 国产丰满熟夫69mpp| 亚洲成a人在线观看久| 美女97超碰| 啪啪AV导航| 一二三四视频在线社区中文字幕| 国产精品久久久久久高清无码免费看| 色哟哟精品1精品2| 大香蕉免费中文| av爱爱爱| 97色操| 91麻豆天美国产欧美| 秋霞一级鲁丝片A片| 熟女欧美日韩综合婷婷| 日本污ww视频网站| 国产精品高潮久久久无码| 欧美精品 - 91爱爱| 日韩AV一起草| 亚洲色图综合| 亚洲人妻久久久| 人人妻人人操人人乐| 中文日本免费高清| 亚州综合在线| 久久天堂网| 热久久91婷婷| 色色婷婷丁香| 亚洲最新av无码成人精品区 | 欧美综合第一| 欧美黄色大香蕉一区二区| 暴力av在线| 超碰在线974| 丝袜美腿制服人妻二区中文字幕 | 女欧美一区二三区| 探花精品 一区二区| 亚洲日韩XXX| 亚洲 欧美 中文 日韩超碰| 日韩不卡毛片Av免费高清| 色香综合| 偷拍综合网| 91 偷| 久久久久久中文| 精品福利| 中文字幕奈奈美被公侵犯| 欧美激情精品久久久久久| 久久久精品国产亚洲伊人| 国产精品亚洲高清在线| 综合伊人网12色| 不卡视频一区蜜桃视频| 果冻传媒A片麻豆熟妇人妻| 欧州色图区| 韩国黄色片精品久久久| 一区三区啪啪| 色翁荡息又大又硬又粗又爽| 婷婷涩嫩草鲁丝久久午夜精品| www久久精品| 天天摸夜夜操视频| 欧美操逼熟女| 蜜臀在线免费观看在线免费观看| 97福利视频| 久久久不卡区一区二区三区久久久| 日韩精品一区二区三区四虎影视| 另类小色呦| 一区二区视频在线播放| 热久久国产| 国产无码久久高清| 日韩人成网站在线播放| 国产福利影视| 六月色色| 91精品91久久久中77777| 97国产高清视频在线观看| 淫荡熟女乱伦网| 无码逼| 久久九九视频九九视频| 日人妻视频91| 色狠狠综合| 91综合在线| 精品国产少妇高潮视频| juliaann精品熟女一区| 中文字幕人妻色偷偷久久皮| AV色五月| 97国产人人| 国际精品久久久| 老熟女天天操| 91免费看一区二区三区| 日韩av一级黄片| 国产成人网站在线观看| 色婷婷五月综合| 婷婷成人久久久精品| 嫩草 人人网精品| 亚洲污污网站| 97国产中文| 天天综合网~91| 日韩欧美性吧婷婷乱伦大香蕉| 精品日韩人妻视频| 天天操夜夜操| 超碰天天操你比| 亚洲日韩狠狠撸视频| 亚州高清色综合| 久久精品六区| 日韩性爱小视频| 国产白嫩漂亮KTV在线| 看一级黄色视频| 青青草自拍视频在线播放| 青青草字幕AV| 丰满熟女一区二区三区在线播放| 免费av高清无码| 国产欧美亚洲精品a第2页| AA丁香综合激情| 操一区| 性性久久| 91综合色噜噜| 后X久久| 欧美啪啪啪91| 中文字幕日韩综合| 干婷婷综合网| 日本精品一级二级三级| 国产原创剧情在线丝袜 | 欧美久久毛片基地| 久 久无码人妻AV| 凸凹视频在线观看| 欧美极品少妇| 91成人久久 | 超碰97久久观看| 一中国女人毛片水真多| 亚洲宅男天堂| 人妻99p| 九九夜精品九九在线| 亚洲情色欧美| 91美腿丝袜在线观看| 丰满人妻一区二区三区免费| 亚洲欧美成人在线| 日韩内| 日韩另类| 漂亮人妻被强中文字幕hd| 午夜国产成人福利视频| 欧美极品少妇| 99久久9| 色哟哟av| 爽爽淫人网| 东京太热男人的天堂久久久| 欧洲色色| www.99热| 91美女視頻| 日韩探花精品在线视频| 97超碰欧美手机在线| 亚洲中文日韩精品| 深夜视频| 亚洲综合性感在线| 欧美五十路熟| 国产9l 大屁股| 六月激情网| 丰满熟女一区二区三区在线播放| 中文字幕视频2区| 天天影视色香欲综合网小说| 亚洲青色欧美| 在线啊v一区| 秘书高跟黑色丝袜国产91在线| 一区二区娱乐网站| 男人亚洲天堂| 亚洲和欧美裸体美女双飞视频| 国产二区视频在线观看电影| 国产丝袜一区二区三区| 天天弄欧美| 97欧美性爱| 强乱老妇中文字幕| 嗯嗯啊啊用力视频免费| 亚洲精品人妻吞精av| 9精品久久久久| 污到发麻的视频 国产| 欧美人人曰人人操人人射射| 97色欧洲| 蜜臀久久久国产| 亚洲精品亚洲人成人网| 人人操人人摸avav| 男人天堂最新手机版在线青青草| 25国产精品免费观看| 欧美亚洲天堂| 97超碰国产亚洲精品| 精品妇女一区二区三区| 九月丁香综合网| 欧美成人一级麻豆| 99av| 亚洲国产亚洲天堂| 午夜福利久久久噜久噜久久综合 | 久久宗合97| 无码人妻一区二区一牛影视| 国产九九九九九九九九| 高清国产无码av| 草B在线| 抽插爽| 五月激情综合网| 99国产精品视频尤物| 天天综合中文字幕 91| 蜜桃久久久久久久久久久久| 女优视频第10页| 国产久久av| 襙一襙| 成人线上超碰| 91热热色| 婷婷九月国产| 无码区蜜乳| 亚洲国产亚洲天堂| 色欧美天天| 一级特黄aaa大片在线观看成人一级片在线观看 | 亚洲美女AV无码| 久久精品一区一起草| 美女淫穴| 欧美三级一级| 九九玖玖精品| 久久a久久| 999狠狠综合| 久久综合激情| 色综合一区二区三巨| 99操碰| 一区二区娱乐网站| 亚洲欧美成人在线| 天无日色综合| 91在线美女| 欧美亚洲国内自拍| 精品久久久无码| 丁香激情网| 五月婷在线| 超碰在线国产| 精品一区二区三区蜜桃臀赵总 | 爱我干综合| 日韩av影片在线观看| 干干干天天| 无码操逼网| 国产91精品福利在线| 隔壁邻居波多野结衣中文字幕| 国产一区二区免费福利片| 91综合在线| 91社区伊人| 99婷婷一区二区| 秋霞一集毛片观看| 操少妇很爽av| 亚州乱码中文字幕综合久久久| 亚洲国产综合久久天堂| 口爆欧美91| 在线观看A啊啊啊| 亚洲免费97免费| 啊嗯嗯啊好大好爽| 南澳成人一级片在线播放| 后入式免费视频| 久久久一区二区三区三州| 日韩精品色呦呦| 国产精品久久久无码AV网站| 欧美日韩性爱视屏免费看了| 色婷婷丁香五月| 夜夜操天天肏| 久久精品91| 青青草久草| 熟女这里只有精品6| 亚洲日韩少妇一道本视频| 嗯嗯啊啊亚欧精品| 久久熟女久| 国产免费内射视频| 一类av片在线看| 色色色色网站| 黄色二级片网站| 欧美精品亚洲精品日韩传电影| 中国熟妇| 萌白酱自拍视频| 污啪啪啪视频| 91碰碰| 亚洲图片欧美色图| 国产97色在线| 91精品久久久久久77777| 欧美综色欧| 成人无码在线超碰网| 亚洲中文字幕av| 青青伊人久久| 中文字幕人妻资源在线| 国产少妇肉丝在线观看| 人人九九精| 欧美日韩国产成人高清| av九九| 天天舔天天日天天射| 国产三级片在线观看| 交换娇妻呻吟声不停中文字幕| 婷婷色综合| 91高潮喷水美女| 美女天天干| 色色国产| 欧美高清无码免费视频高清版| 日韩综合97p| A级国产欧美激情在线| 免费看久久久性性| 国产精品久久久久999| 人人操,人人液| 发朗少妇买婬全视频中文| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 久操视频在线| 国产熟女完整版中字 | 色综合久久av| 丝袜性亚洲| 欧美少妇色图| 91蜜臀熟女| se吧提供国产乱老熟视频胖女人| 另类小说五月天| 干美女人妻| 欧美视频边做饭边橾| 东北女人操比视频| 波多野结衣先锋影音| 日韩钢筋无码高清啾啾啾| 国产精品人妻无码久久久老鸭窝| 嗯嗯啊啊视频在线看| 亚州欧美在线| 操久久久久久| 久久久久久九九九九| 天天日天天操心| 欧美色院| 亚洲、日韩、综合、另类| 99re9| 97资源制服丝袜| 国产成人亚洲精品无| 天美国产精品| 亚洲日韩精品久久久久一区壹牛 | 91爱剪切久久| 91爱综合| 国产三级资源在线观看| 97精品国产精品免费观看| 大香蕉黄色一级片免费看| 传媒免费一区二区三区| 脫衣舞一区二区三区| 麻豆区久久久久亚| 丁香激情五月天| 久操免费在线| 91中文精品日韩欧美在线 | 国产人妻精品一区二区三区秋霞| 久久欧美性爱视频| 天天噜| 欧美大香蕉97| 欧美性爱伊人| 一区二区高清视频| 久久久久久9999| 蜜乳性色无码专日粉嫩骚逼AV| 91色射| 久久国色天香香蕉| 一级黄色视频网| 成人AV在线网站| 啊啊啊啊啊啊啊国| 久夜视频| 天堂综合| 午夜大香蕉| 亚洲一区日韩精品中文字幕| 999 久久久| 婷婷导航| 国内偷自视频区视频综合| 色眯眯av| 狂操嫩妻视频一区二区三区| 91亚洲黑人| 99热导航| 神马久久69| 97视频免费| 人妻出轨一区二区三区| 国产懂色精品国产av| 视频一区二区免费在线| 公司1区2区3区精产精| 男人天堂婷婷五月天校园春色| 99这里只有精品国产| 97亚洲自在精品在线观看| 天堂精品小草| 97视频在线免费看| 久热9| www.狠狠| 成人三一级一片aaa| 婷婷激情四射| 精品一区99999| 久久久久久久78| 激情第四色| 变态乱伦伪娘灌肠一区二区| 超碰在线一区二区| 强乱老妇中文字幕| 果冻传媒A片一二三区| 99热在线观看| 任我爽在线视频免费观看| 人妻81p| 日语五十路和六十路亚洲国产精品| 97网址97| 嗯嗯啊啊视频一区二区三区| 男人天堂站| 欧美亚洲综合色| 国产福利精品最新在线| 日韩欧美综合激情| 亚洲AV操| 欧美日本国产日韩激情视频| 国产精品熟女九色九色蜜臀| 国产又色又粗又黄又爽| 成人性爱免费播放| 精品视频一区二区| 东京热男人的天堂| 日本视频在线中文字幕| 亚洲开心网| 精品对白久久不卡| 色噜噜狠狠色综无码久久合欧美| 欧美热图99| 欧美色干| 大JI巴好深好爽又大又粗视频| 99精品九九九九九九| 一区二区播放| 天美传媒麻豆一区二区三区国产精| 久久色AV线| 欧美色图片欧美色图| 男人天堂东京热| 2017亚洲天堂| 日韩激情电影中文字幕| 人妻献身系列第54部| 成人免费看吃奶视频网站| 国产一区二区三区白丝| 免费亚洲黄色视频在线观看| 亚洲中文日韩精品| www色色com| 亚洲国产精品久久久久久久久久| 日韩人妻大香蕉| 狼天天狼天天大香蕉| 操九九九九九九| 97欧美精品综合| 国产美女激情| 精品一区二区3区| 久久97资源 网| 97一区二压| 天天操天天7| 男人的天堂99| 国产无码精品久久久久久| 少妇综合| 可以在线观看AV的网站| 国产一区二区三区影片| 女优免费一区二区永久| 超碰97色色| 在线电影亚洲色图| 麻豆三极片| 中文字幕一区二区日韩网| 黄片免费看黄片免费看| 综合熟女| 日韩资源网| 干B网| 欧美性生活男人的天堂| 成视频在线观看免费看| 丰满欧美放荡少妇在线| 欧美日韩在线小说| 翘臀vidoes| 欧美变态激情网| 2017天天操| 草草影院日本第一页| 久久99久久99久久99人受| 天天天乱色综合全| 亚洲熟女人妻中文字幕一区二区| 17c在线成人免费A片观看| 91碰碰| 欧美大色交| 欧美日韩在线视频网站| 中文字幕亚洲在线一区| 日韩欧美丝袜诱惑| 2019天天干| 国产AV超爽| av72网| 国产福利一区二| www.色五月| 91精品婷婷国产综合久久| 国产福利电影| 成人精品电影| 亚洲资源站| 国产热RE99久久6国产精品首| 青青操少妇| 一级二级在线观看| 99爱精品| 91中出视频| 国产无码一二三区| 北野未奈加勒比av| 亚洲第一黄色av网站| 国产精品2020| 国产偷人伦激情在线观看| 91狠狠综合久久久久久| 熟女少妇一区二区三区| 一区二区三区精品久久| 色眯眯av| 久久精品国产亚洲AV片多多| 新视频sss国产| 国产一区二区在线播放量| 夜夜狼人妻| 中文字幕丰满人妻日本| 丝袜夫妻自拍| 亚洲无992tv| 日韩性色b| 国产女大学生AV| 啊啊啊啊啊啊在线看| 大香蕉伊人网| 91精品人妻一区二区三区蜜桃臀| 亚洲欧美日韩免费观看| 美女露胸露屁股| 国产精品不卡一区二区三区av| 高清不卡一二三区视频......| 精品人妻一区二区三区四区不卡在| 九九热视频在线观看| 超碰2017| 伊人国产av| 亚洲精品人妻在线| 日韩人妻精品| 色婷婷久久| 精品亚洲| 天天综合网1| 性爱乱伦一区| 60秒不遮不挡| 91色噜噜狠狠| 草草网站影院白丝内射| 午夜视频久久久| 欧美亚州手机在线| 午夜福利一区二区影院| 久久 久久国内精品亚洲| 性爱av网站| 日韩熟女精一区二区三区不卡| www.四虎在线| 操逼不卡中文字幕| 青草一区二区| 三级网站超变态精品| 在线观看国产黄色| 亚洲情色视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 探花一区在线| 四虎免费在线观看| 97超碰免费人人性爱| 精品黑人一区二区| 亚洲自拍偷拍视频在线| 欲女人妻性色av| 91oumei| 91美女视屏| 99老司机精品视频在线观看 | 丁香六月婷婷综合| 日B操| 日韩无码人妻中字久久三区四区| www老逼91| 亚州AV无码国产精品| 免费试看60秒| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 久久精品人妻一区二区| 青草视频在线看看看看看看看看看| 天天看精品动漫视频一区| 中文日韩欧美熟| 99.色网| 高清在线偷拍自拍视频| 久久久一区二区三区三州| 四虎影视国产精品| 久日91在线| 日本熟妇一区二区三区| 丁香六月东京热| 国产精品分类在线观看| www.激情| 97鸡把在线视频| 久操在97| 免费看污网站| 黑操B| 国产欧美亚洲精品a第2页| 激情黄色片在线观看| 欧美少妇高潮视频| 欧美91丝袜| 麻豆九九九| 丝袜美腿欧美| 色婷婷久久| 在线观看国产黄色| 色婷婷激一区二区三区 | 久久国色天香香蕉| 99爱视频| 久热99| 色婷婷色99国产综合精品| 精品久久久久久久| 九九九精品一区二区无码| 色哟哟-国产专区| 亚洲18禁| 美女超碰978| 狠狠操夜夜操蜜桃视频三区| 日韩啪啪视频| 伊人五月天| 97碰在线视频| www超碰| 亚洲久热| 久久久久久午夜男人的天堂| 亚洲色综合| 伊人久久婷婷| 99精品网| 26uuu欧美| 视频二区美腿丝袜制服人妻欧美| 激情AV| 婷婷激情啪啪| 亚洲一区二区三区久久 亚洲一区二区| 中文字幕在线日亚洲9| 免费看欧美美女黄色大片| 日本三级网页| 精品国产久热在线观看| 国产欧美日韩在线不卡第一页| av天堂手机版追回| 久草五月| 男人的天堂2010| 大香蕉伊人亚洲| 一区中文字幕二区日韩| 麻豆AV96熟妇人妻| 亚洲成人妻日韩在线| 五毛骚逼极品美女怕怕| 天天天做天天天爱天天天爽| 亚洲情色 自拍| 欧美美女视频| 17c嫩草51久久91嫩草| 一道α片欧美| 国产三级多多影院2022国产AA一级毛片无码| 黄色片一区二区三区四区五区| 亚洲一区二区三区播放在线| 久久精视频美日韩在线视频| 国产精品电影| 97超碰无码网| 搡老熟女国产1000部| 校园春色第一页| 88xx成人精品视频| 亚洲成人福利电影免费| 青青草操逼逼视频| 亚洲美女30b| 加勒比久久av| 91一区二匹| 国产精品免费日韩| 91丨九色丨东北熟女| AV天堂丝袜| 久久超碰av在线| 97超碰9| 日日操丁香五月天| 六六久久日韩不卡| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 国产乱码久久久| 亚洲性综合9| 亚洲天天影视综合网| 久操电影网| 另类亚洲一区二区三区| 婷婷五月天影院| 亚洲码和欧洲精品激情系列| 大香蕉99re| 女人被男人桶爽视频网站| 丁香五月天堂网| 欧洲精品久久| 青娱乐福利99| 成人 日韩欧美一区| 加勒比人妻综合| 老司机福利青青草| 色九区| 中文欧丝袜诱惑| 久久久久久亚洲Av无码精| 婷婷视频网| 碰超人人在线一区二区三区| 亚洲成a人v欧美综合天堂下载| 手机在线看片免费人成视频| 青青草伊人久久| 欧美亚洲综合高清在线| 日韩性爱小视频在线观看| 色婷婷婷五月天激情四射| 97在线免费看视频| 色小视频蜜乳| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 一二三区视频在线观看| 日韩精品免费高清视频在线| 人妻天天爽夜夜爽精品2| 超碰在线91| 亚洲黄色影视| 欧美视频一区二区三区| 午夜精品探花| 久久久久久久久国产| 亚洲精品性爱片| 久久九七| 国产成人 综合亚洲 天堂| 天天看片天天爽| 日韩兔费看黄片| 啊啊啊啊视频免费| 91人妻少妇| 午夜精品99久久久久传媒| 久久青青草在线视频| 六月色婷婷| 老熟女91视频| 国产精品91一样| 欧美97| 欧美色图片91| 人人贴人人摸| 九九九九九九九九九五码| 人人操人人操人人人操| 亚州高清色综合| 亚洲人妻中文高清| 台湾佬中文娱乐网久久久久久久久久com | 免费亚洲黄色视频在线观看| 最新精品久久蜜桃| 欧美大香蕉同搞| 亚洲精品国产熟女久久久| 两性综合网| 深夜视频| 国产老熟女| 国产精品亚洲天堂网址| 超碰97久久国| 久热九九| 美女被啪到深处抽搐视频| 欧美性暴力猛交XXXX| 99老司机精品视频在线观看| 999九九精品| 色小视频蜜乳| 天天日天天干天天操| 嫩草伊人久久精品| JIZZJIZZ国产精品喷水| 欧美人妻制服| 中文字幕少妇色| 老司机老司机午夜影院| 五月天久久人妻| 日本不卡三级网在线播放| 岛国片在线播放| 热热色青青草| 久久人妻四季| 国产精品久久久久久久黄无码 | 久久国内| 黑人猛交| 欧美性视频二区三区| 99这里有精品| 欧 美 自 拍 偷 拍| 九九久久国产精品怡红院| 97天天爽| 天天做日日做天天欢。| 69精品| 超碰欧美在线欧美| 91大胆欧美| 51一区二区三区| 男人天堂资源| 欧美在线中M| 欧美熟爽综合| 日韩AV一起草| 日韩中文字幕视频| 欧美日本不卡在线| 久久99999| 日韩精品一二三四| 夜夜操夜夜爽夜夜高潮| 日韩不卡毛片Av免费高清| 一区二区乱码福利| 97日韩欧美亚洲| 激情综合av| 色性欧美| 中文字幕av乱伦| 亚洲av无码国产精品字幕| 亚洲第一视频 欧美风情 日韩| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 久久精品一区二区三区四区五区| 一区二区三区色综合| juliaann精品熟女一区| 日韩另类| 日韩亚洲中文字幕在线| 精品无码久久久久久久久果冻糖心| 伊人久久亚洲色欲综合网站 | 天天激色| 亚洲天堂自拍| 丝袜夫妻自拍| 五月丁香亭亭| 婷婷九月色| 亚洲女毛多水多21P| 女同女同恋久久级三级| 欧美巨大性舒爽顶到了| 欧美天天射| 激情在线青青操| 97国产中文| 9ⅰ久久久天天| 久久精品国产久精国产| 今日头条成人一区二区三区四虎精品| 欧美视频在线第3页| 久/久精品99看9| 男男H黄动漫啪啪无遮挡网站| 国产成人自拍视频视频| 91福利网在线观看| 大香蕉中文| 亚洲在线91| 男人天堂资源| 丰满人妻一区二区三区免费| 91高清欧美| 国产搭汕a级片| 亚洲欧美91| 欧美天天综合网版| 午夜男人的天堂| 欧美色网络| 亚洲日韩天堂| 12一15性XXXX粉嫩国产| 亚洲无码精品AV久久久| 亚洲欧美日韩制服另类| AⅤ片水多多| 国产隔壁老王影院在线| 91香蕉视频在线观看免费| 被男人添B超爽视频| 日本免费中文字幕在线| 高清成年美女黄网站免费大全 | 美腿丝袜偷拍亚洲欧美| 亚洲男人天堂网久久| 日本九九久久99播| 玖玖97综合 | 尤物视频一区| 日韩欧美aⅴ综合网站发布| 大香蕉强奸乱伦| 97国产成人精品免费视频| 色吧五月| 色哟哟国产精品免费网址| 超碰在线974| 国精综合一二三区影视| 久久精品国产久精国产| 人妻 欧美亚洲| 91白虎| 不卡在线观看视频| 91亚洲综合在线| 一本色道久久综合精品婷婷| 欧美综合色图片| 亚洲情色视频| 免费自拍三级综合| 91在线精品| 蜜桃久久一区二区三区| 动漫片子网站3黄| 欧美大战久久久伊人| 黄页网站成人免费| 亚洲在线欧美| www.99中文字幕| 亚洲色诱惑| 澳门人妻久久| 91N综合网在线| 色综合一区二区三区| 亚洲囯产精品女人久久久| www…国产操逼| 国产自产91区13区| 国产日韩中文字幕欧美| 97在线视频免费观看| 97精品熟女少妇一区| 91国产精品在线看| 欧美夜夜骑视频| 特色a在线上| 国产操偷| 日本一区二区三区精品| 青青草一区二区三区四| 人人摸人人入| 人人操人人狠狠操| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 岛国在线免费视频| 天天日天天爽| 欧亚揄拍偷拍精品视频| 欧美国产精品久久九九| 99热在线观看| 国产精品视频播放| 干超碰碰熟女| 国产精品老师| 欧美影音在线| 超碰97色| 色婷婷五月综合| 欧美人人天天网| 自拍内地三级在线观看| 26uuu国产| 精彩久久中文| 家庭乱伦国产| 激情文学 国产一二三aV| 日夜精品| 久久久国产成人一区二区三区在线 | 天天享受天天看| 成人久久久| 婷婷激情五月综合| 久久久久久人妻一区精品色欧美| 120分钟婬片免费看| 九一国产精品| 日韩无码操逼片| 厕所偷拍在线| 久草在线| 欧洲天天在线| 熟女人妻精品一区二区视频| 欧美黄色片AAAAA| 中文字幕精品专区搜索结果91| A 在线网址| 亚洲国产精品久久久男人的天堂| 大象AV在线| 国产成人资源| 青青草福利视频| 欧美图片偷拍| 好色综合| 欧亚乱色熟一区二区三四区| JuliaAnn丝袜熟女系列| 99热综合| 97超碰香蕉| 久久免费老司机精品| 青草成人免费视频一com| 久久久草成人网站久久久草成人久久久草久久久 | 丰满的三级少妇欧美久久久| 少妇精品久久久八区九区| 日韩在线观看字幕精品| 欧美日韩中国x| 欧美刺激色黄片免费看| 97se亚洲| 蜜臀久久99精品久久久老,,| 99国产精品| 欧美狠狠弄| 人人操人人操人人人操| 老女人老91妇女老热女| 久久亚洲AV无码专区国产精品| 蜜臀无码一区二区| 欧美婷婷五月天| 97超碰超| 亭亭丁香激情| 国产女人和拘做爰视频| 四虎精品一区| 长长久久88视频| 蜜臀一区二区三区在线 | 强奸乱伦AV一天堂网| 牛牛久久国产精品视频一二三| av无码av无码专区| 天天综合~91| 淫淫总合网| 欧美探花网| 精品少妇一区二区三区| 懂色AV一区二区三区| 国产精品久久久久无码Av网曝门| 98精品国产乱码久久久久久| 亚州AV无码国产精品| 亚洲性天堂| 婷婷丁香一区二区三区| 天天精品| 亚洲成a人v欧美综合天堂下载| 综合天天网| 成人电影一区| 亚洲欧洲中文日韩女优乱码| 91久久国外网| 鲁鲁色综合网| 久久精品国产亚洲AV嘿嘿| 日本大香蕉综合网红本杳社区| 四虎AV无码| 亚欧国产无码精品在线| 亚洲不卡三级手机播放| 国产自产22区| 九九久久首页| 蜜乳AV色欲AVAV无码| 国产成人亚洲精品无| 亚洲熟妇综合久久久久久| 日本高清电影欧美色图| 特级毛片特黄久久免费看| 久久九色| AV在线播放网址| 亚洲AO在线| 久9热| av无码av无码专区| 91综合网| 啊啊啊轻点在线观看| 青青草视频在线观看一区二区| 午夜精品视频777| 欧美性爱免费短视频| 欧美高清色| 久久久9 9 9精品| 97国产亚洲中文在线| 天天日天天舔天天喷天天射| 免费啪啪一级视频| 呦呦影院| 国产精品操| 亚洲第二页| 91少妇通奸网站| 美女大乳久久久久久久女人18| 可以免费观看的AV| 亚洲一区二区三区四区视频| 久久久久久久九九九九九九| 免费视频97| 清纯唯美亚洲另类| 久久视频,这里只有精品| 欧美五区| 国产精品制服丝袜中文字幕日韩一区二区三区| 日本韩欧美在线播放a| 国产传媒操逼视频| 亚洲啪啪视频免费| 干超碰碰熟女| 九热久| 欧美激情区| 欧美操逼录像国产黄色国产| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 一级人妻性爱视频| 97亚洲综合| 96精品久久| 国产9l 大屁股| 国产精选视频| 人妻熟妇一区二区三区| 五月婷网站| 人人做天天爱| 热无码中文亚洲H一道本一区二区| 一起草高清无码| 91天天| 亚州欧美色图| 久久精品人妻一区| 久久男人天堂| 天天看天天日天天操| 亚洲 欧美综合| 国产AV天美| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 成人开心网在线视频| 综合大香蕉美。| 亚洲日本大香蕉1| 超碰97极品9| 午夜传煤十二区精品| 亚洲少妇视频| 欧美97色| 97在线视频观看| 久久国产逼| 国产精品亚洲一级av第二区| 亚洲欧美日韩二区视频| 国产极品美女高潮无套在线观看| 超碰成人最新最好看| 狠狠干综合| 中国探花熟女|