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

DDIA:消息系統(tǒng)—生產(chǎn)者和消費者的游戲?

開發(fā) 項目管理
即使消息代理試圖以順序的方式給消費者發(fā)送消息(JMS 和 AMQP 都有此類規(guī)定),但由于負載均衡和重傳機制的組合,亂序消費難以避免。為了避免這個問題,你可以讓每個消費者使用單獨的隊列(即,不用負載均衡功能,也可以理解,畢竟并行總是有代價的)。

在第十章的時候,我們討論了批處理——它總是讀取一些文件作為輸入,產(chǎn)生一些新文件作為輸出。這里的輸出就是一種“衍生數(shù)據(jù)”:即,如果有需要,我們可以通過再跑一遍批處理任務(wù)獲取相同的結(jié)果集。從之前章節(jié)的討論我們可以看出,這種思想簡單卻強大:像搜索引擎、推薦系統(tǒng)、分析系統(tǒng)等很多現(xiàn)代常見的數(shù)據(jù)系統(tǒng)都是基于這種思想構(gòu)建的。

然而,在第十章進行討論時我們有一個很強的假設(shè):輸入數(shù)據(jù)集是有界的——即事先知道輸入尺寸——因此批處理的程序知道輸入何時結(jié)束。舉個例子,MapReduce 中非常重要的排序操作,就必須讀入所有待排序的輸入數(shù)據(jù)后才能開始排序并輸出。這是因為,最后一條數(shù)據(jù),沒準可能是被需要排在最前面(具有最小的 key),因此不可能過早對數(shù)據(jù)排序。

但在現(xiàn)實中,很多數(shù)據(jù)都是無界的且隨著時間持續(xù)到來的:我們的(各種服務(wù)的)用戶昨天會產(chǎn)生數(shù)據(jù)、今天會產(chǎn)生數(shù)據(jù),明天也將以同樣的方式繼續(xù)產(chǎn)生數(shù)據(jù)。除非你關(guān)門大吉,否則這些程序?qū)罒o休止地工作,因此我們的數(shù)據(jù)庫永遠也不會到達一個“終態(tài)”(complete state)。因此,如果使用批處理的思想來處理這種持續(xù)來到的數(shù)據(jù)流,就會引出一個數(shù)據(jù)集切分的問題:例如,在一天結(jié)束時處理這一整天的數(shù)據(jù)、在每小時結(jié)束時處理這一小時的數(shù)據(jù)等等。

但上述切分+批處理的方式有個問題:太慢了,用戶可能等不及。比如按天處理時,則其處理結(jié)果只有當這一天結(jié)束后,再花些時間去批處理,才能最終看到結(jié)果。為了降低這個延遲,我們確實可以用更小的粒度進行處理——比如,每秒進行一次處理。甚而,干脆拋棄時間分片的概念,任意數(shù)據(jù)到來的時候就觸發(fā)數(shù)據(jù)處理邏輯。這就是流式處理(steam processing)背后的基本思想。

通常來說,一個“流”(steam)指的是隨時間推移而增量產(chǎn)生的數(shù)據(jù)。這個概念其實很多地方都有:Unix 中標準輸入輸出中(stdin、stdout),編程語言中(迭代器),文件系統(tǒng)相關(guān)的 API 中(如 Java 的 FileInputStream),TCP 連接中,網(wǎng)絡(luò)中傳輸?shù)囊粢曨l等等。

在本章中,我們會將事件流(event stream)當做一種數(shù)據(jù)管理機制:即將我們上一章討論的批量數(shù)據(jù)無界化、增量化。我們首先會討論如何表示、存儲和傳輸數(shù)據(jù)流。在“數(shù)據(jù)庫和數(shù)據(jù)流”一節(jié)中,我們會探索數(shù)據(jù)流和數(shù)據(jù)庫的管理。最后,在“處理數(shù)據(jù)流”一節(jié)中,我們將會討論對這些不間斷的數(shù)據(jù)流進行處理的方法和工具,以及基于其構(gòu)建應(yīng)用的一些方法。

事件流的傳輸

在批處理系統(tǒng)中,任務(wù)的輸入和輸出都是文件(可能是單機文件系統(tǒng)中的、也可能是分布式文件系統(tǒng)中的),那么在流式系統(tǒng)中,承載輸入和輸出的是什么呢?

