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

不會這些概念,勸你簡歷不要寫 “熟悉” Zookeeper

開源
本文主要分享一下zookeeper的一些基本概念,在正式進入正題前,和大家聊一聊剛入行時我的面試經驗,可以說是耿直的有些可愛。

 [[321281]]

嘮嘮叨叨

本文主要分享一下zookeeper的一些基本概念,在正式進入正題前,和大家聊一聊剛入行時我的面試經驗,可以說是耿直的有些可愛。

面試官:用過zookeeper 嗎?

我:用過啊,給dubbo提供服務的注冊與發現嘛

面試官:知道 zookeeper 是什么嗎?

我:知道啊,注冊中心嘛

面試官:那你們項目中都是怎么用 zookeeper 的?

我:就在 springboot 的 application.properties 配置文件里添加一個 zookeeper 服務地址就行了。。。

 

上邊的對話好像也沒什么毛病,但似乎又感覺哪里有點不太對,結果就是每次我如此回答面試都被pass。

為什么會被問zookeeper?因為我的簡歷項目上寫著熟練使用zookeeper,可面試官理解的 “熟練” 使用可不是會配置,工程啟動不報錯那么簡單。所以還是有必要全面了解一下zookeeper的相關知識。

一、zookeeper初識?

Zookeeper 它作為Hadoop項目中的一個開源子項目,是一個經典的分布式數據一致性解決方案,致力于為分布式應用提供一個高性能、高可用,且具有嚴格順序訪問控制能力的分布式協調服務。

1、zookeeper數據模型

zookeeper 維護了一個類似文件系統的數據結構,每個子目錄(/微信、/微信/公眾號)都被稱作為 znode 即節點。和文件系統一樣,我們可以很輕松的對 znode 節點進行增加、刪除等操作,而且還可以在一個znode下增加、刪除子znode,區別在于文件系統的是,znode可以存儲數據(嚴格說是必須存放數據,默認是個空字符)。

由于zookeeper是目錄節點結構,在獲取和創建節點時,必須要以“/” 開頭,否則在獲取節點時會報錯 Path must start with / character。

 

  1. 1[zk: localhost:2181(CONNECTED) 13] get test 
  2. 2Command failed: java.lang.IllegalArgumentException: Path must start with / character 

根節點名必須為“/XXX”,創建子節點時必須要帶上根節點目錄“/XXX/CCC”、“/XXX/AAA”。

例如:想要獲取下圖 程序員內點事 節點必須拼接完整的路徑 get /微信/公眾號/程序員內點事

 

  1. 1get /微信/公眾號/程序員內點事 

 

 

 

 

znode被用來存儲 byte級 或 kb級 的數據,可存儲的最大數據量是1MB(請注意:一個節點的數據量不僅包含它自身存儲數據,它的所有子節點的名字也要折算成Byte數計入,因此znode的子節點數也不是無限的)雖然可以手動的修改節點存儲量大小,但一般情況下并不推薦這樣做。

2、znode節點屬性

一個znode節點不僅可以存儲數據,還有一些其他特別的屬性。接下來我們創建一個/test節點分析一下它各個屬性的含義。

 

  1.  1[zk: localhost:2181(CONNECTED) 6] get /test 
  2.  2456 
  3.  3cZxid = 0x59ac // 
  4.  4ctime = Mon Mar 30 15:20:08 CST 2020 
  5.  5mZxid = 0x59ad 
  6.  6mtime = Mon Mar 30 15:22:25 CST 2020 
  7.  7pZxid = 0x59ac 
  8.  8cversion = 0 
  9.  9dataVersion = 2 
  10. 10aclVersion = 0 
  11. 11ephemeralOwner = 0x0 
  12. 12dataLength = 3 
  13. 13numChildren = 0   

 

 

 

 

我們看到一個znode節點的屬性比較多,但比較主要的屬性還是zxid、version、acl 這三個。

Zxid:

