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

不理解Zookeeper一致性原理,談何異地多活改造

開發 架構 開發工具
Zookeeper 是最終一致性的,由于多副本,以及保證大多數成功的 Zab 協議,當一個客戶端進程寫入一個新值,另一個客戶端進程不能保證馬上就會讀到,但能保證最終會讀到這個值。

 2017 年在餓了么做異地多活建設之時,我的團隊承擔了 Zookeeper 的異地多活改造。

[[230262]]

在此期間,我聽到了關于 Zookeeper 一致性的兩種不同說法:

Zookeeper 是最終一致性的,由于多副本,以及保證大多數成功的 Zab 協議,當一個客戶端進程寫入一個新值,另一個客戶端進程不能保證馬上就會讀到,但能保證最終會讀到這個值。

Zookeeper 的 Zab 協議類似于 Paxos 協議,并且提供了強一致性。

每當聽到這兩種說法,我都想糾正一下。Zookeeper 是順序一致性(Sequential Consistency)的,但解釋起來比較復雜,下面和大家一起討論下我的看法。

什么是 Sequetial Consistency

從 Zookeeper 的文檔中我們可以看到,里面明確寫出它的一致性是 Sequential Consistency。

那么,什么是 Sequential Consistency 呢?

Sequential Consistency 是 Lamport 在 1979 年***提出的。論文中定義,當滿足下面這個條件時就是 Sequential Consistency:

the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program.

這段英文定義很晦澀,這是 Lamport 大神的一貫風格,嚴謹但晦澀,Paxos 協議也是如此。

我***次看到時的感覺是:“這是什么鬼?”為啥每個英文單詞我都認識,但就是不知道他在說什么?

我們先看看這篇論文的標題和定義中出現的一個關鍵詞,來說明一下 Sequential Consistency 的應用范圍。

論文的標題和定義中包含“multiprocessor”這個詞,multiprocessor 是多核處理器的意思。

從這個關鍵字來看,Sequential Consistency 是用來定義多核處理器和跑在多核處理器上的程序的一個特性。

Lamport 這篇論文的標題可以翻譯成:“如何讓具有多核處理器的計算機正確執行多進程程序”。

也就是說如果一個多核處理器具有 Sequential Consistency 的特性,這個多核處理器就可以正確運行,后面我會解釋這個正確運行是什么意思(也就是本文后面講到的 Sequential Consistency 的作用)。

從這個標題我們還可以看出,Sequential Consistency 應該是個并發編程(Concurrent Programming)領域的概念。

但我們現在常常在分布式系統領域討論 Sequential Consistency,比如本文主要討論的 Zookeeper(Zookeeper 很明顯是一個分布式系統)的一致性。

實際上,多核處理器上運行的多個程序,其實也是一種分布式系統(Lamport在他的這篇 Time,Clocks,and the Ordering of Events in a Distributed System 分布式系統的開山之作中也闡述了這個觀點)。

所以雖然 Sequential Consistency 最早在并發編程中提出,但是它可以應用在分布式系統中,比如本文討論的 Zookeeper 這種分布式存儲系統。

另外一個比較重要的 Linearizability(線性一致性),也是在并發編程中最早提出的,目前也被廣泛應用在分布式系統領域中。

接下來我們嘗試翻譯一下上文那段晦澀的定義,做這段翻譯讓我找到了上學時做閱讀理解的感覺。

我先不直接翻譯,因為就算我把它翻譯成中文,估計很多人還是會有“為啥每個中文字我都懂,還是不知道在說什么”的感覺。

首先,我來解釋一下個別的詞。首先,“any execution”是什么意思?你有多個程序(Program)在多核處理器上運行,例如你有兩個程序。

***個程序叫 P1,它的代碼如下: 

  1. P1_write(x); 
  2. P1_read(y); 

第二個程序叫 P2,代碼如下:

  1. P2_write(u); 
  2. P2_read(v); 

從理論上來講,兩個程序運行在兩個獨立處理器的核上,有多少種執行的可能?我列舉其中幾種來舉例說明。

***種:

  1. P1---write(x)--------read(y)-------- 
  2. P2-----------write(u)-------read(v)- 