在批處理系統(tǒng)中,雖然輸入是文件,但第一步也通常是解析成一系列的數(shù)據(jù)記錄(records)。在流式處理的上下中,對應(yīng)數(shù)據(jù)記錄的實體通常被稱為事件(event)。但他們本質(zhì)上都是一個東西:一段小的、自包含的(self-contained、不引用其他數(shù)據(jù))、不可變的某個時間點發(fā)生的信息數(shù)據(jù)。流式系統(tǒng)中的一個事件通常會包含一個時間戳,來標志該事件在某個時鐘系統(tǒng)(time-of-day clock)中發(fā)生的時間點。

下面舉幾個事件的例子。事件可以是由用戶活動產(chǎn)生的,如瀏覽網(wǎng)頁、網(wǎng)上購物;也可以由機器產(chǎn)生,如周期性的溫度傳感器、CPU 利用率指標;在使用Unix工具進行批處理一節(jié)的例子中,我們提到的 web 服務(wù)器中的每一行日志,也是一個事件。

我們在第四章中討論過數(shù)據(jù)編碼的事情。事件本質(zhì)上也是數(shù)據(jù),因此可以被編碼為字符串、JSON 或者二進制形式。只有編碼之后,事件才能被存儲,如:

  1. 追加到文件末尾
  2. 插入到關(guān)系表中
  3. 寫到文檔數(shù)據(jù)庫里

也只有在編碼之后,事件才能夠在網(wǎng)絡(luò)中進行傳輸,以發(fā)送到其他工作節(jié)點進行處理。

在批處理系統(tǒng)中,一個文件通常是一次寫多次讀的。類似的,在流式處理系統(tǒng)中,一個事件在被生產(chǎn)者(producer,在不同系統(tǒng)中,也可以稱為 publisher 或者 sender)生成之后,可能會被多個感興趣的消費者(consumer,對應(yīng)的,也可以稱為 subscribers 和 recipients)處理。在文件系統(tǒng)中,文件名可以標識一組數(shù)據(jù)記錄;在流式系統(tǒng)中,相關(guān)的事件通常會聚攏到主題(topic)下或者流(stream)中。換句話說,命名后的流類似于文件,但不同的是,流中的是無界數(shù)據(jù)。

原則上,使用文件或者數(shù)據(jù)庫也足夠用以溝通生產(chǎn)者和消費者:

  1. 生產(chǎn)者將每個產(chǎn)生的事件寫入數(shù)據(jù)存儲(date store)中(文件系統(tǒng)或者數(shù)據(jù)庫)
  2. 消費者定期的去從數(shù)據(jù)系統(tǒng)中拉取,并和上次拉取比對,看是否有新事件到來

批處理系統(tǒng)在以天為粒度處理數(shù)據(jù)時,正是用的這種辦法。

但是,在放到低延遲的持續(xù)數(shù)據(jù)流的上下文中時,如果存儲系統(tǒng)不是專門為此定制的,定時去拉取(polling)數(shù)據(jù)的代價會變得很高。且,在數(shù)據(jù)量一定的情況下,你拉取的頻次越高,單次拉到新數(shù)據(jù)的概率就越低,則無效負載也會隨之升高。因此,在流式系統(tǒng)中,當有新事件產(chǎn)生時,按需通知消費者會比頻發(fā)拉取更高效(即推比拉高效)。

傳統(tǒng)上,數(shù)據(jù)庫對于這種通知機制支持的并不是很好:雖然關(guān)系型數(shù)據(jù)中的確有觸發(fā)器(triggers),且可以對數(shù)據(jù)表中的一些事件(如,新插入一行)做出響應(yīng),但響應(yīng)邏輯中能做的很有限(比如做一致性檢查),且通常局限在數(shù)據(jù)庫內(nèi)部(而不能通知到客戶端)。為此,一些專用的工具被開發(fā)出來以進行專門的事件通知。

消息系統(tǒng)

通知消費者有新事件產(chǎn)生的一個常見方法是消息系統(tǒng)(messaging system):生產(chǎn)者將事件以消息的形式發(fā)送到消息系統(tǒng),消息系統(tǒng)將其推送給消費者。我們在經(jīng)由消息傳遞的數(shù)據(jù)流一節(jié)簡單提過消息系統(tǒng),本節(jié)我們將會討論更多細節(jié)。

實現(xiàn)消息系統(tǒng)最簡單的方式,就是使用 Unix 管道或者 TCP連接來溝通生產(chǎn)者和消費者。但大部分消息系統(tǒng)不會如此簡單。比如,Unix 管道和 TCP 連接都是一對一的發(fā)送者和接受者,但成熟的消息系統(tǒng)通常要支持多對多的生產(chǎn)消費——即多個生產(chǎn)者可以將數(shù)據(jù)發(fā)送到一個主題( topic )下,多個消費者可以共通消費這個 topic。

