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

純技術(shù)干貨分享:分布式事務(wù)處理方式總結(jié)

新聞 前端 分布式
在項目開發(fā)中,經(jīng)常會需要處理分布式事務(wù)。例如數(shù)據(jù)庫分庫分表之后,原來在一個單庫上的操作可能會跨越多個數(shù)據(jù)庫。

 在項目開發(fā)中,經(jīng)常會需要處理分布式事務(wù)。例如數(shù)據(jù)庫分庫分表之后,原來在一個單庫上的操作可能會跨越多個數(shù)據(jù)庫。系統(tǒng)服務(wù)化拆分之后,原來的在一個系統(tǒng)上的操作可能會跨越多個系統(tǒng)。就連我們平時經(jīng)常使用到的緩存(如redis、memcache等)也可能涉及分布式事務(wù),因為緩存和數(shù)據(jù)庫是兩個不同的實體,如何保證數(shù)據(jù)在緩存和數(shù)據(jù)庫間的一致性也是要重點考慮的。分布式事務(wù)就是指事務(wù)要處理的資源分別位于分布式系統(tǒng)中的不同節(jié)點之上的事務(wù)。

對于單機(jī)系統(tǒng),通常我們借助數(shù)據(jù)庫實現(xiàn)本地事務(wù),例如下面JDBC代碼實現(xiàn)了一個事務(wù):

  1. Connection con = datasource.getConnection(); 
  2. con.setAutoCommit(false); 
  3. ... 
  4. 執(zhí)行CRUD操作,可能會涉及到多個表 
  5. ... 
  6. con.commit()/con.rollback() 

由于在分布式系統(tǒng)中,多個系統(tǒng)無法共用同一個數(shù)據(jù)庫鏈接,所以無法簡單借用上面的處理方式實現(xiàn)分布式事務(wù)。

下面將介紹幾種本人在實際開發(fā)中使用過的處理分布式事務(wù)的方式,最后再引出分布式事務(wù)的相關(guān)理論并進(jìn)行總結(jié)。

避免出現(xiàn)分布式事務(wù)

由于分布式事務(wù)比較難于處理,所以應(yīng)該盡量避免分布式事務(wù)的發(fā)生。例如對于一個客戶信息系統(tǒng),由于注冊用戶數(shù)太多導(dǎo)致存儲的數(shù)據(jù)量過大,所以對其進(jìn)行分庫分表存儲。而客戶信息模型又分為多個子模型,對應(yīng)數(shù)據(jù)庫中的多個表,例如客戶基本信息表、客戶登錄賬號表、客戶登錄密碼表、客戶聯(lián)系方式表等等。假設(shè)登錄賬號表和客戶基本信息表的關(guān)聯(lián)關(guān)系如下所示:

純技術(shù)干貨分享:分布式事務(wù)處理方式總結(jié)

user_id和login_id分別是兩個表的主鍵,user_id還作為login_info表的外鍵使兩個表關(guān)聯(lián)。在用戶注冊時會自動生成user_id和login_id的值。 user_info和login_info兩個表分別采用user_id和login_id計算分庫分表規(guī)則 。假設(shè)我們對每個模型分十庫一百表存儲,即存在user_info_00 ~ user_info_99一百個表,其中user_info_00 ~ user_info_09屬于第一個庫,user_info_10 ~ user_info_19屬于第二個庫,依次類推。

在分庫分表之后,如果我們不仔細(xì)的考慮user_id和login_id的生成規(guī)則(例如隨意生成一個數(shù)字字符串或簡單使用遞增sequence),就可能導(dǎo)致同一個用戶的user_info信息和login_info信息被存儲到兩個不同的庫,這就會導(dǎo)致分布式事務(wù)發(fā)生。

面對這種問題,最好的解決思路就是考慮如何避免分布式事務(wù)的發(fā)生。只要想辦法讓跟一個用戶相關(guān)的所有模型數(shù)據(jù)全部存入到一個庫中,就可以避免分布式事務(wù)了。由于每個模型數(shù)據(jù)的分庫分表路由規(guī)則又是由各個表的主鍵id決定的(例如user_id、login_id),所以只要對各個表的主鍵生成規(guī)則進(jìn)行定制,就可以保證一個用戶的所有模型數(shù)據(jù)全部存到同一個庫。假設(shè)有下面的id生成規(guī)則:

純技術(shù)干貨分享:分布式事務(wù)處理方式總結(jié)
  • 開始的兩位是標(biāo)識模型位,例如user_id以01開頭,login_id以02開頭。
  • 接下來的11位是sequence遞增序列號,如果想要更多的ID可以擴(kuò)大這部分的位數(shù),但對于存儲用戶信息而言,11位的長度足夠。
  • 接下來是分庫分表位,如果每個模型的分庫分表算法都相同,那么只要保證每個模型的主鍵ID的分庫分表位都相同,就能保證一個用戶的所有模型數(shù)據(jù)都會存到同一個庫中。
  • 最后一位是id校驗位,這一位根據(jù)前面15位的內(nèi)容生成,方便對一個id進(jìn)行校驗。

根據(jù)這個思想,我們可以在用戶注冊的時候先生成user_id,user_id的分庫分表位可以隨機(jī)生成。然后在為其它模型生成主鍵id時(例如login_id),必須讓這個模型的主鍵id的分庫分表位與user_id的分庫分表位相同。另外一點也要注意,一個表的查詢條件不一定只有主鍵id一個,如果有其它查詢條件列,那就要保證那一列的生成規(guī)則也要包含相同的分庫分表位,否則就不能使用該列進(jìn)行查詢。

通過這種方式,就可以保證一個用戶的所有模型數(shù)據(jù)全部存儲到同一個庫中,有效的避免分布式事務(wù)的發(fā)生。

事務(wù)補(bǔ)償

通常情況下,應(yīng)對高并發(fā)的一個主要手段就是增加分布式緩存(如redis)以提高查詢性能。增加分布式緩存后系統(tǒng)查詢數(shù)據(jù)的流程如下圖:

純技術(shù)干貨分享:分布式事務(wù)處理方式總結(jié)

即先嘗試從緩存中查詢數(shù)據(jù),如果緩存命中就直接返回結(jié)果,否則嘗試從DB中查詢數(shù)據(jù)。如果查詢DB命中則將數(shù)據(jù)補(bǔ)充到緩存,以備下次查詢時可以命中緩存。

而在更新數(shù)據(jù)時,通常是先更新DB中的數(shù)據(jù),DB寫入成功后再更新緩存中的數(shù)據(jù)。那么就有一個問題, 如何保證緩存和DB間數(shù)據(jù)的一致性? 由于緩存和DB是兩個不同的實體,寫入DB成功后再去更新緩存,如果緩存更新失敗(例如網(wǎng)絡(luò)抖動造成短暫的緩存不可用)就會造成緩存和DB的不一致。此時按照上圖的查詢邏輯,先查緩存就會查詢到“臟”的數(shù)據(jù),就會嚴(yán)重影響業(yè)務(wù)。這也是一個典型的分布式事務(wù)問題——緩存和DB要嘛同時更新成功,要嘛同時更新失敗。解決這個問題的一個較好方式就是事務(wù)補(bǔ)償。

我們可以在DB中創(chuàng)建一張事務(wù)補(bǔ)償表transaction_log,transaction_log表可以和業(yè)務(wù)數(shù)據(jù)在一個庫中,也可以在不同的庫。在更新數(shù)據(jù)前,先將要更新的模型數(shù)據(jù)記錄到transaction_log中。例如我們更新user_info表中的數(shù)據(jù),就將userId記錄到transaction_log中。

transaction_log記錄成功后,再去更新業(yè)務(wù)數(shù)據(jù)表user_info中的內(nèi)容,最后更新緩存中的userInfo數(shù)據(jù)。緩存更新成功后,就可以刪除transaction_log表中對應(yīng)的記錄。

假設(shè)在更新完user_info表之后,由于網(wǎng)絡(luò)抖動等原因?qū)е戮彺娓率。瑒ttransaction_log表中對應(yīng)的記錄就會一直存在,表示這個事務(wù)沒有完成的一種記錄。