第二種:

  1. P1----------write(x)-read(y)-------- 
  2. P2--write(u)----------------read(v)- 

第三種:

  1. P1---read(y)----------write(x)------ 
  2. P2-----------write(u)---------read(v)- 

我們有 24 種可能的執行順序,也就是這四個操作任意的排列組合,也就是4!=24。

類似***種和第二種這樣的可能性很好理解。為什么會出現像第三種這樣的可能的執行呢?

那是因為就算在同一個程序中,由于處理會有多級的緩存,以及處理器中 coherence 的存在,雖然你的程序中是先 write 后 read,在內存中真正生效的順序,也有可能是先 read 后 write。

其實還會出現類似下面這樣的執行,兩個操作在兩個處理器上同時執行。

  1. P1--write(x)-read(y)-------- 
  2. P2--write(u)--------read(v)- 

如果加上同時運行的這種情況,那就有更多種可能性。我的算術不太好,這里就不繼續算下去了,因為到底有多少個不重要,重要的是要知道有很多種可能性。

那么定義中的“any execution”,就是指任意一種可能的執行,在定義中也可以理解為所有的這些可能的執行。

接著我們再來解釋一個詞——“sequential order”。什么叫 sequential order?我們來翻一下英語詞典(感覺更像在做閱讀理解了)。

sequential:連續的;相繼的;有順序的

order:命令;順序;規則;[貿易] 定單

sequential order——有順序的順序,這又是什么鬼?

其實 sequential 是有一個接一個的意思,在處理器的這種上下文中,sequential 就是指操作(operartion)一個接一個地執行,也就是順序執行,并且沒有重疊。

order 是指經過一定的調整,讓某樣東西按照一定的規則變得有序。比如,在算法中的排序算法就是 ordering,就是讓數組這個東西按照從大到小或從小到大的規則變得有序。

那么 sequential order 就是指讓操作(operation)按照一個接一個這樣的規則排列,并且沒有重疊。

再說回上文的例子,如果把四個操作,按一個接一個的規則排列,這時就可以得到 4!的排列組合個可能的排列(order),同樣的,有多少個不重要。

比如:

  1. P1_write(x);P1_read(y);P2_write(u);P2_read(v); 
  2. P1_read(y);P1_write(x);P2_write(u);P2:read(v); 
  3. P2_write(u);P2_read(v);P1_read(y);P1:write(x); 

我這里只列舉其中三個,其他的大家可以自己排一下。

重點來了,其實 sequential order 就是讓這四個操作按照一個接一個的順序執行,并且沒有重疊。

注意這個排列不是真實的執行,真實的執行是 any execution,這里說的是邏輯上的假設,也就是為什么定義有一個 as if。

做了這么多的鋪墊,下面我們開始翻譯定義中的***句話:

任意一種可能的執行效果,與所有的處理器上的某一種操作按照順序排列執行的效果是一樣的。 

注意,some 在這里是指“某一種”的意思,不是一些,因為 order 是單數(真的是在做閱讀理解)。

這句話的意思就是說,一個處理器要滿足這個條件,就只能允許滿足這個條件的那些可能的執行存在,其他不滿足的可能的執行都不會出現。

從***句話中我們可以看出,一種多核處理器要想滿足 Sequential Consistency,那么多個程序在多個核運行效果“等同”于在一個核上順序執行所有操作的效果是差不多的。

如果這樣的話,其實多核的威力基本就消失了。所以無論是從 Lamport 寫這篇論文的 1979 年,還是現在,沒有任何一個現實的多核處理器實現了 Sequential Consistency。

那么,為什么 Lamport 大神提出這樣一個不現實的概念呢?(要注意 Lamport 寫這篇論文時,并沒有把它引申到分布式系統領域,就是針對多核處理器、并發編程領域提出的)我們稍后再論述。

這里還要注意的一點是,在我的翻譯里用了“效果”一詞,但實際上英文原文中用的是“result(結果)”一詞。那效果和結果有什么區別嗎?我們解釋一下什么叫執行結果。