znode節點狀態改變會導致該節點收到一個zxid格式的時間戳,這個時間戳是全局有序的,znode節點的建立或者更新都會產生一個新的。如果zxid1的值 < zxid2的值,那么說明zxid2發生的改變在zxid1之后。每個znode節點都有3個zxid屬性,cZxid(節點創建時間)、mZxid(該節點修改時間,與子節點無關)、pZxid(該節點或者該節點的子節點的最后一次創建或者修改時間,孫子節點無關)。

zxid屬性主要應用于zookeeper的集群,這個后邊介紹集群時詳細說。

Version:

znode屬性中一共有三個版本號dataversion(數據版本號)、cversion(子節點版本號)、aclversion(節點所擁有的ACL權限版本號)。

znode中的數據可以有多個版本,如果某一個節點下存有多個數據版本,那么查詢這個節點數據就需要帶上版本號。每當我們對znode節點數據修改后,該節點的dataversion版本號會遞增。當客戶端請求該znode節點時,會同時返回節點數據和版本號。另外當dataversion為 -1的時候可以忽略版本進行操作。對一個節點設置權限時aclVersion版本號會遞增,下邊會詳細說ACL權限控制。

驗證一下,我們修改/test節點的數據看看dataVersion有什么變化,發現dataVersion屬性變成了 3,版本號遞增了。

 

  1.  1[zk: localhost:2181(CONNECTED) 10] set /test 8888 
  2.  2cZxid = 0x59ac 
  3.  3ctime = Mon Mar 30 15:20:08 CST 2020 
  4.  4mZxid = 0x59b6 
  5.  5mtime = Mon Mar 30 16:58:08 CST 2020 
  6.  6pZxid = 0x59ac 
  7.  7cversion = 0 
  8.  8dataVersion = 3 
  9.  9aclVersion = 0 
  10. 10ephemeralOwner = 0x0 
  11. 11dataLength = 4 
  12. 12numChildren = 0 

3、znode的類型

zookeeper 有四種類型的znode,在用客戶端 client 創建節點的時候需要指定類型。

 

  1. 1zookeeper.create("/公眾號/程序員內點事""".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); 
  • PERSISTENT-持久化目錄節點 :client創建節點后,與zookeeper斷開連接該節點將被持久化,當client再次連接后節點依舊存在。
  • PERSISTENT_SEQUENTIAL-持久化順序節點 :client創建節點后,與zookeeper斷開連接該節點將被持久化,再次連接節點還存在,zookeeper會給該節點名稱進行順序編號,例如:/lock/0000000001、/lock/0000000002、/lock/0000000003。
  • EPHEMERAL-臨時目錄節點 :client與zookeeper斷開連接后,該節點即會被刪除
  • EPHEMERAL_SEQUENTIAL-臨時順序節點 :client與zookeeper斷開連接后,該節點被刪除,會給該節點名稱進行順序編號,例如:/lock/0000000001、/lock/0000000002、/lock/0000000003。

二、節點的ACL權限控制

ACL:即 Access Control List (節點的權限控制),通過ACL機制來解決znode節點的訪問權限問題,要注意的是zookeeper對權限的控制是基于znode級別的,也就說節點之間的權限不具有繼承性,即子節點不繼承父節點的權限。

zookeeper中設置ACL權限的格式由::三段組成。

schema :表示授權的方式

  • world:表示任何人都可以訪問
  • auth:只有認證的用戶可以訪問
  • digest:使用username :password用戶密碼生成MD5哈希值作為認證ID
  • host/ip:使用客戶端主機IP地址來進行認證

id:權限的作用域,用來標識身份,依賴于schema選擇哪種方式。

acl:給一個節點賦予哪些權限,節點的權限有create,、delete、write、read、admin 統稱 cdwra。

1、world:表示任何人都可以訪問

我們用 getAcl 命令來看一下,沒有設置過權限的znode節點,默認情況下的權限情況。

 

  1. 1[zk: localhost:2181(CONNECTED) 12] getAcl /test 
  2. 2'world,'anyone 
  3. 3: cdrwa 

