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

深入了解Zookeeper核心原理

開(kāi)發(fā) 前端
這個(gè)應(yīng)該算是Zookeeper中的基礎(chǔ),數(shù)據(jù)存儲(chǔ)的最小單元。在Zookeeper中,類似文件系統(tǒng)的存儲(chǔ)結(jié)構(gòu),被Zookeeper抽象成了樹(shù),樹(shù)中的每一個(gè)節(jié)點(diǎn)(Node)被叫做ZNode。

[[396511]]

之前的文章Zookeeper基礎(chǔ)原理&應(yīng)用場(chǎng)景詳解中將Zookeeper的基本原理及其應(yīng)用場(chǎng)景做了一個(gè)詳細(xì)的介紹,雖然介紹了其底層的存儲(chǔ)原理、如何使用Zookeeper來(lái)實(shí)現(xiàn)分布式鎖。但是我認(rèn)為這樣也僅僅只是了解了Zookeeper的一點(diǎn)皮毛而已。所以這篇文章就給大家詳細(xì)聊聊Zookeeper的核心底層原理。不太熟悉Zookeeper的可以回過(guò)頭去看看。

ZNode

這個(gè)應(yīng)該算是Zookeeper中的基礎(chǔ),數(shù)據(jù)存儲(chǔ)的最小單元。在Zookeeper中,類似文件系統(tǒng)的存儲(chǔ)結(jié)構(gòu),被Zookeeper抽象成了樹(shù),樹(shù)中的每一個(gè)節(jié)點(diǎn)(Node)被叫做ZNode。ZNode中維護(hù)了一個(gè)數(shù)據(jù)結(jié)構(gòu),用于記錄ZNode中數(shù)據(jù)更改的版本號(hào)以及ACL(Access Control List)的變更。

有了這些數(shù)據(jù)的版本號(hào)以及其更新的Timestamp,Zookeeper就可以驗(yàn)證客戶端請(qǐng)求的緩存是否合法,并協(xié)調(diào)更新。

而且,當(dāng)Zookeeper的客戶端執(zhí)行更新或者刪除操作時(shí),都必須要帶上要修改的對(duì)應(yīng)數(shù)據(jù)的版本號(hào)。如果Zookeeper檢測(cè)到對(duì)應(yīng)的版本號(hào)不存在,則不會(huì)執(zhí)行這次更新。如果合法,在ZNode中數(shù)據(jù)更新之后,其對(duì)應(yīng)的版本號(hào)也會(huì)一起更新。

  • 這套版本號(hào)的邏輯,其實(shí)很多框架都在用,例如RocketMQ中,Broker向NameServer注冊(cè)的時(shí)候,也會(huì)帶上這樣一個(gè)版本號(hào),叫DateVersion。

接下來(lái)我們來(lái)詳細(xì)看一下這個(gè)維護(hù)版本號(hào)相關(guān)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),它叫Stat Structure,其字段有:

舉個(gè)例子,通過(guò)stat命令,我們可以查看某個(gè)ZNode中Stat Structure具體的值。

關(guān)于這里的epoch、zxid是Zookeeper集群相關(guān)的東西,后面會(huì)詳細(xì)的對(duì)其進(jìn)行介紹。

ACL

ACL(Access Control List)用于控制ZNode的相關(guān)權(quán)限,其權(quán)限控制和Linux中的類似。Linux中權(quán)限種類分為了三種,分別是讀、寫(xiě)、執(zhí)行,分別對(duì)應(yīng)的字母是r、w、x。其權(quán)限粒度也分為三種,分別是擁有者權(quán)限、群組權(quán)限、其他組權(quán)限,舉個(gè)例子:

  1. drwxr-xr-x  3 USERNAME  GROUP  1.0K  3 15 18:19 dir_name 

什么叫粒度?粒度是對(duì)權(quán)限所作用的對(duì)象的分類,把上面三種粒度換個(gè)說(shuō)法描述就是**對(duì)用戶(Owner)、用戶所屬的組(Group)、其他組(Other)**的權(quán)限劃分,這應(yīng)該算是一種權(quán)限控制的標(biāo)準(zhǔn)了,典型的三段式。

Zookeeper中雖然也是三段式,但是兩者對(duì)粒度的劃分存在區(qū)別。Zookeeper中的三段式為Scheme、ID、Permissions,含義分別為權(quán)限機(jī)制、允許訪問(wèn)的用戶和具體的權(quán)限。