不管是任何真實的執行,還是某種經過順序排序后的假設執行,程序會產生一定的結果,比如 print 出來的結果(result)。實際上定義中說的是結果一樣。

如果定義中用“效果”的話,那這個定義就只是一個定性的定義,如果用“結果”的話,那這個定義就是一個定量的定義。定量的,也就是說可以通過數學證明的。

從這點我們可以看出,大神就是不一樣,任何理論都是可以通過數學證明為正確的。本文后面還會提到證明的事情,我們這里再賣個關子。

到這里,關于定義的***句,更準確的翻譯就是: 

任意一種可能的執行的結果,與某一種所有的處理器上的操作按照順序排列執行的結果是一樣的。 

這里我們還要注意一點,結果一樣就意味著,如果有人真的要實現一種 Sequential Consistency 的多核處理器的話,因為要保證結果一樣,所以他是有一定的空間來優化,而不會完全是一個按順序執行的效果。

但是估計這種優化也是非常有限的。好了,終于把最難的***句話解釋完了,大家可以松口氣,第二句就非常簡單了。

我們還是先解釋第二句中出現的一個詞——“sequence”。剛剛解釋過的 sequential order 是順序排序(就是按一個接一個排序)。

其實這是一個動作,動作會產生結果,它的結果產生了一個操作(operation)的隊列。第二句中出現的 sequence 就是指這個操作(operation)的隊列。

好,那第二句的翻譯就是:

并且每個獨立的處理器的操作,都會按照程序指定的順序出現在操作隊列中。

也就是說如果程序里是先write(x);后read(y);,那么只有滿足這個順序的操作隊列是符合條件的。

這樣,我們剛剛說的很多可能的執行就少了很多,這里我也就不計算少了多少,還是那句話,數量不重要,反正是有,而且變少了。

那么第二句話意味著什么?意味著如果一個多核處理器實現了 Sequential Consistency,那這種多核處理器基本上就告別自(緩)行(存)車了。

這里我還要繼續賣關子,連緩存這種最有效提高處理器性能的優化都沒了,大神為什么要提出這個概念?

好了,到這里我們可以把兩句翻譯合起來,完整看一下:

任意一種可能的執行的結果,與某一種所有的處理器上的操作按照順序排列執行的結果是一樣的,并且每個獨立的處理器的操作,都會按照程序指定的順序出現在操作隊列中。  

從這個定義中,我們可以看出,此概念的核心就是 sequential order,這也就是為什么 Lamport 老爺子把這種一致性模型稱之為 Sequential Consistency。

可以說這個命名是非常貼切的,不知道這種貼切對于以英語為母語的人來說是不是更好理解一些,應該不會出現“順序的順序是什么鬼”這種情況。如果你看完本文,也覺得 sequential 很貼切的話,那就說明我講清楚了。

接下來我們舉個具體的例子,再來說明一下: 

 

  1. execution A  
  2. P0 writex=1------------------------------- 
  3. P1 -------write x=2---------------------- 
  4. P2 -----------------read x==1--read x==2 
  5. P3 -----------------read x==1--read x==2 
  6. sequetial order: P0_write x=1,P3_read x==1,P4_read x==1,P1_write x=2,P3_read x==2,P4_read x==2 
  7. execution B  
  8. P0 write=1-------------------------------  
  9. P1 -------write x=2----------------------  
  10. P2 -----------------read x==2--read x==1  
  11. P3 -----------------read x==2--read x==1 
  12. sequetial order: P1_write x=2,P3_read x==2,P4_read x==2,P0_write x=1,P3_read x==1,P4_read x==1 
  13. execution C 
  14. P0 write=1-------------------------------  
  15. P1 -------write x=2----------------------  
  16. P2 -----------------read x==1--read x==2  
  17. P3 -----------------read x==2--read x==1   
  18. sequetial order: 你找不出一個符合定義中2個條件的一種order。 

sequetial order: 你找不出一個符合定義中2個條件的一種order。

所以說如果一個多核處理器只允許 execution A 和 B 出現,不允許 C 出現,那么這個多核處理器就是 Sequetial Consistency 的;如果它允許 C 出現,那它就不是 Sequetial Consistency。