看到沒有設置ACL屬性的節點,默認schema 使用的是world,作用域是anyone,節點權限是cdwra,也就是說任何人都可以訪問。

那我們如果要給一個schema 為非world的節點設置world權限咋搞?

 

  1. 1setAcl /test world:anyone:crdwa 

2、auth:只有認證的用戶可以訪問

schema 用auth授權表示只有認證后的用戶才可以訪問,那么首先就需要添加認證用戶,添加完以后需要對認證的用戶設置ACL權限。

 

  1. 1addauth digest test:password(明文) 

需要注意的是設置認證用戶時的密碼是明文的。

 

  1. 1[zk: localhost:2181(CONNECTED) 2] addauth digest user:user //用戶名:密碼 
  2. 2[zk: localhost:2181(CONNECTED) 5] setAcl /test auth:user:crdwa 
  3. 3[zk: localhost:2181(CONNECTED) 6] getAcl /test 
  4. 4'digest,'user:ben+k/3JomjGj4mfd4fYsfM6p0A= 
  5. 5: cdrwa 

實際上我們這樣設置以后,就是將這個節點開放給所有認證的用戶,setAcl /test auth:user:crdwa 相當于setAcl /test auth::crdwa。

3、digest:用戶名:密碼的驗證方式

用戶名:密碼方式授權是針對單個特定用戶,這種方式是不需要先添加認證用戶的。

如果在代碼中使用zookeeper客戶端設置ACL,那么密碼是明文的,但若是zk.cli等客戶端操作就需要將密碼進行sha1及base64處理。

  1. 1setAcl <path> digest:<user>:<password(密文)>:<acl> 
  2. 3setAcl /test digest:user:jalRr+knv/6L2uXdenC93dEDNuE=:crdwa 

那么密碼如何加密嘞?有以下幾種方式:

通過shell命令加密

  1. 1echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64 

使用zookeeper自帶的類庫org.apache.zookeeper.server.auth.DigestAuthenticationProvider生成

 

  1. 1java -cp /zookeeper-3.4.13/zookeeper-3.4.13.jar:/zookeeper-3.4.13/lib/slf4j-api-1.7.25.jar \ 
  2. 2  org.apache.zookeeper.server.auth.DigestAuthenticationProvider \ 
  3. 3  root:root 
  4. 4root:root->root:qiTlqPLK7XM2ht3HMn02qRpkKIE= 

4、host/ip:使用客戶端主機IP地址來進行認證

這種方式就比較好理解了,通過對特定的IP地址,也可以是一個IP段進行授權。

 

  1. 1[zk: localhost:2181(CONNECTED) 3] setAcl /test0000000014 ip:127.0.0.1:crdwa 
  2.  2cZxid = 0x59ac 
  3.  3ctime = Mon Mar 30 15:20:08 CST 2020 
  4.  4mZxid = 0x59b6 
  5.  5mtime = Mon Mar 30 16:58:08 CST 2020 
  6.  6pZxid = 0x59ac 
  7.  7cversion = 0 
  8.  8dataVersion = 3 
  9.  9aclVersion = 3 // 這個版本一直在增加 
  10. 10ephemeralOwner = 0x0 
  11. 11dataLength = 4 
  12. 12numChildren = 0 

三、zookeeper的靈魂 watcher

我們在開頭就說過:zookeeper可以為dubbo提供服務的注冊與發現,作為注冊中心,但你有想過zookeeper為啥能夠實現服務的注冊與發現嗎?這就不得不說一下zookeeper的靈魂 Watcher(監聽者)。

1、watcher是個啥?

watcher 是zooKeeper中一個非常核心功能 ,客戶端watcher 可以監控節點的數據變化以及它子節點的變化,一旦這些狀態發生變化,zooKeeper服務端就會通知所有在這個節點上設置過watcher的客戶端 ,從而每個客戶端都很快感知,它所監聽的節點狀態發生變化,而做出對應的邏輯處理。

