精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

五張圖帶你了解分布式事務(wù) Saga 模式中的狀態(tài)機

開發(fā) 架構(gòu)
本文講解了分布式事務(wù)中間件 Seata 給 Saga 模式設(shè)計的狀態(tài)機使用方式和原理。狀態(tài)機在我們的日常工作中使用非常廣泛,希望 Seata 的設(shè)計能對我們設(shè)計狀態(tài)機提供思路和參考。

大家好,我是君哥。

狀態(tài)機在我們的工作中應(yīng)用非常廣泛,今天聊一聊分布式事務(wù)中間件 Seata 中 Saga 模式的狀態(tài)機。

1.狀態(tài)機簡介

狀態(tài)機是一個數(shù)學模型,它將工作中的運行狀態(tài)和流轉(zhuǎn)規(guī)則抽象出來,可以協(xié)調(diào)相關(guān)信號來完成預(yù)先設(shè)定的操作。

下面介紹狀態(tài)機中的幾個概念:

  • 狀態(tài):狀態(tài)機目前的狀態(tài)標識;
  • 狀態(tài)轉(zhuǎn)移:定義狀態(tài)之間的轉(zhuǎn)移路由;
  • 動作(Action):狀態(tài)轉(zhuǎn)移需要的操作;
  • 事件:要執(zhí)行某個操作時的觸發(fā)器或者口令。

狀態(tài)機一般用在狀態(tài)類型比較多(超過 3 個),分支流程比較多,初始狀態(tài)經(jīng)過多個流程的流轉(zhuǎn)達到最終狀態(tài)的場景。

2.Saga 模式

Saga 模式是分布式事務(wù)中長事務(wù)的一種解決方案,Seata 中 Saga 模式的理論基礎(chǔ)是 Hector & Kenneth 在 1987 年發(fā)表的論文 Sagas。下圖(來自官網(wǎng))是 Seata 中 Saga 模型:

在 Saga 模式中,如果一部分分支事務(wù)已經(jīng)提交成功,當其中一個分支事務(wù)提交失敗,狀態(tài)機就會觸發(fā)所有提交成功的分支事務(wù)進行回滾。

分支事務(wù)中提交和回滾的邏輯需要由業(yè)務(wù)代碼來實現(xiàn)。

3.Saga 實現(xiàn)

Seata 中 Saga 模式是基于狀態(tài)機來實現(xiàn)的,使用 Saga 模式時,先畫一張狀態(tài)圖,這個狀態(tài)圖定義服務(wù)調(diào)用流程,每個節(jié)點調(diào)用一個分支事務(wù),并且每個節(jié)點需要配備一個補償節(jié)點用于分支事務(wù)失敗后的補償動作。

以經(jīng)典電商案例來講,一個分布式事務(wù)中有三個分支事務(wù)參數(shù)者:

分支事務(wù)

動作

狀態(tài)

訂單服務(wù)

保存訂單

保存成功、失敗

賬戶服務(wù)

扣減金額

扣減成功、失敗

庫存服務(wù)

扣減庫存

扣減成功、失敗

在這個分布式事務(wù)中,只有訂單、賬戶、庫存這三個分支事務(wù)都提交成功,整個事務(wù)才能成功。每一個分支事務(wù)提交失敗,其他執(zhí)行成功的事務(wù)都需要反向補償。如下圖:

圖片圖片

比如扣減金額這個分支事務(wù)失敗了,需要反向補償扣減金額、保存訂單這兩個分支事務(wù)。那 Seata 是怎么做到事件觸發(fā)、狀態(tài)流轉(zhuǎn)和補償操作的呢?

使用 Seata 狀態(tài)機,首先需要定義一個 Json 文件,這個 Json 文件把圖中的每個節(jié)點都定義成一個 State,State 的類型共有四種:

  • ServiceTask:對應(yīng)分支事務(wù)的提交操作。
  • Choice:對應(yīng)流程中下一個 State 的選擇。
  • CompensationTrigger:觸發(fā)補償服務(wù)。
  • Succeed:成功狀態(tài),當所有分支事務(wù)都成功后才會流轉(zhuǎn)到這個狀態(tài)。
  • Fail:失敗狀態(tài)。