到這里,我們已經完整地解釋完什么是 Sequetial Consistency。但是,細心的朋友可能會問,如果你的 program 是多線程的程序怎么辦?那我們再把定義中***的一個細節解釋一下:program 這個詞。

program 是指可以直接運行在處理器上的指令序列。這個并不是 program 的嚴格定義,但是我要指出的是這個 program 是在操作系統都沒有的遠古時代就存在的概念,在上文的定義中 prgram 就是指那個時代的 program。

這個 program 里沒有進程、線程的概念,這些概念都是在有了操作系統之后才出現的。因為沒有操作系統,也沒有內存空間的概念。

不像我們現在所說的程序(program),不同的程序有自己獨立的內存地址空間。我們這里,內存(memory)對于不同的 program 來說是 shared。

另外,需要注意的是 program 可以用來說明各種程序,不管你是操作系統內核,還是應用程序,都適用。

Sequential Consistency 是分布式領域的概念

剛剛我們說了,Sequential Consistency 雖然是針對并發編程領域提出的,但實際上它是分布式領域的概念,特別是分布式存儲系統。

在 Distributed system:Principles and Paradigms (作者Andrew S.Tanenbaum, Maarten Van Steen),作者稍微修改了一下 Lamport 的定義,讓這個定義更貼近分布式領域中的概念。

我們來看一下作者是怎么改的: 

The result of any execution is the same as if the (read and write) operations by all processes on the data store were executed in some sequential order and the operations of-each individual process appear in this sequence in the order specified by its program. 

作者把 processor 換成了 process,并且加了 on the data store 這個限定,在 Lamport 的定義里沒有這個限定,其實默認指的是 memory(內存)。

process 就是指進程,以 Zookeeper 為例,就是指訪問 Zookeeper 的應用進程。program 也不是那么底層的概念,也是基于操作系統的應用程序了。

Sequential Consistency 的作用

好了,下面該揭曉我上面賣的兩個關子了。在 Lamport 的論文中,給出了一個小例子,如下: 

  1. process 1 
  2.     a := 1; 
  3.     if b = 0 then critical section
  4.             a := 0 
  5.         else ... fi 
  6. process 2 
  7.     b := 1; 
  8.     if a = 0 then critical section
  9.            b := 0 
  10.         else ... fi 

Lamport 在論文中說,如果一種多核處理滿足 Sequential Consistency 的條件,那么最多只有一個程序能夠進入 critical section。

在論文中,Lamport 老爺子并沒有解釋為什么最多只有一個程序能夠進入 critical section。

而是把這個證明留給了論文的讀者,就像我們常見的教科書中的課后習題一樣。

Lamport 老爺子應該是認為這個證明太簡單了,不需要花費筆墨來證明它。Sequential Consistency 這篇論文只有不到兩頁 A4 紙,是我見過的最短的論文。

這是 Lamport 一貫的做事風格,他的 Paxos 論文中,有很多細節都是一筆帶過的,給讀者留下無盡的遐想(瞎想)。

假設現在我們已經證明這個是正確的(雖然我也沒去證明,論文給出了兩個參考文獻用于證明),那這個例子說明了什么呢?

大家也許注意到了,這個例子沒有用到任何鎖,但它實現了 critical section,critical section 是一種多線程 synchronization 機制。

如果多核處理器是 Sequential Consistency 的,那么你寫的并發程序“天然就是正確的”。

但是處理器的設計者為了追求性能,將保證程序正確的任務丟給程序開發者。

只在硬件級別提供了一些 fence、cas 等指令,基于這些指令操作內核和語言基礎庫實現了各種 synchronization 機制,用來保證操作系統的正確性和應用程序的正確性。

程序員必須小心謹慎地使用線程和這些 synchronization 機制,否則就會出各種意想不到的問題。如果你沒有 debug 一個多線程 Bug 連續加班兩天,那說明你是大神。

這些指令都是具有更高一致性級別,也就是 linearizability,雖然一致性級別高,但只是個別指令的,處理器整體只是實現了比 Sequential Consistency 低很多的一致性級別。所以實現難度大大降低了。