但在這種發(fā)布/訂閱(publish/subscribe)模式之下,不同具體的系統(tǒng)實現(xiàn)方式千差萬別。沒有一種方案能滿足所有需求。為了理解不同系統(tǒng)的實現(xiàn),我們可以帶著兩個問題去考察各個系統(tǒng):

  1. 如果生產(chǎn)者的生產(chǎn)速度快于消費者的消費速度會發(fā)生什么?通常來說,有三種選擇:丟掉部分消息、緩存多余消息、背壓阻止新消息(backpressure,也被稱為流控,即在消費者處理完之前,阻止生產(chǎn)者產(chǎn)生更多數(shù)據(jù))。具體來說,Unix 管道和 TCP 都使用背壓的方式:他們都有一個很小的緩沖區(qū)(Buffer),如果緩沖區(qū)被填滿,則發(fā)送方阻塞直到接收方消費掉緩沖區(qū)中一些消息,以空出新的位置。如果使用隊列緩沖消息,則需要了解當數(shù)據(jù)量增大到一定地步之后該怎么辦?當內(nèi)存裝不下數(shù)據(jù)之后是宕機還是刷到硬盤上?如果刷到硬盤上,硬盤的訪問將如何影響消息系統(tǒng)的性能?
  2. 當系統(tǒng)中一些節(jié)點短時間下線會發(fā)生什么?會有消息因此而丟失嗎?和數(shù)據(jù)庫一樣,要想保證持久性,是需要付出一些代價的:如將數(shù)據(jù)寫到硬盤中、將數(shù)據(jù)冗余到其他節(jié)點上等等。如果你能夠接受偶爾丟一些數(shù)據(jù),那在同樣的硬件配置下,你或許能獲得更高的吞吐和更低的延遲。

是否能夠接受消息丟失取決于應(yīng)用層。例如,對于一些周期性上報的傳感器讀數(shù)來說,偶爾的一兩個采點的丟失影響不大, 因為后面的數(shù)據(jù)會很快的報上來。然而需要注意,如果消息大面積的丟失,可能也很難立即看出來。另外,如果你的目標是對所有到來的事件進行計數(shù),則每條信息都要可靠的傳輸,因為任何一條信息的丟失都會導(dǎo)致計數(shù)錯誤。

我們在上一章中討論過批處理的一個非常友好的性質(zhì)——提供很好的容錯保證。即,所有失敗的子任務(wù)會自動的進行重試、所有失敗任務(wù)的部分輸出會被丟棄。這種做法會讓系統(tǒng)看起來像沒有發(fā)生過任何故障一樣,從而可以讓應(yīng)用層大大簡化編程模型(這些分布式故障如果系統(tǒng)不處理,就要應(yīng)用層自己來處理)。在本章稍后的部分,我們會探討如何在流式處理的上下文中提供類似的保證。

生產(chǎn)者到消費者的直接消息

很多消息系統(tǒng)并不借助中間系統(tǒng)節(jié)點,而直接使用網(wǎng)絡(luò)來溝通生產(chǎn)者和消費者雙方:

  • UDP 多播。UDP 多播廣泛用在金融系統(tǒng)的數(shù)據(jù)流中,如對時延要求很高的股票市場中的大盤動態(tài)。盡管 UDP 本身是不可靠的,但是可以在應(yīng)用層增加可靠性算法(類似在應(yīng)用層實現(xiàn) TCP 的一些算法),對丟失的信息進行恢復(fù)(生產(chǎn)者需要記住所有已發(fā)送的消息,才可以按需進行重傳)。
  • 無 broker 的消息隊列。像 ZeroMQ 和 nanomsg 等不使用消息 broker 的以庫形式提供的消息隊列,依賴 TCP 或者 IP 多播等方式實現(xiàn)了支持發(fā)布訂閱的消息隊列。
  • StatsD 和 Brubeck。這兩個系統(tǒng)底層依賴 UDP 協(xié)議進行傳遞消息,以監(jiān)控所有機器、并收集相關(guān)數(shù)據(jù)指標。(在 StatsD 協(xié)議中,只有事件都收到,counter 相關(guān)指標才會正確;使用 UDP 就意味著使用一種盡可能正確的保證)。
  • Webhooks。如果消費者在網(wǎng)絡(luò)上暴露出了一個服務(wù),則生產(chǎn)者可以通過 HTTP 或者 RPC 請求(參見經(jīng)由服務(wù)的數(shù)據(jù)流:REST 和 RPC)來將數(shù)據(jù)打到消費者中。這就是 webhooks 背后的思想:一個服務(wù)會向另一個服務(wù)進行注冊,并在有事件產(chǎn)生時向該服務(wù)發(fā)送一個請求。