(1)ServiceTask

下面我們看"保存訂單"這個狀態(tài):

"SaveOrder": {
 "Type": "ServiceTask",
 "ServiceName": "orderSave",
 "ServiceMethod": "saveOrder",
 "CompensateState": "DeleteOrder",
 "Next": "ChoiceAccountState",
 "Input": [
  "$.[businessKey]",
  "$.[order]"
 ],
 "Output": {
  "SaveOrderResult": "$.#root"
 },
 "Status": {
  "#root == true": "SU",
  "#root == false": "FA",
  "$Exception{java.lang.Throwable}": "UN"
 },
 "Catch": [
  {
   "Exceptions": [
    "java.lang.Throwable"
   ],
   "Next": "CompensationTrigger"
  }
 ]
},

這個 State 的類型是 ServiceTask,上面圖中的分支服務(wù)和補償服務(wù)都是這種類型,也對應(yīng)代碼中的一個 Service。上面的 Json 中主要定義了三個內(nèi)容:

  • 這個 state 調(diào)用的 Service 方法.
  • 提交失敗后的補償 State(CompensateState)。
  • 提交成功后應(yīng)該跳轉(zhuǎn)的下一個 State(ChoiceAccountState)。

(2)Choice

下面來看 ChoiceAccountState 這個狀態(tài)節(jié)點,Json 文件定義如下:

"ChoiceAccountState":{
 "Type": "Choice",
 "Choices":[
  {
   "Expression":"[SaveOrderResult] == true",
   "Next":"ReduceAccount"
  }
 ],
 "Default":"Fail"
}

對應(yīng)的下個節(jié)點是 ReduceAccount,如果失敗就會跳轉(zhuǎn) Fail 狀態(tài)。

(3)Fail

上面 orderSave 這個狀態(tài)節(jié)點如果發(fā)生異常,會跳轉(zhuǎn)到 CompensationTrigger,CompensationTrigger 狀態(tài)節(jié)點定義如下:

"CompensationTrigger": {
 "Type": "CompensationTrigger",
 "Next": "Fail"
}

這個節(jié)點會觸發(fā) SaveOrder 中定義的補償服務(wù),然后將最終狀態(tài)流轉(zhuǎn)到 Fail。同時我們也看到,只要到了 CompensationTrigger 這個狀態(tài)節(jié)點,最終狀態(tài)就會流轉(zhuǎn)到 Fail。

下面我們把整個 Json 文件的定義貼出來看一下:

{
    "Name": "buyGoodsOnline",
    "Comment": "buy a goods on line, add order, deduct account, deduct storage ",
    "StartState": "SaveOrder",
    "Version": "0.0.1",
 #定義狀態(tài)
    "States": {
        "SaveOrder": {
            "Type": "ServiceTask",
            "ServiceName": "orderSave",
            "ServiceMethod": "saveOrder",
            "CompensateState": "DeleteOrder",
            "Next": "ChoiceAccountState",
            "Input": [
                "$.[businessKey]",
                "$.[order]"
            ],
            "Output": {
                "SaveOrderResult": "$.#root"
            },
            "Status": {
                "#root == true": "SU",
                "#root == false": "FA",
                "$Exception{java.lang.Throwable}": "UN"
            },
   "Catch": [
                {
                    "Exceptions": [
                        "java.lang.Throwable"
                    ],
                    "Next": "CompensationTrigger"
                }
            ]
        },
        "ChoiceAccountState":{
            "Type": "Choice",
            "Choices":[
                {
                    "Expression":"[SaveOrderResult] == true",
                    "Next":"ReduceAccount"
                }
            ],
            "Default":"Fail"
        },
        "ReduceAccount": {
            "Type": "ServiceTask",
            "ServiceName": "accountService",
            "ServiceMethod": "decrease",
            "CompensateState": "CompensateReduceAccount",
            "Next": "ChoiceStorageState",
            "Input": [
                "$.[businessKey]",
                "$.[userId]",
                "$.[money]",
                {
                    "throwException" : "$.[mockReduceAccountFail]"
                }
            ],
            "Output": {
                "ReduceAccountResult": "$.#root"
            },
            "Status": {
                "#root == true": "SU",
                "#root == false": "FA",
                "$Exception{java.lang.Throwable}": "UN"
            },
            "Catch": [
                {
                    "Exceptions": [
                        "java.lang.Throwable"
                    ],
                    "Next": "CompensationTrigger"
                }
            ]
        },
        "ChoiceStorageState":{
            "Type": "Choice",
            "Choices":[
                {
                    "Expression":"[ReduceAccountResult] == true",
                    "Next":"ReduceStorage"
                }
            ],
            "Default":"Fail"
        },
        "ReduceStorage": {
            "Type": "ServiceTask",
            "ServiceName": "storageService",
            "ServiceMethod": "decrease",
            "CompensateState": "CompensateReduceStorage",
            "Input": [
                "$.[businessKey]",
                "$.[productId]",
                "$.[count]",
                {
                    "throwException" : "$.[mockReduceStorageFail]"
                }
            ],
            "Output": {
                "ReduceStorageResult": "$.#root"
            },
            "Status": {
                "#root == true": "SU",
                "#root == false": "FA",
                "$Exception{java.lang.Throwable}": "UN"
            },
            "Catch": [
                {
                    "Exceptions": [
                        "java.lang.Throwable"
                    ],
                    "Next": "CompensationTrigger"
                }
            ],
            "Next": "Succeed"
        },
        "DeleteOrder": {
            "Type": "ServiceTask",
            "ServiceName": "orderSave",
            "ServiceMethod": "deleteOrder",
            "Input": [
                "$.[businessKey]",
                "$.[order]"
            ]
        },
        "CompensateReduceAccount": {
            "Type": "ServiceTask",
            "ServiceName": "accountService",
            "ServiceMethod": "compensateDecrease",
            "Input": [
                "$.[businessKey]",
                "$.[userId]",
                "$.[money]"
            ]
        },
        "CompensateReduceStorage": {
            "Type": "ServiceTask",
            "ServiceName": "storageService",
            "ServiceMethod": "compensateDecrease",
            "Input": [
                "$.[businessKey]",
                "$.[productId]",
                "$.[count]"
            ]
        },
        "CompensationTrigger": {
            "Type": "CompensationTrigger",
            "Next": "Fail"
        },
        "Succeed": {
            "Type":"Succeed"
        },
        "Fail": {
            "Type":"Fail",
            "ErrorCode": "PURCHASE_FAILED",
            "Message": "purchase failed"
        }
    }
}

上面 Json 文件中定義的 buyGoodsOnline,是狀態(tài)機加載的入口,狀態(tài)機會找到這個 name,然后把狀態(tài)加載到自己的內(nèi)存中。下面,我們再來總結(jié)一下電商案例中分布式事務(wù)狀態(tài)流轉(zhuǎn)過程:

4.狀態(tài)機應(yīng)用

上面的電商例子中,三個分支服務(wù)分別定義了三個 State,對應(yīng)的 ServiceMethod 如下:

  • SaveOrder#saveOrder:
public boolean saveOrder(String businessKey, Order order) {
 logger.info("保存訂單, businessKey:{}, order: {}", businessKey, order);
 orderDao.create(order);
 return true;
}
  • ReduceAccount#decrease
public boolean decrease(String businessKey, Long userId, BigDecimal money) {
 return accountApi.decrease(businessKey, userId, money);
}
  • ReduceStorage#decrease
public boolean decrease(String businessKey, Long productId, Integer count) {
 return storageApi.decrease(businessKey, productId, count);
}

狀態(tài)機在啟動的時候,需要把上面方法中的參數(shù)都傳入,實例代碼如下:

