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

并發(fā)扣款,如何保證一致性?

精選
開(kāi)發(fā)
同一個(gè)用戶在并發(fā)“查詢,邏輯計(jì)算,扣款”的情況下,余額可能出現(xiàn)不一致,有什么優(yōu)化方法么?今天和大家聊一聊這個(gè)問(wèn)題。

?有朋友問(wèn)我:

沈老師,我們有個(gè)業(yè)務(wù),同一個(gè)用戶在并發(fā)“查詢,邏輯計(jì)算,扣款”的情況下,余額可能出現(xiàn)不一致,請(qǐng)問(wèn)有什么優(yōu)化方法么?

今天和大家聊一聊這個(gè)問(wèn)題。

畫外音:文章較長(zhǎng),建議提前收藏。

問(wèn)題一:用戶扣款的業(yè)務(wù)場(chǎng)景是怎樣的??

用戶購(gòu)買商品的過(guò)程中,要對(duì)余額進(jìn)行查詢與修改,大致的業(yè)務(wù)流程如下:

第一步,從數(shù)據(jù)庫(kù)查詢用戶現(xiàn)有余額:

SELECT money FROM t_yue WHERE uid=$uid;

不妨設(shè)查詢出來(lái)的$old_money=100元。

第二步,業(yè)務(wù)層實(shí)施業(yè)務(wù)邏輯計(jì)算,比如:

(1)先查詢購(gòu)買商品的價(jià)格,例如是80元;

(2)再查詢產(chǎn)品是否有活動(dòng),以及活動(dòng)折扣,例如是9折;

(3)比對(duì)余額是否足夠,足夠時(shí)才往下走;

if($old_money> 80*0.9){
$new_money=$old_money-80*0.9=28
} else {
return "Not enough minerals";
}

第三步,將數(shù)據(jù)庫(kù)中的余額進(jìn)行修改。

UPDATE t_yue SET money=$new_money 
WHERE uid=$uid;

在并發(fā)量低的情況下,這個(gè)流程沒(méi)有任何問(wèn)題,原有金額100元,購(gòu)買了80元的九折商品(72元),剩余28元。

問(wèn)題二:同一個(gè)用戶,并發(fā)扣款可能出現(xiàn)什么問(wèn)題?

在分布式環(huán)境中,如果并發(fā)量很大,這種“查詢+修改”的業(yè)務(wù)有一定概率出現(xiàn)數(shù)據(jù)不一致。

極限情況下,可能出現(xiàn)這樣的異常流程:

步驟一,業(yè)務(wù)1和業(yè)務(wù)2并發(fā)查詢余額,是100元。

圖片

畫外音:這些并發(fā)查詢,是在不同的站點(diǎn)實(shí)例/服務(wù)實(shí)例上完成的,進(jìn)程內(nèi)互斥鎖肯定解決不了。

步驟二,業(yè)務(wù)1和業(yè)務(wù)2并發(fā)進(jìn)行邏輯計(jì)算,算出各自業(yè)務(wù)的余額,假設(shè)業(yè)務(wù)1算出的余額是28元,業(yè)務(wù)2算出的余額是38元。

圖片

步驟三,業(yè)務(wù)1對(duì)數(shù)據(jù)庫(kù)中的余額先進(jìn)行修改,設(shè)置成28元。

業(yè)務(wù)2對(duì)數(shù)據(jù)庫(kù)中的余額后進(jìn)行修改,設(shè)置成38元。

圖片

此時(shí)異常出現(xiàn)了,原有金額100元,業(yè)務(wù)1扣除了72元,業(yè)務(wù)2扣除了62元,最后剩余38元。畫外音:假設(shè)業(yè)務(wù)1先寫回余額,業(yè)務(wù)2再寫回余額。

問(wèn)題三:有什么常見(jiàn)的解決方案?

對(duì)于此案例,同一個(gè)用戶,并發(fā)扣款時(shí),有小概率會(huì)出現(xiàn)異常,可以對(duì)每一個(gè)用戶進(jìn)行分布式鎖互斥,例如:在redis/zk里搶到一個(gè)key才能繼續(xù)操作,否則禁止操作。