Scheme代表了一種權(quán)限模式,有以下5種類型:

  • world 在此中Scheme下,ID只能是anyone,代表所有人都可以訪問(wèn)
  • auth 代表已經(jīng)通過(guò)了認(rèn)證的用戶
  • digest 使用用戶名+密碼來(lái)做校驗(yàn)。
  • ip 只允許某些特定的IP訪問(wèn)ZNode
  • X509 通過(guò)客戶端的證書(shū)進(jìn)行認(rèn)證

同時(shí)權(quán)限種類也有五種:

  • CREATE 創(chuàng)建節(jié)點(diǎn)
  • READ 獲取節(jié)點(diǎn)或列出其子節(jié)點(diǎn)
  • WRITE 能設(shè)置節(jié)點(diǎn)的數(shù)據(jù)
  • DELETE 能夠刪除子節(jié)點(diǎn)
  • ADMIN 能夠設(shè)置權(quán)限

同Linux中一樣,這個(gè)權(quán)限也有縮寫(xiě),舉個(gè)例子:

getAcl方法用戶查看對(duì)應(yīng)的ZNode的權(quán)限,如圖,我們可以輸出的結(jié)果呈三段式。分別是:

  • scheme 使用了world
  • id 值為anyone,代表所有用戶都有權(quán)限
  • permissions 其具體的權(quán)限為cdrwa,分別是CREATE、DELETE、READ、WRITE和ADMIN的縮寫(xiě)

Session機(jī)制

了解了Zookeeper的Version機(jī)制,我們可以繼續(xù)探索Zookeeper的Session機(jī)制了。

我們知道,Zookeeper中有4種類型的節(jié)點(diǎn),分別是持久節(jié)點(diǎn)、持久順序節(jié)點(diǎn)、臨時(shí)節(jié)點(diǎn)和臨時(shí)順序節(jié)點(diǎn)。

在之前的文章我們聊到過(guò),客戶端如果創(chuàng)建了臨時(shí)節(jié)點(diǎn),并在之后斷開(kāi)了連接,那么所有的臨時(shí)節(jié)點(diǎn)就都會(huì)被刪除。實(shí)際上斷開(kāi)連接的說(shuō)話不是很精確,應(yīng)該是說(shuō)客戶端建立連接時(shí)的Session過(guò)期之后,其創(chuàng)建的所有臨時(shí)節(jié)點(diǎn)就會(huì)被全部刪除。

那么Zookeeper是怎么知道哪些臨時(shí)節(jié)點(diǎn)是由當(dāng)前客戶端創(chuàng)建的呢?

  • 答案是Stat Structure中的**ephemeralOwner(臨時(shí)節(jié)點(diǎn)的Owner)**字段

上面說(shuō)過(guò),如果當(dāng)前是臨時(shí)順序節(jié)點(diǎn),那么ephemeralOwner則存儲(chǔ)了創(chuàng)建該節(jié)點(diǎn)的Owner的SessionID,有了SessionID,自然就能和對(duì)應(yīng)的客戶端匹配上,當(dāng)Session失效之后,才能將該客戶端創(chuàng)建的所有臨時(shí)節(jié)點(diǎn)全部刪除。

對(duì)應(yīng)的服務(wù)在創(chuàng)建連接的時(shí)候,必須要提供一個(gè)帶有所有服務(wù)器、端口的字符串,單個(gè)之間逗號(hào)相隔,舉個(gè)例子。

  • 127.0.0.1:3000:2181,127.0.0.1:2888,127.0.0.1:3888

Zookeeper的客戶端收到這個(gè)字符串之后,會(huì)從中隨機(jī)選一個(gè)服務(wù)、端口來(lái)建立連接。如果連接在之后斷開(kāi),客戶端會(huì)從字符串中選擇下一個(gè)服務(wù)器,繼續(xù)嘗試連接,直到連接成功。

除了這種最基本的IP+端口,在Zookeeper的3.2.0之后的版本中還支持連接串中帶上路徑,舉個(gè)例子。

  • 127.0.0.1:3000:2181,127.0.0.1:2888,127.0.0.1:3888/app/a