StateMachineEngine stateMachineEngine = (StateMachineEngine) ApplicationContextUtils.getApplicationContext().getBean("stateMachineEngine");
Map<String, Object> startParams = new HashMap<>(3);
String businessKey = String.valueOf(System.currentTimeMillis());
startParams.put("businessKey", businessKey);
startParams.put("order", order);
startParams.put("mockReduceAccountFail", "true");
startParams.put("userId", order.getUserId());
startParams.put("money", order.getPayAmount());
startParams.put("productId", order.getProductId());
startParams.put("count", order.getCount());
//這里采用同步方法
StateMachineInstance inst = stateMachineEngine.startWithBusinessKey("buyGoodsOnline", null, businessKey, startParams);

5.狀態(tài)機原理

下面這張圖來自于 Seata 官網(wǎng),主要講解了狀態(tài)機的工作原理:

圖片圖片

  • 狀態(tài)機啟動時,首先啟動了全局事務(wù)。
  • 將狀態(tài)機的參數(shù)記錄在本地 seata_state_machine_inst 表。
  • 向 Seata Server 注冊分支事務(wù)。
  • 執(zhí)行 StateA 并記錄狀態(tài)到本地數(shù)據(jù)庫,同時會產(chǎn)生路由事件放入 EventQueue,執(zhí)行 StateB 時取出路由消息觸發(fā)執(zhí)行。同樣 StateB 執(zhí)行時也會產(chǎn)生路由消息放入 EventQueue。
  • 從 EventQueue 取出路由消息執(zhí)行 StateC。
  1. 狀態(tài)機結(jié)束流程,提交或回滾全局事務(wù)。

6.高可用

Seata 中的狀態(tài)機并不是獨立部署,而是內(nèi)嵌在應(yīng)用中,由于狀態(tài)機上下文和執(zhí)行日志都記錄在本地數(shù)據(jù)庫中,所以狀態(tài)機本身是無狀態(tài)的。

狀態(tài)機啟動時,會發(fā)送狀態(tài)到 Seata Server,當一個應(yīng)用宕機后,Seata Server 能感知到,并會把恢復請求發(fā)送到存活的實例,收到請求的實例從數(shù)據(jù)庫取出狀態(tài)機上下文和執(zhí)行日志進行恢復。如下圖:

7.總結(jié)

本文講解了分布式事務(wù)中間件 Seata 給 Saga 模式設(shè)計的狀態(tài)機使用方式和原理。狀態(tài)機在我們的日常工作中使用非常廣泛,希望 Seata 的設(shè)計能對我們設(shè)計狀態(tài)機提供思路和參考。

責任編輯:姜華 來源: 君哥聊技術(shù)
相關(guān)推薦

2025-07-09 01:22:00

Saga模式系統(tǒng)

2021-04-27 07:52:18

分布式事務(wù)系統(tǒng)

2020-10-16 06:30:45

分布式場景方案

2021-08-19 09:00:00

微服務(wù)開發(fā)架構(gòu)

2021-06-01 12:45:19

數(shù)據(jù)庫分布式OceanBase

2022-01-26 13:46:40

分布式事務(wù)集合,這

2021-09-07 09:26:13

Python 開發(fā)編程語言

2025-08-27 09:11:48

2019-06-10 14:53:15

分布式架構(gòu)應(yīng)用服務(wù)

2020-06-28 07:39:44

Kafka分布式消息

2024-01-08 09:46:47

2022-06-27 08:21:05

Seata分布式事務(wù)微服務(wù)

2025-04-28 00:44:04

2021-08-16 15:40:04

分布式架構(gòu)系統(tǒng)

2022-06-21 08:27:22

Seata分布式事務(wù)

2017-07-26 15:08:05

大數(shù)據(jù)分布式事務(wù)

2021-07-07 07:14:48

分布式ID分布式系統(tǒng)

2022-12-21 08:40:05

限流器分布式限流

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2021-03-18 09:18:39

分布式事務(wù)Saga
點贊
收藏

51CTO技術(shù)棧公眾號