這種直接消息系統(tǒng)在其目標場景中通常能夠工作的很好,但需要應(yīng)用層代碼自己承擔、處理消息丟失的可能性。此外,這些系統(tǒng)能夠進行的容錯很有限:雖然這些系統(tǒng)在檢測到丟包后會進行重傳,但它們通常會假設(shè)生產(chǎn)者和消費者都一直在線(這是一個很強的假設(shè))。

如果消費者由于某種原因下線了,它可能會錯過一些消息。有些協(xié)議會允許生產(chǎn)者重發(fā)失敗的消息,但如果生產(chǎn)者也掛了,這種方法也無濟于事——生產(chǎn)者會丟掉保存有需要進行重試的消息緩存。

這本質(zhì)上是因為,這些沒有 broker 的消息系統(tǒng)多表現(xiàn)為庫的形式,本身是沒有狀態(tài)的。如果沒有狀態(tài),就沒有辦法應(yīng)對消息傳輸過程中生產(chǎn)者、消費者宕機重啟的故障。這也是引入 broker 的初衷,但因此消息系統(tǒng)也會變的更加重。

消息代理

一種廣泛使用的替代方案就是使用消息代理(message broker,也稱為消息隊列)來發(fā)送消息。消息代理本質(zhì)上是一種專門為消息數(shù)據(jù)優(yōu)化過的數(shù)據(jù)庫。它通常以進程的形式跑在服務(wù)器上,生產(chǎn)者和消費者作為客戶端與之通信。生產(chǎn)者將消息寫入消息代理,消費者從其中讀取以進行消費。

通過引入一個消息數(shù)據(jù)存儲代理,消息系統(tǒng)可以更加容易的對客戶端(包括生產(chǎn)者和消費者)的來來去去(連接、失聯(lián)和宕機)進行容錯。這樣,數(shù)據(jù)的持久化職責被轉(zhuǎn)移到了消息代理上。有些系統(tǒng)中的消息代理將數(shù)據(jù)保存在內(nèi)存中,那么宕機重啟就仍然有問題;但另一些系統(tǒng)中的消息代理就會把消息持久化到硬盤(通常可配置)中,則就可以容忍宕機問題。如果遇到慢的消費者,就可以使用無限隊列的方式(而不是丟消息或者背壓)對沒來得及消費的數(shù)據(jù)進行緩存,當然通常來說,能夠存多少數(shù)據(jù)通常也會以配置的方式交給用戶去選擇。

使用消息代理的另外一個原因是消費者通常是異步消費的:即當發(fā)送一條消息后,生產(chǎn)者等待消息代理確認收到(緩存或者持久化)就會結(jié)束,而不會去等待這條消息最終被消費者所消費。而消息最終被消費者所消費,會發(fā)生在將來的某個時間點——大多數(shù)很快,比如幾秒內(nèi),但如果出現(xiàn)大量消息積壓時,這個時間也可能會很久。

對比消息代理和數(shù)據(jù)庫

有一些消息代理甚至能夠參與兩階段提交(使用 XA 或者 JTA,參見 實踐中的分布式事務(wù) )。這種功能讓消息代理看起來非常像數(shù)據(jù)庫,盡管在實踐中他們有一些非常重要的區(qū)別:

  • 刪除過程:數(shù)據(jù)庫會一直保存數(shù)據(jù),直到其被顯式地刪除。然而,大部分的消息代理會在消息被消費后,隱式的對其自動刪除。這種類型的消息代理并不適合對數(shù)據(jù)的長時間存儲。
  • 尺寸假設(shè):由于消息代理會在消息被消費后將其刪除,因此大部分消息代理都會假設(shè)其所存數(shù)據(jù)并不是很多——所有隊列都很短。在這樣的假設(shè)下,如果由于消費者過慢而造成消息在消息代理中堆積(當內(nèi)存中存不下后可能需要放到硬盤中),則可能造成消息代理的性能降級,所有消息都需要更長時間才能被處理。
  • 數(shù)據(jù)過濾:數(shù)據(jù)庫通常支持二級索引其他一些對數(shù)據(jù)進行查找的方法,而消息代理也通常會支持對某個 topic 下符合某種條件的數(shù)據(jù)進行訂閱。雖然機制不同,但在本質(zhì)上,兩者都支持客戶端讀取其所關(guān)心數(shù)據(jù)的方法。
  • 數(shù)據(jù)隔離:當對數(shù)據(jù)庫進行查詢時,其結(jié)果通常是基于某個時間點的快照;換句話說,如果另外一個客戶端在其發(fā)起查詢之后插入了一些數(shù)據(jù),第一個客戶端通常是看不到這些更新的(這要“歸功于”數(shù)據(jù)庫事務(wù)的隔離級別),除非其進行再次查詢。與之相對,消息代理雖然不支持任意條件的查詢,但當數(shù)據(jù)發(fā)生變化時(新的事件到來),系統(tǒng)會將其立即告知消費者。

