色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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
返回資訊列表
99热这里只有精品18| 97狠狠| 高清在线偷拍自拍视频| 性爱Av免费| 亚洲毛片久久| 久久伦理视频久久大香蕉视频| 秋霞网—男女啪啪亚洲免费体验区 | 亚洲天天在线| 国产在线激情| 色网综合网| 香蕉99秘 精品一区丁香| 久久亚洲AV成人精品无码| 亚洲黑人在线| 欧美最婬乱婬爆婬牲视频| 国产伦精品免编号公布| 国产尹人在线视频免费| 天天看天天日天天操| 亚洲情色在线| 欧美日韩国产中文超碰| 日逼国产| 久久性爱精品一区| 无码抄逼网| 老外又粗又长一晚做五次| 伊人嫩草| 91男人综合| 亚洲狼狼干综合1| 新婚人妻扶着粗大强行坐下| 日本成人A片免费看| 日本二三四区| 性色综合网| 极品色电影院| 偷窥自拍亚洲| 久久偷偷色综合蜜桃| 台欧久久精品视频| 九九热精品| 男女日B国产| 午夜一区| 青青草一区二区高清无码视频| 色婷婷一区二区三区久久午夜成人不| 99热99re6国产在线播放| 色超碰综合| AV老汉| 毛片视频白嫩| 97超碰69| 国产精品情侣啪啪| 婷婷五月丁香五月| 日本色婷婷| 操逼日韩无码| 亚洲网自拍| 欧美第一页性| 激情五月天丁香| 色色香蕉| 1人人看人人摸人人操| av黄图片在线观看| 欧美岛国精品在线观看| 国产大陆天天艹| 九九九九热| 在线视频亚洲无码| 国产精品一区二区久久精品| 亚洲AV秘 精品久久老牛影视| 成年人三级黄色片视频| 九热视频| 曰韩欧美国产传媒麻豆第一区| 九月婷婷综合| 九九热五区| 中文乱码99| 96AV久久久| 欧美成人色| 日本超碰色精品| 伦在线97| 国产精品白丝www| 九九九九九精品| 久久天堂| 成人无码影片视频在线| www.婷婷| 小草av不卡亚洲二区| 加勒比人妻综合| 久久机热| 69XX一中文字幕人妻91| 成人av动漫在线观看| 天天干天天插| 亚洲鸥美色图| 人人妻人人澡人人爽人人精品浪潮| 亚洲骚男同com| 欧美激情专区| 在线A日本| 91久热这里只有精品| 磁力99AV| 亚洲色图欧美一区二区不卡| 日本欧美国内在线| 日韩精品人妻中文字幕久久久| 国产精品久久久久久久久久久久久久久 | 大粗鳼巴久久久久| 在线观看中文av字幕| 久久婷婷一区二| 少妇丝袜在线观看AV| 青青草在线视频播放器| 91丨九色丨国产丨人妻在线| 人妻天天爽夜夜爽爽| 久草精品一区| 日本高清视频xxxx| 亚洲天天艹| 亚州欧美总和| 欧美色另类| 亚洲色 国产 欧美 日韩| 熟妇最新先锋一二三区| 97久久网| 熟妇熟女视频一区二区三区| 九七人妻在线| 亚洲天堂人妻熟妇视频| 成人综合网 欧美| 久久久9999| 色色色色网站| 国产精品直播在线观看直播| 日日夜夜骑| 亚洲电影中字一区二区| 丝袜大香蕉| 伦在线97| 69少妇一区二区| 久草久热| V A在线| 亚洲精品国产精品乱码不99| 99蜜桃臀久久久欧美精品网站| 亚洲精品一区二区日本| 五月婷婷激情综合| 校园春色 欧美| 性色乱AV一区二区| 久久永久无码人妻视频| 五月天丁香婷婷综合网站| 超碰在线97国产| 综合影院永久入口国产| 韩国轻伦国内自拍一区| 久草这里只有精品| 青青草日韩无码| 夜夜欧美 | 一区二区高清视频| 啊嗯好大视频在线观看| A片大香蕉在线| 91亚洲精品青草| 一区二区乱码福利| 精品96久久| 成人乱人伦一区二区| 嗯嗯啊好大| 13小男生GAY自慰脱裤子| 久久国模av| 国产强奸91| 三级网站超变态精品| 无码高清国产AV| 亚洲色图欧美另类在线| 成人性爱电影网| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 十八禁视频一区二区| 中文字幕一二三区| 少妇3P性爱自拍| 色偷综合| 五月天偷拍| 人妻久久一区二区三区 | 人人妻碰人人免费| 中文字幕第95页| 人妻少妇久久久| 呦呦一区| 欧美偷| 五月激情天| 国产精品高潮久久久无码| 色爱欲亚洲| 伊欧美综合视频| 夜夜欢天天干| 媚薬在线视频麻豆| 色五月丁香五月| 在线人成亚洲视频免费观看| julia ann久久| 长长久久曰曰夜夜成人网| 2017大香蕉| 熟妇艹鸡八| 亚洲色久| 国产人妖的免费的视频| 国产熟妇 码视频户外直播| 精品久操| 久久99精品九九久久久婷婷| 久久久久13| av强奸乱轮| 久久99草| 嗯嗯嗯啊啊啊操的我好爽| 亚洲精品无码久久AV| 亚洲AV无码乱码| 久久华人网| 91逼逼女人91| 99这里只有精品| 大香蕉专区| 日韩精品资源专区二区| 大香蕉久久| 蜜臀一二三区| 97亚洲国产| 天堂精品小草| 性爱AV天堂| 欧州色图区| 国内偷自视频区视频综合| 久久青娱乐| 呦女网站| 91欧美巨乳| 亚洲午夜AV| 少妇一区二区三区高速| 91在线免费精品视频| 久久精品区| 国产综合久久久鬼色| 亚洲天堂男人在线| 欧美婷婷五月天| 精品v日韩欧美国产| 中文字幕丰满人妻日本| 香蕉精品二区二区| 极品另类| 久草在线| 黄色香蕉视频网站一区| 97精品视频| 伊色久人大在线| 午夜精品久久久久久久第一页按摩| 中文字幕AV片| AV中文字幕剧情1区2区3| 黄色二级片网站| 啊啊啊啊嗯嗯嗯用力好爽 | 人人操,人人液| 丁香色狠狠色综合久久小说| 久久黄片国产一区二区| 日韩黄片影院| 日本道久久综合色色| 一区二区影院| 亚洲成熟国产精品美女| 丁香五月成人| 男人的天堂网免费| 中文字幕在线观看视频www| 久久精品国产亚洲AV片多多 | 人妻插插人妻人| 国产原创精品| 夜夜操中文字幕| 久久风骚城市| 97超碰人人操人人操| 人妻献身系列第54部| 久久社区一区二区三区| 十八禁成人网站在线观看| 岛国在线一区二区三区| 国产粉嫩出水在线播放| 精品国产91久久久久久一区黄无| 婷婷激情一区二区三区俺也去| 国产熟妇一区二区| 视频二区美腿制服人妻欧美| 国产精品久久久 | 人妻激情视频| 91天美免费| 91在线视频国产网站| 中国AAAAAA黄色片| 亚洲高清无码在线桃色| 9久热| 久久男人的天堂国产| 亚洲欧美精品久| 色哟哟av| 波多野结衣一级视频| 美女一区二区国产精品| 九九九综合精品| 亚洲色图自拍| 精品国产一区探花在线观看| 五月天激情小说| 美女露胸露尿口| 97精品综合久久网| 91色狼| WWW啪啪的com| 1区2区3区中文字幕日韩| 91美女视频。| 欧美成人四级在线播放| 麻豆久久久久久久久丝袜| 日日夜夜模| 小说区 图片区色 综合区| 亚洲国产一级精品毛一级精品看免费视频| 狠狠干狠狠色| aV中文麻| www.av在线观看| 日韩丝袜高跟制服在线观看| 一区二区中文| 久草视频分类在线| 乱操9999| 人看人人摸人人操| 超碰97男女| 男人a天堂手机在线版| 国产女人成人精品视频| 中文在线视频| 日本视频一区二区三区| 久久精品人妻一区二区| 亚洲av国产av综合av卡| 97 亚洲 日韩 欧美 在线| 亚洲精品黑丝| 操逼免费视频无码国产| 麻豆一区在线| 老子午夜伦不卡影院| 97色插| 密臀在线一区尤物| 日本精品第一视频在'| 色拍偷亚洲| 黄色人人| 91狠狠狠| 97自拍视频在线| 久久精品高清无码一区| 首页中文字幕中文字幕免费| 精品9999| 99熟女| 国产尤物在线三区| 亚洲天堂东京热| 亚洲色图欧美色图另类图片| 大香蕉碰| 亚洲色图尤物视频| 狠综合网| 亚洲日本激情| 美女91色黄18| 啪啪啪综合网| WWW.操逼.COM| 亚洲色图 综合| 亚洲国产高清福利视频| 2020天天色综合| 婷婷色婷婷| 欧美日韩欧美| 人人摸人人干| 婷婷视频在线免费观看| 欧亚韩国999| 你懂得91| 人人操欧美风骚| 蜜臀久久在线视频| 韩日无码在线观看| 97网色| 久久综合日韩亚洲欧美| 在线看的av| 97精品视频在线播放| 凹凸视频特色日本特黄| 亚洲无限观看| 区日韩亚洲乱码av电影| 国产精品久久久久无码Av网曝门| 亚洲drav色图| 色色色网站| 熟女激情综合网| 99热这里只有是精品10| 少妇滛荡视频| 日日干天天干夜夜爽| 午夜毛片高清免费不卡| 色色色综合网| 久久 国产 无码| 青青操视频在线| 好淫网一二三视区| 黄骗免费| 粉嫩av在线| 欧美天堂亚洲电影院一区在线播放| 亚欧Av| 粉嫩av在线| 狠狠躁日日躁夜夜躁A| 裸体美女国产免费久久久网站| 亚洲无码com| 97色欧州| 玖玖97综合| 国产91精品福利在线| 99热这里只有精品18| 亚洲天堂自拍| sss视频华人在线| 亚洲欧综合另类无码一区| 久久精品电影在线| 91老熟女91老女人| 久久夜精品一区二区三区| 蜜臀久久99精品久久久久久久久| 黑人无码一区二区| 成人一道本免费视频| 久久9免费视频| 欧美成人亚洲精品| 秋霞男人网| 婷婷中文字幕| 自慰白浆在线观看| 伊人精品久久网站| AV乱伦国产| 夜夜骑夜夜操| 丁香色狠狠色综合久久小说| 综合另类| 91欧美亚洲| 日本精品免费一区二区三区四区| 国产suv精品一区二区四区999| 国产亚洲禁久一区二区| 天天干天天操天天干天天操| 岛国激情视频软件| 日韩高清黄片| 91av熟女人妻| 日韩性爱免费观看视频| 老熟女乱伦一区| 白丝AV| 亚洲男人天堂网| 在线播放欧洲免费av| 国产精品小视频一区二区三区| 国产高潮AA片免费看| 欧美一级黄片视频在线| 精品亚洲黄色片 国产精品导航一区二区| 国产精品久久久久久久久久梁医生| 九九九九九九九九九国产精品| 久九九九九九九九热| jiujiujiujingpin| 久久人人爽爽爽人久久久| 亚洲一区二区三区麻豆传媒| 超碰精品| 97视频在线免费| 欧美日韩97在线| 俺也射| 国产后入清纯| 亚洲一二三四区在线免费看视频| 九九九九亚洲| 伊人九九| 日韩字幕一区| 国产AV毛片| 亚洲成人久久美女| 久久超碰久| 日韩二级| 日韩精品影视| 日韩欧美三级| 91久久九九精品国产综合| 亚洲啪啪视频免费| 成人网站 免费观看| 人人操人人大香蕉| 久久久久久大| 免费成人在线熟妇网| 91精品国产乱码| 亚洲a色| 日韩三级伦理中文字幕| 在线综合色| 色色综合网站| 国产美女91视频| 啊嗯嗯啊好大好爽| 97超碰香蕉| 免费一级黄色录像影片| 国产高清成人mv在线观看| 精品在线观看视频在线| 一色网男人的天堂| 97就爱干| 欧美日韩黄片精品在线| 久久鲁干| 青青草日逼视频| 亚洲有码第一页| 热热色中文无码| 永久免费av无码网站国产app | 啊啊啊啊啊啊啊国| 嗯~啊~快点 死我视频免费看网站| AV有码在线| 91精品微拍福利| 色婷婷电影| 欧美影音在线| 精品人妻av区天天看片| 97色色视频| 老女人老91妇女老热女| 热热色91| 五月天成人综合| 亚洲97p| 色综合国产在线观看| 日韩欧美午夜视频在线| 爆乳免费黄网站| 中国91AV| 日本性爱少妇| 啊啊啊在线看| 秋霞无码av鲁丝片一区| 天天操女人| 91中出视频| 亚洲黄网在哪免费看| 精品视频97| 日夜伊人网| 色色操| 中文字幕一区二区三四五区日日骚| AV乱伦国产| 91视频国品一二三区| 少妇第一页| 国产操逼逼网| 91五月天| 久久久久久国产手机AV| 亚洲一本色码中文字幕| 一个国产在线综合网站| 久久综合久久综合人久久夜精品| 日韩操啪| 日本啊啊啊啊啊视频| 色汉综合| 久偷拍| 欧美福利视频啊啊啊啊 | 久久精品国产亚洲粉嫩| 亚欧Av| 久草线上视频免费看| 熟女精品va中文字幕| 色哟哟1区2区| 18禁超污无遮挡无码免费网| 我想要啊 啊 啊| 2020国产精品| 大茄子熟女AV导航| 亚洲精品 大香蕉| 91成人18| 熟女啪啪视频| 日韩美女啪啪一区| 97超碰免费生活| 久久久亚洲欧美综合| 成人久久久精品| 超碰人人干| 九久久九九久视频| 91n美女视频| 国产精品不卡一区二区电影| 欧美影音在线| 五月激情视频| aaa亚无码专区| 婷婷五月天无码| 影音先锋乱| 久久久久久久久久9| 国产一区96在线| 一区二区三区亚洲| 欧美日韩人妻精品一区二区三区| 色香综合天天影视综合 | 色色色色电影网| 搡老熟女老女人老熟妇免费视频| 91精品久久久久久综合五月天| 国产精品操| 亚洲情色一区三区| 国产精品青草综合久久| 伊人国产成人av网站| 日韩欧美被操黄免费观看| 国模不卡| 加勒比海成人视频网| 性色av网站| 色图四区| 99在线视频播放| 日本欧美成人片AAAA| 精品人成视频在线观看| 精品久操| 久久综合精品一区二区三区| 十八禁啪啦拍视频无遮挡| 91综合网| 91丰满| 国产婷婷一区| 亚洲丝袜色| 日韩无码黄色片| 亚欧高清| 色五月综合网| 97资源超碰| 亚洲天堂电影精品一区| 亚洲美女精品| 青娱乐亚洲自拍| 国产内射爽爽大片| 日本久久久久久久久| 欧美 色 亚洲| 在线亚洲精品久久久| 啊…啊…操我用力操我| 亚欧性爱在线无码| 国产女人高潮嗷嗷嗷叫小说 | 久操99| 五月婷婷丁香中文字幕| 不卡一区二区日本视频| 天天色图| 国产捆绑一区| 精品九区| 日韩精品午夜操呦呦不卡影院| 亚洲欧洲第二视频在线观看色图| 国产白领连续中出在线观看| 亚洲欧洲另类| 亚州免费啪啪视频| 高清无码一区二区三区| 97无码视频在线播放| 女性91网站| 免费视频观看60秒| 久操免费电影| 青青草原香蕉日本Ap| 久久久久久久久久久精| 啊嗯嗯啊好大好爽| 国产AV天美传媒一区二区三区 | 日本性一区| 精品十三区| 久久精品国产精品亚洲艾通辽熟妇| 色婷婷五月综合激情中文字幕| 强奸乱伦大香蕉| 能在线播放的国产三级| 久操网无码在线| 精品人妻av在线播放| 日本黄色大片一级视频免费麻豆| 国产最新小视频在线播放下载 | 日韩中文字幕2020| 淫乱图区 | 国内97干免费看| 亚洲中文字幕妇伦久久| 中文字幕在在线观看网站| 久久熟女人| 亚洲欧美综合色| 欧美色图偷拍另类| 欧美韩国你懂得在线| 国产传媒av天美传媒在线| 一本色道久久综合精品婷婷| 欧美综合天天| 超碰精品日韩欧美国产| 色在线亚洲视频www| 久久久久亚洲?V片无码V| A片大香蕉在线| 国产无码精品高清| 超97在线精品视频| 亚洲操操操| 超碰97男人| 青青草字幕AV| 亚洲综合网91| 无遮挡一级毛片视频免费的| 人人看人人摸人人色| 九月丁香| 国产不卡中文字幕免费avi| 欧美精品久久| 在线97视频| 成人无遮挡毛片免费看| 亚洲欧美中文日韩视频中国语| 激情99| 蜜伊人色综合97| www.男人天堂| 91亚洲欧美激情| 国产婷婷综合在线观看| 中文字幕亚洲在线一区| 69超碰综合| 97超碰超欧美。| 91爱啪| 国产97视频免费观看| 麻豆久久视频在线地址| 天天天天做夜夜夜夜做| 久伊人网78| 国产精品乱码久久久久久久久| 91这里只有精品| 亚洲精品中文字幕一区在线视频| 久久夜夜夜夜| 欧美激情 亚洲色图| 久久av一级av少妇av高潮| 一区二区三区四区色图| 欲色啪| 日产操逼| 国产91美女高潮| 欧美日韩人妻少妇 一区二区三区| 91久久青青草原精品| α√在线| 欧美人人天天网| 99久久99久久免费精品蜜臀| 操碰97| 色亚州人久干视频在线观看免费版| 操逼操逼操| 色婷婷久久| 国产AV天美传媒一区二区三区 | 欧美一级A一级a爱片久久| 亚洲福利中文字幕在线| 大香蕉综合久久| 国产在线视频午夜精华在| 欧美色婷婷| 欧美精品不卡一二三四在线91| 久久久久久久久久久免费精品| 久久久com| 精品97久久| 99热精品在线观看| 淫穴高潮色图| 亚洲 欧美 手机在线观看| 欧美精品偷拍| 韩国一级婬片A片无码天美| 无码91| 试看日韩黄片| 1区2区3区在线视频| 日韩欧美加勒比| 亚洲综合在线视频| 午夜精品久久久久久久第一页按摩| 国产成人精品日本视频| 夜夜嗨TV| 欧美日韩第一页| 可乐操亚洲蜜911| 亚洲一区中文字幕一区| 情色图区| 亚洲天堂综合AV| 日本女人操逼| 天天综合色图| 中文字幕一区二区三区蜜臀| 国产女同在线观看视频| 97超碰天天爱天天爱| 桃花色综合影院| 青青欧洲黑| 亚洲乱码国产乱码精网站| 熟妇女伦乱视频视频 | 色网亚洲人| 屌色在线97视频| 美女久久久| 色诱avtt| 国产精品免费美女视频| 欧美日韩久久精品爱爱| 欧美日韩m| 国产Av超碰| 亚州欧美综合| 天天添天天干电影| se吧提供国产乱老熟视频胖女人| 91强在线播放| 精品超碰国产| 午夜男女爽爽爽影院视频| 丝袜av一区二区三区| 欧美日韩性爱精品| 麻豆久久精品亚洲精品88| 60秒免费小视频| 影音先锋中文字幕日本好一区二区| 少妇的嫩逼图片| 人妻天天爽夜夜爽爽| 美女操逼福利视频| 天天天干977| 亚洲精品 超碰| 久久欧美性爱视频| 国产二区三区免费视频| 国产精品国产| 久99久视频精选| 黑人狂躁日本妞一区二区三区| 麻豆区久久久久亚| 亚洲……91| 入口操逼网站| 日本成人免费一区二区三区| 久久精品一区一起草| 国产视频一区二区在线| 免費黃色視頻觀看一| 亚洲麻豆av一区二区| 亚洲AV不卡在线观看| 99国产精品人妻人伦| 国产精品午夜高潮呻吟久久av| 亚洲国产精品久久AV| 免费男人的天堂| 超硑97精品| 亚洲性综合9| 热99这里只有精品| 日韩中文字幕精品一区在线| 伊香蕉综合久久久久久久噜噜噜 | 国产美女mm131爽爽爽爽| 久久久久久九九九| 国产精品一区二区麻豆| 天天日天天射天天干| 啊啊啊 在线观看| 国产做?爰片久久毛片?片美国| 乱伦一二三区| 蜜臀中文字幕| 伦理第一页| yazhouzaixian| 97频视在线| 96爱综合| 国产专区路线| 91亚洲精品青草| 六六久久日韩不卡| 国产亚洲禁久一区二区| 强奸乱伦Av网| 在线精品福利免费播放| 一区二区三区高清天码| 久久伊人亚洲AV无码网站| 色欧洲| 亚洲欧美碰碰| 中文字幕AV中出| 精品人妻一区二区三区免费视频| 欧美91色| 日韩综合色网| 欧美日韩系列| 99re这里只有精品2| 久操| 色老大| 久久久无码精品人妻二区 | 激情五月天社区| 日韩性爱高清免费视频| 密乳AV免费观看| 男人高清无码一区二区| 免费强奸av| 爆操无码| 久色网| 亚洲激情网一二三四区| 日韩一卡二卡三卡| 欧美综合天堂| 91欧美大片| 欧美激情激情xxxx欧美专区| 国产91福利小视频在线观看| A级片一区| 人人操人人插人www| 尤物av网站免费在线播放| 可以免费看黄片的视频| 午夜福利精品| 熟女六十路| 91neishe| 吉川爱美98堂在线| 欧美熟妇亚洲版| 亚洲亚洲亚洲天堂天堂 | 天美国产三级传媒| 久视频在线观看| 欧美亚洲成人在线一区二区三区| 欧美高清在线| 久久久久久久97| 亚洲无码偷拍| 美国一区二区免费视频| 99热伊人| 99啪啪| 97人人色| 中文字幕第9页萱萱影音先锋| 白天啪啪晚上啪啪视频| 乱伦熟女区| 在线女人91| 9精品在线| 超碰97综合在线| 在线观看不卡一区二区三区| 中文字幕jul-617人妻熟女| 99热最新| 九九国产热| 97狠狠| 国产一级高跟丝袜| 国产精品交换一区二区| 欧美国产成人在线| 久久久一区二区三区四区五区| 欧美呦呦性爱| 水澄无码AV| 夜草欧美| 99久久亚洲精品无码毛片潘甜甜| 超碰精品国产无码| 人妻嗯啊啊在线播放| 性性欧美| 天天综合网日韩| 黄色av一区二区在线| 色女综合| 999精品久久久久久久| 亚洲第一黄色av网站 | 亚洲国产精品无码AV久久久| 丁香六月东京热| 中文字幕十五区| 久久久久久999| 欧美性爱视频免费一区一A| 18一区二区三区| 日韩欧视频| 欧美18 在线观看| 日韩有码一区三区| 四虎免费在线播放| 强奸乱伦亚洲第一页| 人妻碰碰碰碰碰碰| 婷婷国产精品一区二区| 日本女优在线视频福利| 另类av天堂| 国产成年女黄特黄| 婷婷激情五月天小说网| 精品乱码久久久久| 欧美日产国产在线成人第一区| 久久久久成人蜜桃精品| 97美日韩视频| 午夜福利成人免费视频| 久热99999| 青椒国产97在线熟女| 激情欧美日韩女同久久| 久久国产逼| 久久精品免费| 一区二区三区国产在线播放| 久久久中文| 亚洲高潮影院| 亚洲AV无码乱码在线观看性色| 久久↗↗| 一本一道vs波多野结衣| 久久精品人妻一区二区三区| 亚洲Av无码成人精品国产| 五十路二区在线| 青娱乐亚洲自拍| 麻豆一区二区三区精品| 国产高清26uuu| 在线啊啊啊啊| 成人免费看吃奶视频网站| 伦在线97| 91精品女厕偷拍视频| 99精品久久久久久| 乱伦图av| 亚洲色婷婷综合久久久久中文| 国产成人一级av88| 精品无码产区一区二| 人人看人人摸人人色| 国产熟码AV| 裸体美女免费看网站青草| 亚洲无码日韩电影| 射丝袜高跟鞋99| 一牛影视成人片免费| 亚洲AV在线资源| 久久婷婷五月天| 日本女人久久久| 国产AV中文| 天美国产精品| 樱花蜜乳av| 日韩精品资源| 内射白嫩美女| 欧美一级国产一级| 99re在线视频这里只有精品| 国产少妇肉丝在线观看| 蜜乳AV.COM| 久久亚洲天堂| 91网站18在线观看| 国产美女口爆吞精视频| 91网站18+| 91视频国品一二三区| 99re热有精品视频国产| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 岛国A V在线免费看| 欧美日韩青操| 超碰av人人人| 91超碰在线| 亚州大图综合色图| 日本一二区免费| 99精品视频在线观看免费| 玖草在线视频| 素人无码中文字幕| 欧美亚洲综合色| 日本欧美一区二区三区免费| 蜜臀网址在线| 先锋音影AV| 香蕉综合网| 国产一区二区a毛片| 蜜臀网址在线| 欧美性区| 殴美,日韩国产伦精品| 天天操夜夜嗨| 亚洲人妻中文在线视频| 亚热日本熟女| 国产欧美美女免费观看视频| 国产亚洲日本精品在线| 久久久性| 久久香蕉国产线看观看亚洲女人 | 日韩精品.久久精品.AV女优.天美传媒| 国产一区二区a毛片| 日日骚中文字幕| 中文字幕午夜精品久久久| 中文字幕一区二区三区人妻少妇在线| 极品色www影院| 成人aⅴ一区二区三区| 91色婷婷综合久久中文字幕二区| 亚洲宗合网| 91人妻视频在线| 夂久色| 欧美性爱视频免费一区一A| 亚洲美女AV无码| 秘书高跟黑色丝袜国产91在线| 91久久18禁| 天天弄欧美| 操逼网站视频漫画国产| 波多野42部无码喷潮在线观看| 立川理惠被中出无码| 99热精品在线观看| 亚洲第一页综合在线| 久久久久密臀视频| 日韩美女高潮喷水视频| 中文字幕视频2区| 欧美日韩国产传媒在线精品| 男人的天堂2010| 亚州操逼网| 人人插人人搞人人操| 欧美日韩香蕉| av天堂天堂av日韩| 18禁免费视频| 人妻丰满熟妇一区二区三| 吖在线不卡一区二区国产剧情| 三男一女不戴套的A片| 97超碰欧美| 婷婷操视频| 久久在肏| 白丝av| 日本人妻伦在线中文字幕| 国产精品不卡av免费在线观看| 91成人18| 亚洲超碰97| 91人妻在线视频| 亚洲第一页第二页激情| 亚洲欧美日韩激情不卡| 草草草视频在线免费看| 国产兽交视频在线播放| 久久永久无码人妻视频| 99久久精品欧美国产| 最新av中文字幕高清| 国产中文大片资源中文字幕 | 日韩78m视频| www.av不卡中文字幕| 久草成人影片| 日本加勒比无码专区| 一区在线精品中文字幕| 91国产操逼视频| 好吊色一区| 看看小穴| 1204av韩国| 啊啊啊 在线| 啊啊啊好舒服视频| 不卡中文字幕aⅴ在线| 国产亚洲女v在线观看| 国产剧情AV不卡在线观看| 色婷婷五月综合激情中文字幕| 久久婷婷色| 中美日韩毛片| 日韩精彩视频| 九九九精品美女| 中文字幕,人妻,日韩| 桃花色综合影院| 国产精品蜜乳AV| 91黑丝在线播放| 宗合情欲网| 欧美日韩妖精91com| 精品人妻一二三| 欧美一区二区三区入口| 狠狠综合网| 91麻豆天美国产欧美日| 欧美激情一区二区| 免费视频观看60秒| 蜜臀久久99精品久久久| 在线中文字幕极品av| 啊a一区在线| 天天摸天天舔天天操| 啊啊啊想要| 欧美网站免费| 视频在线观看一二三区| 久久久国产护士丝袜美腿一| 91亚洲网站| 国产欧美日韩精品中文| 亚洲91亚洲| 国产精品动态一区二区三区四四| 日韩三级伦理中文字幕| 亚洲乱码尤物193YW| 天天爽夜夜操| 人妻在线大香蕉| 国产熟女无套内射| 911av网站免费观看| 欧洲色色| 亚洲天天影视色综合| 国产精品网址| 成人一级性爱| 大香蕉色十月| 亚州人妻| 91精品网站| www.激情| 久久久久久免费电影| 久96热在线观看视频| 99精彩视频| 国产精品一区二区麻豆| 91人精品妻入口| 800zy一区二区| 一区二区三区不卡视频| 超碰成人最新最好看| 国产欧美日韩臀 | 成人夜夜爽| 老熟妇一区二区三区啪啪| 成人精品久久久午夜福利| 69超碰综合| 男人的天堂久久| 岛国成人av在线播放网址| 91影视亚洲| 成人无码在线超碰网| 亚洲中文字幕有码视频一区二区三区| 91性片| 中文字幕一区日韩精| 91激情国产| HEYZO高无码国产精品227| 亚洲男人的天堂AV| 久久精品国内Av熟女高清| 国产性感在线观看| 久操97| 青青草在线成人视频| 欧美一区二区三区成人性生活| 精品美女久久久久| 欧美高清性猛交| 日韩97在线| 欧美成人9797| av亚欧| 欧美爆操91| 国产精品久久久久久高清无码免费看| 伊人久久国产免费观看视频| 91色图| 大香蕉 222| 自拍偷拍亚洲熟女妇人精品| 欧洲乱码一区二区| 国产亚洲精品无码三区| 中文字幕女同在线| 婷婷去俺也去六月色| 亚洲亚洲亚洲天堂天堂| 伊人五月天| 另类欧美色| 天堂av2019| 岛国片在线播放| 亚洲91网站| av凤凰久久久| 色欲av国内精品久久久久久| 青青11操操操操操操操操| 日本熟女不卡视频| 久久动漫精品视频这里只有精品| 十八岁啪啪视频免费看| 激情文学亚洲| 99国产精品人妻人伦| 蜜乳AV免费观看| 亚洲综合69| 日韩精品99999| 亚欧无码线免费观看视频| 日韩电影天堂视频一区二区| 日本午夜久久电影| 国产精品久久久久久久久久久久久久吹| 男人天堂.AB| 日本欧美一区二区三区免费| 加勒比av网| 欧美老熟另类| 久久久免费的精品| 97鸡把在线视频| 国产白嫩精品久久| 无码少妇精品一区二区60岁老人| www男人天堂| 久久不卡一区二区| 嫖老熟女A片一二三区| 3PAV乱伦视频| 亚洲九九爱| 91精品国产综合久久久蜜臀| 亚洲va有码在线天堂| 久久香蕉国产线看观看亚洲女人 | 97一区二区蜜臀| 日本国产成人亚洲精品无码| 91黑人狂躁丰满熟妇| 澳门黄片一香蕉视频| 97超碰精品图片| 国产一区麻豆免费观看| 99热伊人| 亚乱色| 婷婷色综合欧美日韩| 久久精品一区二区三区蜜桃臀| 夜夜操91744565| 无码免费精品高清| 少妇熟女1区2区3区| 91岛国动作片| 亚洲色图美腿丝袜| 91女在线观看| 深爱五月婷婷| 亚洲最新中文字幕免费| 88xx成人精品视频| 欧美色九九| 日韩一级二级三级免费看完整版国语版| av天天在线观看| 欧美性爱在线无码| 高潮的A片激情扒开一区| 日本一区二区不卡| 欧美 亚洲精品首页| 国产乱伦一二三区| 欧亚乱色熟女一区二区| 国产丝袜欧美在线视频| 日韩97| 色香网| 大香交| 久久天堂网| 久久女同性恋一二区| 久插不卡| 抽查国产福利主播| 亚洲欧美经典一区二区| 亚洲av影音先锋| 亚洲高清国产理伦片| 人人操人人舒服| 亚洲天堂久久久久久粉红视频| 亚洲性高潮| 亚洲日精品| 午夜精品久久久久久久99| 亚洲十八禁止| 超碰无码五月97| 一区二区三区日韩欧美 | 国产尹人在线视频免费| 亚洲中文一区二区三区| 性爱视频啪啪啪啪| 超碰色男人操熟女| 国产深喉视频一区二区| 啊啊啊无码| 97啪啪| www.亚洲黄色| 一级做受视频免费是看美女| 久久精品国产精品一区| 9色国产精品一区粉嫩| 精品午夜福利导航| 青春草莓视频在线观看网址| 日本视频在线中文字幕| 国产一级舔足在线观看| 91美女视频|