碰碰在线视频| 国内毛片毛片毛片毛片| 国产精品欧美三级在线观看| 在线观看国产91| 亚洲区成人777777精品| 午夜av免费在线观看| 中文字幕一区二区三区乱码图片 | 精品三级在线| 一区二区三区.www| 日韩一区免费观看| 超碰在线观看99| 日日骚欧美日韩| 欧美交受高潮1| 国产探花视频在线| 牛牛影视一区二区三区免费看| 亚洲成人第一页| 最新欧美日韩亚洲| 欧洲天堂在线观看| 三级影片在线观看欧美日韩一区二区| 亚洲欧美精品伊人久久| 午夜精品中文字幕| 亚洲精品成人图区| 亚洲午夜精品一区二区三区他趣| 国产传媒一区| 在线免费看91| 三级在线观看一区二区| 日韩视频在线一区| 国产精品揄拍100视频| 朝桐光一区二区| 午夜久久电影网| 黄色网在线视频| 91激情在线| 国产欧美日本一区二区三区| 国产综合动作在线观看| 精品国产乱码久久久久久蜜臀网站| 亚洲午夜伦理| 九九久久久久99精品| 91免费公开视频| 日韩理论电影院| 正在播放欧美一区| 美女脱光内衣内裤| 亚洲人成亚洲精品| 欧美精品成人一区二区三区四区| 日本黄大片在线观看| 高清免费电影在线观看| 国产精品久久综合| 视频在线精品一区| 成人av电影观看| 中文字幕欧美激情| 午夜免费电影一区在线观看| 国产中文在线视频| 国产成人精品亚洲午夜麻豆| 成人亚洲激情网| 精品美女www爽爽爽视频| 国产原创一区二区三区| 亚洲一区二区在线| 国产色综合视频| 国产乱一区二区| 999国产在线| 丰满熟女一区二区三区| 成人黄色777网| 国产麻豆一区二区三区在线观看| 真实新婚偷拍xxxxx| 丝袜美腿亚洲一区二区图片| 欧美黑人狂野猛交老妇| 2017亚洲天堂| 91精品综合| 国产一区二区黑人欧美xxxx| 内射毛片内射国产夫妻| 91亚洲国产| 免费不卡欧美自拍视频| 豆国产97在线 | 亚洲| 亚洲毛片视频| 国产精品成人av性教育| 一区二区www| 国产成人免费视频网站高清观看视频| 国产精品无av码在线观看| 日韩毛片一区二区三区| 日韩中文字幕麻豆| 国产一区视频在线播放| 亚洲AV午夜精品| 国产在线视视频有精品| 99在线观看| 深夜视频在线免费| 国产精品视频九色porn| av在线com| 欧美美女日韩| 91精品国产91综合久久蜜臀| 精品人妻一区二区三区日产| 日韩精品影视| 97久久精品人搡人人玩| 中文字幕在线观看视频一区| 国产91精品精华液一区二区三区| 91网站免费观看| 西西人体44www大胆无码| 国产精品美女久久久久久| 日本在线观看不卡| av在线麻豆| 日本久久精品电影| 国内精品国产三级国产aⅴ久| 爱情电影网av一区二区| 亚洲精品久久久久久久久| 黄色av片三级三级三级免费看| 欧美午夜精彩| 久久久久久香蕉网| 中文字幕+乱码+中文乱码www| 免费人成网站在线观看欧美高清| 国产精品久久99久久| 亚洲精品一区二区三区四区| 欧美激情一区二区三区蜜桃视频| 亚洲欧美日韩精品久久久| h片在线观看| 91精品国产欧美一区二区成人| 久久久久中文字幕亚洲精品| 精品av一区二区| 欧美激情xxxxx| 国产精品欧美综合亚洲| 久久综合九色综合97婷婷女人 | 一区二区三区在线播放| 麻豆av免费在线| 成人直播在线观看| 久久精品成人动漫| 亚洲欧美日韩一区二区三区四区| 日本大胆欧美人术艺术动态| 精品亚洲欧美日韩| 七七久久电影网| 9191精品国产综合久久久久久| xxxx国产视频| 欧美韩日高清| 国产精品久久精品| 韩国免费在线视频| 欧美日韩在线视频一区二区| 99热一区二区| 欧美亚洲高清| 欧美激情一区二区久久久| 在线视频欧美亚洲| 国产拍揄自揄精品视频麻豆| 无码无遮挡又大又爽又黄的视频| 91精品一久久香蕉国产线看观看| 亚洲第一二三四五区| 在线观看亚洲大片短视频| 午夜在线精品偷拍| 精品一区二区日本| 2020国产在线| 日韩av一区二区在线| 国产又粗又猛又爽又黄的视频四季| 中文字幕一区二区三区在线视频 | 精品成人免费视频| 国产91精品露脸国语对白| 日韩精品一区二区三区四| 欧美久久一区二区三区| 日韩网站在线观看| 一二三区中文字幕| 亚洲视频小说图片| 中文字幕 欧美日韩| 91精品动漫在线观看| 亚洲一区久久久| 日本大胆在线观看| 亚洲高清久久网| 日韩成人免费观看| 紧缚奴在线一区二区三区| 中文字幕av导航| 午夜精品在线| 2019中文字幕在线| 精品人妻伦一二三区久久| 欧美极品美女视频| 男人添女人下面免费视频| 日韩影视在线观看| 日本久久91av| 五月香视频在线观看| 一本到高清视频免费精品| 亚洲精品久久一区二区三区777| 成人vr资源| 日韩av日韩在线观看| 成人午夜免费福利| 午夜国产精品一区| 摸摸摸bbb毛毛毛片| 国产一区999| 欧美亚洲国产成人| 欧美1区2区3区4区| 国产成人精品在线视频| 精品麻豆一区二区三区| 亚洲国产成人精品一区二区 | 色综合色综合色综合| 国产三级短视频| 国产精品自拍av| 日本免费不卡一区二区| 欧美偷拍综合| 国产精品99久久久久久久| 亚洲黄色网址| 欧美成人小视频| 飘雪影院手机免费高清版在线观看| 亚洲最大成人综合| 免费黄色在线视频| 精品一区二区三区久久久| 97视频久久久| 日韩国产欧美| 国产中文字幕亚洲| 日本三级视频在线播放| 亚洲第一男人天堂| 在线免费看毛片| 亚洲成人一区二区| 老司机成人免费视频| av日韩在线网站| 久久综合在线观看| 久久欧美肥婆一二区| 日本福利视频在线观看| 欧美亚洲国产精品久久| 精品视频免费观看| 免费一级欧美在线大片| 国产精品电影一区| 黄色软件视频在线观看| 欧美另类暴力丝袜| 9191在线观看| 亚洲美女视频网| 成人免费公开视频| 日韩视频一区在线观看| 国产乡下妇女做爰视频| 亚洲欧洲美洲综合色网| 亚洲av无码国产精品久久| 国产精品一区免费在线观看| 538在线视频观看| 亚洲影视在线| 毛片在线视频播放| 国自产拍偷拍福利精品免费一| 久久久久久久久久久久久久久久av| 日韩视频网站在线观看| 欧美野外猛男的大粗鳮| 免费在线中文字幕| 欧美噜噜久久久xxx| 秋霞成人影院| 在线精品国产成人综合| 免费理论片在线观看播放老| 亚洲成色777777女色窝| a级片在线视频| 欧美日韩精品三区| 中文字幕视频一区二区| 欧美性猛交一区二区三区精品| 一级性生活免费视频| 国产视频一区二区在线观看| 老司机福利av| 久久精品人人做人人爽人人| 国产熟妇久久777777| 久久综合五月天婷婷伊人| 亚洲天堂网一区二区| 韩国v欧美v日本v亚洲v| 亚洲欧美手机在线| 国产综合色精品一区二区三区| 日韩欧美国产免费| 美女久久一区| 99热手机在线| 在线视频精品| 久久精品免费一区二区| 噜噜噜躁狠狠躁狠狠精品视频| av电影一区二区三区| 国产精品亚洲片在线播放| 日本不卡二区| 精品国产精品| 精品久久久久久一区| 国产一区二区av在线| 成人看片视频| 六月丁香久久丫| 欧美日韩亚洲在线| 大色综合视频网站在线播放| 视频一区二区在线| 91精品蜜臀一区二区三区在线| 欧美日韩国产综合在线| 欧美色图在线播放| 在线精品日韩| 亚洲午夜极品| 情侣黄网站免费看| 久久精品国产亚洲高清剧情介绍| 男女视频网站在线观看| 久久精品麻豆| 日本中文字幕二区| 成人午夜av电影| 好吊视频在线观看| 亚洲欧洲国产日韩| 日本a在线观看| 在线日韩国产精品| 国产av无码专区亚洲a∨毛片| 欧美三级在线看| av中文字幕免费| 国产视频久久久久久久| 巨大荫蒂视频欧美大片| 久久久久久久91| 樱花草涩涩www在线播放| 国产区精品视频| 日本亚洲不卡| 日本福利视频导航| 国产日韩欧美在线播放不卡| www.com黄色片| 日韩高清一区二区| 成人欧美精品一区二区| av电影天堂一区二区在线观看| 国产精品亚洲一区二区无码| 国产精品99久久久久| av黄色免费网站| 亚洲最新视频在线观看| 亚洲视屏在线观看| 亚洲福利视频网站| 老司机在线看片网av| 中文字幕在线精品| а√天堂8资源中文在线| 欧美一级大片视频| 亚洲网一区二区三区| 日韩不卡av| 日韩视频免费| 乳色吐息在线观看| 亚洲欧洲国产精品一区| 亚洲一区二区精品视频| 国产91精品一区| 日韩视频在线永久播放| av电影在线观看| 欧美中文在线观看| 伊人久久精品一区二区三区| 91免费看网站| 欧美丰满老妇| 国产嫩草在线观看| 26uuu久久综合| 992在线观看| 亚洲精品乱码久久久久久| 久久精品欧美一区二区| 欧美精品在欧美一区二区少妇| 亚洲国产成人在线观看| 少妇高潮 亚洲精品| 污污片在线免费视频| 成人免费午夜电影| 日韩一区三区| 杨幂毛片午夜性生毛片 | 欧美激情2020午夜免费观看| 婷婷久久综合九色综合99蜜桃| 国产福利不卡| 午夜精品电影| 亚洲综合伊人久久| 久久先锋资源网| 欧美爱爱免费视频| 欧美日韩中文字幕综合视频| 欧美熟妇另类久久久久久不卡| 亚洲最新中文字幕| 曰本三级在线| 99国产在线视频| 欧美日本久久| 波多野结衣电影免费观看| 亚洲黄色小视频| 男操女视频网站| 亚洲精品一区二区三区精华液| 97超碰人人在线| 国产精品一香蕉国产线看观看 | 国产精品字幕| 日韩激情久久| 另类调教123区| 欧美一区免费观看| 日韩视频123| 9999精品成人免费毛片在线看| 成人有码在线视频| 91精品福利| 天天躁日日躁狠狠躁av| 天天综合网天天综合色| 日本不卡免费播放| 国产精品入口免费视| 66视频精品| 亚洲a级黄色片| 亚洲精品乱码久久久久久| 中日精品一色哟哟| 久久中文字幕国产| 97se亚洲| 国产视频一区二区三区在线播放| jizz一区二区| 天堂网视频在线| 亚洲国产精品字幕| 欧洲精品一区二区三区| 免费在线观看污污视频| 国产白丝精品91爽爽久久 | 国产黄色大片网站| 久久频这里精品99香蕉| 久久99性xxx老妇胖精品| 中文字幕av专区| 亚洲综合色噜噜狠狠| 三区在线观看| 成人欧美一区二区三区在线| 亚洲精华国产欧美| 一区二区三区伦理片| 日韩一区二区三区av| 国产激情在线视频| 国产有色视频色综合| 日本女优在线视频一区二区| 国产人妻精品一区二区三区不卡| 91精品国产日韩91久久久久久| 蜜桃av在线免费观看| 国产精品视频福利| 日本中文字幕不卡| 欧美激情视频二区| 精品美女被调教视频大全网站| 日本在线观看大片免费视频| 亚洲v日韩v综合v精品v| 亚洲一区欧美激情| 91视频免费在线看| 自拍偷拍亚洲精品| 男人的天堂久久|