雖然 Lamport 老爺子的 Sequential Consistency 概念在 Concurrent Programming 領域中還沒有實際意義,但卻給我們指出了程序員的天堂在哪里。

在程序員的天堂里,沒有多(車)線(來)程(車)編(往)程,只要寫程序就行。你面試的時候不會再有人問你多線程編程,不會再問你各種鎖。

在分布式領域中,Sequential Consistency 更實際一些。Zookeeper 就實現了 Sequential Consistency。

同理,這應該也是可以證明的,但目前還沒發現有 Zookeeper 社區有任何論文來證明這個。

如果你已經明白上面解釋的定義,就可以想清楚 Zookeeper 是 Sequential Consistency,歡迎大家一起來探討。

為何 Zookeeper 要實現 Sequential Consistency

實際上,Zookeeper 的一致性更復雜一些,Zookeeper 的讀操作是 Sequential Consistency 的,Zookeeper 的寫操作是 linearizability 的。

關于這個說法,Zookeeper 的官方文檔中沒有寫出來,但在社區的郵件組有詳細的討論。

另外,在 Modular Composition of Coordination Services 這篇關于 Zookeeper 的論文中也有提到這個觀點(這篇論文不是 Zookeeper 的主流論文,但全面分析了 Zookeeper 的特性,以及 Zookeeper 跨機房方案,餓了么的 Zookeeper 異地多活改造也參考了這篇論文中的一些觀點)。

我們可以這么理解 Zookeeper,從整體(read 操作+write 操作)上來說是 Sequential Consistency,寫操作實現了 linearizability。

通過簡單的推理,我們可以得出 Lamport 論文中的小例子,在 Zookeeper 中也是成立的。我們可以這樣實現分布式鎖。

但 Zookeeper 官方推薦的分布式實現方法并沒有采用這個方式,而是利用了 Zookeeper 的 linearizability 特性實現了分布式鎖。

為什么 Zookeeper 要實現 Sequential Consistency?Zookeeper 最核心的功能是用來做 coordination service,也就是用來做分布式鎖服務,在分布式的環境下,Zookeeper 本身怎么做到“天然正確”?

沒有其他的 synchronization 機制保證 Zookeeper 是正確的,所以只要 Zookeeper 實現了 Sequential Consistency,那它自身就可以保證正確性,從而對外提供鎖服務。 

作者:陳東明

簡介:餓了么北京技術中心架構組負責人,負責餓了么的產品線架構設計及基礎架構研發工作。曾任百度架構師,負責百度即時通訊產品的架構設計。具有豐富的大規模系統構建和基礎架構的研發經驗,善于復雜業務需求下的大并發、分布式系統設計和持續優化。

責任編輯:武曉燕 來源: DBAplus社群
相關推薦

2020-11-24 09:03:41

一致性MySQLMVCC

2022-03-22 09:54:22

Hash算法

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2021-09-18 08:54:19

zookeeper一致性算法CAP

2018-08-08 15:51:44

Hash分布式算法

2020-09-10 16:50:32

mysqldump數據庫熱備

2024-04-10 10:34:34

Cache系統GPU

2022-12-14 08:23:30

2021-02-05 08:00:48

哈希算法?機器

2021-02-02 12:40:50

哈希算法數據

2024-12-11 09:16:38

2023-08-14 08:10:33

CPU緩存RFO

2021-11-12 08:38:26

一致性哈希算法數據結構

2025-09-08 07:25:16

2020-05-12 10:43:22

Redis緩存數據庫

2022-10-19 12:22:53

并發扣款一致性

2021-06-30 21:13:49

CPUCache數據

2024-10-16 09:53:07

2021-02-04 06:30:26

Python編程語言

2023-11-20 08:10:55

處理器CPU緩存
點贊
收藏

51CTO技術棧公眾號