這樣一來(lái),/app/a就會(huì)被當(dāng)成當(dāng)前服務(wù)的根目錄,在其下創(chuàng)建的所有的節(jié)點(diǎn)路經(jīng)都會(huì)帶上前綴/app/a。舉個(gè)例子,我創(chuàng)建了一個(gè)節(jié)點(diǎn)/node_name,那其完整的路徑就會(huì)為/app/a/node_name。這個(gè)特性特別適用于多租戶的環(huán)境,對(duì)于每個(gè)租戶來(lái)說(shuō),都認(rèn)為自己是最頂層的根目錄/。

當(dāng)Zookeeper的客戶端和服務(wù)器都建立了連接之后,客戶端會(huì)拿到一個(gè)64位的SessionID和密碼。這個(gè)密碼是干什么用的呢?我們知道Zookeeper可以部署多個(gè)實(shí)例,如果客戶端斷開(kāi)了連接又和另外的Zookeeper服務(wù)器建立了連接,那么在建立連接使就會(huì)帶上這個(gè)密碼。該密碼是Zookeeper的一種安全措施,所有的Zookeeper節(jié)點(diǎn)都可以對(duì)其進(jìn)行驗(yàn)證。這樣一來(lái),即使連接到了其他Zookeeper節(jié)點(diǎn),Session同樣有效。

Session過(guò)期有兩種情況,分別是:

  • 過(guò)了指定的失效時(shí)間
  • 指定時(shí)間內(nèi)客戶端沒(méi)有發(fā)送心跳

對(duì)于第一種情況,過(guò)期時(shí)間會(huì)在Zookeeper客戶端建立連接的時(shí)候傳給服務(wù)器,這個(gè)過(guò)期時(shí)間的范圍目前只能在2倍tickTime和20倍tickTime之間。

ticktime是Zookeeper服務(wù)器的配置項(xiàng),用于指定客戶端向服務(wù)器發(fā)送心跳的間隔,其默認(rèn)值為tickTime=2000,單位為毫秒

而這套Session的過(guò)期邏輯由Zookeeper的服務(wù)器維護(hù),一旦Session過(guò)期,服務(wù)器會(huì)立即刪除由Client創(chuàng)建的所有臨時(shí)節(jié)點(diǎn),然后通知所有正在監(jiān)聽(tīng)這些節(jié)點(diǎn)的客戶端相關(guān)變更。

對(duì)于第二種情況,Zookeeper中的心跳是通過(guò)PING請(qǐng)求來(lái)實(shí)現(xiàn)的,每隔一段時(shí)間,客戶端都會(huì)發(fā)送PING請(qǐng)求到服務(wù)器,這就是心跳的本質(zhì)。心跳使服務(wù)器感知到客戶端還活著,同樣的讓客戶端也感知到和服務(wù)器的連接仍然是有效的,這個(gè)間隔就是**tickTime**,默認(rèn)為2秒。

Watch機(jī)制

了解完ZNode和Session,我們終于可以來(lái)繼續(xù)下一個(gè)關(guān)鍵功能Watch了,在上面的內(nèi)容中也不止一次的提到**監(jiān)聽(tīng)(Watch)**這個(gè)詞。首先用一句話來(lái)概括其作用

  • 給某個(gè)節(jié)點(diǎn)注冊(cè)監(jiān)聽(tīng)器,該節(jié)點(diǎn)一旦發(fā)生變更(例如更新或者刪除),監(jiān)聽(tīng)者就會(huì)收到一個(gè)Watch Event

和ZNode中有多種類型一樣,Watch也有多種類型,分別是一次性Watch和永久性Watch。

  • 一次性Watch 在被觸發(fā)之后,該Watch就會(huì)移除
  • 永久性Watch 在被觸發(fā)之后,仍然保留,可以繼續(xù)監(jiān)聽(tīng)ZNode上的變更,是Zookeeper 3.6.0版本新增的功能

一次性的Watch可以在調(diào)用getData()、getChildren()和exists()等方法時(shí)在參數(shù)中進(jìn)行設(shè)置,永久性的Watch則需要調(diào)用addWatch()來(lái)實(shí)現(xiàn)。

并且一次性的Watch會(huì)存在問(wèn)題,因?yàn)樵赪atch觸發(fā)的事件到達(dá)客戶端、再到客戶端設(shè)立新的Watch,是有一個(gè)時(shí)間間隔的。而如果在這個(gè)時(shí)間間隔中發(fā)生的變更,客戶端則無(wú)法感知。

Zookeeper集群架構(gòu)

ZAB協(xié)議