簡單的介紹了一下watcher ,那么我們來分析一下,zookeeper是如何實現服務的注冊與發現。

zookeeper的服務注冊與發現,主要應用的是zookeeper的znode節點數據模型和watcher機制,大致的流程如下:

 

 

 

 

  • 服務注冊: 服務提供者(Provider)啟動時,會向zookeeper服務端注冊服務信息,也就是創建一個節點,例如:用戶注冊服務com.xxx.user.register,并在節點上存儲服務的相關數據(如服務提供者的ip地址、端口等)。
  • 服務發現: 服務消費者(Consumer)啟動時,根據自身配置的依賴服務信息,向zookeeper服務端獲取注冊的服務信息并設置watch監聽,獲取到注冊的服務信息之后,將服務提供者的信息緩存在本地,并進行服務的調用。
  • 服務通知: 一旦服務提供者因某種原因宕機不再提供服務之后,客戶端與zookeeper服務端斷開連接,zookeeper服務端上服務提供者對應服務節點會被刪除(例如:用戶注冊服務com.xxx.user.register),隨后zookeeper服務端會異步向所有消費用戶注冊服務com.xxx.user.register,且設置了watch監聽的服務消費者發出節點被刪除的通知,消費者根據收到的通知拉取最新服務列表,更新本地緩存的服務列表。

上邊的過程就是zookeeper可以實現服務注冊與發現的大致原理。

2、watcher類型

znode節點可以設置兩類watch,一種是DataWatches,基于znode節點的數據變更從而觸發 watch 事件,觸發條件getData()、exists()、setData()、 create()。

另一種是Child Watches,基于znode的孩子節點發生變更觸發的watch事件,觸發條件 getChildren()、 create()。

而在調用 delete() 方法刪除znode時,則會同時觸發Data Watches和Child Watches,如果被刪除的節點還有父節點,則父節點會觸發一個Child Watches。

3、watcher特性

watch對節點的監聽事件是一次性的!客戶端在指定的節點設置了監聽watch,一旦該節點數據發生變更通知一次客戶端后,客戶端對該節點的監聽事件就失效了。

如果還要繼續監聽這個節點,就需要我們在客戶端的監聽回調中,再次對節點的監聽watch事件設置為True。否則客戶端只能接收到一次該節點的變更通知。

四、zookeeper能實現哪些功能

服務的注冊與發現功能只是zookeeper的冰山一角,它還能實現諸如分布式鎖、隊列、配置中心等一系列功能,接下來我們只分析一下原理,具體的實現大家上網查一下資料還是比較全的。

1、分布式鎖

zookeeper基于watcher機制和znode的有序節點,天生就是一個分布式鎖的坯子。首先創建一個/test/lock父節點作為一把鎖,盡量是持久節點(PERSISTENT類型),每個嘗試獲取這把鎖的客戶端,在/test/lock父節點下創建臨時順序子節點。

由于序號的遞增性,我們規定序號最小的節點即獲得鎖。例如:客戶端來獲取鎖,在/test/lock節點下創建節點為/test/lock/seq-00000001,它是最小的所以它優先拿到了鎖,其它節點等待通知再次獲取鎖。/test/lock/seq-00000001執行完自己的邏輯后刪除節點釋放鎖。

那么節點/test/lock/seq-00000002想要獲取鎖等誰的通知呢?

這里我們讓/test/lock/seq-00000002節點監聽/test/lock/seq-00000001節點,一旦/test/lock/seq-00000001節點刪除,則通知/test/lock/seq-00000002節點,讓它再次判斷自己是不是最小的節點,是則拿到鎖,不是繼續等通知。

以此類推/test/lock/seq-00000003節點監聽/test/lock/seq-00000002節點,總是讓后一個節點監聽前一個節點,不用讓所有節點都監聽最小的節點,避免設置不必要的監聽,以免造成大量無效的通知,形成“羊群效應”。