這種悲觀鎖方案確實(shí)可行,但要引入額外的組件(redis/zk),并且會(huì)降低吞吐量。對(duì)于小概率的不一致,有沒(méi)有樂(lè)觀鎖的方案呢?

對(duì)并發(fā)扣款進(jìn)行進(jìn)一步的分析發(fā)現(xiàn):

(1) 業(yè)務(wù)1寫回時(shí),舊余額100,這是一個(gè)初始狀態(tài);新余額28,這是一個(gè)結(jié)束狀態(tài)。理論上只有在舊余額為100時(shí),新余額才應(yīng)該寫回成功。

而業(yè)務(wù)1并發(fā)寫回時(shí),舊余額確實(shí)是100,理應(yīng)寫回成功。

(2) 業(yè)務(wù)2寫回時(shí),舊余額100,這是一個(gè)初始狀態(tài);新余額28,這是一個(gè)結(jié)束狀態(tài)。理論上只有在舊余額為100時(shí),新余額才應(yīng)該寫回成功。

可實(shí)際上,這個(gè)時(shí)候數(shù)據(jù)庫(kù)中的金額已經(jīng)變?yōu)?8了,所以業(yè)務(wù)2的并發(fā)寫回,不應(yīng)該成功。

如何低成本實(shí)施樂(lè)觀鎖?

在set寫回的時(shí)候,加上初始狀態(tài)的條件compare,只有初始狀態(tài)不變時(shí),才允許set寫回成功,Compare And Set(CAS),是一種常見(jiàn)的降低讀寫鎖沖突,保證數(shù)據(jù)一致性的方法。

此時(shí)業(yè)務(wù)要怎么改?

使用CAS解決高并發(fā)時(shí)數(shù)據(jù)一致性問(wèn)題,只需要在進(jìn)行set操作時(shí),compare初始值,如果初始值變換,不允許set成功。

具體到這個(gè)case,只需要將:

UPDATE t_yue SET money=$new_money 

WHERE uid=$uid;

升級(jí)為:

UPDATE t_yue SET money=$new_money 

WHERE uid=$uid AND money=$old_money;

即可。

并發(fā)操作發(fā)生時(shí):

業(yè)務(wù)1執(zhí)行:

UPDATE t_yue SET money=28 

WHERE uid=$uid AND money=100;

業(yè)務(wù)2執(zhí)行:

UPDATE t_yue SET money=38 

WHERE uid=$uid AND money=100;

這兩個(gè)操作同時(shí)進(jìn)行時(shí),只可能有一個(gè)執(zhí)行成功。

怎么判斷哪個(gè)并發(fā)執(zhí)行成功,哪個(gè)并發(fā)執(zhí)行失敗呢?

set操作,其實(shí)無(wú)所謂成功或者失敗,業(yè)務(wù)能通過(guò)affect rows來(lái)判斷:

  • 寫回成功的,affect rows為1;
  • 寫回失敗的,affect rows為0;

高并發(fā)“查詢并修改”的場(chǎng)景,可以用CAS(Compare and Set)的方式解決數(shù)據(jù)一致性問(wèn)題。對(duì)應(yīng)到業(yè)務(wù),即在set的時(shí)候,加上初始條件的比對(duì)即可。

優(yōu)化不難,只改了半行SQL,但確實(shí)能解決問(wèn)題。

問(wèn)題四:能不能使用直接扣減的方法

UPDATE t_yue SET money=money-$diff 

WHERE uid=$uid;

來(lái)進(jìn)行余額扣減?

明顯不行,在并發(fā)情況下,會(huì)將money扣成負(fù)數(shù)。

問(wèn)題五:為了保證余額不被扣成負(fù)數(shù),再加一個(gè)where條件:

UPDATE t_yue SET money=money-$diff 
WHERE uid=$uid AND money-$diff>0;

這樣是否可行?

很遺憾,仍然不行。

這個(gè)方案不冪等。

