亚洲有码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
返回資訊列表
九九九九九九亚洲| 啪啪免费| 国产又色又粗又黄又爽| 4虎在线视频| 欧美日韩资源在线| 97亚洲精品超碰| 精品国产av一区二区三区四区入口| 国产传媒日韩| 少妇超碰在线| 久久99国产综合精品女同| 综合网亚| a一区二区三区乱码在线| 国产精品三级视频网站| 男人天堂新在线| 97中文综合| 国产又黄又爽| 超踫中文字幕| 好湿好紧视频| 九九综合色| 国产精品久久久久久久免牛肉蒲团| 伊人久久亚洲色欲综合网站| 熟女色综合久久| 啊啊啊好湿久久| 成人三级片一区二区三区视频| 欧亚无码视频| 亚洲人妖网| 人妻献身系列第54部| 亚洲综合色婷婷| 伊人97| 亚洲伊人久久精品狠狠在线| 97K超碰在线| 囯产操逼片| 激情五月天校园春色网| 操91| 亚洲国产一级黄色视频| 操逼内射干逼白丝91| 欧美AB在线| 国模一区二区三区| 国产极品粉嫩馒头一线天av| 试看60秒| 超碰 97国产熟女| 天天草天天日| 国产精品69久久久久孕妇欧美| 午夜啪啪片| 99999亚洲另类| 99色视频| 物尤视频一区二区| 国产操操日韩三级黄| 亚洲清纯唯美| 蜜桃久久综合视频| 久久久久亚洲Aⅴ无码| 97色操| 美女露胸露尿口| 精品无码久久久久久国产浪潮| 99热99re6国产在线播放| 日韩不卡av一二三| av最新免费中文字幕| 国产又长又大又粗的视频| 在线看片国产精品每日更新| 99久久精品欧美国产| 精品一区二区久久| 91网站视频在线观看| 91色色色| 色盈盈影院| 亚洲va有码在线天堂| 成人AV在线网站| 大香网伊人久久综合网eew| αⅴ天堂| 婷婷操视频| 国产97av| 久久精品电影在线| 97免费视频在线| 极品AV网站在线观看| 少妇一线天久久久久久| 淫妻综合网| 综合欧美激情网| 国产AV色黄看到爽| 东京热男人天堂| 天天干嫩逼网| 久久岛国| 中国人高清www色视频免费| 男人的天堂三级| 熟妇人妻一区二区 | 欧美网站免费| 狠狠色综合网| 免费人人搞97| www久久精品| 色九月综合| 日本免费一区二| 蜜臀操逼黄色视频操的好爽| 成年女人黄网站| 岛国黄色短视频| 啊啊啊啊啊啊好湿好爽视频| 亚洲精品黑丝| 蜜桃狠狠色伊人亚洲综合网站| 另类小说欧美激情校园春色| 亚洲欧美一区二区网址| 69少妇一区二区| 95自拍视频在线观看| 黄色小视频日本txt| 欧亚乱色熟女一区二区| 日韩美一区| 日韩AV一区二区三区四四| 开心激情婷婷| 亚州高清av| 夜夜高潮夜夜爽国产伦精品| 无码精品久久久久久亚洲| 日本一区二区三区午夜观看| 综合干干干av久久久综合网| 天天操天天7| 综合网欧美| 国产女人和拘做爰视频| 亚洲第一综合| 97视频在线观看免费高清| 一级毛片电影免费看| 日本亚洲熟女视频| 啊啊啊水好多| 国产67194| 亚洲涩图欧美| CCYY草草影院地址入口| 婷婷导航| 久久啊啊| 操我啊啊啊啊啊| 97爱亚洲| 婷婷九月国产| 69人妻精品一区二区绯色| 麻豆 亚洲 97| 国产精品视频一区二区三区八戒| 69综合网| 久久双插| 超碰国产在线| 自慰白浆在线观看| 在线一道啪| 亚91亚洲网| 欧美性爱一区二区三区| 丁香五月大香蕉| 中字一区| 成人国产精品三级A片| 亚洲精品不卡一二三区| 欧美v亚洲v日韩v最新在线二区| 狠插 制服 自拍| 欧美亚洲自拍另类人妻| 最新av在线| 熟妇的味道HD中文字幕| 少妇内射www在线观看视频| 亚洲AV成人精品网站在AV| 91N欧美| 亚洲无码精品AV久久久| 国产美女91视频| 日韩一级性爱无码| 亚洲限制级| 操屄不卡视频| 女人香蕉久久毛毛片精品| 丝袜剧情| 一区超碰一区| 亚洲欧洲日韩国产自在线| 九九热五区| 91人妻最真实刺激绿帽| 大香蕉欧美国产日韩高潮| 围产精品一区二区三区视频播放| 五月丁香综合| 日韩欧洲操屄视频| 婷婷激情五月综合| 91老熟女逼| 欧美一二三级精品在线| 亚洲超碰综合网| 去干网最新版| 91一区二区三区蜜桃| 六月婷婷一区二区三区| 五月天婷婷成人网| 国产隔壁老王影院在线| 超碰碰小说97| 91综合国产精品| 我要看免费韩日黄片| 超碰人妻久久| 久久久久久裸体| 国产刺激视频| 亚洲国产婷婷在线播放| 骚女天天综合网| 欧美性,色九九| 中文字幕亚洲热播人妻| 97干在线| 99热欧美| 天堂涩涩| 97碰碰日本乱偷人妻中文的| 夜夜中出国产| 精品一二三区久久AAA片| juliaann欧美丝袜办公室| 青青草视频久久久久| 精品人妻免费观看| 91性感在线| 大香蕉综合在线| 久久欧美1卡2卡3| 人成午夜免费大片| 久操操AV电影| 久久精品久| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 九色 人妻 大香蕉| 婷婷中文网| 少妇熟女1区2区3区| 高清孕妇孕交 交| 亚洲国产亚洲天堂| 欧美乱妇狂野欧美在线视频| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 精品国产嫩穴视频| 九九热五区| 欧美日不卡| 在线观看黄色电话| 亚洲无码一区二区三区三州| 十八禁av无码免费网站APP| 秋霞网无码| 亚洲第二页| 东京太热久久久| jizzjizz欧美| 日日躁夜夜躁狠狠躁超爽| 99后入| 久久日本熟女精品一区| 99国产人成精品| 大香蕉一区二区在线观看.| 加勒比综合88| 在线毛片片免费观看| 国产在线视频午夜精华在| 超碰97伊人| 精品久久97| 999热这里只有精品| 国产精品另类| 蜜臀久久99精品久久久久久婷婷| 成人线上超碰| 午夜福利无毒不卡| 久久受www免费人成| 免费日韩黄片| 久久av一级av少妇av高潮| 欧美日韩资源| 99这里只有精品| 校园春色欧美| 色色97爱| 美女熟妇色| 吖在线不卡一区二区国产剧情| 久久精品国产AV一区二区三区| 欧美在线永久天堂| 亚洲国产欧美中日韩成人综合视频| h无码动漫在线观看| 91人妻素女| 尤物视频一区| 久久亚洲骚逼综合| 中国熟女网站| 一卡二卡在线播放| 亚洲国产精品无码AV久久| 亚洲天堂五月天国产| 亚洲精品尤物yw在线影院| 久草网站免费在线观看| 67914亚洲精品| 欧美 综合| 91艹| 欧美黄页| 青娱乐国产精品| 日本肉体xxxx裸交| 欧美亚洲丝袜美女电影| 天天干1区2区在线| 无码外流操逼视频| 婷婷久久五月| 伊人久久亚洲色欲综合网站| 日韩综合成人免费视频| 激情第四色| 久久亚洲不卡一区二区三区 | 蜜臀视频网站| 久久久免费一级黄片| 国产一区96在线| 亚洲AV不卡在线观看尤物| 国产AV线| 日韩激情无码影院| 懂色AV一区二区三区| 亚洲限制级| 久久久久99999| 性在久久久久久| 青娱乐亚洲热| 亚洲天堂男人网| www.黄色在线| 国产精品在线一区二区| 亚洲日韩精品久久久久一区壹牛| 五月婷在线| 色情亚洲日本成人| 一级AV性爱| 伊人久久88国产女| 欧亚韩国999| 青娱乐福利99| 国产自产91区13区| 青青草色插素人| 超碰97人妻自拍| 淫荡熟女乱伦网| 伊人久久青青草| 精品美女少妇一区二区| 婷婷视频在线免费观看| 久久神马影院| 欧美熟妇成人一区二区| 一区=区三区视频| 久 久无码人妻AV| 爱做久久久久久| 久久草视频污视频| 啪啪AV导航| 亚洲情色在线| 18禁中文字幕| 中文字幕第23区| 久久日本熟妇熟色一区| 91超级碰碰碰| 91制服丝袜| 久久露脸国产老熟女| 99热18这里只有精品| 久久天天艹| 亚洲一本色码中文字幕| 人妻少妇被猛烈进入中| 久久爽爽精品| 亚洲九月丁香| 欧美日韩1234| 在线人妻熟女一区二区三区四区五区| 麻豆国产精品午夜视频| 大香蕉伊在线久草麻豆天堂故事| 久久六六| 欧美熟女妇同| 欧美性爱视频免费一区一A | 色婷婷狠狠| 国产精品久久久久久久久久久久久久| 蜜桃成人1区2区3区| 神马麻豆福利院| 人妻少妇精品一区二区三区| 日韩成人无码| 色悠久久久av| 婷婷六月天| 色综合一区二区三区| 色眯眯射| 欧美日韩中文亚洲v在线综合| 久久中久文96| 好淫网一二三视区| 日韩精品在线观看观看| 九九九九免费高| 五月天黄色激情视频| 久艹免费| 欧亚日韩三区| 五月丁香婷婷色| 国产精品白领在线观看| 国产免费一区| 久久理论字幕视频| 大香蕉综合在线| 亚洲天堂一二| 欧洲综合视频| 97欧美性爱| 97超碰色情| 少妇69中文| 99操逼| 亚洲一区日韩精品中文字幕| 死我十八禁| 日韩乱插| 欧美日韩色综合网| 97天天日| 欧美亚洲韩国视频十五区| 美女啊啊啊啊啊啊啊| 久久亚洲AV无码专区国产精品| 色臀aV| 亚洲天堂区| 91快色色色色色| 国产精品天堂| 人妻少妇精品久久久| 激情五月天网站| 亚洲日韩人妻中文字幕一区| 欧美在线|亚洲| 狠狠干精品一二三四五六2022| 久草免费福利在线播放| 青青青国产手线观看视频2| 日本布卡一区二三区| 日本东京热大香蕉a片| 久久久98网站免费视频| 国产精品探花在线| 精品欧美А∨无码黑人大荫蒂 | 女同女同恋久久级三级| 91色射| 亚洲区限制级| 日本精品国产视频| 色婷婷aV一区二区三区麻豆综合| 99热亚洲| 一区二区三区欧美激情| 夜嗨影院| 最新啪啪视频| 精品性爱一二三区| 99国产精品视频尤物| 成人精品在线免费视频| 97超碰中文在线| 2003天天干夜夜操| 精久久久| 蜜臀99久久国产| 少妇内射www在线观看视频| 欧美色图亚洲色图成人在在线| 91啪啪视频| 91成人在线免费视频| 亚洲第一精品在线视频 | 射 色综合| 国模限制级电影| 久热伊人| 伊人成人中文字幕久久网| 婷婷天堂站| 操我无码| 亚洲天堂男人在线| 91 在线亚洲| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 综合激情二| 92福利社视频| 天天操女人| 嗯嗯啊啊操死我| 97人人爱人人做人人乐| 中文字幕日韩国产传媒欧美精品| 色狠人在线99| 欧美亚洲宗合色性图| 美性中文综合网| 蜜臀久久精品久久久久视频| 老鸭窝黄色视频网站| silk lablo在线观看一区二区| 天天澡天天爽日日av| 精品欧美日韩在线观看| 欧美综合天堂| 视频一区二区三区精品| 综合欧美日韩在线观看| 色色色色色色色色色色色色色色综合| 骚逼高潮久久精品| 骚熟女吞| 天天综合网~91| 干超碰碰熟女| 日本国产欧美高清在线| 国产亚洲一黄| 天堂伊人久久| 搡老熟女国产1000部| 精品玖九九久| 日韩无码视频黄色| 日本综合久久| 午夜福利在线视频1000| 欧美草草高清日韩视频| AAAA欧美日韩| 色色色99| 中文字幕加勒比海高清无码免费视频| 超碰日韩美妻| 国产精品午夜AV完会免费| 国产在线激情视频| 国产精品色色| 中文一区在线日| 看全色黄大色大片免费视频| 五月丁香六月综合缴清无码| 精品高清一区二区三区三州| 淮穴色AV| 国产精品动态一区二区三区四四| 四季av一区二区凹凸精品小说| 中文字幕一二三| 日产成人久久| 久操91视频| 精品超碰国产| 中国的操老妇女| 欧美日韩国产色五月综合在线| 天天澡天天狠天天天做| 夜夜操狠狠操| 久久久神马影院| 五月婷婷丁香六月丁香| 小草三级久久观看| 91欧美网| 国产福利精品最新在线| 久久久久久久久久久999| 黄色一区三区| 美女黄页网站| 亚洲精品美女久久久久久久久| 另类av天堂| 天天综合网91| 深田咏美亚洲精品福利社| av天天在线| 丰满人妻被猛烈进入中| 熟妇视频一区二区三区在线观看| 少妇精品久久久八区九区| AV一区观看| julia在线观看久久| 欧亚日韩中文在线| 日本超碰在线国产一区| 97超碰精品图片| 啪啪AV导航| 精品视频久久久久九九九九9999| 南澳成人一级片在线播放| 97任你吞精| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 好涩综合| 亚洲 91 在线| 日本操逼视频免费| 色综合潮| 亚洲国产欧美一区二区潘金莲| 女人妻一区| 国产操逼网站亚洲一级黄色| 九九九久千久久激情蜜桃在线看| 91这里只有精品| 伊人影院在线理论播放 | 色欧美色交综合| 黄色av一区二区在线| 中文字幕二区| 久久久久少妇| 性爱欧美五月| 顶级丝袜熟女一区二区三区 | 欧美视频一区二区在线| 啊啊啊啊在线观看网址| 久久av一级av少妇av高潮| 91 丝袜在线观看| 丁香六月东京热| 精产品久久| 亚洲91少妇| 午夜爽爽爽| 岛国AV一区二区电影| 人人做,人人操,人人摸| 久久精品99久久久久久| 色色综合网站| 国产无码精品高清| 国产三级中文字幕粉嫩| 亚洲日韩AV视色| 外国免费性情大片| 欧美 传媒 麻豆 日韩 偷拍| 欧亚成人| 亚洲极品| 九九九九88| 性色AV蜜色av色欲av| 九九九九九九视频| 99在线免费视频| 久久性生大片免费观看性| 天天碰操中国年青熟妇| 亚洲大色鬼| 精品国产乱码久久| 国产白领连续中出在线观看| 国产成年女人免费视频播放a| 久久久久婷婷精品av电影| 性爱av在线免费观看| 精久久久| 熟女欧美日韩综合婷婷| 天天爽夜夜操| 双插性欧美一二三区| 欧美性性性| 欲香欲色天天天综合和网| 3p国产色噜噜一区| 欧美日日操| 国产精品久久久久久久免牛肉蒲团 | 欧美性爱综合,免费| 大屁股熟女一区二区三区| 曰韩无码777| 色黄污美女啪啪啪免费网站| 久午视频| 久久久久久人| 伊人色综合超碰| 丁香五月久久| 亚欧国产无码精品在线| 国产美女裸体秘 永久无遮挡| 欧美亚洲系列| 久久久男人的天堂| 蜜桃在线观看一区二区三区| 91大学精品激情戏| 美女被艹尤物视频| 久久这里是精品| 我想要啊 啊 啊| 激情欧美日韩女同久久| 伊人国产av| 校园春色之综合网| 成人av免费观看| 免费看黄视频亚洲网站| 成 人片 黄色大片| 懂色中文一区二区三区 | 91欧美长吊| 欧美天天插| 啪啪91| 欧美日韩性爱视屏免费看了| 99久久精品无码一区二区| 欧美18老人禁| 中文字幕乱码在线观看| 97色香蕉| 一本色道久久综合狠狠操| 天天综合影院91| 六月丁香啪啪| 国产欧美伊人| 久久6热视频免费观看| 日韩亚洲国产视频| 啪啪AV导航| 中日韩久久久| 欧美日韩性爱无码| 97最新在线播放视频| 日韩av影片在线观看| 无码操逼视频一下| 国产福利一区二| 精品九九九九九九| 中国熟妇| 国产激情在线| 永久免费观看的毛片的网站| 97国产人人| 无码一区免费在线不卡| 欧美亚洲素人制服精品| 隔壁邻居波多野结衣中文字幕| 翔田千里AⅤHD无码| 国产最新小视频在线播放下载 | 性老妇一区二区三区| 蜜桃色院一区久久 | 日本午夜精品理论片A级APP发布| 午夜黄色免费在线观看| 亚洲黄色a级片| av网页一区二区三区| 8050无码八戒| 久久这里都是精品| 欧洲亚洲人妻无码中字久久三区四区| 麻豆国产成人精品| 久啪视频| 日本人妻伦在线中文字幕| 国产精品久久久视频| a网站免费观看| 97国产色综合| 日日妻色网| 99热伊人| 熟妇乱伦一区二区| 囯产乱伦一区二区三女| 情色日播放AV| 国产精品3| 亚洲动态色图| 亚洲无吗在线视频| 亚洲色天堂日韩中| 综合激情一一91| 99中文字幕| 午夜无码精品免费看性色| 人妻熟女午夜精品在线| 色偷综合| 思思久热在线精品66| 91在线精品| 人妻密肉在线观看| 91热| 黑人操一区二区| 欧美婷婷| 加勒比AV网| 天堂男人网| 亚洲天堂7777| 亚欧中文字幕在线视频| 9Ⅰ老熟女| 极品美女福利在线观看| 欧美色图天堂网m| 久久久久久人体| 亚洲高清无码在线桃色| 免费AV播放| 色女99一级片在线观看| 国产精品网址| 国产福利精品最新在线| 800zy一区二区| 久久久久熟女| 一级免费啪啪片| 天天看高清麻豆| 98人妻精品一区二区色欲| 婷婷大香蕉| 亚欧操逼片在线观看| 国产又黄又爽又刺激久久久久久| 亚洲18禁| 放黄片放3级黄片没穿衣服| 91热爆在线| 亚洲在线观看| 国产午夜无码片在线观看影视 | 欧美亚洲在线| 日韩欧美国产高清视频| 4虎在线视频| 国产aⅴ无码片毛片一级网站| 夜夜久久| 欧美超碰97| 色欧美天天| 一区二区视频在看| 日韩精品一二三四| 91色香| 懂色AV一区二区三区| 97免费视频在线| 久热无码| 日本阿v天堂在线观看| 天天综合网~69| 天天躁日日躁狠狠躁| 99热免费| 欧美78P| 国色天香av| 日本一道在线播放高清| 怡红院怡春院| 欧美一区二区福利在线| 久久99草| 丁香婷婷久久 | 国内毛片国产专区二| 久久精9| 久草国产在线视频| 视频在线观看青青99国产| 超碰成人国产| 熟妇人妻精品一区二区| 日韩色| 中日无幕一二三四区| 日韩欧美亚欧在线视频| 日本99一区二区| 玖玖爱免费观看视频| 91天天综合在线观看| 欧美一级三级| 在线色导航| 国产夫妻性生活视频| 天天插天天插| 婷婷丁香九月| 抽插亚洲无码| 另类av天堂| 丝袜美腿制服人妻二区中文字幕| 78精品| 精品久久視頻在线| 精品一区二区三区国产| 色呦呦、国产精品| 成人无遮挡毛片免费看| 在线啊啊啊啊| 成人无码在线超碰网| 亚洲精品 超碰| 国产女人和拘做爰视频| 蜜桃丰满熟妇av无码区不卡| 日日碰狠狠添天天爽超| 黄色视频高清无码网站| 亚洲中文字幕一区| 夜夜狼人妻| www.av在线观看| 秋霞一级鲁丝片A片| 久久熟女嫩草成人片免费| 蜜臀精品1区2区| 欧美啪啪女女| 欧美精品一区二区少妇免费A片| 91N综合网| 蜜桃色院一区久久 | 国产精品熟女AV中文字幕在线播放| 中文字幕精品一区二区精| 97在线免费看视频| 夜色97| 激情文学欧美| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 91人妻超碰| 91成人久久 | 无码国产精品久久久久| 亚洲乱码精品一区二区| 黄色成年| 青青草原成人| 欧美91久久久久| 综合亚洲情色| 大香蕉在线视频15| 人妻AV在线| 爱av免费| 中文字幕中文字幕一区二区| 岛国黄片网站| yw尤物av无码点击进入麻豆| 天天久久| 青青操国产夫妻| 久久精品男人的天堂| 成人A片男人的天堂| AV天天在线观看| 婷婷五月影院| 天天干,夜夜爽| 国产亚洲综合欧美一区| 午夜寂寞欧美| 中文字幕久热视频在线| 五十路熟女人妻一区二区在线观看| 婷婷美人网| 一本一首道人妻少妇免费久久| 国产免费大片| 欧美日韩国第一区| 澳门人妻久久| 欧美香蕉视xxx| 丁香色婷婷| 另类天堂| 五月激情小说| av天堂影视中文在字幕在线中文| 在线日韩视频| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 欧美超碰9798| 啪啪啪大香蕉| 激情五月激情综合网| 日韩成人精品中文字幕| 五月综合激情网| 亚州情色j区| 国产性感骚丝袜在线| 色哟哟-国产专区| a人欧美综合天堂麻豆| 欧美东京热青青草| 黄骗免费网站| 日本成人A片网站| 国产熟女完整版中字| 亚洲一本色道中文无码aV天美| 最新日产中文在线麻豆| 国产精品三级视频网站| 五月激情综合网| 久久久亚洲精品电影免费看| 美女97超碰| 久久本道| 欧美91精彩| 日韩在线观看AV| 啊啊啊免费视频| 波多野42部激情无码喷潮| 色欲蜜臀AV| 99性爱视频| 一区中文字幕二区日韩| 97免费视频网| 99热这里只有精品1| 火箭成精品视频884必出精品| 大香蕉视频啪啪啪啪| 一区二区三区国产在线播放| 男女无套 免费网站| 国产精品一区二区三区四区五区| 97免费在线观看| 一级日本牲交大片好爽在线看| 日韩中文字幕在线视频观看| 蜜臀国产AV中文字幕| 91oumei| 亚洲综合另类欧美久久久| 欧美国产操逼| 一区二区三区国产在线播放| 国产操逼逼网| 国产原创精品| 四虎影视永久在线观看精品免费网站| 加勒比海色香蕉婷婷| 97视频在线| 另类 日韩 熟女| 国产馆极品诱惑| 99在线啪| 日韩免费福利在线观看| 激情专区综合| 男人天堂 天天射| 亚洲精品久久久久毛片A片拉屎| 777奇米影视777四色| 后入美女国产| 色老大| 天天做日日做天天欢。| 久久免费看高潮毛片韩国| 久久久精精精| 粉嫩在线一区二区懂色| 做爱福利视频一区二区| 亚洲一区日韩精品中文字幕| www.狠狠| 亚洲天堂少妇| 爱av免费| 国产熟女一区二区丰满| 免费成人自拍视频在线| 91oumei| 97爱爱官网| 7777欧美成是人在线观看| 久久久久网站-538在线视频-欧美永久乱码 | 国产亚洲日本| 亚洲黄色视频在线观看视频| 91 国产丝袜在线放观看| 97久久精品| 综合熟女| 天天日天天干少妇日| 亚洲成人综合在线| 欧美色97| 日本中文字幕在线视频| 青青草色AV| 无套内射性感少妇视频| 深夜激情 | 日韩色图 一区二区| 日本Xx性爱| SUV一区二区在线看| 午夜一级免费毛片| 久操在97| 亚洲国产精品成人无码久久久| 91日日夜夜| 熟女人妻一区二区三区| 亚洲中文字幕久久无码精品| 中文字幕亚韩| 78精品在线| 校园春色制服丝袜中文字亚洲| 欧美性爱第1 页| 天天操女人| 久操com| 高清孕妇孕交 交孕妇| 国产精品免费视频人成| 久久丁香| 国产乱子伦久久精品综合一区二区三| 91ise欧美| 色色色日本| 欧美日日人人天天| 91粉芽高清在线一区二区| 曰韩中文人妻视频| 久9久9精品| 91快色色色色色| 不卡在线观看视频| 看黑人AV不卡| 日韩欧美俄罗斯A片| 蜜臀99久久国产| 久久久久精| 人人操人人操人人操人人操人人操人人人11.CM | 91三级理论片播放器| 热热色国产一二区AV| 99热免费| 国产精品免费1区2区视频| 91影视亚洲| 丁香六月综合激情| 国产狂喷潮在线精品| 本道在线| 超碰久久中文| 亚洲高清无码在线桃色| 蜜屁av| 亚州色图欧美| 免费看久久久性性| 97爱爱| 亚洲一二三四区在线免费看视频| 九九黄色网| 亚洲国产欧美另类自拍| 国产精品午夜福利| 亚洲熟妇熟在线电影视频| 综合久久婷婷| 久久精品午夜国产亚洲AV无码| 丝袜视频网国产90| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 国产欧美日韩一区二区三区| 精品人妻15区| 久久久久久久国产| 久热69九色熟妇97| 国产中文精品一区二区在线观看| 欧美爱爱97| 欧美性第1页| 日韩国产十八禁| 奸色色 男人天堂 天天射| 日韩乱中文| 国产视频一区二区三区在线免费观看| 欧美 亚洲 综合 制服 另类| 98色网| 99精品成人免费看| 国产精品麻豆成人av| 男同专区一区二区三区在线| 欧美伦乱爱| 久久综合18p| 久久久久人妻| 欧美网站免费| 亚洲成人福利电影免费| 一级一性爱免费视频| 国产免费小视频| 天天操福利视频综合网站| 人人搡人人肉久久精品| 国产美脚女优尤物在线观看| 亚洲精品亚洲人成人网| 日日碰狠狠添天天爽超| h无码动漫在线观看| 一个国产在线综合网站| 国产精品免费1区2区视频| 啊啊啊啊啊啊在线| 国内一级精品| 91在线/欧洲| 色大师网站www永久网站视频| 久热久一区二区三区| 人妻AV 中文字幕的| 久久久久久久人妻| 成人性爱视频在线看| 国产又猛又粗又爽又黄| 91色图| 大色综合| 91亚洲黄色网| 天天看片麻豆| 久久中文色图| 色九九九| 欧美黑人与女人91~| 99热色这里只有精品| 六月激情网| 91丨九色丨43老版熟女| 六月婷婷激情| 嗯嗯嗯嗯啊啊啊好紧好大| 伊人综合色网| 欧洲中文字幕| 丝袜无码a片| 91男人天堂网| 99热在线只有精品| 九九九不卡| 欧美亚洲天堂| 98人妻精品一区二区色欲| 国产多人在线观看视频| 亚洲一曲日韩精品| 欧美色性爱| 99无码精品| 九九热免费在线国产视频伊人五月| 青青草原狼av| 亚洲欧美日产国产91毛片| 欧美日韩青操| 天天久久久久久| 久久精品一区二区三区四区五区| 激情综合网亚洲| 国产毛片久久久久久久| 精品国产91内射久久| 国产精品自在线发布| 婷婷五月激情综合| 天堂蜜桃无码视频一区二区| 蜜桃不卡一区二区| 久久精品女同亚洲女同13| 高颜值美女口爆高潮浪叫| 成人精品无码| 欧美后入视频| 粉嫩av一区二区三区天美传媒 | 久久这里只精品免费福利| 爽极品影院| www.99热| 综合激情97 | 久久精品国产96精品亚洲拳交 | 欧美日韩性爱电影在线| 国产精品久久久久久 百度| 情侣开房子拍 日韩无码 女的很漂亮| 99xav| 偷拍导航视频网站| 另类TS人妖一区二区三区| 欧美色色色| 一区二区 日韩 欧美 国产 传媒| 偷拍新久久| 精品人妻中文字幕高清| 成人无码影片视频在线| 爆乳免费黄网站| 91九九九吃| 一本色道综合久久欧美| 日本福利二区视频| 五月婷婷hd| 97免费在线观看| 亚洲中文一区二区三区视频| 蜜桃久久久久久| 国产精品不卡少妇白| 日本一区视频在线观看| 精品一区二区啪啪啪| 九九九九九九九九九九九蜜桃| 97碰久久| 国产欧美一区激情交| 麻豆伊人网| 亚洲图片另类| 久久久人妻| 蜜臀va69| 欧美一级久久久丰满| 久久久久久久九九九九九九| 污污污8888| 久久亚洲国产成人| 美女刺激久久国产欧美| 天天影视网色欲色香| 国产9 9在线 | 亚洲| 女优免费一区二区永久| 97jingpin| 岛国AB视频| 中文字幕-区二区三区四区视频中国| 久操国产在线| 99热99色| 爱爱久久| 国产AV色黄看到爽| 欧洲乱码一区二区| 欧美国产婷婷久久| 欧美久热| 亚洲资源一区| 福利在线黄片| 久久久天美| 国产黄色av大片网站| 国产熟女二区| 黄色在线网站| 足交视频老司机| 欧美精品日韩久久久九| 久久久禁| 日韩乱伦影音先锋| 欧美一级专区免费大片| 性影在线视频| 久久9999| 在线v中文字幕一区二区三区| 久操影视| 亚洲欧洲网站免费观看| 日韩中文9| 一区二区娱乐网站| 97国产|免费| 国产视频一区二区免费| 怡红院久久老司机| 亚洲精品视频二区| 欧美偷拍| 久久嫩草国产成人一区| 操婢日韩| 中文字幕久久精视频久久大全| 超碰色男人操熟女| 亚洲欧洲日产国产综合网| 日韩人妻有码免费视频| 曰韩少妇无码| 黄网在线播放| 日韩一卡二卡三卡| 国产欧美美女免费观看视频| 91色人妻| 蜜桃一区二区三区| 操婷婷逼| 国产操逼网站亚洲一级黄色| 久视频在线观看| 免费一级黄色录像影片| 久久久免费视频18| 狠狠色婷婷7777久| 日韩性爱长视频免费| 欧美久久婷婷| 综合操逼| 色97干| 97精品国产精品免费观看| 手机在线视频国内精品| 天天舔日美女视频| 校园春色亚洲欧洲| 新久久AV| 亚洲男人天堂2017| 精品视频97| 操逼视频亚洲| 欧美综合亚洲综合| 久久美国毛片| 啪啪AV导航| 欧美色乱| 日韩肏逼视频| 操逼片国产| 亚洲天堂自拍| 在线观看综合精品亚洲| 亚洲欧美黄| 97精品在线| 久久国色天香香蕉| 污污汅18禁网站在线永久免费观看| 天天干夜夜鈤| 老女人老91妇女老热女| 国产精品国产拍高清AV| 国产无码精品成人| 四虎在线视频| 国产精品亚洲四五区在线观看| 曰韩av中文字幕专区| 热久久国产| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 97精品中文字幕| 天天综合网~69| 欧美日韩性爱操大逼| 精品久久久久久无码| 一二区在线观看视频| 熟妇一区二区三区| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 999综合色| 精品网站9999| 激情五月天婷婷| 操逼网站视频漫画国产| 夜夜草天天| 精品78| 国产区在线| 久久久久久久六六| 91嫩草欧美| 无码一区二区三区四区五区六区七区八区九区十区视频 | 啪啪啪亚欧美视频| 亚洲,欧美,综合网| 欧美 日韩 另类 亚洲| 99精品丰满人妻无| 依人大香蕉| 国产高潮AA片免费看| 久久久亚洲高清不打码| www.99色| 欧美18老人禁| 丝袜足交视频| 99在线精品视频| 91熟女网| 超碰2017| 五月天婷婷社区| 美女t无毒不卡不卡| 天天日天天干天天摸天天操| 日本久久999| 91在线精品一区二区三区| 午夜超碰| 综合色91| 日日日日做夜夜夜夜做无码97| 福利天堂| 免费看国产大AB| 亚州欧美综合| 蜜臀一二三| 欧美激情亚洲情色| 搡老女人老91妇女熟女| 97中文天堂| 99久久无色码| 禁十八久久| 久草精品一区 | 亚洲成人免费中文字幕| 亚洲欧洲日韩天堂av|