應(yīng)用會創(chuàng)建一個定時任務(wù),周期性的掃描transaction_log表中的記錄(例如每隔2S掃描一次)。發(fā)現(xiàn)有符合條件的記錄,就嘗試執(zhí)行補(bǔ)償邏輯。例如更新用戶信息時,DB中的user_info表更新成功,但緩存更新失敗,定時任務(wù)發(fā)現(xiàn)transaction_log表中對應(yīng)的記錄沒有刪除且已經(jīng)超過正常等待時間,就嘗試使緩存和DB一致(可以刪除緩存中對應(yīng)的數(shù)據(jù),也可以根據(jù)userId重新查詢DB再補(bǔ)充的緩存)。補(bǔ)償任務(wù)執(zhí)行完成后,就可以刪除transaction_log表中對應(yīng)的記錄。如果補(bǔ)償任務(wù)執(zhí)行再次失敗,就保留transaction_log表中的記錄,等待下個周期再次執(zhí)行。

事務(wù)補(bǔ)償這種方式保證的是事務(wù)的最終一致性,即如果發(fā)生意外,會存在一個時間窗口(例如2S),在這個窗口內(nèi)DB和緩存間是不一致的,但能保證最終兩者的數(shù)據(jù)是一致的。至于定時任務(wù)周期的設(shè)定,要結(jié)合業(yè)務(wù)對“臟”數(shù)據(jù)的敏感程度以及系統(tǒng)的負(fù)載。

事務(wù)型消息

對于一個金融系統(tǒng),假設(shè)有一個需求是用戶注冊成功后自動為用戶創(chuàng)建一個賬戶。客戶的信息維護(hù)在客戶中心系統(tǒng),客戶的賬戶信息維護(hù)的賬務(wù)中心系統(tǒng),如果用戶注冊成功,必須保證客戶的賬戶在賬務(wù)系統(tǒng)創(chuàng)建成功。這顯然也是一個分布式事務(wù)問題。

處理這個問題,顯然也可以采用上一小節(jié)介紹的事務(wù)補(bǔ)償機(jī)制來處理。但注冊和開戶并不要求一定是同步完成,且需要感知用戶注冊成功事件的系統(tǒng)并不只有賬務(wù)系統(tǒng)一個(例如營銷系統(tǒng)可能也需要感知用戶注冊成功的事件,給用戶發(fā)優(yōu)惠券),所以使用消息機(jī)制異步通知更加合適。那么問題就變成了“如果用戶注冊成功,一定要保證消息發(fā)送成功”。

應(yīng)對這種場景,可以使用事務(wù)型消息。但前提條件是使用的MQ中間件必須支持事務(wù)型消息,比如阿里的RocketMQ。目前市面上其它一些主流的MQ中間件都不支持事務(wù)型消息,比如Kafka和RabbitMQ都不支持。

下面的序列圖是事務(wù)型消息的執(zhí)行流程:

純技術(shù)干貨分享:分布式事務(wù)處理方式總結(jié)
  • 相比于普通消息,發(fā)布者發(fā)送消息后,MQ并不是馬上將消息發(fā)送給訂閱者,而僅僅是將消息持久化存儲下來。
  • 發(fā)送消息成功之后,發(fā)布者執(zhí)行本地事務(wù)。例如我們例子中提到的用戶注冊。
  • 根據(jù)本地事務(wù)執(zhí)行是否成功,發(fā)布者決定對之前已經(jīng)發(fā)送的消息是commit還是rollback。如果是rollback,MQ會刪除之前存儲的消息。假設(shè)我們這里發(fā)送commit。
  • MQ接收到發(fā)布者發(fā)送的commit后,才會將消息發(fā)送給訂閱者。之后,就可以利用MQ的消息可靠傳輸特性促使訂閱者完成剩余事務(wù)操作,例如上面例子中提到的開戶操作。

細(xì)心的小伙伴會發(fā)現(xiàn),如果在上圖中的第5步發(fā)生問題導(dǎo)致發(fā)送commit失敗,不還是會導(dǎo)致消息發(fā)布者和消息訂閱者間事務(wù)的不一致嗎?為了防止這種情況的發(fā)生,增加MQ超時回調(diào)機(jī)制。

下面的序列圖是事務(wù)型消息commit失敗時的執(zhí)行流程:

純技術(shù)干貨分享:分布式事務(wù)處理方式總結(jié)