那什么是冪等性??

聊冪等性之前,先看另一個(gè)測(cè)試用例的case。

假設(shè)有一個(gè)服務(wù)接口,注冊(cè)新用戶:

bool RegisterUser($uid, $name){

//查看uid是否已經(jīng)存在

select uid from t_user where uid=$uid;

//不是新用戶,返回失敗

if(rows>0)return false;

else{

//把新用戶插入用戶表
insert into t_user values($uid, $name);
//返回成功
return true;
}
}

有一個(gè)測(cè)試工程師,對(duì)該接口寫了一個(gè)測(cè)試用例:

bool TestCase_RegisterUser(){
//造一些假數(shù)據(jù)
long uid=123;
String name='shenjian';
//調(diào)用被測(cè)試的接口
bool result= RegisterUser(uid,name);
//預(yù)期注冊(cè)成功,對(duì)結(jié)果進(jìn)行斷言判斷
Assert(result,true);
//返回測(cè)試結(jié)果
return result;
}

這是不是一個(gè)好的測(cè)試用例?這個(gè)用例存在什么問(wèn)題?

你會(huì)發(fā)現(xiàn),相同條件下,這個(gè)測(cè)試用例執(zhí)行兩次,得到的結(jié)果不一樣:

  • 第一次執(zhí)行,第一次造數(shù)據(jù),調(diào)用接口,注冊(cè)成功;
  • 第二次執(zhí)行,又造了一次相同的數(shù)據(jù),調(diào)用接口,注冊(cè)會(huì)失??;

這不是一個(gè)好的測(cè)試用例,多次執(zhí)行結(jié)果不同。

什么是冪等性??

相同條件下,執(zhí)行同一請(qǐng)求,得到的結(jié)果相同,才符合冪等性。

畫外音:Google一下,比我解釋得更好,但意思應(yīng)該說(shuō)清楚了。

如何將上面的測(cè)試用例改為符合“冪等性”的測(cè)試用例呢??

只需要加一行代碼:

bool TestCase_RegisterUser(){
//造一些假數(shù)據(jù)
long uid=123;
String name=’shenjian’;
//先刪除這個(gè)偽造的用戶
DeleteUser(uid);
//調(diào)用被測(cè)試的接口
bool result= RegisterUser(uid,name);
//預(yù)期注冊(cè)成功,對(duì)結(jié)果進(jìn)行斷言判斷
Assert(result,true);
//返回測(cè)試結(jié)果
return result;
}

這樣,在相同條件下,不管這個(gè)用例執(zhí)行多少次,得到的測(cè)試結(jié)果都是相同的。

讀請(qǐng)求,一般是冪等的。

寫請(qǐng)求,視情況而定:

  • insert x,一般來(lái)說(shuō)不是冪等的,重復(fù)插入得到的結(jié)果不一定一樣;
  • delete x,一般來(lái)說(shuō)是冪等的,刪除多次得到的結(jié)果仍相同;
  • set a=x是冪等的;
  • set a=a-x不是冪等的;

因此,這么扣減余額:

UPDATE t_yue SET money=$new_money 

WHERE uid=$uid AND money=$old_money;

是冪等操作。

要是這么扣減余額:

UPDATE t_yue SET money=money-$diff 

WHERE uid=$uid AND money-$diff>0;

不是冪等操作。

聊到這里,或許有朋友要抬杠了,測(cè)試用例會(huì)重復(fù)執(zhí)行,扣款怎么會(huì)重復(fù)執(zhí)行呢?

重試。?

重試,是異常處理里很常見(jiàn)的手段。

你在寫業(yè)務(wù)的時(shí)候有沒(méi)有寫過(guò)這樣的代碼:

result = DoSomething();
if(false==result || TIMEOUT){
//錯(cuò)誤,或者超時(shí),重試一次
result= DoSomething();
}
return result;

當(dāng)然,又會(huì)有朋友抬杠了,我從來(lái)不重試!??!

畫外音:額,這是合格,還是不合格呢?