以上都是傳統(tǒng)視角下的消息代理,這些語義被抽象成了像 JMS 和 AMQP 之類的協(xié)議,并且為 RabbitMQ、ActiveMQ、HornetQ、Qpid、TIBCO 企業(yè)消息服務(wù)、IBM MQ、Azure Service Bus 和 Google Cloud Pub/Sub 等系統(tǒng)實現(xiàn)。

多消費者

當多個消費者同時消費一個 topic 下的數(shù)據(jù)時,有兩種主要的消費方式,

  • 負載均衡(Load Balancing,互斥)
    每個消息被投遞給其中一個消費者進行消費。即所有的消費者會共同處理一個 topic 下的所有消息。消息代理可能以任意策略將消息分發(fā)給不同消費者。當每條消息消費代價很高,用戶想通過增加消費者的數(shù)量來并行消費某個 topic 時,這種方式很有用。(在 AMQP 中,可以通過多個客戶端消費同一個隊列來實現(xiàn)負載均衡;在 JMS 中,這種方式被稱為共享訂閱)
  • 扇出(Fan-out,獨立)
    每個消息都被發(fā)送到所有消費者。扇出的方式會讓每個消費者獨立的對同樣的數(shù)據(jù)進行消費,而不會互相影響。這種方式有點類似于批處理中對于同一份數(shù)據(jù)進行多次處理。(JMS 中稱為 topic subcription;AMQP 中稱為 exchange bindings)

負載均衡和扇出模式對比負載均衡和扇出模式對比

兩種消費模式也可以組合起來:如有兩組用戶都訂閱了某個 topic,組間進行獨立消費(fan-out)、組內(nèi)進行互斥消費(load balancing)。

確認和重傳

消費者可能會在任意時刻宕機,因此可能會出現(xiàn):消息代理將消息發(fā)送給了消費者,但是消費者卻沒有對其進行消費或者僅進行了部分消費,就宕機了。為了保證該消息不丟,消息代理使用了一種確認機制(類似 TCP 中的 ack):每個消費者必須顯式地告訴消息代理它消費完了消息,這樣消息代理才能安全的將消息從隊列中刪除。

如果消息代理和消費者之間的鏈接關(guān)閉或者超時了,消息代理仍然沒有收到確認,則會假設(shè)消息沒有被處理,并且重新給另一個消費者發(fā)送消息。但此時有可能出現(xiàn),在重發(fā)之前消息實際已經(jīng)被處理過了,只是確認消息由于網(wǎng)絡(luò)的原因丟失了。在這種情況下,需要消費者進行冪等消費。

在負載均衡模式下,重傳可能會造成消費者處理消息的亂序。在下圖中,在沒有任何故障時,消費者大體是按照消息的生產(chǎn)順序來消費的。然而,某一時刻,消費者 2 號在處理消息 m3 時宕機了,此時消費者 1 號正在處理消息 m4。由于遲遲沒有等到 m3 的消費確認,消息代理將其重新發(fā)送給了消費者 1 號,從而導(dǎo)致消費者 1 號以 m4,m3,m5 的順序來處理的消息。即,發(fā)生了亂序處理。

負載均衡導(dǎo)致的消息亂序負載均衡導(dǎo)致的消息亂序

即使消息代理試圖以順序的方式給消費者發(fā)送消息(JMS 和 AMQP 都有此類規(guī)定),但由于負載均衡和重傳機制的組合,亂序消費難以避免。為了避免這個問題,你可以讓每個消費者使用單獨的隊列(即,不用負載均衡功能,也可以理解,畢竟并行總是有代價的)。在每條消息都是互相獨立時,亂序消費不是問題;但如果消息間有前后因果依賴,則消息的保序消費非常重要。

參考資料

[1]DDIA 讀書分享會: https://ddia.qtmuniao.com/

責任編輯:武曉燕 來源: 木鳥雜記
相關(guān)推薦

2009-08-13 13:14:31

C#生產(chǎn)者和消費者

2015-08-26 09:39:30

java消費者

2021-12-22 11:00:05