把前面的都鋪墊好之后就可以來(lái)從整體架構(gòu)的角度再深入了解Zookeeper。Zookeeper為了保證其高可用,采用的基于主從的讀寫(xiě)分離架構(gòu)。

  • 我們知道在類似的Redis主從架構(gòu)中,節(jié)點(diǎn)之間是采用的Gossip協(xié)議來(lái)進(jìn)行通信的,那么在Zookeeper中通信協(xié)議是什么?

答案是**ZAB(Zookeeper Atomic Broadcast)**協(xié)議。

ZAB協(xié)議是一種支持崩潰恢復(fù)的的原子廣播協(xié)議,用于在Zookeeper之間傳遞消息,使所有的節(jié)點(diǎn)都保持同步。ZAB同時(shí)具有高性能、高可用的、容易上手、利于維護(hù)的特點(diǎn),同時(shí)支持自動(dòng)的故障恢復(fù)。

ZAB協(xié)議將Zookeeper集群中的節(jié)點(diǎn)劃分成了三個(gè)角色,分別是Leader、Follower和Observer,如下圖:

總的來(lái)說(shuō),這套架構(gòu)和Redis主從或者M(jìn)ySQL主從的架構(gòu)類似(感興趣的也可以去看之前的寫(xiě)的文章,都有聊過(guò))

  • Redis主從
  • MySQL主從

不同點(diǎn)在于,通常的主從架構(gòu)中存在兩種角色,分別是Leader、Follower(或者是Master、Slave),但Zookeeper中多了一個(gè)Observer。

  • 那問(wèn)題來(lái)了,Observer和Follower的區(qū)別是啥呢?

本質(zhì)上來(lái)說(shuō)兩者的功能是一樣的, 都為Zookeeper提供了橫向擴(kuò)展的能力,使其能夠扛住更多的并發(fā)。但區(qū)別在于Leader的選舉過(guò)程中,Observer不參與投票選舉。

順序一致性

上文提到了Zookeeper集群中是讀寫(xiě)分離的,只有Leader節(jié)點(diǎn)能處理寫(xiě)請(qǐng)求,如果Follower節(jié)點(diǎn)接收到了寫(xiě)請(qǐng)求,會(huì)將該請(qǐng)求轉(zhuǎn)發(fā)給Leader節(jié)點(diǎn)處理,F(xiàn)ollower節(jié)點(diǎn)自身是不會(huì)處理寫(xiě)請(qǐng)求的。

Leader節(jié)點(diǎn)接收到消息之后,會(huì)按照請(qǐng)求的嚴(yán)格順序一一的進(jìn)行處理。這是Zookeeper的一大特點(diǎn),它會(huì)保證消息的順序一致性。

  • 舉個(gè)例子,如果消息A比消息B先到,那么在所有的Zookeeper節(jié)點(diǎn)中,消息A都會(huì)先于消息B到達(dá),Zookeeper會(huì)保證消息的全局順序。

zxid

那Zookeeper是如何保證消息的順序?答案是通過(guò)zxid。

可以簡(jiǎn)單的把zxid理解成Zookeeper中消息的唯一ID,節(jié)點(diǎn)之間會(huì)通過(guò)發(fā)送**Proposal(事務(wù)提議)**來(lái)進(jìn)行通信、數(shù)據(jù)同步,proposal中就會(huì)帶上zxid和具體的數(shù)據(jù)(Message)。而zxid由兩部分組成:

  • epoch 可以理解成朝代,或者說(shuō)Leader迭代的版本,每個(gè)Leader的epoch都不一樣
  • counter 計(jì)數(shù)器,來(lái)一條消息就會(huì)自增

這也是唯一zxid生成算法的底層實(shí)現(xiàn),由于每個(gè)Leader所使用的epoch都是唯一的,而不同的消息在相同的epoch中,counter的值是不同的,這樣一來(lái)所有的proposal在Zookeeper集群中都有唯一的zxid。

恢復(fù)模式

正常運(yùn)行的Zookeeper集群會(huì)處于廣播模式。相反,如果超過(guò)半數(shù)的節(jié)點(diǎn)宕機(jī),就會(huì)進(jìn)入恢復(fù)模式。

  • 什么是恢復(fù)模式?

在Zookeeper集群中,存在兩種模式,分別是:

  • 恢復(fù)模式
  • 廣播模式