你可以決定業(yè)務(wù)代碼怎么寫,你不能決定底層框架代碼怎么寫:

  • 站點(diǎn)框架有沒(méi)有自動(dòng)重試?
  • 服務(wù)框架有沒(méi)有自動(dòng)重試?
  • 服務(wù)連接池,數(shù)據(jù)庫(kù)連接池有沒(méi)有自動(dòng)重試?

畫外音:

  • 服務(wù)化分層的架構(gòu)中,建議只入口層重試,服務(wù)層不要重試,防止雪崩;
  • dubbo底層,調(diào)用超時(shí)是默認(rèn)重試的,這個(gè)設(shè)計(jì)不好;?

因此,在有重試的架構(gòu)體系里,冪等性是需要考慮的一個(gè)問(wèn)題。

因此,扣款和充值業(yè)務(wù),一般使用:

select&set,配合CAS方案

而不使用:

set money-=X方案

問(wèn)題五:CAS方案,會(huì)不會(huì)存在ABA問(wèn)題?

什么是ABA問(wèn)題?

CAS樂(lè)觀鎖機(jī)制確實(shí)能夠提升吞吐,并保證一致性,但在極端情況下可能會(huì)出現(xiàn)ABA問(wèn)題。

考慮如下操作:

  • 并發(fā)1(上):獲取出數(shù)據(jù)的初始值是A,后續(xù)計(jì)劃實(shí)施CAS樂(lè)觀鎖,期望數(shù)據(jù)仍是A的時(shí)候,修改才能成功
  • 并發(fā)2:將數(shù)據(jù)修改成B
  • 并發(fā)3:將數(shù)據(jù)修改回A
  • 并發(fā)1(下):CAS樂(lè)觀鎖,檢測(cè)發(fā)現(xiàn)初始值還是A,進(jìn)行數(shù)據(jù)修改

上述并發(fā)環(huán)境下,并發(fā)1在修改數(shù)據(jù)時(shí),雖然還是A,但已經(jīng)不是初始條件的A了,中間發(fā)生了A變B,B又變A的變化,此A已經(jīng)非彼A,數(shù)據(jù)卻成功修改,可能導(dǎo)致錯(cuò)誤,這就是CAS引發(fā)的所謂的ABA問(wèn)題。

余額操作,出現(xiàn)ABA問(wèn)題并不會(huì)對(duì)業(yè)務(wù)產(chǎn)生影響,因?yàn)閷?duì)于“余額”屬性來(lái)說(shuō),前一個(gè)A為100余額,與后一個(gè)A為100余額,本質(zhì)是相同的。

但其他場(chǎng)景未必是這樣,舉一個(gè)堆棧操作的例子:

圖片

并發(fā)1(上):讀取棧頂?shù)脑貫椤癆1”

圖片

并發(fā)2:進(jìn)行了2次出棧

圖片

并發(fā)3:又進(jìn)行了1次出棧

并發(fā)1(下):實(shí)施CAS樂(lè)觀鎖,發(fā)現(xiàn)棧頂還是“A1”,于是修改為A2

圖片

此時(shí)會(huì)出現(xiàn)系統(tǒng)錯(cuò)誤,因?yàn)榇恕癆1”非彼“A1”

ABA問(wèn)題可以怎么優(yōu)化?

ABA問(wèn)題導(dǎo)致的原因,是CAS過(guò)程中只簡(jiǎn)單進(jìn)行了“值”的校驗(yàn),在有些情況下,“值”相同不會(huì)引入錯(cuò)誤的業(yè)務(wù)邏輯(例如余額),有些情況下,“值”雖然相同,卻已經(jīng)不是原來(lái)的數(shù)據(jù)了(例如堆棧)。

因此,CAS不能只比對(duì)“值”,還必須確保是原來(lái)的數(shù)據(jù),才能修改成功。

常見(jiàn)的實(shí)踐是,將“值”比對(duì),升級(jí)為“版本號(hào)”的比對(duì),一個(gè)數(shù)據(jù)一個(gè)版本,版本變化,即使值相同,也不應(yīng)該修改成功。