zookeeper分布式鎖和redis分布式鎖相比,因為大量的創建、刪除節點性能上比較差,并不是很推薦。

 

 

 

2、分布式隊列

zookeeper實現分布式隊列也很簡單,應用znode的有序節點天然的“先進先出”,后創建的節點總是最大的,出隊總是拿序號最小的節點即可。

3、配置管理

現在有很多開源項目都在使用Zookeeper來維護配置,像消息隊列Kafka中,就使用Zookeeper來維護broker的信息;dubbo中管理服務的配置信息。原理也是基于watcher機制,例如:創建一個/config節點存放一些配置,客戶端監聽這個節點,一點修改/config節點的配置信息,通知各個客戶端數據變更重新拉取配置信息。

4、命名服務

zookeeper的命名服務:也就是我們常說的服務注冊與發現,主要是根據指定名字來獲取資源或服務的地址,服務提供者等信息,利用其znode節點的特點和watcher機制,將其作為動態注冊和獲取服務信息的配置中心,統一管理服務名稱和其對應的服務器列表信息,我們能夠近乎實時地感知到后端服務器的狀態(上線、下線、宕機)。

總結

本文旨在給大家介紹一下zookeeper的基礎知識,像面試中被問頻率較高的zookeeper集群選主等概念,并沒有放在這期來寫,因為集群的內容也是比較多的,我怕篇幅太長大家沒有耐心看完(其實就是有點犯懶了,哈哈哈!)

感興趣的小伙伴可以關注一波,zookeeper集群我們下期見嘍。

今天就說這么多,如果本文對您有一點幫助,希望能得到您一個點贊👍哦

您的認可才是我寫作的動力!

責任編輯:武曉燕 來源: 程序員內點事
相關推薦

2022-01-11 17:23:51

算法負載均衡Hash

2018-04-20 14:37:43

互聯網技術細節

2019-07-30 15:50:00

2016-10-21 10:00:01

HTML標簽WEB

2023-07-17 07:13:43

固態硬盤硬件

2016-11-09 13:52:35

Hadoop分布式集群

2023-12-27 11:38:01

2014-08-08 09:36:50

微軟IE

2018-10-17 11:20:55

SQL數據庫程序員

2020-12-17 10:55:54

SQL數據庫語言

2021-01-01 14:37:51

SQL數據庫語言

2011-07-10 15:18:11

開發

2015-11-30 11:52:03

云服務最佳實踐

2020-01-02 15:43:29

Spring設計策略

2015-03-16 11:33:16

程序員代碼bug

2023-11-03 12:56:47

PythonGUI

2019-05-31 09:32:02

CopyOnWriteKafka內核

2022-02-28 15:05:17

ArkUIHarmonyOS鴻蒙

2021-01-07 05:40:13

BLE模塊Android

2021-05-19 08:55:37

代碼程序員經驗分享
點贊
收藏

51CTO技術棧公眾號