當(dāng)MQ長時間收不到發(fā)布者的commit/rollback通知時,MQ會回調(diào)發(fā)布者應(yīng)用詢問本地事務(wù)是否執(zhí)行成功,是commit還是rollback之前的消息。發(fā)布者需要提供對應(yīng)的callback,在callback中判斷本地事務(wù)是否執(zhí)行成功。

TCC兩階段提交

在某些場景下,一個分布式事務(wù)可能會涉及到多個參與者,且每個參與者需要根據(jù)自己當(dāng)時的狀態(tài)對事務(wù)進(jìn)行響應(yīng)。

假設(shè)這樣一個場景,一個電商網(wǎng)站可以允許用戶在支付時選擇多種支付方式。例如總共需要支付100元錢,用戶可以選擇積分支付10元,賬戶余額支付90元。用戶的積分由營銷系統(tǒng)負(fù)責(zé),賬戶余額由賬務(wù)系統(tǒng)負(fù)責(zé),訂單的狀態(tài)管理由訂單系統(tǒng)負(fù)責(zé)。

  • 首先,要先確保事務(wù)的各個參與者滿足條件才能執(zhí)行事務(wù)。例如積分系統(tǒng)要確保用戶的積分超過10元錢,賬務(wù)系統(tǒng)要確保用戶的賬戶余額大于90元錢才能發(fā)起這次交易。
  • 其次,就是要滿足事務(wù)的原子性。這里的用戶積分、用戶余額、訂單狀態(tài),要嘛全部處理成功,要嘛全部保持不變。

應(yīng)對這種分布式事務(wù)場景,可以采用TCC兩階段提交的方式進(jìn)行處理。

TCC將整個事務(wù)分成兩個階段——try和commit/cancel。TCC整個流程具有三種角色——事務(wù)發(fā)起者、事務(wù)參與者、事務(wù)協(xié)調(diào)者。以上面的訂單支付為例,采用TCC實現(xiàn)處理事務(wù)的流程如下:

純技術(shù)干貨分享:分布式事務(wù)處理方式總結(jié)
  • 第一階段try,訂單系統(tǒng)分別調(diào)用promotion和account兩個系統(tǒng),詢問該用戶是否有足夠的積分和賬戶余額。為了防止資源爭搶,在這個階段會對資源進(jìn)行鎖定,即營銷系統(tǒng)會鎖住用戶的10元積分,賬務(wù)系統(tǒng)會鎖住用戶的90元賬戶余額。
  • 如果在try階段有任何一個參與者處理失敗(例如用戶積分不夠10元或者用戶的余額不夠90元),則事務(wù)發(fā)起方(訂單系統(tǒng))會通知事務(wù)協(xié)調(diào)組件,后者會通知所有的事務(wù)參與者cancel在try階段鎖定的資源。
  • 如果在try階段所有的參與者都處理成功,則事務(wù)發(fā)起方通知協(xié)調(diào)者commit這個事務(wù),協(xié)調(diào)者會通知所有的參與者完成事務(wù)的commit。這時系統(tǒng)會完成真正的余額和積分扣減。2.2步是假設(shè)訂單系統(tǒng)也要更新訂單的狀態(tài)。

但僅是這樣處理還是有一致性問題,例如在第二階段commit時如果發(fā)生宕機(jī)、網(wǎng)絡(luò)抖動等異常情況,就可能導(dǎo)致事務(wù)處于“非最終一致”狀態(tài)(參與者只執(zhí)行了try階段,沒有執(zhí)行第二階段。或部分參與者第二階段commit成功,部分參與者commit失敗)。為了應(yīng)對這種情況,需要增加事務(wù)日志,以便發(fā)生異常時回復(fù)事務(wù)。

可以利用DB這種可靠存儲來記錄事務(wù)日志。日志中應(yīng)包含事務(wù)執(zhí)行過程中的上下文、事務(wù)執(zhí)行狀態(tài)、事務(wù)的參與者等信息。事務(wù)日志可以由事務(wù)發(fā)起發(fā)負(fù)責(zé)記錄,也可以交由事務(wù)協(xié)調(diào)方進(jìn)行記錄。

事務(wù)日志可以由主事務(wù)記錄日志和從事務(wù)記錄日志組成:

  • 主事務(wù)記錄日志 用于記錄事務(wù)發(fā)起方信息以及事務(wù)執(zhí)行的整體狀態(tài)。
  • 從事務(wù)記錄日志 用于記錄所有的事務(wù)參與者信息,以及每個參與者所屬的從事務(wù)的執(zhí)行狀態(tài)。與主事務(wù)記錄日志是一對多的關(guān)系。