余額并發(fā)讀寫例子,引入版本號(hào)的具體實(shí)踐如下:

(1) 余額表要升級(jí)。

t_yue(uid, money)

升級(jí)為:

t_yue(uid, money, version)

(2) 查詢余額時(shí),同時(shí)查詢版本號(hào)。

SELECT money FROM t_yue WHERE sid=$sid

升級(jí)為:

SELECT money,version FROM t_yue WHERE sid=$sid

假設(shè)有并發(fā)操作,都會(huì)將版本號(hào)查詢出來(lái)

(3) 設(shè)置余額時(shí),必須版本號(hào)相同,并且版本號(hào)要修改。

舊版本“值”比對(duì):

UPDATE t_yue SET money=38 
WHERE uid=$uid AND money=100

升級(jí)為“版本號(hào)”比對(duì):

UPDATE t_yue SET money=38, version=$version_new 
WHERE uid=$uid AND version=$version_old

此時(shí)假設(shè)有并發(fā)操作,首先操作的請(qǐng)求會(huì)修改版本號(hào),并發(fā)操作會(huì)執(zhí)行失敗。

畫外音:version通用,本例是強(qiáng)行用version舉例而已,實(shí)際上本例可以用余額“值”比對(duì)。

總結(jié)?

  • select&set業(yè)務(wù)場(chǎng)景,在并發(fā)時(shí)會(huì)出現(xiàn)一致性問(wèn)題
  • 冪等性是一個(gè)需要考慮的問(wèn)題
  • 基于“值”的CAS樂(lè)觀鎖,可能導(dǎo)致ABA問(wèn)題
  • CAS樂(lè)觀鎖,必須保證修改時(shí)的“此數(shù)據(jù)”就是“彼數(shù)據(jù)”,應(yīng)該由“值”比對(duì),優(yōu)化為“版本號(hào)”比對(duì)

思路比結(jié)論重要。?

責(zé)任編輯:趙寧寧
相關(guān)推薦

2024-01-10 08:01:55

高并發(fā)場(chǎng)景悲觀鎖

2019-08-30 12:46:10

并發(fā)扣款查詢SQL

2024-12-26 15:01:29

2020-08-05 08:46:10

NFS網(wǎng)絡(luò)文件系統(tǒng)

2025-03-27 08:20:54

2023-09-07 08:11:24

Redis管道機(jī)制

2019-09-08 22:45:48

并發(fā)扣款一致性冪等性

2020-06-01 22:09:48

緩存緩存同步緩存誤用

2021-03-04 06:49:53

RocketMQ事務(wù)

2024-08-20 16:13:52

2023-05-26 07:34:50

RedisMySQL緩存

2023-12-11 12:27:31

并發(fā)Zookeeper數(shù)據(jù)

2019-09-05 08:54:38

一致性CASABA

2021-07-21 15:50:42

Serverless 業(yè)務(wù)部署

2021-12-14 07:15:57

MySQLRedis數(shù)據(jù)

2019-10-16 00:06:08

CPU內(nèi)存存儲(chǔ)

2020-04-01 15:50:17

TiDBMySQL數(shù)據(jù)庫(kù)

2024-10-28 12:41:25

2024-01-22 08:52:00

AQS雙異步數(shù)據(jù)一致性

2024-01-15 10:38:20

多級(jí)緩存數(shù)據(jù)一致性分布式緩存
點(diǎn)贊
收藏

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