當(dāng)Zookeeper集群故障時(shí)會(huì)進(jìn)入恢復(fù)模式,也叫做Leader Activation,顧名思義就是要在此階段選舉出Leader。節(jié)點(diǎn)之間會(huì)生成zxid和Proposal,然后相互投票。投票是要有原則的,主要有兩條:

  • 選舉出來(lái)的Leader的zxid一定要是所有的Follower中最大的
  • 并且已有超過(guò)半數(shù)的Follower返回了ACK,表示認(rèn)可選舉出來(lái)的Leader

如果在選舉的過(guò)程中發(fā)生異常,Zookeeper會(huì)直接進(jìn)行新一輪的選舉。如果一切順利,Leader就會(huì)被成功選舉出來(lái),但是此時(shí)集群還不能正常對(duì)外提供服務(wù),因?yàn)樾碌腖eader和Follower之間還沒(méi)有進(jìn)行關(guān)鍵的數(shù)據(jù)同步。

此后,Leader會(huì)等待其余的Follower來(lái)連接,然后通過(guò)Proposal向所有的Follower發(fā)送其缺失的數(shù)據(jù)。

  • 至于怎么知道缺失哪些數(shù)據(jù),Proposal本身是要記錄日志,通過(guò)Proposal中的zxid的低32位的Counter中的值,就可以做一個(gè)Diff

當(dāng)然這里有個(gè)優(yōu)化,如果缺失的數(shù)據(jù)太多,那么一條一條的發(fā)送Proposal效率太低。所以如果Leader發(fā)現(xiàn)缺失的數(shù)據(jù)過(guò)多就會(huì)將當(dāng)前的數(shù)據(jù)打個(gè)快照,直接打包發(fā)送給Follower。

新選舉出來(lái)的Leader的Epoch,會(huì)在原來(lái)的值上+1,并且將Counter重置為0。

  • 到這你是不是以為就完了?實(shí)際上到這還是無(wú)法正常提供服務(wù)

數(shù)據(jù)同步完成之后,Leader會(huì)發(fā)送一個(gè)NEW_LEADER的Proposal給Follower,當(dāng)且僅當(dāng)該P(yáng)roposal被過(guò)半的Follower返回Ack之后,Leader才會(huì)Commit該NEW_LEADER Proposal,集群才能正常的進(jìn)行工作。

至此,恢復(fù)模式結(jié)束,集群進(jìn)入廣播模式。

廣播模式

在廣播模式下,Leader接收到消息之后,會(huì)向其他所有Follower發(fā)送Proposal(事務(wù)提議),F(xiàn)ollower接收到Proposal之后會(huì)返回ACK給Leader。當(dāng)Leader收到了quorums個(gè)ACK之后,當(dāng)前Proposal就會(huì)提交,被應(yīng)用到節(jié)點(diǎn)的內(nèi)存中去。quorum個(gè)是多少呢?

Zookeeper官方建議每2個(gè)Zookeeper節(jié)點(diǎn)中,至少有一個(gè)需要返回ACK才行,假設(shè)有N個(gè)Zookeeper節(jié)點(diǎn),那計(jì)算公式應(yīng)該是n/2 + 1。

這樣可能不是很直觀,用大白話來(lái)說(shuō)就是,超過(guò)半數(shù)的Follower返回了ACK,該P(yáng)roposal就能夠提交,并且應(yīng)用至內(nèi)存中的ZNode。

Zookeeper使用2PC來(lái)保證節(jié)點(diǎn)之間的數(shù)據(jù)一致性(如上圖),但是由于Leader需要跟所有的Follower交互,這樣一來(lái)通信的開(kāi)銷會(huì)變得較大,Zookeeper的性能就會(huì)下降。所以為了提升Zookeeper的性能,才從所有的Follower節(jié)點(diǎn)返回ACK變成了過(guò)半的Follower返回ACK即可。

 

責(zé)任編輯:姜華 來(lái)源: SH的全棧筆記
相關(guān)推薦

2021-01-19 12:00:39

前端監(jiān)控代碼

2024-07-01 00:00:04

ViteUMD瀏覽器

2021-01-12 09:03:17

MySQL復(fù)制半同步

2010-06-23 20:31:54

2010-11-19 16:22:14

Oracle事務(wù)

2022-08-26 13:48:40

EPUBLinux

2020-09-21 09:53:04

FlexCSS開(kāi)發(fā)

2009-08-25 16:27:10

Mscomm控件

2010-07-13 09:36:25

2020-07-20 06:35:55

BashLinux

2020-11-06 16:50:43

工具GitLab CICD

2011-07-18 15:08:34