模型Golang語言

2024-10-11 09:27:52

2021-04-20 08:32:51

消息MQ隊列

2012-02-14 12:31:27

Java

2017-05-16 12:30:21

Python多線程生產(chǎn)者消費者模式

2021-08-31 10:26:24

存儲

2021-12-28 12:01:59

Kafka 消費者機制

2024-08-27 10:19:31

2020-09-14 08:45:58

多線程模型面試

2024-04-22 08:02:34

kafka消息隊列高可用

2022-11-08 07:36:17

RocketMQ消費者消息堆積

2023-06-01 08:08:38

kafka消費者分區(qū)策略

2015-06-15 11:29:34

數(shù)據(jù)中心綠色數(shù)據(jù)中心

2021-10-26 10:50:25

Kafkabroker

2014-12-10 21:50:44

AdMaster

2020-07-27 08:44:22

存儲Kafka 流程

2022-07-07 09:00:49

RocketMQ消費者消息消費

2020-04-17 14:49:34

Kafka分區(qū)數(shù)據(jù)
點贊
收藏

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

欧美理论电影在线| 91免费版在线看| 欧美日韩国产成人在线观看| 中文字幕在线永久| 成人久久网站| 亚洲一区二区欧美日韩| 秋霞毛片久久久久久久久| 夜夜嗨aⅴ一区二区三区| 狠狠入ady亚洲精品| 亚洲国产精品成人av| 天天操天天摸天天爽| 欧洲成人综合网| 久久精品一区四区| 成人91免费视频| 凹凸精品一区二区三区| 欧美午夜免费影院| 尤物yw午夜国产精品视频| 国产成人精品综合久久久久99| 伊人久久综合一区二区| 亚洲美女在线国产| 日韩精品在在线一区二区中文| 国产丝袜在线视频| 日本中文一区二区三区| 2019国产精品自在线拍国产不卡| 成人无码精品1区2区3区免费看| 欧美三级午夜理伦三级小说| 日韩视频一区二区三区在线播放| 青青草精品视频在线观看| 国产黄色大片在线观看| 亚洲人成精品久久久久| 亚洲国产午夜伦理片大全在线观看网站 | 嫩草研究院在线| 国产成人在线视频网站| 国产区亚洲区欧美区| www毛片com| 国产精品久久久亚洲一区| 久久91超碰青草是什么| 波兰性xxxxx极品hd| 美女网站一区| 日韩电影免费在线观看中文字幕| 久久无码专区国产精品s| 亚洲美女色播| 91麻豆精品国产91久久久 | 国产精品3区| 欧美日本在线一区| 污污动漫在线观看| 久久精品97| 欧美日韩一区小说| 超碰在线人人爱| julia一区二区三区中文字幕| 欧美在线观看视频在线| 免费日韩中文字幕| 亚洲精品粉嫩美女一区| 在线亚洲精品福利网址导航| 日本xxxxxxx免费视频| 成人性生交大片免费观看网站| 精品成人久久av| av免费观看网| 国产精品极品美女在线观看| 欧美亚洲国产一卡| 色婷婷成人在线| 亚洲综合伊人| 日韩精品最新网址| 国产69视频在线观看| 日韩av网址大全| 亚洲区中文字幕| 国产又粗又长又硬| 91精品观看| 久久男人资源视频| 五月婷婷开心网| 久久在线91| 国产在线一区二区三区| 国产精品乱码久久久| 国产精品一区在线| 国产一区二区精品免费| 欧美一区二区少妇| 国产精品久久久久三级| 白白操在线视频| 免费一二一二在线视频| 在线观看日韩一区| 91欧美一区二区三区| 免费成人蒂法| 最好看的2019年中文视频| 岛国毛片在线观看| 亚洲综合社区| 成人精品网站在线观看| 黑人精品一区二区| 国产亚洲午夜高清国产拍精品| 一区二区三区四区国产| 免费电影网站在线视频观看福利| 欧美午夜性色大片在线观看| 性chinese极品按摩| 成人爽a毛片| 中文字幕亚洲第一| 久久久久免费看| 日本欧美久久久久免费播放网| 91精品在线看| 久久久久久青草| 亚洲精品日日夜夜| 久草综合在线观看| 日韩精品视频中文字幕| 亚洲人a成www在线影院| 久久精品99久久久久久| 日韩高清在线一区| 91精品国自产在线观看| 国产原创av在线| 亚洲国产三级在线| 自拍偷拍一区二区三区四区| 久久综合五月婷婷| 久久综合88中文色鬼| 欧美一区二区三区网站| 丰满放荡岳乱妇91ww| 致1999电视剧免费观看策驰影院| 黄色激情在线播放| 精品乱人伦小说| 成人无码精品1区2区3区免费看| 99这里有精品| 不卡视频一区二区| 欧美日韩xx| 欧美在线免费观看亚洲| 亚洲av网址在线| 欧美色图首页| 91在线观看免费高清| 成人性爱视频在线观看| 欧美日韩裸体免费视频| 日韩黄色一区二区| 中文字幕一区二区三三| 国产原创欧美精品| 成人在线视频成人| 色国产综合视频| 37p粉嫩大胆色噜噜噜| 亚洲精品123区| 俄罗斯精品一区二区| 宅男在线观看免费高清网站| 欧美精选一区二区| 精品人体无码一区二区三区| 视频一区中文字幕国产| 欧美国产视频在线观看| 午夜影院在线播放| 日韩精品极品在线观看播放免费视频 | 国产成人精品免费看视频| 国产精品久久午夜| 91丨九色丨蝌蚪| 亚洲精品国产偷自在线观看| 国产日韩在线一区| 黄色网址在线免费| 欧美丰满高潮xxxx喷水动漫| 久久久久久久久久97| 久久99精品国产.久久久久 | а天堂中文在线官网| 欧美美女喷水视频| 91精品国产闺蜜国产在线闺蜜| 黄色精品一二区| 免费成人进口网站| 日韩一区二区三区精品视频第3页| 久热精品视频在线| 亚洲第一成年人网站| 亚洲二区在线观看| 黄色正能量网站| 丝袜美腿亚洲一区二区图片| 四虎永久国产精品| 成人97精品毛片免费看| 欧美理论电影在线观看| 国精品人妻无码一区二区三区喝尿 | 浪潮色综合久久天堂| 在线观看国产欧美| 国产精品永久久久久久久久久| 亚洲欧美日韩在线| 精品熟女一区二区三区| 性欧美xxxx大乳国产app| 日韩av不卡播放| 91视频亚洲| 久久久久亚洲精品国产| 噜噜噜噜噜在线视频| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产中文字幕久久| 国产精品 日产精品 欧美精品| 男女日批视频在线观看| 亚洲福利天堂| 成人精品一区二区三区电影黑人 | 我不卡伦不卡影院| 国产精品国产三级国产专区53 | 黑鬼狂亚洲人videos| 不卡的av电影| 午夜激情av在线| 在线播放精品| 一区二区三区不卡在线| 亚洲**毛片| 国产91色在线|| a毛片在线看免费观看| 国产视频一区在线| 91中文字幕在线播放| 亚洲成人7777| 欧美性生交大片| 99久久er热在这里只有精品15| av网站在线不卡| 一区二区高清| 三年中文高清在线观看第6集| 免费看久久久| 亚洲999一在线观看www| 亚洲wwww| 国模吧一区二区三区| √新版天堂资源在线资源| 亚洲国产日韩欧美综合久久| 91片黄在线观看喷潮| 色天使久久综合网天天| 久久国产免费观看| 亚洲欧洲av一区二区三区久久| 国产国语性生话播放| 国产精品一区二区久激情瑜伽 | 国产一区二区三区直播精品电影| 99久久精品无免国产免费| 色婷婷精品久久二区二区蜜臀av | 亚洲精一区二区三区| 中文字幕av导航| 精品久久综合| 麻豆传媒一区二区| 激情小说亚洲图片| 5g影院天天爽成人免费下载| 国内精品伊人| 国产精品高潮粉嫩av| 国产免费不卡| 欧美一级免费视频| 成人一级福利| 久久久久久久国产精品| 91中文在线| 久久国内精品一国内精品| 午夜激情在线观看| 国产一区二区三区久久精品| 三级在线视频| 国产视频欧美视频| 青青草手机在线| 日韩精品电影网| 日韩一区av| 亚洲美女在线看| 你懂的在线视频| 国产视频一区在线| 色视频在线观看| 国产视频在线一区二区| 女人天堂在线| 亚洲片在线资源| 成人全视频高清免费观看| 国产视频精品自拍| 韩国中文字幕2020精品| 一个色综合导航| 婷婷视频在线| 欧美久久精品一级黑人c片| 亚洲区欧洲区| 久久久伊人欧美| 女海盗2成人h版中文字幕| 4p变态网欧美系列| 欧美xx视频| 国产欧美精品日韩| 999久久久国产999久久久| 亚洲一区二区三区成人在线视频精品| 57pao成人永久免费| 91在线国产电影| 99久久人爽人人添人人澡 | wwwxxx色| 97精品视频在线观看自产线路二| 精品黑人一区二区三区观看时间| 久久久久亚洲蜜桃| 99在线视频免费| 亚洲精选视频在线| 日韩精品一区二区不卡| 色诱亚洲精品久久久久久| 伊人网站在线观看| 777久久久精品| 日韩一级免费视频| 在线观看国产精品淫| 视频在线观看入口黄最新永久免费国产| 久久久久久成人| xxxxxx欧美| 成人国产在线激情| 成人自拍在线| 日韩欧美亚洲区| 中文字幕免费一区二区| 99精品人妻少妇一区二区| 秋霞电影一区二区| 日韩精品xxx| 亚洲国产精品国自产拍av| 91视频综合网| 欧美日韩美女在线| 国产绿帽刺激高潮对白| 日韩成人在线视频| 欧美成人三区| 欧美一级在线亚洲天堂| 成人国产精品久久| 明星裸体视频一区二区| 亚洲免费二区| 免费观看成人网| 国产suv精品一区二区883| 国精产品一区一区三区免费视频| 亚洲婷婷综合色高清在线| av中文在线播放| 日韩女优电影在线观看| 久久国产精品高清一区二区三区| 欧美成人午夜激情| 色猫猫成人app| 精品免费一区二区三区蜜桃| 国产精品久久久久9999赢消| 亚洲自偷自拍熟女另类| 国产剧情一区二区三区| 国产高清一区二区三区四区| 亚洲午夜免费福利视频| 国产精品嫩草影院精东| 亚洲欧美日本另类| 国精一区二区三区| 成人美女av在线直播| 国产欧美日韩精品一区二区三区| 97中文字幕在线| 激情都市一区二区| 伊人影院综合网| 色综合久久66| 视频一区二区三区在线看免费看| 欧美成人免费在线视频| gogo大尺度成人免费视频| 亚洲欧美99| 日韩激情视频网站| 亚洲熟妇一区二区三区| 午夜国产精品一区| 丰满肉肉bbwwbbww| 久久久av一区| 天天综合在线观看| 亚洲激情图片| 美日韩一区二区三区| 夜夜春很很躁夜夜躁| 日本精品一区二区三区四区的功能| 手机在线精品视频| 欧美日韩国产成人在线| 精品亚洲二区| 成年人三级视频| 国产一区二区三区视频在线播放| 精品丰满少妇一区二区三区| 欧美在线观看一二区| 97视频在线观看网站| 国产精品久久久久久亚洲影视| 国产伦精品一区二区三区千人斩 | 久草视频免费在线| 日韩三级高清在线| 影音先锋男人资源在线| 91亚洲精品久久久| 综合久久十次| 不许穿内裤随时挨c调教h苏绵| 亚洲视频一区在线| 国产av一区二区三区| 欧美日本中文字幕| 精品欧美午夜寂寞影院| 精品无码国模私拍视频| kk眼镜猥琐国模调教系列一区二区| 日韩成人一区二区三区| 亚洲免费视频网站| 久久野战av| 咪咪色在线视频| 国产精品性做久久久久久| 国产在线拍揄自揄拍| 亚洲精品影视在线观看| 日韩免费小视频| av磁力番号网| 不卡大黄网站免费看| 在线观看日本网站| 日韩亚洲欧美成人| 中文字幕亚洲在线观看 | 久久国产精品色| 福利所第一导航| 亚洲精品720p| 国产私拍福利精品视频二区| 中日韩在线视频| 国产99久久精品| 亚洲影院在线播放| 色偷偷av亚洲男人的天堂| 日韩在线精品强乱中文字幕| 黄色国产一级视频| 亚洲国产精品高清| 丰满熟妇乱又伦| 国产精品99久久99久久久二8| 99re66热这里只有精品8| 成人啪啪18免费游戏链接| 色狠狠桃花综合| 午夜小视频在线观看| 免费在线观看91| 国产高清不卡一区二区| 国产熟妇一区二区三区四区| 日韩天堂在线视频| 卡一精品卡二卡三网站乱码 | 国产一区二区视频免费| 久久在线视频在线| 综合色就爱涩涩涩综合婷婷| 日韩a一级欧美一级| 日韩欧美在线观看| a黄色片在线观看| 欧美性大战久久久久| 国产高清成人在线| 中文字幕精品一区二区精| 欧美激情aaaa| 日韩国产专区| 国产精品一区二区入口九绯色| 制服丝袜国产精品| 欧美艳星kaydenkross| 337p亚洲精品色噜噜狠狠p|