女囚岛在线观看| av黄色在线看| 日韩一区免费| 五月天视频一区| 日本午夜精品电影| 国产欧美日韩成人| 性8sex亚洲区入口| 久久久国产精品视频| 美女扒开腿免费视频| 日本高清不卡一区二区三区视频 | 午夜视频成人| 成人一二三区视频| 国产欧美日韩视频| 中文字幕亚洲精品在线| 99免费精品| 精品香蕉一区二区三区| 亚洲综合伊人久久| 欧美大片高清| 亚洲一二三四在线观看| 日产精品久久久一区二区| www.国产黄色| 蜜桃av一区二区三区| 韩国国内大量揄拍精品视频| 成人免费视频入口| 亚洲ab电影| 亚洲精品一区二区在线观看| 女人高潮一级片| 欧美一级大黄| 狠狠躁夜夜躁人人爽天天天天97 | 亚洲免费黄色| 欧美大尺度激情区在线播放| 欧美 日韩 成人| 日韩高清一级| 亚洲а∨天堂久久精品9966 | 999精品视频在线观看| 大桥未久av一区二区三区| 亚洲天堂第一区| 免费大片黄在线| 欧美激情综合在线| 久久一区二区精品| 日本黄色一区二区三区| 国产黄色精品视频| 91久久久在线| 91肉色超薄丝袜脚交一区二区| 老牛嫩草一区二区三区日本| 97avcom| 久久精品这里有| 欧美特黄一区| 欧美黑人又粗大| 99精品久久久久| 911精品美国片911久久久 | 999久久久国产| 成人嘿咻视频免费看| 亚洲一区二区福利| 粉嫩精品久久99综合一区| 神马影视一区二区| 伊人久久免费视频| 狂野欧美性猛交| 91中文字幕精品永久在线| 色偷偷av一区二区三区| 亚洲精品国产精品乱码在线观看| 日韩av大片| 日韩在线欧美在线国产在线| 色婷婷国产精品免| 香蕉久久网站| 九九久久久久99精品| 麻豆chinese极品少妇| 国内一区二区三区| 91av视频在线观看| 国产91精品看黄网站在线观看| 五月婷婷激情五月| 久久久久亚洲精品中文字幕| 日韩一卡二卡三卡国产欧美| 国产精品99精品无码视亚| 亚洲一区二区三区日本久久九| 精品国产乱码久久久久久蜜臀| 国产美女视频免费观看下载软件| 外国成人在线视频| 色哟哟入口国产精品| 国产91在线播放九色| 欧美精品入口| 97碰在线观看| 这里只有精品国产| 国内精品伊人久久久久av影院| 亚洲最大福利网站| 深夜视频在线免费| 国产精品久久久久四虎| 成人黄色片免费| 亚洲黄色网址| 69堂成人精品免费视频| 欧美极品jizzhd欧美仙踪林| 中日韩免视频上线全都免费| 搡老女人一区二区三区视频tv| 欧美日韩免费做爰视频| 亚洲综合精品| 成人福利网站在线观看| 天天综合永久入口| 国产精品剧情在线亚洲| 青青草国产免费| 国产亚洲欧美日韩精品一区二区三区| 日韩一区二区三区免费观看| 免费看污黄网站在线观看| 亚洲国产一区二区三区在线播放| 97免费视频在线播放| 一区二区自拍偷拍| jlzzjlzz国产精品久久| 久久免费看毛片| 小视频免费在线观看| 欧美一级久久久| 日本欧美一区二区三区不卡视频| 亚洲一级特黄| 成人免费视频网址| 黄色在线视频观看网站| 亚洲电影第三页| 成人黄色一级大片| 精品在线99| 97欧美精品一区二区三区| 国产精品一区二区免费视频| 国产欧美精品一区二区色综合 | 日本中文字幕在线2020| 精品福利在线观看| 日韩av福利在线观看| 不卡一区2区| 天天av天天翘天天综合网色鬼国产 | 日韩国产一区| 91高清视频免费观看| 国产乱子伦精品无码码专区| 久久精品亚洲精品国产欧美kt∨ | 日本午夜精品视频| 亚洲一区二区毛片| 国产精品综合久久久久久| 麻豆视频在线免费观看| 在线亚洲高清视频| 免费在线观看你懂的| 亚洲日本成人| 成人免费在线看片| 四季久久免费一区二区三区四区| 欧美视频一区二区三区| 国精产品一区二区三区| 男女精品视频| 欧美一区二区三区在线免费观看 | 国产主播欧美精品| 成年午夜在线| 欧美天天综合网| 日韩免费成人av| 久久夜色精品| 日日骚一区二区网站| 欧美日韩123区| 亚洲欧美中文字幕| 伊人久久中文字幕| 中文字幕不卡的av| 一级黄色特级片| 国产精品99视频| 成人免费福利视频| 影院在线观看全集免费观看| 日韩你懂的电影在线观看| 懂色av懂色av粉嫩av| 国产精品乡下勾搭老头1| 欧美日韩午夜爽爽| jizz性欧美23| 97av视频在线| 电影av一区| 777亚洲妇女| 国内偷拍精品视频| 成人av资源在线| 国产日韩一区二区在线| 国内黄色精品| 成人a视频在线观看| 2024最新电影在线免费观看| 精品女同一区二区| 欧美一区二区激情视频| 久久精品日产第一区二区三区高清版 | 国产网站在线| 日韩精品999| 最新中文字幕第一页| 亚洲欧美激情在线| 亚洲无人区码一码二码三码| 一区二区激情| 亚洲国产欧洲综合997久久 | 午夜黄色福利视频| 国产成人精品www牛牛影视| 欧美黑人经典片免费观看| 三级网站视频在在线播放| 精品丝袜久久| 欧美/亚洲一区| 加勒比av一区二区| 99re在线视频观看| 春色校园综合激情亚洲| 亚洲天堂av网| 国产女人18毛片18精品| 舔着乳尖日韩一区| 呻吟揉丰满对白91乃国产区| 国产成a人亚洲| 日本黄网站免费| 婷婷成人基地| 久久99国产精品99久久| 久久精品97| 91国内在线视频| 麻豆传媒在线观看| 亚洲欧美日韩成人| 国产av无码专区亚洲a∨毛片| 欧美日韩午夜剧场| 老妇女50岁三级| 国产精品久久久久久免费播放| 国产精品色一区二区三区| 337p日本欧洲亚洲大胆张筱雨| 噜噜噜躁狠狠躁狠狠精品视频| 欧美少妇一区二区三区| 国产成人黄色| 国产尤物91| 成人动漫视频在线观看| 欧洲中文字幕国产精品| 2024短剧网剧在线观看| 少妇高潮久久77777| 五月激情婷婷网| 日韩一区二区三免费高清| 亚洲成人av网址| 精品色蜜蜜精品视频在线观看| 粉嫩av性色av蜜臀av网站| 国产欧美日韩亚州综合| 亚洲黄色免费在线观看| 国产激情91久久精品导航| 日韩欧美亚洲另类| 水野朝阳av一区二区三区| 黄网站欧美内射| 综合精品一区| 三年中国中文在线观看免费播放| 国产欧美日韩影院| 欧美精品一区在线发布| 欧美绝顶高潮抽搐喷水合集| av资源一区二区| 久久精品免视看国产成人| 国产美女被下药99| 福利精品一区| 国产精品亚洲自拍| 日韩av电影资源网| 日韩av电影院| 欧美成a人片在线观看久| 欧美一区第一页| 在线手机中文字幕| 欧美一级片在线播放| 在线观看福利电影| 91成人在线视频| а√在线中文网新版地址在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 另类视频在线| 久久全球大尺度高清视频| av在线app| 欧美激情欧美激情| 97人人爽人人澡人人精品| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美日韩在线二区| 日韩中文一区二区三区| 成人精品视频| 伊人天天久久大香线蕉av色| 欧美大人香蕉在线| 亚洲 欧洲 日韩| 欧美激情一级片一区二区| 18禁裸男晨勃露j毛免费观看| 伊人久久大香线蕉综合热线| 少妇人妻无码专区视频| 久久男女视频| 欧美三级理论片| 狠狠色丁香九九婷婷综合五月| 97超碰免费在线观看| 成人综合在线网站| 久久无码人妻精品一区二区三区 | 亚洲国模精品一区| 神马久久久久| 色99之美女主播在线视频| 亚洲国产精品精华素| 国内精品久久影院| 黄色精品视频| 91成人理论电影| 美国一区二区| 亚洲高清视频一区| 欧美激情1区| 97在线播放视频| 久久se这里有精品| 香蕉久久久久久av成人| 久久久久久免费网| 国产精品国产精品88| 香蕉av福利精品导航 | 日韩一级完整毛片| 婷婷综合激情网| 在线视频亚洲欧美| 欧美xxx黑人xxx水蜜桃| 国产精品99久久99久久久二8| 伊人久久一区| 久热这里只精品99re8久| 99久久.com| 欧美亚洲另类色图| 国产精品一卡二卡| 精品人伦一区二区| 一区二区不卡在线视频 午夜欧美不卡在| 日韩免费黄色片| 7878成人国产在线观看| 日韩欧美在线观看一区二区| 久久影院免费观看| 欧美www.| 国产欧美欧洲| 久久久久国产| 老头吃奶性行交视频| 北条麻妃国产九九精品视频| 美国精品一区二区| 日韩欧美国产黄色| 亚洲精品中文字幕成人片| 中文字幕视频在线免费欧美日韩综合在线看| 成人av黄色| 国产精品欧美久久久| 看全色黄大色大片免费久久久| 欧美h视频在线观看| 日韩成人精品视频| 欧美丰满少妇人妻精品| 亚洲精品写真福利| 中文字幕在线观看精品| 日韩高清电影一区| 国产精品12345| 国产精品一区二区男女羞羞无遮挡 | 亚洲在线观看av| 精品亚洲国产成av人片传媒| 黑人玩欧美人三根一起进| 91精品国产综合久久久久久久久| 女人丝袜激情亚洲| 成熟丰满熟妇高潮xxxxx视频| 国产高清一区日本| 亚洲av无一区二区三区| 在线亚洲人成电影网站色www| 日韩专区一区二区| 欧美一级bbbbb性bbbb喷潮片| 成人激情自拍| 日韩激情视频一区二区| 国产一区二区三区免费观看| 天堂资源在线视频| 欧美性感一类影片在线播放| 韩国福利在线| 国产精品 欧美在线| 久久av免费| 日韩一级片播放| 国产偷国产偷亚洲高清人白洁| 国产成人精品777777| 精品视频久久久久久| 手机在线观看av| 精品综合在线| 午夜亚洲性色视频| 三级电影在线看| 一本一本大道香蕉久在线精品 | 久久久一区二区三区| 国内自拍视频在线播放| 亚洲免费一级电影| 欧美成人ⅴideosxxxxx| 日本一区二区不卡高清更新| 日韩电影在线一区| 黄大色黄女片18免费| 欧美精品高清视频| av网站在线免费看推荐| 国产精品12| 国产精品久久久久久久久久妞妞| 国产精品无码网站| 欧美亚洲一区二区在线观看| 秋霞成人影院| 国产精品久久久久久久久久久久午夜片 | 亚洲天堂成人在线| 久久亚洲国产精品尤物| 国产日韩欧美大片| 99久久精品国产导航| 中文字幕免费观看| 日韩视频在线免费| 综合欧美亚洲| 久久精品.com| 《视频一区视频二区| 亚洲免费成人在线| 日本成人黄色片| 91精品国产91久久久久久密臀| 免费在线观看日韩av| 高跟丝袜一区二区三区| 午夜伦理在线| 国产精品国模大尺度私拍| 日韩专区中文字幕一区二区| 久久嫩草捆绑紧缚| 精品国产乱码久久久久久闺蜜| 欧美1级2级| 粉嫩av一区二区三区天美传媒| 91香蕉视频污| 国产乱淫a∨片免费视频| 国内精品免费午夜毛片| 日韩欧美综合| 国产肉体xxxx裸体784大胆| 欧美日韩日本视频| 1区2区3区在线| 性欧美18一19内谢| 91免费在线看| a级片在线播放| 日本高清+成人网在线观看| 国产精品久久久乱弄| 国产精品无码毛片| 欧美一区二区在线播放| 午夜欧美巨大性欧美巨大 | 老司机一区二区三区| 免费成年人视频在线观看|