欧美综合色免费| 91视频国产资源| 国内精品久久久久影院 日本资源| 中文字幕乱码在线| 777午夜精品电影免费看| 亚洲乱码国产乱码精品精98午夜| 国内一区在线| 国产女人18毛片水18精| 久久不射2019中文字幕| 欧美成人中文字幕在线| 夜夜春很很躁夜夜躁| 我要色综合中文字幕| 日本乱人伦aⅴ精品| 黄色网在线视频| 成人精品一区二区三区校园激情| 成人午夜电影小说| 成人激情视频在线播放| 99超碰在线观看| 综合国产在线| 中文字幕亚洲在线| 18禁裸乳无遮挡啪啪无码免费| 日本综合精品一区| 欧美视频一区二区三区在线观看| 国产精品一区二区免费在线观看| 超碰公开在线| 国产精品五月天| 欧美日韩电影一区二区| 国精品人妻无码一区二区三区喝尿 | 国产黄色激情视频| yiren22综合网成人| 97se亚洲国产综合在线| 成人自拍网站| 国产视频在线一区| 久久福利视频一区二区| 日韩av电影中文字幕| 国偷自拍第113页| 韩日在线一区| 欧美激情精品久久久久久变态| 小早川怜子一区二区的演员表| 波多野结衣在线播放一区| 日韩精品在线第一页| 国产黄色三级网站| 国产精品x8x8一区二区| 欧美精品一区二区三区在线| 中文字幕1区2区| 日韩欧美中文字幕一区二区三区 | 日本久久久久久久久久久| 国产真人真事毛片| 影音先锋久久精品| 97超碰国产精品女人人人爽 | 日韩午夜精品电影| 成人高清在线观看视频| 麻豆国产一区| 日韩美女视频在线| 少妇献身老头系列| 在线精品自拍| 亚洲精品福利资源站| 国产激情视频网站| 亚洲日本三级| 在线a欧美视频| 亚洲女优在线观看| 久久国产成人精品| 久久久国产精品免费| 极品盗摄国产盗摄合集| 亚洲午夜精品久久久久久app| 久久久久久久av| 日韩人妻无码一区二区三区99 | 欧美一区二区三区精品电影| 黄色一级视频免费看| 日本色综合中文字幕| 国产精品日日做人人爱| 国产深喉视频一区二区| 国产精品 欧美精品| 国产精品视频免费一区二区三区| 天堂中文在线观看视频| 国产亚洲欧美中文| 中文字幕久久一区| 538在线精品| 色网综合在线观看| 国产一区二区在线观看免费视频| 中文字幕区一区二区三| 亚洲片在线观看| 成人做爰视频网站| 国模吧视频一区| 欧美专区在线播放| 国产三级伦理片| 91免费观看视频在线| 亚洲一区二区三区免费观看| 女人天堂av在线播放| 色婷婷av一区二区三区之一色屋| 奇米视频7777| 欧美挤奶吃奶水xxxxx| 伊人久久久久久久久久久久久| 一起操在线播放| 国产欧美大片| 成人啪啪免费看| 日本成人一区| 一区二区三区在线高清| 国产激情在线观看视频| 一区二区在线视频观看| 在线精品国产成人综合| 国产亚洲精品久久777777| 日韩国产欧美三级| 国产亚洲精品自在久久| 久久综合网导航| 欧美性xxxxx极品娇小| 亚洲精品乱码久久久久久动漫| 亚洲第一福利专区| 欧美日韩国产成人在线观看| 中文字幕乱码视频| 91热门视频在线观看| 日本三级中文字幕在线观看| 欧美va在线观看| 精品国产91九色蝌蚪| 开心激情五月网| 久久久久网站| 精品久久久久久亚洲| free性欧美hd另类精品| 欧美性三三影院| xxx在线播放| 在线亚洲伦理| 国产精品国产精品国产专区蜜臀ah | 欧美成人精品网站| 972aa.com艺术欧美| 日韩一级免费看| 99久久久成人国产精品| 在线视频欧美日韩| 久久久成人免费视频| eeuss影院一区二区三区| 中文字幕人妻熟女人妻洋洋| 日韩欧美专区| 上原亚衣av一区二区三区| 亚洲精品男人的天堂| 成人黄色在线视频| 男人插女人视频在线观看| 日本一区二区三区播放| 欧美成人免费在线视频| 国产免费黄色录像| 中文字幕亚洲精品在线观看| 最新国产黄色网址| 亚洲h色精品| 国产又爽又黄的激情精品视频| 9色在线视频| 欧美日韩国产成人在线91| 欧美丰满老妇熟乱xxxxyyy| 老牛国产精品一区的观看方式| 蜜桃传媒一区二区| 在线观看特色大片免费视频| 国产视频精品免费播放| 三级网站在线播放| 国产日韩精品一区二区浪潮av| 毛片av免费在线观看| 精品国产一区一区二区三亚瑟| 日韩av三级在线观看| 你懂的视频在线| 欧美性生活久久| 长河落日免费高清观看| 国内精品免费**视频| 影音先锋男人的网站| 欧美成年网站| 国内成人精品一区| 欧美日韩视频精品二区| 欧美性猛片aaaaaaa做受| 亚洲欧美日韩第一页| 激情都市一区二区| 黄色三级中文字幕| 台湾亚洲精品一区二区tv| 国产成人在线亚洲欧美| 黄色av免费在线| 欧美成人r级一区二区三区| 日韩美女一级片| 国产亚洲精品7777| 99re6在线观看| 激情自拍一区| 日本黄网免费一区二区精品| 偷拍自拍亚洲| 久久久久久久97| 国产高清视频在线播放| 制服.丝袜.亚洲.中文.综合| 日韩三级视频在线| 亚洲国产精品成人综合色在线婷婷| 国产精品嫩草影院8vv8 | youjizzxxxx18| 中文字幕人成人乱码| 久久精品国产第一区二区三区最新章节| 主播大秀视频在线观看一区二区| 欧美成人久久久| 欧美美女搞黄| 欧美一区二区三区精品| 日日噜噜噜噜人人爽亚洲精品| 中文字幕色av一区二区三区| 国产高清成人久久| 麻豆精品视频在线观看免费| 日本精品久久久久久久久久| 黑人操亚洲人| 国产精品久久一区二区三区| 福利一区二区| 国产91|九色| 黄色在线免费| 亚洲欧美日韩精品| 日韩一级免费视频| 91精品国产综合久久久久久 | 日本在线观看一区二区| 66精品视频在线观看| 国产精品日韩在线播放| 看黄在线观看| 欧美肥老妇视频| 自拍视频在线播放| 亚洲欧美资源在线| 黑人乱码一区二区三区av| 欧美精品aⅴ在线视频| 手机av免费观看| 五月婷婷久久丁香| 欧美色图一区二区| 日韩一区中文字幕| 欧美一区二区三区粗大| 久久久蜜桃精品| 日韩av无码一区二区三区不卡 | 黄色动漫在线| 中文字幕久热精品在线视频| 久蕉依人在线视频| 日韩精品免费在线观看| 丰满人妻一区二区三区无码av| 7777精品伊人久久久大香线蕉的| a片在线免费观看| 色婷婷综合激情| 中文字幕在线观看免费视频| 亚洲一区二区三区国产| 黄色一级视频免费| 亚洲精品一二三| www.av免费| 亚洲欧洲av色图| 国产精品夜夜夜爽阿娇| 国产精品久久久久天堂| 欧美午夜激情影院| 国产欧美日韩亚州综合| 高潮毛片无遮挡| 久久精品欧美日韩| 欧美一区二区三区成人精品| 久久综合九色综合欧美亚洲| 亚洲自拍偷拍一区二区| 久久综合99re88久久爱| 亚洲欧美视频在线播放| 91在线视频网址| 实拍女处破www免费看| 国产午夜三级一区二区三| 欧美 日韩 成人| 亚洲国产高清aⅴ视频| 天天干天天操天天拍| 国产精品久久久久久福利一牛影视| 少妇的滋味中文字幕bd| 中文字幕综合网| 成人免费毛片东京热| 亚洲国产日韩av| 在线观看黄网站| 在线观看免费一区| 91麻豆一区二区| 日韩区在线观看| 深夜福利视频网站| 亚洲欧美日韩国产精品| 日韩黄色影院| 欧美激情xxxx性bbbb| 国产盗摄——sm在线视频| 97av在线播放| 日本欧美一区| 91天堂在线视频| 精品国产午夜肉伦伦影院| 欧美一级二级三级九九九| 日韩精品二区| 亚洲爆乳无码精品aaa片蜜桃| 91久久午夜| 福利在线一区二区三区| 国产精品一区二区你懂的| 97人妻精品一区二区三区免费| 久久久亚洲高清| 欧美丰满熟妇bbbbbb| 五月婷婷另类国产| 在线免费一级片| 精品国产伦一区二区三区观看方式 | 亚洲成a人片77777精品| 亚洲精品一二区| 国产成人午夜| 欧美在线精品免播放器视频| 欧美v亚洲v综合v国产v仙踪林| 亚洲一区二区三区毛片| 羞羞色国产精品网站| 欧美 日韩 国产 在线观看| 亚洲精选在线| 奇米视频888| 99久久精品免费| www日韩在线| 岛国av一区二区在线在线观看| 亚洲网站免费观看| 日韩大陆毛片av| av毛片在线| 国产精品爱啪在线线免费观看 | 精品国产一区二区三区四区四| 二区三区在线| 国内成人精品视频| 精品一区91| 视频一区视频二区视频三区高| 精品9999| 亚洲av无一区二区三区久久| 久久免费看少妇高潮| 久久久久久久黄色| 欧美精品自拍偷拍| 成人不用播放器| 88xx成人精品| 在线精品视频一区| 欧洲xxxxx| 蜜臀av在线播放一区二区三区| 中文字幕在线播放一区| 亚洲综合一二三区| 国产又粗又猛视频| 亚洲视频在线观看视频| av毛片午夜不卡高**水| 亚洲mm色国产网站| 日韩av久操| 老熟妇仑乱视频一区二区 | 另类欧美小说| 亚洲美女色禁图| 伊人久久久久久久久| 中文字幕一区在线观看| 无码人妻丰满熟妇奶水区码| 亚洲精品国产精品乱码不99按摩| 免费看电影在线| 99re6热在线精品视频播放速度| 99热在线成人| 成人性生交免费看| 国产精品素人一区二区| 中文区中文字幕免费看| 亚洲一级黄色片| 欧洲一级精品| 日韩电影大全在线观看| 日韩国产在线观看| 日本一卡二卡在线播放| 色天使色偷偷av一区二区| 欧美香蕉爽爽人人爽| 欧美综合在线第二页| 一区二区三区日本久久久 | 国产一区二区美女| 成人性生活毛片| 日韩亚洲欧美中文三级| 色图在线观看| 国产精品免费观看高清| 激情久久久久久久| 亚洲精品在线视频免费观看| 欧美性猛交xxxx久久久| 国产资源在线播放| 国产精品成人免费电影| 日韩在线视频精品| а 天堂 在线| 亚洲精品国产a久久久久久| 懂色av一区二区三区四区| 久久久免费在线观看| 午夜欧洲一区| 亚洲最大综合网| 日韩一区中文字幕| 亚洲欧美另类视频| 欧洲成人免费视频| 成人久久电影| 一级片黄色免费| 亚洲一区二区三区免费视频| 四虎精品在永久在线观看| 国产成人黄色av| 99久久这里只有精品| 97精品人妻一区二区三区蜜桃| 色综合天天综合网天天狠天天| av在线播放网| 99www免费人成精品| 亚洲欧美日韩国产| 内射毛片内射国产夫妻| 欧美一级片免费看| 中文一区一区三区高中清不卡免费| 视频三区二区一区| 国产成人丝袜美腿| 中文字幕在线播| 久久不射热爱视频精品| 无码少妇一区二区三区| 国产日韩欧美久久| 亚洲成人免费视频| 成人免费一区二区三区视频网站| 97视频热人人精品| 久久伊人亚洲| 免费视频一二三区| 一区二区欧美在线| 成人福利一区| 久久99999| 亚洲成a天堂v人片| 天堂а√在线资源在线| 国产自产精品| 激情国产一区二区 | 免费在线看一区| 久一区二区三区| 最近2019中文字幕一页二页| 精品无人区一区二区| 亚洲天堂av一区二区| 色综合久久综合网97色综合 | 国产99视频在线观看| 欧美日韩国产欧|