狠狠人妻久久久久久综合蜜桃| 永久免费看av| 国产99久久久久久免费看| 大色综合视频网站在线播放| 欧美酷刑日本凌虐凌虐| 毛片av在线播放| 日本黄在线观看| 久久国产精品无码网站| 久久久久中文字幕| 女女互磨互喷水高潮les呻吟| 亚洲精品成人一区| 亚洲国产精品一区二区久久恐怖片 | 亚洲国产1区| 亚洲欧洲在线视频| 91人妻一区二区三区| 偷拍视频一区二区三区| 亚洲免费资源在线播放| 欧美精品一区二区视频| 99热这里只有精品9| 久久精品人人| 久久久免费电影| av最新在线观看| 亚洲老女人视频免费| 欧美一区二区三区免费大片| 日本va中文字幕| 蜜桃传媒在线观看免费进入 | 日韩精品一二区| 欧美激情亚洲国产| 欧美一级特黄高清视频| 国产一区二区三区天码| 精品999在线播放| 91看片破解版| 精品美女一区| 在线免费观看日本一区| 无罩大乳的熟妇正在播放| 91麻豆免费在线视频| 国产精品久久久久毛片软件| 欧美国产一区二区在线| 婷婷色在线视频| 国产精品一区二区在线看| 国产精品视频自在线| 国内自拍视频在线播放| 国产亚洲一级| 午夜精品久久久99热福利| 久久午夜鲁丝片午夜精品| 亚洲国产精品成人| 精品国产一区二区三区久久| 国产wwwwxxxx| 99re66热这里只有精品8| 国产一区二区日韩精品欧美精品| 一卡二卡三卡四卡| 综合国产视频| 亚洲区免费影片| 一本加勒比北条麻妃| 天海翼亚洲一区二区三区| 亚洲黄页视频免费观看| 四季av综合网站| 免费看久久久| 国产视频精品va久久久久久| 丰满少妇一区二区三区| 天堂99x99es久久精品免费| 国产视频久久久久| 人人妻人人澡人人爽人人精品 | 美女网站色91| 国产精品久久久久999| 中文字幕在线日本| 日本色综合中文字幕| 国产精品女人久久久久久| 中文在线字幕av| 六月丁香婷婷久久| 亚洲一区二区久久久久久| 精品国产18久久久久久| 成人av在线看| 欧美亚洲另类在线一区二区三区| 韩国三级在线观看久| 中文字幕乱码亚洲精品一区 | 狠狠久久婷婷| 97av视频在线| 国产精品午夜一区二区| 国产综合久久久久久久久久久久 | 日韩一级免费在线观看| 日韩毛片一区| 欧美一区二区三区影视| 折磨小男生性器羞耻的故事| 少妇一区二区三区| 中文字幕日韩在线播放| 激情综合网五月天| 亚洲精品美女| 国产精品爽黄69天堂a| 99久久精品国产一区色| 北条麻妃国产九九精品视频| 欧美精品一区二区三区在线看午夜| 成人免费视频| 一区二区三区免费| 日本成年人网址| 欧美男男gaygay1069| 精品蜜桃在线看| 野花社区视频在线观看| 成人嫩草影院| 韩国19禁主播vip福利视频| 日本一本在线观看| 国产高清不卡一区| 欧美一区二区福利| av中文字幕在线观看| 一本一本久久a久久精品综合麻豆| av免费一区二区| 女人抽搐喷水高潮国产精品| 日韩在线观看免费网站| 色播视频在线播放| 狠狠色综合播放一区二区| 美乳视频一区二区| caopo在线| 在线视频综合导航| 视频免费在线观看| 小处雏高清一区二区三区| 欧美中文字幕视频| 高清毛片aaaaaaaaa片| 国产精品色在线观看| 狠狠97人人婷婷五月| 国产免费区一区二区三视频免费 | 免费黄色在线视频| 欧美日韩亚洲一区三区| 国产日韩欧美夫妻视频在线观看| 五月婷婷六月激情| 一卡二卡三卡日韩欧美| 性生活免费在线观看| 久久av免费| 久久久亚洲欧洲日产国码aⅴ| 91theporn国产在线观看| 久久天堂av综合合色蜜桃网| 欧美精品久久久久久久久久久| 色狠狠一区二区三区| 亚洲色图激情小说| 天堂中文在线网| av电影在线观看完整版一区二区 | 99视频一区| 懂色av一区二区三区在线播放| 欧美另类极品| 欧美日韩一区二区在线观看视频| 精品少妇人妻一区二区黑料社区| 亚洲精品偷拍| 久久久久久久久一区二区| 后进极品白嫩翘臀在线播放| 日韩视频123| 无码人妻精品一区二区三区夜夜嗨| 蜜桃av一区二区在线观看| 欧洲在线视频一区| 欧美精品高清| 在线成人中文字幕| 曰批又黄又爽免费视频| 国产欧美日韩久久| 欧美午夜aaaaaa免费视频| 国内成人精品| 国产精品自产拍高潮在线观看| 国产高清视频免费最新在线| 日本道免费精品一区二区三区| 真实乱视频国产免费观看| 久久这里有精品15一区二区三区| 免费毛片一区二区三区久久久| 绿色成人影院| 亚洲欧美中文另类| 久久久久久久亚洲| 中文在线一区二区| 中文字幕1234区| 欧美一区免费| 国产日韩三区| 久久精品女人天堂av免费观看| 国产一区二区三区在线观看视频 | 一根才成人网| 国产午夜精品一区二区三区 | 日韩久久久久久久| 精品176极品一区| 欧美日韩成人网| 少妇av一区二区| 在线观看免费视频综合| 娇小11一12╳yⅹ╳毛片| 国产黄色精品网站| 免费国产黄色网址| 精品国产一区二区三区噜噜噜 | 欧美成人免费网| 成人小说亚洲一区二区三区| 欧美视频在线免费看| 欧美88888| 大白屁股一区二区视频| 99蜜桃臀久久久欧美精品网站| 91视频综合| 国产精品美女久久久久av福利| 免费成人直播| 久久精品99国产精品酒店日本| 成人1区2区3区| 日韩欧美在线观看| 91杏吧porn蝌蚪| 91麻豆精品在线观看| 亚洲免费黄色网| 亚洲一区二区三区四区五区午夜| 一级二级三级欧美| 欧美人与动xxxxz0oz| 国产免费一区二区三区香蕉精| 美女91在线| 视频在线一区二区| 色噜噜在线播放| 欧美精品日日鲁夜夜添| 色婷婷在线观看视频| 亚洲乱码中文字幕| 一区二区三区久久久久| 国产成人午夜精品5599| 无码日韩人妻精品久久蜜桃| 亚洲国产精品第一区二区三区| 亚洲7777| 性人久久久久| 成人3d动漫一区二区三区91| 成人自拍视频网| 91国产美女视频| 日本三级在线观看网站| 色狠狠久久aa北条麻妃| 欧洲毛片在线| 亚洲成人精品视频| 国产女人爽到高潮a毛片| 在线观看免费一区| 亚洲天堂一区在线| 五月天网站亚洲| 久久国产一级片| 日韩毛片高清在线播放| 国产ts在线播放| 99视频精品在线| 中文字幕久久久久久久| 狠狠狠色丁香婷婷综合激情| wwww.国产| 久久人人超碰| 欧美日韩激情视频在线观看| 欧美日本一区二区视频在线观看| 日本成人性视频| 成人同人动漫免费观看| 欧美日韩一区二区三区在线观看免 | 日韩人在线观看| 欧美日韩综合在线观看| 亚洲一二三区不卡| 精品小视频在线观看| 一区二区三区四区激情| 破处女黄色一级片| 国产精品色噜噜| 手机看片国产日韩| 中文字幕精品一区二区精品绿巨人| 偷拍夫妻性生活| 久久久久久久久蜜桃| 97超碰在线资源| 久久久久国产精品麻豆ai换脸 | 丰满少妇在线观看| 日韩激情中文字幕| 热久久精品免费视频| 日韩在线一区二区| 三级视频中文字幕| 麻豆国产精品777777在线| 黄大色黄女片18第一次| 经典三级在线一区| 性鲍视频在线观看| 风间由美一区二区三区在线观看| 亚洲成人av免费观看| 国产成人丝袜美腿| 日本三级日本三级日本三级极| www.欧美精品一二区| 亚洲熟女乱综合一区二区三区| 99精品视频一区二区三区| 香蕉视频黄色在线观看| 国产午夜精品在线观看| 99自拍偷拍视频| 亚洲欧美另类久久久精品2019| 欧美人妻精品一区二区免费看| 亚洲国产成人av好男人在线观看| 国产精品美女久久久久av爽| 91精品福利视频| 亚洲一区在线观| 欧美不卡激情三级在线观看| 亚洲av电影一区| 国产一区二区三区毛片| 羞羞的视频在线观看| 2019亚洲日韩新视频| jizz欧美| 肥熟一91porny丨九色丨| 岳的好大精品一区二区三区| 亚洲激情一区二区三区| 欧美日韩亚洲一区在线观看| 国产裸体舞一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 三级黄色片播放| 91蝌蚪porny| 国产免费一区二区三区四区| 亚洲国产成人av| 亚洲熟妇av乱码在线观看| 日韩天堂在线观看| 国产高清视频在线| 久久久久久香蕉网| 国产成人77亚洲精品www| 国产精品乱码| 成人久久电影| 精品久久久久久久久久中文字幕| 久久国产人妖系列| 黄色网址在线视频| 1000精品久久久久久久久| 欧美bbbbbbbbbbbb精品| 欧美精品久久99久久在免费线| 天天干在线观看| 久久九九国产精品怡红院 | 亚洲理论电影网| 国产主播在线看| 成人小视频免费观看| 国产探花视频在线| 日韩欧美高清在线视频| 精品人妻无码一区二区三区蜜桃一 | 国产成人三级| 性一交一乱一伧国产女士spa| 日韩不卡一二三区| 亚洲一区二区乱码| 亚洲精品五月天| 中文字幕在线一| 亚洲美女自拍视频| 国产深夜视频在线观看| 成人啪啪免费看| 成人亚洲一区| 久久精品.com| hitomi一区二区三区精品| 国产盗摄x88av| 欧美精品少妇一区二区三区| 国模吧精品人体gogo| 91国在线精品国内播放| 136福利精品导航| 日本免费黄色小视频| 看片的网站亚洲| 国产7777777| 在线观看免费一区| 国产免费av高清在线| 26uuu另类亚洲欧美日本一| 成人春色在线观看免费网站| 福利网在线观看| 欧美aaa在线| 国产1区2区在线观看| 日韩欧美在线观看| 黄色av网站在线看| 热久久免费视频精品| 黄色欧美在线| 精品国产一区三区| 不卡欧美aaaaa| 日韩三级一区二区三区| 亚洲福利精品在线| free性m.freesex欧美| 国产一区二区精品免费| 亚洲高清二区| yy1111111| 欧美性猛交xxxx黑人猛交| 欧美扣逼视频| 国产aⅴ夜夜欢一区二区三区| 欧美精品momsxxx| xxxx一级片| 国产精品国产三级国产专播品爱网 | 在线亚洲欧美| 久久精品女同亚洲女同13| 婷婷成人综合网| 麻豆app在线观看| 国产精品成人av性教育| 成人直播大秀| 亚洲精品mv在线观看| 1000部国产精品成人观看| 99国产精品欲| 国模精品视频一区二区| 亚洲区小说区图片区qvod| mm1313亚洲国产精品无码试看| 中文字幕av资源一区| 国产精品熟女久久久久久| 九九热这里只有在线精品视| 久久综合五月婷婷| 五十路熟女丰满大屁股| 久久久www成人免费毛片麻豆| 中文字幕第一页在线播放| 久久视频免费观看| 老司机凹凸av亚洲导航| 亚洲高清在线免费观看| 亚洲精品国产第一综合99久久 | 亚洲自拍一区在线观看| 中文字幕成人精品久久不卡| 欧美经典影片视频网站| 欧美,日韩,国产在线| 亚洲国产精品传媒在线观看| 国产精品主播一区二区| 欧美一区二三区| 99久久婷婷| 亚洲成人av免费在线观看| 欧美日韩一区三区四区| 后进极品白嫩翘臀在线播放| 日韩经典在线视频| 成人妖精视频yjsp地址| 国产精品熟女视频| 欧美黄色成人网| 欧美日韩激情在线一区二区三区| 精品无码av一区二区三区不卡| 欧美视频中文字幕在线| 天堂8中文在线| 三区精品视频观看| 成年人网站91| 国产精品久久久久久免费| 26uuu另类亚洲欧美日本一|