有了事務(wù)日志后,就可以周期性的不斷掃描事務(wù)日志,找到異常中斷的事務(wù)。根據(jù)事務(wù)日志中記錄的信息,推動剩余的參與者commit或者cancel,以便使整個分布式事務(wù)達(dá)到“最終一致性”。

下面是commit階段發(fā)生異常時的事務(wù)補(bǔ)償邏輯:

純技術(shù)干貨分享:分布式事務(wù)處理方式總結(jié)

TCC兩階段提交的實現(xiàn)需要注意如下事項:

  1. 事務(wù)中的任何一個參與者都要確保在try階段操作成功,在第二階段就一定能commit成功。
  2. 參與者在實現(xiàn)commit和cancel接口時要考慮冪等,對重復(fù)的commit/cancel請求要能夠正確處理。
  3. 業(yè)務(wù)上要考慮對兩階段中間狀態(tài)(一階段已完成,二階段未開始)的處理。一般可以通過一些特殊文案,比如顯示當(dāng)前被凍結(jié)的賬戶余額。
  4. 對于狀態(tài)型數(shù)據(jù),當(dāng)多個事務(wù)共同操作同一個資源時,要確保資源隔離。例如賬戶余額,確保不同的事務(wù)操作的金額是隔離的,彼此互不影響。
  5. 由于網(wǎng)絡(luò)丟包、亂序等因素的影響,可能會導(dǎo)致參與者接收到一階段try請求后,永遠(yuǎn)收不到commit/cancel請求,導(dǎo)致參與者的資源一直被鎖定,永遠(yuǎn)不會被釋放,這種情況叫做事務(wù)懸掛。為了防止事務(wù)懸掛的發(fā)生,可以在第一階段try成功后,指定一個最大等待時間。超過這個最大等待時間就自動釋放被鎖定的資源。

總結(jié)

傳統(tǒng)的單機(jī)事務(wù)應(yīng)滿足A(原子性)、C(一致性)、I(隔離型)、D(持久性)四個特性,屬于剛性事務(wù)。由于分布式系統(tǒng)具有多個節(jié)點的特點,要求完全滿足ACID這四個規(guī)范會非常的困難。所以就誕生了柔性事務(wù)BASE理論(Basic availability、Soft state、Eventual consistency)。

相比于單機(jī)事務(wù),分布式事務(wù)在A和D上仍能夠嚴(yán)格保證,但在C和I上就要有一定程度的限制放寬(允許看到中間狀態(tài)數(shù)據(jù)、最終一致性)。

責(zé)任編輯:張燕妮 來源: 今日頭條
相關(guān)推薦

2014-01-22 13:37:53

2022-06-13 10:42:21

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

2014-02-11 09:07:31

2015-03-16 14:38:16

大數(shù)據(jù)存儲分布式系統(tǒng)事務(wù)處理

2009-02-05 11:39:41

Oracle甲骨文Tuxedo

2015-03-18 09:33:41

大數(shù)據(jù)分布式系統(tǒng)事務(wù)處理

2021-09-03 10:37:35

分布式事務(wù)處理

2019-11-18 10:19:02

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

2023-12-29 08:14:41

BASE事務(wù)ServiceB

2023-08-16 11:43:57

數(shù)據(jù)引擎

2023-12-07 08:37:49

TCC模式

2009-07-15 17:41:55

iBATIS事務(wù)處理

2011-04-27 15:55:16

2017-04-10 13:30:47

Redis數(shù)據(jù)庫命令

2011-05-18 08:34:45

javaJDBC

2009-06-16 11:42:00

JDBC事務(wù)處理JavaBean

2023-11-01 10:11:00

Java分布式

2009-07-09 18:15:42

JDBC事務(wù)處理

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2009-09-14 19:55:03

LINQ事務(wù)處理
點贊
收藏

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