2010-11-15 11:40:44

Oracle表空間

2022-06-03 10:09:32

威脅檢測(cè)軟件

2010-11-08 13:54:49

Sqlserver運(yùn)行

2018-06-22 13:05:02

前端JavaScript引擎

2010-09-27 09:31:42

JVM內(nèi)存結(jié)構(gòu)

2013-04-16 10:20:21

云存儲(chǔ)服務(wù)云存儲(chǔ)SLA服務(wù)水平協(xié)議

2023-10-08 00:02:07

Java排序算法

2011-02-21 13:14:29

Qmail
點(diǎn)贊
收藏

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

色就色 综合激情| 国产成人久久精品77777最新版本| 亚洲一区二区国产| 色婷婷.com| 麻豆av在线播放| 久久久精品综合| 亚洲精品欧美日韩专区| 亚洲欧美偷拍一区| 亚洲精品91| 亚洲人成电影网站色| 婷婷激情综合五月天| 人成在线免费网站| 亚洲欧洲成人精品av97| 久久www免费人成精品| 国产女18毛片多18精品| 国产亚洲激情| 欧美日韩第一视频| 蜜桃av乱码一区二区三区| 波多野结衣在线一区二区| 欧美性猛交xxxx黑人| 天天想你在线观看完整版电影免费| 日韩中文字幕免费观看| 久国产精品韩国三级视频| 97在线视频免费播放| 手机看片福利视频| 理论片一区二区在线| 欧美一区二区三区免费观看视频 | 无码成人精品区在线观看| a∨色狠狠一区二区三区| 黄网动漫久久久| 超碰超碰超碰超碰超碰| 午夜视频在线| 国产三级欧美三级日产三级99 | 天堂成人在线视频| 久久66热re国产| 国产精品人成电影在线观看| 欧美国产成人精品一区二区三区| 亚洲午夜伦理| 免费不卡欧美自拍视频| 国产视频精品免费| 日韩理论电影院| 一区二区三区回区在观看免费视频| 午夜av免费看| 久久这里只有精品一区二区| 精品日韩av一区二区| 无套内谢丰满少妇中文字幕 | 欧美日韩国产影片| 国产情侣av自拍| 欧美二三四区| 色婷婷久久久久swag精品| 日韩在线一级片| 丝袜诱惑一区二区| 欧美日韩激情小视频| 免费看日本毛片| 麻豆mv在线看| 色综合天天狠狠| 99色精品视频| 在线最新版中文在线| 日韩欧美一区二区三区| 国产精品亚洲αv天堂无码| 午夜影院在线播放| 一本久道久久综合中文字幕| 日韩精品一区二区三区不卡| 日韩欧美一区二区三区免费观看 | 中文字幕 日韩 欧美| 欧美黄色网络| 777奇米成人网| 成人啪啪18免费游戏链接| 国产精品调教视频| 日韩精品中文在线观看| 黄色片网站免费| 国产精品久久久久久久| 欧美富婆性猛交| caoporn国产| 蜜臀久久99精品久久久画质超高清 | 麻豆精品视频在线| 91嫩草视频在线观看| 人妻少妇精品无码专区| 国产偷国产偷精品高清尤物| 亚洲一区二区三区精品动漫| 久久久123| 色婷婷激情一区二区三区| 九九热99视频| 久9re热视频这里只有精品| 国产一区av在线| 国产精品三区在线观看| 日韩视频二区| 国产欧美在线视频| 你懂的网站在线| 欧美国产国产综合| 日韩视频在线视频| 97欧美成人| 亚洲成人在线视频播放| 国产在线免费av| 亚洲美女视频在线免费观看| 国产精品亚发布| 天堂网在线中文| 国产精品成人在线观看| 精品欧美一区免费观看α√| 欧美成人家庭影院| 亚洲精品美女久久久| 亚洲综合久久av一区二区三区| 亚洲激情欧美| 国产精品一区久久| 女人18毛片水真多18精品| 日本一区二区高清| 国产九九九九九| 亚洲一区有码| 欲色天天网综合久久| 九九九国产视频| 国产在线视频一区二区| 欧美aaaaa喷水| 日韩伦理电影网站| 欧美高清性hdvideosex| 精品人妻无码一区二区三区换脸| 欧美三级不卡| 国产在线视频欧美| 欧美精品少妇| 香蕉影视欧美成人| 欧美体内she精高潮| 成人网18免费网站| 日韩av片电影专区| 熟妇人妻一区二区三区四区| 一区二区视频在线| 久久久精品高清| 日韩精品一卡| 国产精品久久久久不卡| 亚洲欧洲精品视频| 亚洲线精品一区二区三区| 三日本三级少妇三级99| 三上亚洲一区二区| 国产精品高清在线| 国产在线日本| 一本色道**综合亚洲精品蜜桃冫| 午夜视频在线观看国产| 亚洲国产一区二区三区高清 | 久久久精品高清| 成人精品视频| 国产精品网红直播| 91ph在线| 欧美精品在线观看一区二区| 欧美日韩国产黄色| 久久先锋影音| 欧美少妇一区| 亚洲成人短视频| 亚洲亚裔videos黑人hd| 美女又爽又黄免费视频| www精品美女久久久tv| 欧美一区二区中文字幕| 精品国产导航| 欧美一级淫片videoshd| 青青草手机在线| 在线精品视频一区二区| 一级特黄曰皮片视频| 蜜臀av国产精品久久久久 | chinese偷拍一区二区三区| 在线亚洲人成电影网站色www| av电影网站在线观看| 日本亚洲天堂网| 在线看无码的免费网站| 嫩呦国产一区二区三区av| 欧美精品久久久久久久| 天堂网av2014| 欧美午夜精品久久久久久孕妇| 貂蝉被到爽流白浆在线观看| 激情综合网天天干| 日韩精品免费一区| 欧洲亚洲成人| 国产精品美女www| 九色porny在线| 欧美tk—视频vk| 色一情一乱一伦| 中文字幕精品在线不卡| 又黄又爽又色的视频| 亚洲黄色天堂| 日韩精品欧美专区| 青草伊人久久| 8050国产精品久久久久久| 国产青青草在线| 欧美一三区三区四区免费在线看 | 精品一区国产| 国外成人福利视频| 久久久亚洲精选| 成人在线观看免费| 日韩午夜电影在线观看| 亚洲综合久久网| 亚洲精品一二三区| 人人妻人人澡人人爽人人精品| 麻豆精品蜜桃视频网站| 欧美在线一区视频| 97精品一区| 久久综合久久综合这里只有精品| 日韩欧美三区| 欧美一级片久久久久久久| 国产在线观看免费麻豆| 精品中文视频在线| 99国产精品99| 在线看日本不卡| 国产性xxxx高清| 亚洲私人影院在线观看| 精品人妻一区二区三区视频| 国产一区二三区| 免费在线观看毛片网站| 黄色综合网站| www亚洲国产| 国产精品亚洲人成在99www| 国产精品日韩一区二区| 小说区图片区亚洲| 日韩av电影手机在线观看| 青春草在线视频| 一区二区欧美日韩视频| 亚洲成人一二三区| 欧美精品v国产精品v日韩精品| 亚洲高清毛片一区二区| 亚洲一区二区三区美女| 内射一区二区三区| 中文字幕久久午夜不卡| 国产高潮呻吟久久| 99v久久综合狠狠综合久久| 久久精品一二三四| 久久丁香综合五月国产三级网站| 国产91在线视频观看| 欧美精品1区| 中国 免费 av| 久久精品播放| 色女人综合av| 精品国精品国产自在久国产应用| 久久久久成人精品免费播放动漫| 99久久香蕉| 999热视频在线观看| www.欧美| 91精品久久久久久久久久久久久久| 欧美黄色三级| 日韩美女中文字幕| 周于希免费高清在线观看| 69**夜色精品国产69乱| 超碰在线资源| 久久免费精品日本久久中文字幕| av网站网址在线观看| 久久亚洲精品网站| 哥也色在线视频| 北条麻妃一区二区三区中文字幕| 香蕉视频国产在线观看| 国产亚洲精品久久久久久777 | 久久九九99视频| 性欧美丰满熟妇xxxx性仙踪林| 91亚洲精品久久久蜜桃网站| 亚洲av网址在线| 91麻豆国产香蕉久久精品| 国产黄色三级网站| 99久久er热在这里只有精品66| a天堂视频在线观看| 99视频精品全部免费在线| 精品无码人妻少妇久久久久久| 高清不卡在线观看| 亚洲精品乱码久久| 91在线播放网址| 人妻一区二区视频| 国产精品家庭影院| 色婷婷在线视频观看| 亚洲国产裸拍裸体视频在线观看乱了| 国产一级一片免费播放| 福利一区福利二区微拍刺激| 亚洲天堂一区在线| 91福利精品视频| 国产麻豆免费观看| 欧美不卡一二三| 天堂中文在线看| 国产亚洲精品久久久久久牛牛| 麻豆系列在线观看| 久久久久久久久久久免费 | 在线视频观看一区| 最新国产中文字幕| 91精品国产乱码| 五月婷婷狠狠干| 一区二区三区四区精品| 麻豆av在线免费看| 国a精品视频大全| 亚州一区二区三区| 99re热精品| 亚洲免费毛片| 国产a级片免费看| 99精品国产一区二区青青牛奶| www.四虎成人| 福利电影一区二区三区| 最新中文字幕视频| 亚洲人成网站色在线观看| 制服.丝袜.亚洲.中文.综合懂色| 欧美日韩精品一区二区| 国产综合在线播放| 揄拍成人国产精品视频| 久久国产精品黑丝| 国产精品久久久久久av福利| 日本亚州欧洲精品不卡| 欧美精品亚洲精品| 亚洲色图欧美| 99色精品视频| 成人午夜免费视频| 99久久99久久精品免费看小说.| 亚洲一区二区影院| 国模私拍一区二区| 亚洲国产天堂久久国产91| 一广人看www在线观看免费视频| 国内免费精品永久在线视频| 亚洲免费一区| 欧美激情视频一区二区三区| 欧美xxx在线观看| 一路向西2在线观看| 99热这里都是精品| 破处女黄色一级片| 欧美色综合网站| 无码精品人妻一区二区三区影院| 久久伊人精品视频| 欧美aaa大片视频一二区| 国产伦精品一区二区三区免费视频 | 国产亚洲精品女人久久久久久| 在线免费av一区| 女人偷人在线视频| 国语自产在线不卡| 国产精品久一| 一本一生久久a久久精品综合蜜| 欧美亚洲视频| 亚洲激情 欧美| 亚洲一区二区在线免费观看视频| 国产乱码久久久久| 色悠悠久久久久| 成人va天堂| 欧美成人在线免费观看| 影音先锋亚洲电影| 伊人影院在线观看视频| 亚洲欧美经典视频| 国产又黄又粗又猛又爽| 在线日韩欧美视频| 亚洲精品粉嫩美女一区| 麻豆精品蜜桃一区二区三区| 影音先锋中文字幕一区| youjizz.com国产| 一区二区三区欧美日韩| 国产肥老妇视频| 米奇精品一区二区三区在线观看| 国产高清亚洲| 国产又爽又黄ai换脸| 精品午夜久久福利影院| 男女男精品视频网站| 欧美日韩另类国产亚洲欧美一级| 免费av在线| 91黄在线观看| 国产精品va| 国产精品入口麻豆| 婷婷国产v国产偷v亚洲高清| 欧美一级一区二区三区| 隔壁老王国产在线精品| 色天天色综合| 亚洲人成无码www久久久| 国产亚洲一区二区三区| 最新中文字幕在线观看视频| 日韩中文字幕国产| 国产精品中文| 国产精品自拍合集| 99热这里都是精品| 久草视频在线免费| 日韩中文在线视频| 欧美三级一区| 男人的天堂狠狠干| 久久色在线视频| 中文字幕在线播放不卡| 两个人的视频www国产精品| 亚洲性视频在线| 日韩精品视频久久| 亚洲国产精品精华液2区45| 国产精品久久久久久久久久久久久久久久久久| 久久伊人精品视频| 欧美亚洲色图校园春色| 久久精品香蕉视频| 亚洲日本乱码在线观看| 少妇无码一区二区三区| 日韩av电影国产| 综合久久一区| 在线精品一区二区三区| 欧美日韩国产免费一区二区 | 日批视频在线看| 精品久久久久久久久国产字幕| 在线播放麻豆| 国产精品一区二区欧美| 日韩国产欧美在线播放| 欧美 日韩 国产 一区二区三区| 日韩的一区二区| 亚洲欧美综合久久久久久v动漫| 青青草精品视频在线| 亚洲国产精品精华液2区45| 黄色一级a毛片| 国产精品视频导航| 一区视频在线| 久草福利资源在线| 亚洲第一精品夜夜躁人人躁| 福利视频一区| 国产综合av在线| 亚洲黄色免费网站| 在线免费看黄网站| 精品一区二区视频|