久久精品99国产精品酒店日本| 一区二区免费在线| 国产精品久久久久久久久久东京| 亚洲欧美综合7777色婷婷| 亚洲人成777| 亚洲成人精品一区二区| 色噜噜狠狠一区二区三区| 国产精品一品二区三区的使用体验| 亚洲国产1区| 一本一本久久a久久精品牛牛影视| 911福利视频| 日本黄色免费在线| 日韩码欧中文字| 精品国产91亚洲一区二区三区www 精品国产_亚洲人成在线 | 极品在线视频| 中文字幕不卡在线观看| 国产一区二区三区无遮挡| 中文字幕免费视频观看| 欧美日韩三区| 日韩资源在线观看| 老鸭窝一区二区| 日韩一区二区三区在线看| 在线视频中文字幕一区二区| 搞av.com| 伊人在我在线看导航| 国产嫩草影院久久久久| 国产日韩欧美亚洲一区| 国产又爽又黄免费软件| 久久影院亚洲| 97超级碰碰碰久久久| 欧美黑人性猛交xxx| 国产一区二区三区四区| 日韩精品免费视频| 亚洲欧美激情一区二区三区| 久久精品国产福利| 色婷婷亚洲婷婷| 成人免费观看cn| 999精品网| 夜夜夜精品看看| 99热一区二区三区| 在线观看麻豆蜜桃| 国产免费成人在线视频| 欧美亚洲免费高清在线观看| 蜜桃91麻豆精品一二三区 | 少妇性l交大片7724com| 国产精品久久久久久久久久齐齐| 欧美视频精品一区| 青青艹视频在线| 国产福利片在线观看| 亚洲曰韩产成在线| 欧美大黑帍在线播放| 直接在线观看的三级网址| 最新不卡av在线| 在线亚洲美日韩| 国产视频一区二区| 亚洲美女精品一区| 妞干网在线播放| 久操av在线| 欧美日韩国产色视频| 日韩av新片网| 亚洲精品mv| 91国偷自产一区二区使用方法| 日韩a在线播放| 欧美日韩五码| 欧美日韩综合在线| 亚洲欧美天堂在线| aaa国产精品视频| 日韩大陆毛片av| 国产精品久久久久无码av色戒| 国产亚洲一区| 俺去亚洲欧洲欧美日韩| 放荡的美妇在线播放| 激情欧美亚洲| 欧美资源在线观看| 一区二区视频网站| 国产麻豆视频一区| 国产亚洲精品久久飘花| 男人的天堂av高清在线| 国产精品乱码一区二三区小蝌蚪| 国产精品夜夜夜爽张柏芝| 成人短视频在线| 亚洲福利一二三区| 日本va中文字幕| www.成人在线.com| 亚洲精品720p| av在线播放中文字幕| 一区二区三区毛片免费| 国模精品一区二区三区色天香| 日本中文字幕在线| 精品一区二区三区香蕉蜜桃| 国产乱人伦精品一区二区| 日本一区二区三区在线观看视频| 国产精品沙发午睡系列990531| 黄色特一级视频| 欧美日韩五区| 亚洲成色777777女色窝| www久久久久久久| 欧美国产先锋| 国产精品高清在线| 亚洲国产精品久久久久爰性色| 久久久精品免费网站| 乱子伦一区二区| 欧美大片免费高清观看| 欧美一区二区三区婷婷月色| 午夜理伦三级做爰电影| 正在播放日韩欧美一页| 日韩美女在线观看| 北条麻妃一二三区| 国产精品久久毛片a| 少妇高潮喷水在线观看| gogo大尺度成人免费视频| 亚洲人成电影在线播放| 国产亚洲成人精品| 久久99蜜桃精品| 日本不卡二区| 亚洲天堂av在线| 日韩精品中午字幕| 懂色av粉嫩av蜜臀av一区二区三区| 99国内精品| 超碰97人人在线| 黄色一级大片在线免费看产| 在线欧美小视频| 国产 中文 字幕 日韩 在线| 欧美日韩国产在线一区| 国产欧美在线视频| 国内三级在线观看| 亚洲va欧美va人人爽午夜| 日韩欧美理论片| 久久一区二区三区喷水| 国产精品白丝jk喷水视频一区| 欧美一级特黄aaaaaa大片在线观看 | 影音先锋中文字幕一区| 91网站免费观看| 日本中文在线观看| 欧美日韩一二三区| 欧美人与禽zoz0善交| 日韩国产精品久久久久久亚洲| 狠狠久久综合婷婷不卡| 超碰高清在线| 亚洲激情成人网| 亚洲国产精品午夜在线观看| 粉嫩av一区二区三区粉嫩 | 翔田千里一区二区| 久草一区二区| 人成在线免费网站| 亚洲精品综合久久中文字幕| 中文字幕亚洲精品在线| 成人激情小说网站| 久久久久久免费看| 老牛国内精品亚洲成av人片| 97国产精品视频| 五十路在线视频| 一本大道久久a久久精品综合| 97人妻天天摸天天爽天天| 9色精品在线| 蜜桃av噜噜一区二区三| 欧美日韩精品免费观看视完整| 亚洲欧美国产精品| 成人一二三四区| 国产精品免费aⅴ片在线观看| 杨幂毛片午夜性生毛片| 91影院成人| 风间由美久久久| 欧美gv在线观看| 亚洲日本中文字幕| 最近中文字幕免费观看| 亚洲欧洲另类国产综合| 韩国三级在线播放| 99在线|亚洲一区二区| 美乳视频一区二区| 先锋影音网一区二区| 欧美激情区在线播放| 天堂中文在线资源| 欧美影院一区二区三区| 乱h高h女3p含苞待放| 99久久伊人网影院| 日本va中文字幕| 亚洲一本二本| 精品国产综合久久| www.久久| 欧美精品久久久久久久| 青青草免费观看免费视频在线| 欧美日韩一区二区三区在线| 国精品无码一区二区三区| 波波电影院一区二区三区| 成年人在线观看视频免费| 中文字幕一区二区av| 九色视频成人porny| 婷婷久久综合九色综合99蜜桃| 性欧美在线看片a免费观看 | 中文一区二区在线观看| 三上悠亚 电影| 久久蜜桃精品| 亚洲一区 在线播放| 九一成人免费视频| 999视频在线免费观看| 精品免费av在线 | 亚洲欧美电影在线观看| 狠狠一区二区三区| 91精品国产综合久久香蕉| 日本少妇在线观看| 国产成人综合欧美精品久久| 国产深喉视频一区二区| 一区二区三区视频网站| 日本在线影院| 日本精品不卡| av成人黄色| 久久精品日产第一区二区三区乱码 | 99精品国产一区二区三区2021| 青青久久aⅴ北条麻妃| www欧美com| 少妇精品视频一区二区| 亚洲电影一区二区| 国产免费一区二区三区四区| 久久久久久久久久电影| 成人区人妻精品一区二| 国产在线视频一区二区| 精品999在线| 香蕉国产精品偷在线观看不卡| 老司机激情视频| 婷婷成人基地| 深夜福利成人| 国产精品一区二区av日韩在线| 国产欧美日韩一区| 日韩欧美一级| 91麻豆精品秘密入口| 二区三区精品| 国产美女高潮久久白浆| 国产亚洲一区二区手机在线观看 | 免费污污视频在线观看| 亚洲大型综合色站| 久久久精品国产sm调教| 自拍偷拍国产亚洲| 欧美a级片免费看| 国产精品无圣光一区二区| 午夜精产品一区二区在线观看的| 91丨porny丨蝌蚪视频| 99精品一区二区三区无码吞精| 成人一二三区视频| 亚洲精品在线观看免费| 看看黄色一级片| 日韩欧美视频免费观看| 大桥未久恸哭の女教师| 日本爱爱爱视频| 全部免费毛片在线播放一个| 男人亚洲天堂| 日韩国产精品久久久久久亚洲| 天天色 色综合| 色偷偷偷亚洲综合网另类| 91免费看网站| 亚洲成年人专区| 青草影院在线观看| 99久久精品国产网站| 稀缺小u女呦精品呦| 日韩伦理一区二区| 久久精品91久久香蕉加勒比 | 亚洲国产精品yw在线观看| 老司机午夜福利视频| 亚洲国产一区二区三区在线观看 | 欧美一级片免费在线观看| 精品欧美激情精品一区| 欧美 日韩 精品| 欧美又粗又大又爽| 国产毛片在线视频| 亚洲精品一线二线三线| 水莓100在线视频| 国产小视频91| www在线视频| 国内精品视频久久| 亚洲成人短视频| 国产中文字幕91| 综合成人在线| 欧美日韩国产三区| 婷婷综合久久| 777777av| 美女视频黄频大全不卡视频在线播放| 天天影视色综合| 不卡电影一区二区三区| 国产精品久久久久无码av色戒| 亚洲欧洲精品一区二区三区| 久久久久99精品| 在线中文字幕不卡| 国产av无码专区亚洲av麻豆| 亚洲电影在线观看| 天天影视久久综合| 久久久久亚洲精品成人网小说| 欧美日韩电影免费看| 亚洲最大的免费| 免费一区二区三区视频导航| 艳母动漫在线免费观看| 国产午夜精品一区二区三区欧美 | 毛片在线免费视频| 欧美人体做爰大胆视频| 全部免费毛片在线播放一个| 在线精品91av| 黄色视屏在线免费观看| 91精品国产综合久久香蕉最新版 | 日韩有码在线视频| rebdb初裸写真在线观看| 国产精品一区二区久久久 | 午夜欧美一区二区三区免费观看| 欧美视频在线观看| 日本激情视频在线播放| 99久久99久久精品免费观看| 亚洲色偷偷综合亚洲av伊人| 欧美日韩国产中文字幕| 国产激情无套内精对白视频| 亚洲最新在线视频| 阿v视频在线| 91香蕉视频在线下载| 久久一区二区三区喷水| 国产裸体舞一区二区三区| 国产成a人亚洲精| 色欲一区二区三区精品a片| 色综合久久综合中文综合网| 丰满肉嫩西川结衣av| 久久精品国产欧美亚洲人人爽| 午夜无码国产理论在线| 精品国产一区二区三区麻豆免费观看完整版 | 亚洲欧美激情国产综合久久久| 在线性视频日韩欧美| 中文在线а√天堂| 国产亚洲二区| 精品福利电影| 久久久久久国产精品日本| 中文字幕亚洲区| 波多野结衣一二区| 亚洲天堂av电影| 高潮一区二区| 久久久福利视频| 在线亚洲自拍| 国产中文字幕一区二区| 亚洲国产精品人人做人人爽| www.av网站| 久久99热这里只有精品国产 | 精品无人乱码一区二区三区的优势| 欧美搞黄网站| 在线观看网站黄| 亚洲精品成人精品456| 国产福利第一视频| 蜜月aⅴ免费一区二区三区| 成人黄色理论片| 欧美一级黄色录像片| 国产在线视视频有精品| 国精品无码一区二区三区| 91麻豆精品国产自产在线观看一区 | 久久久久久麻豆| 中文字幕高清在线免费播放| 亚洲美女免费精品视频在线观看| 26uuu亚洲电影| 日韩久久在线| 免费观看在线综合| 久草福利资源在线| 91精品国产综合久久久蜜臀粉嫩| 国产一二区在线| 国产精品二区在线观看| 亚洲二区在线| 国产亚洲精品熟女国产成人| 在线精品视频小说1| 香蕉视频在线免费看| 亚洲自拍偷拍色图| 一区在线观看| 精品人妻少妇嫩草av无码| 在线日韩av片| a视频在线播放| 韩日午夜在线资源一区二区| 免费中文字幕日韩欧美| 亚洲一级黄色录像| 91麻豆精品国产91久久久更新时间| av在线免费观看网址| 国产日本一区二区三区| 天堂在线一区二区| 免费黄色激情视频| 亚洲精品在线观看网站| 日本在线视频一区二区| 亚洲精品无人区| 国产电影精品久久禁18| 中文字幕精品无码一区二区| 久久激情视频久久| 秋霞蜜臀av久久电影网免费| 国产wwwxx| 亚洲国产精品久久不卡毛片 | 日本一区二区三区高清不卡| 91在线公开视频| 性欧美激情精品| 欧美xxxx中国| 日韩成人av一区二区| 欧美日韩高清一区二区| av资源在线播放| 亚洲伊人婷婷| 97精品国产露脸对白| 在线视频 91| 98精品在线视频| 99久精品视频在线观看视频| 亚洲婷婷在线观看| 欧美精品丝袜久久久中文字幕| av中文资源在线资源免费观看| 亚洲欧洲中文| 99久久99久久精品免费观看| 国产精品人人妻人人爽|