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

Apple 如何構(gòu)建 iCloud 來存儲數(shù)十億個數(shù)據(jù)庫

譯文 精選
數(shù)據(jù)庫 其他數(shù)據(jù)庫
Record Layer采用了這一策略來高效地管理其排名索引系統(tǒng)中的一部分結(jié)構(gòu)——跳表(skip list)。然而,手動設(shè)置這些沖突范圍可能較為復(fù)雜,并且可能導(dǎo)致難以識別的錯誤,特別是當(dāng)它們與應(yīng)用程序的主要邏輯混合在一起時。因此,建議構(gòu)建于FoundationDB之上的系統(tǒng)創(chuàng)建更高級別的工具,如自定義索引,以處理這些模式。

作者丨Leonardo Creed

編譯丨諾亞

出品 | 51CTO技術(shù)棧(微信號:blog51cto)

在過去的幾個月里,我寫了關(guān)于大型科技公司的各種技術(shù)“幕后揭秘”的文章,例如 Meta 的內(nèi)部無服務(wù)器平臺、 Google 內(nèi)部喜愛的代碼審查工具等等。不過,蘋果的基礎(chǔ)設(shè)施并不那么公開。我想了解 Apple 是如何構(gòu)建 iCloud 的,在這篇文章中,我將介紹我所知道的一切。

Apple 將 FoundationDB 和 Cassandra 用于其云端后端服務(wù) iCloud 和 CloudKit。而且本文的標(biāo)題并沒有弄錯:蘋果確實(shí)在其極端的多租戶架構(gòu)中存儲了數(shù)十億個數(shù)據(jù)庫。

一、閱讀指南

我發(fā)現(xiàn),論文中以及蘋果的實(shí)踐經(jīng)驗(yàn)與Meta無服務(wù)器平臺架構(gòu)的設(shè)計(jì)原則和教訓(xùn)高度契合。

1、兩者都巧妙地運(yùn)用了異步處理技術(shù),以實(shí)現(xiàn)用戶功能的流暢性。Meta在其無服務(wù)器架構(gòu)中,將非面向用戶的函數(shù)任務(wù)利用該技術(shù)進(jìn)行處理,從而避免影響用戶體驗(yàn)。而蘋果則在Record Layer(在下文將詳細(xì)解釋)的幾乎全部功能上采用異步處理方式,目的是隱藏延遲,確保用戶感受到的是即時響應(yīng)。

2、兩者都廣泛采用無狀態(tài)架構(gòu)設(shè)計(jì),鑒于它們都有極高的可擴(kuò)展性需求。(注:無狀態(tài)架構(gòu)意味著服務(wù)器不保存任何會話或請求之間的持久化狀態(tài)信息,從而使得每個請求都能獨(dú)立處理,且可以根據(jù)需要輕松地增加或減少服務(wù)器實(shí)例以應(yīng)對流量變化。)

3、兩者都通過邏輯隔離資源來確保可靠性和可用性。

4、兩者都以簡化的方式處理各類需求。蘋果提到,為存儲“小數(shù)據(jù)”和“大數(shù)據(jù)”分別配置和運(yùn)營獨(dú)立系統(tǒng)是很有誘惑力的做法,但這會增加運(yùn)維的復(fù)雜性。因此,蘋果選擇用一個抽象層來處理所有類型的數(shù)據(jù)需求。同樣地,Meta在他們的無服務(wù)器平臺上也采用相同策略,提供了一個統(tǒng)一的抽象層,用于處理各種函數(shù)負(fù)載。

5、兩者都通過構(gòu)建抽象層來優(yōu)化開發(fā)者體驗(yàn),讓應(yīng)用開發(fā)者無需過多關(guān)注可擴(kuò)展性需求。這些需求由底層分布式系統(tǒng)工程師在更深層次的架構(gòu)中處理。   

6、深知用戶需求。無論是Meta還是Apple,它們提供的每一層架構(gòu)、API設(shè)計(jì)以及每一個設(shè)計(jì)決策都是基于對特定技術(shù)使用者(無論是應(yīng)用開發(fā)團(tuán)隊(duì)還是可觀測性團(tuán)隊(duì))清晰理解的基礎(chǔ)上制定的。

二、Cassandra

Cassandra 是一種分布式、寬列式NoSQL數(shù)據(jù)庫管理系統(tǒng),最初由Facebook開發(fā),用于支持Facebook收件箱搜索功能的實(shí)現(xiàn)。有趣的是,后來的Meta自身已逐步用ZippyDB替代了大量原本使用Cassandra的地方。

根據(jù)DataStax的信息,iCloud的部分功能由Cassandra提供支持。蘋果運(yùn)營著全球規(guī)模最大的Cassandra部署之一。

他們報(bào)告指出:

  • 超過30萬個實(shí)例/節(jié)點(diǎn)
  • 數(shù)據(jù)規(guī)模達(dá)到數(shù)百PB(甚至EB級別)
  • 每個集群處理超過2 PB的數(shù)據(jù),且擁有數(shù)千個這樣的集群
  • 每秒處理數(shù)百萬次查詢
  • 支持?jǐn)?shù)千個應(yīng)用程序

Cassandra在iCloud中的應(yīng)用確實(shí)彰顯了其管理海量數(shù)據(jù)的能力,達(dá)到EB級別。蘋果在其服務(wù)器上采用多節(jié)點(diǎn)Cassandra部署策略,并且團(tuán)隊(duì)在設(shè)計(jì)時非常注重“爆炸半徑”(blast radius)控制和數(shù)據(jù)分片(sharding),以最大程度地減少故障影響范圍并優(yōu)化數(shù)據(jù)分布與訪問性能,從而確保iCloud服務(wù)的數(shù)據(jù)可用性接近100%。

與此同時,蘋果公司內(nèi)部仍在積極改進(jìn)Cassandra技術(shù)。來自蘋果公司的Scott Andreas最近發(fā)表了關(guān)于Cassandra未來發(fā)展的演講。同時,在蘋果的招聘頁面上,經(jīng)常可以看到他們?yōu)榉植际较到y(tǒng)工程師崗位列出熟練使用Cassandra的要求。

盡管Cassandra在處理大規(guī)模分布式存儲方面表現(xiàn)出色,但在蘋果iCloud的特定場景下,結(jié)合使用CloudKit和Cassandra時遇到了兩個關(guān)鍵的可擴(kuò)展性限制,這導(dǎo)致他們采用了 FoundationDB。

1、在Cassandra單一分區(qū)內(nèi),即使編輯的是不同的記錄,同一時間也只能進(jìn)行一個操作。這意味著對于那些需要多個用戶或設(shè)備同時處理共享數(shù)據(jù)的應(yīng)用程序來說,可能會出現(xiàn)性能瓶頸和并發(fā)控制問題。   

2、在Cassandra中,如果需要在一個原子操作內(nèi)同時更新多個記錄,這些更新操作會受限于單個Cassandra分區(qū)。每個分區(qū)都有其能夠處理的最大數(shù)據(jù)量限制,隨著分區(qū)內(nèi)數(shù)據(jù)的不斷增長,Cassandra的性能往往會隨之下降。

FoundationDB 和 Record Layer 解決了這兩個問題。

三、FoundationDB

蘋果對FoundationDB的公開程度要高得多。他們于 2015 年收購了 FoundationDB,此后發(fā)表了多篇論文,詳細(xì)介紹了他們對 FoundationDB 的使用。

FoundationDB 是一個開源的分布式事務(wù)型鍵值存儲系統(tǒng),旨在處理大規(guī)模的數(shù)據(jù)量,并且在讀寫混合負(fù)載以及寫入密集型工作負(fù)載方面表現(xiàn)出色。此外,F(xiàn)oundationDB 也符合 ACID(原子性、一致性、隔離性和持久性)原則。

蘋果在CloudKit(其云端后端服務(wù))中廣泛使用了FoundationDB Record Layer。

來源:《FoundationDB Record Layer:開源結(jié)構(gòu)化存儲》來源:《FoundationDB Record Layer:開源結(jié)構(gòu)化存儲》

從GitHub上的描述來看,Record Layer是一個基于FoundationDB的Java API,它提供了一種面向記錄的存儲方式,可以大致類比為一個簡單的關(guān)系型數(shù)據(jù)庫。具體特性包括:

1、結(jié)構(gòu)化類型:記錄以Protocol Buffer(protobuf)消息的形式進(jìn)行定義和存儲,Protocol Buffer是一種最初由Google設(shè)計(jì)的數(shù)據(jù)序列化協(xié)議。

2、索引:Record Layer支持多種索引類型,如值索引(大多數(shù)數(shù)據(jù)庫都提供的那種)、排名索引和聚合索引。索引和主鍵可以通過protobuf選項(xiàng)或程序化方式來定義。

3、復(fù)雜類型:支持復(fù)雜數(shù)據(jù)類型,例如列表和嵌套記錄,并且能夠針對這些嵌套結(jié)構(gòu)定義索引。

4、查詢功能:雖然Record Layer并未提供查詢語言,但它提供了API接口,支持對一個或多個記錄類型進(jìn)行掃描、過濾和排序操作,同時還包含一個能夠自動選擇合適索引的查詢規(guī)劃器。

5、多個記錄存儲與共享模式:Record Layer允許創(chuàng)建并管理多個獨(dú)立的記錄存儲實(shí)例,所有實(shí)例都采用共享(且可動態(tài)演變)的模式。舉例來說,不同于在一個單一數(shù)據(jù)庫中存儲所有用戶數(shù)據(jù)的方式,每個用戶可以擁有自己的記錄存儲,甚至可以根據(jù)需要跨不同的FDB集群實(shí)例進(jìn)行分片處理。

6、極輕量級:Record Layer被設(shè)計(jì)用于大型、分布式、無狀態(tài)環(huán)境,旨在實(shí)現(xiàn)從打開存儲到執(zhí)行首次查詢之間的時間間隔達(dá)到毫秒級別。

7、擴(kuò)展性強(qiáng):新的索引類型以及自定義索引鍵表達(dá)式可以動態(tài)地融入到記錄存儲中。

根據(jù)FoundationDB Record Layer論文所述,蘋果使用FoundationDB Record Layer為服務(wù)數(shù)億用戶的大型應(yīng)用提供強(qiáng)大的抽象層支持。CloudKit 使用Record Layer來托管數(shù)十億個獨(dú)立的數(shù)據(jù)庫,其中許多數(shù)據(jù)庫共享相同的模式(schema)。

四、為什么要使用 FoundationDB Record Layer

FoundationDB、Record Layer 和 CloudKit 的結(jié)構(gòu)如下所示:

來源:《FoundationDB Record Layer: 開源結(jié)構(gòu)化存儲》來源:《FoundationDB Record Layer: 開源結(jié)構(gòu)化存儲》

  • FoundationDB 負(fù)責(zé)所有的分布式系統(tǒng)和并發(fā)控制工作。
  • Record Layer 作為中間層,充當(dāng)了關(guān)系數(shù)據(jù)庫,以便開發(fā)者能夠更輕松地與 FoundationDB 進(jìn)行交互。
  • CloudKit 是最頂層的服務(wù),為應(yīng)用開發(fā)者提供了豐富的功能和API。雖然CloudKit是構(gòu)建在Record Layer之上的一個典型應(yīng)用案例,但內(nèi)部還有其他服務(wù)和組件也基于Record Layer構(gòu)建,比如用于處理JSON文檔存儲等需要結(jié)構(gòu)化存儲的場景。

Record Layer 使蘋果能夠在大規(guī)模上實(shí)現(xiàn)多租戶支持。

實(shí)際上,這樣的描述可能還顯得保守了。

Record Layer 被用于極端的多租戶環(huán)境,其中每個應(yīng)用程序的每個用戶都能獲得獨(dú)立的記錄存儲空間。這意味著Record Layer 托管著數(shù)十億個共享數(shù)千種模式的獨(dú)立數(shù)據(jù)庫。

來源:《FoundationDB Record Layer: 開源結(jié)構(gòu)化存儲》來源:《FoundationDB Record Layer: 開源結(jié)構(gòu)化存儲》

Record Layer 能夠在如此大規(guī)模上成功處理多租戶問題,主要?dú)w功于其兩個核心架構(gòu)決策:

1、無狀態(tài)操作:Record Layer 設(shè)計(jì)為無狀態(tài)模式,這意味著通過簡單地增加更多無狀態(tài)實(shí)例,就可以輕松擴(kuò)展計(jì)算資源。

這種設(shè)計(jì)使得負(fù)載均衡器和路由器的工作變得更為簡化,它們只需關(guān)注數(shù)據(jù)的位置而非計(jì)算服務(wù)器的具體能力。同時,由于無狀態(tài)服務(wù)器無需維護(hù)會話狀態(tài)等信息,因此分配給客戶端的資源集合得以減少。

2、記錄存儲抽象化管理:Record Layer 使用記錄存儲抽象層來高效管理資源分配和可擴(kuò)展性。這個抽象層代表了整個邏輯數(shù)據(jù)庫,包含了序列化數(shù)據(jù)、索引以及運(yùn)行時狀態(tài)。

每個記錄存儲都有特定的鍵范圍分配,確保不同租戶的數(shù)據(jù)在邏輯上保持分離。如有必要遷移某個租戶的數(shù)據(jù),過程十分直接,只需將分配給該租戶的鍵范圍遷移到新的集群中即可,因?yàn)楣芾砼c使用該記錄存儲所需的所有信息都包含在這個鍵范圍內(nèi)。

五、CloudKit 如何使用 FoundationDB 和Record Layer

來源:《FoundationDB Record Layer: 多租戶結(jié)構(gòu)化數(shù)據(jù)存儲系統(tǒng)》來源:《FoundationDB Record Layer: 多租戶結(jié)構(gòu)化數(shù)據(jù)存儲系統(tǒng)》

在CloudKit中,每個應(yīng)用程序由一個遵循特定模式的“邏輯容器”來表示。這個模式詳細(xì)定義了必要的記錄類型、字段和索引,以實(shí)現(xiàn)高效的數(shù)據(jù)檢索和查詢功能。應(yīng)用程序在CloudKit內(nèi)部將其數(shù)據(jù)組織到不同的“區(qū)域”(zones)中,這樣可以按邏輯分組記錄,便于與客戶端設(shè)備進(jìn)行選擇性同步。

對于每一位用戶,CloudKit在FoundationDB中分配一個唯一的子空間。在這個子空間內(nèi),針對用戶使用的所有應(yīng)用程序,CloudKit都會為每個應(yīng)用創(chuàng)建一個記錄存儲。換言之,CloudKit實(shí)際上管理著大量邏輯數(shù)據(jù)庫——即用戶數(shù)量乘以應(yīng)用程序數(shù)量所得到的數(shù)量級,每一個都包含其自身的記錄集、索引和元數(shù)據(jù),總量高達(dá)數(shù)十億個獨(dú)立數(shù)據(jù)庫。   

當(dāng)CloudKit接收到來自客戶端設(shè)備的請求時,它會通過負(fù)載均衡機(jī)制將請求導(dǎo)向可用的CloudKit服務(wù)進(jìn)程。該服務(wù)進(jìn)程隨后與Record Layer中的相應(yīng)記錄存儲進(jìn)行交互,以完成請求操作。

CloudKit將定義好的應(yīng)用程序模式轉(zhuǎn)換為Record Layer中的元數(shù)據(jù)定義,并將其存儲在獨(dú)立的元數(shù)據(jù)存儲中。此外,CloudKit還會添加特定的系統(tǒng)字段來豐富這些元數(shù)據(jù),如記錄的創(chuàng)建時間、修改時間以及記錄所在的區(qū)域信息。為了實(shí)現(xiàn)對每個區(qū)域內(nèi)記錄的有效訪問,區(qū)域名稱會被作為前綴附加到主鍵上。除了用戶自定義的索引外,CloudKit還管理“系統(tǒng)索引”,例如為了管理存儲配額而維護(hù)的一種根據(jù)記錄類型追蹤其大小的索引。

FoundationDB和Record Layer結(jié)合使用,共同解決了蘋果面臨的一些關(guān)鍵問題,這些問題單靠Cassandra或FoundationDB都無法完美解決。

六、已解決的問題

1、個性化全文搜索

FoundationDB在解決用戶個性化全文搜索,以快速訪問其數(shù)據(jù)方面發(fā)揮了重要作用。蘋果的系統(tǒng)利用了FoundationDB的鍵順序特性,能夠?qū)崿F(xiàn)對文本開頭(前綴匹配)進(jìn)行快速搜索,并且無需額外開銷即可處理更復(fù)雜的搜索需求,如查找相近詞或特定順序排列的詞語(鄰近搜索和短語搜索)。

在傳統(tǒng)的搜索系統(tǒng)中,通常需要后臺運(yùn)行額外的進(jìn)程來保持搜索索引的實(shí)時更新。而蘋果的系統(tǒng)則實(shí)現(xiàn)了所有操作的實(shí)時性,這意味著一旦數(shù)據(jù)發(fā)生變化,搜索索引會立即得到更新,無需任何額外步驟。這種設(shè)計(jì)不僅提高了搜索效率,還確保了數(shù)據(jù)的一致性和時效性,為用戶提供更為流暢、準(zhǔn)確的搜索體驗(yàn)。

2、高并發(fā)區(qū)域

FoundationDB為CloudKit處理同時發(fā)生的大量更新提供了更為平滑和一致的方式。

在以前使用Cassandra時,CloudKit依賴于一個特殊的索引來追蹤各個區(qū)域內(nèi)的數(shù)據(jù)變化以實(shí)現(xiàn)跨設(shè)備同步。當(dāng)設(shè)備需要更新數(shù)據(jù)時,會通過檢查這個索引來獲取最新信息。但這種方法存在一個問題:當(dāng)多臺設(shè)備幾乎同時進(jìn)行更新操作時,可能會引發(fā)沖突。   

而采用FoundationDB后,CloudKit利用了一種特殊類型的索引,它可以精確地跟蹤每一次更改的順序,而且不會導(dǎo)致沖突。這種機(jī)制是通過為每次變更分配一個唯一的“版本號”來實(shí)現(xiàn)的,當(dāng)CloudKit需要進(jìn)行同步時,它會根據(jù)這些版本號來確定設(shè)備錯過了哪些更新內(nèi)容。

然而,在將數(shù)據(jù)從一個存儲集群轉(zhuǎn)移到另一個存儲集群(可能是為了更均勻地分布負(fù)載)時,情況變得復(fù)雜起來,因?yàn)槊總€集群都有自己獨(dú)立的、不匹配的版本號。為解決這一問題,CloudKit為每位用戶的每份數(shù)據(jù)賦予了一個稱為“化身”的“遷移計(jì)數(shù)”,每當(dāng)用戶的數(shù)據(jù)被遷移到新集群時,“化身”值就會遞增。每個記錄更新都會包含用戶當(dāng)前的“化身”號碼,從而確保即使在遷移之后,CloudKit仍可以根據(jù)化身號和版本號來正確判斷出更新的順序。

當(dāng)CloudKit切換到這個新系統(tǒng)時,面臨的挑戰(zhàn)之一是如何處理那些尚未帶有版本號的老數(shù)據(jù)。他們巧妙地解決了這個問題,通過運(yùn)用一種特殊函數(shù),該函數(shù)可以先按照舊系統(tǒng)的方式對老的更新進(jìn)行排序,然后再加入新系統(tǒng)的更新。這意味著無需對應(yīng)用程序進(jìn)行復(fù)雜的改動或遺留過時代碼。此函數(shù)綜合考慮了化身、版本以及舊的更新計(jì)數(shù)器值,確保了記錄順序的準(zhǔn)確性。

3、高延遲查詢

FoundationDB 是為高并發(fā)設(shè)計(jì)的,而非針對低延遲。這意味著它能夠同時處理大量任務(wù),而不是專注于單個任務(wù)的速度。

來源:《FoundationDB Record Layer: 開源結(jié)構(gòu)化存儲》來源:《FoundationDB Record Layer: 開源結(jié)構(gòu)化存儲》

為了充分利用這種設(shè)計(jì),Record Layer在處理任務(wù)時采用了大量的異步操作方式——它會將任務(wù)排隊(duì)等待未來完成,期間可以繼續(xù)進(jìn)行其他工作。這種方法有助于掩蓋這些任務(wù)執(zhí)行過程中可能出現(xiàn)的延遲。

然而,F(xiàn)oundationDB用于與數(shù)據(jù)庫通信的工具最初是采用單線程模式設(shè)計(jì),一次只做一件事并使用一個網(wǎng)絡(luò)線程。在早期版本中,這種設(shè)置導(dǎo)致了系統(tǒng)內(nèi)部的擁堵,因?yàn)樗腥蝿?wù)都在等待輪到自己在這條網(wǎng)絡(luò)線程上執(zhí)行。Record Layer也沿用了這種單線程處理方法,這導(dǎo)致了性能瓶頸。

為了解決這一問題,蘋果公司著手減輕這條網(wǎng)絡(luò)線程的工作負(fù)載。現(xiàn)在,通過讓系統(tǒng)同時從多個角度與數(shù)據(jù)庫協(xié)同工作,而非形成單一的任務(wù)隊(duì)列,使得復(fù)雜的任務(wù)看上去執(zhí)行速度更快。這樣一來,由于系統(tǒng)無需等待一個任務(wù)完成后再開始另一個任務(wù),所以延遲或所謂的“緩慢感”被有效地隱藏起來。

4、沖突事務(wù)

在FoundationDB中,如果一個事務(wù)正在讀取某些鍵值,而另一個事務(wù)在同一時刻修改了這些相同的鍵值,則會導(dǎo)致“事務(wù)沖突”。FoundationDB通過提供對可能導(dǎo)致沖突的鍵集合進(jìn)行精確控制的能力,從而允許精細(xì)管理這些沖突。

避免不必要的沖突的一個常見方法是對一組鍵執(zhí)行一種特殊的、不會引發(fā)沖突的讀取操作,即所謂的“快照”讀取。如果這種讀取發(fā)現(xiàn)重要鍵值,那么事務(wù)只會針對那些特定鍵標(biāo)記潛在沖突,而不是整個鍵范圍。這樣可以確保事務(wù)只受到與其結(jié)果真正相關(guān)的更改影響。

Record Layer采用了這一策略來高效地管理其排名索引系統(tǒng)中的一部分結(jié)構(gòu)——跳表(skip list)。然而,手動設(shè)置這些沖突范圍可能較為復(fù)雜,并且可能導(dǎo)致難以識別的錯誤,特別是當(dāng)它們與應(yīng)用程序的主要邏輯混合在一起時。因此,建議構(gòu)建于FoundationDB之上的系統(tǒng)創(chuàng)建更高級別的工具,如自定義索引,以處理這些模式。這種方法有助于避免將放寬沖突規(guī)則的責(zé)任留給每個客戶端應(yīng)用,否則可能會導(dǎo)致錯誤和一致性問題的發(fā)生。

參考鏈接:

https://read.engineerscodex.com/p/how-apple-built-icloud-to-store-billions

https://www.foundationdb.org/files/record-layer-paper.pdf

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2013-01-22 17:33:30

2022-11-23 14:08:49

2020-09-29 09:09:03

數(shù)據(jù)庫程序運(yùn)行

2025-07-18 10:52:10

2019-05-22 15:57:11

面試ES性能數(shù)據(jù)

2020-09-17 11:02:40

BLESA藍(lán)牙攻擊漏洞

2017-06-14 17:45:49

2020-06-22 10:06:15

數(shù)據(jù)網(wǎng)絡(luò)泄露

2020-05-20 12:52:03

漏洞攻擊藍(lán)牙

2021-12-17 11:29:03

WiFi漏洞芯片

2014-02-26 09:11:00

IBM云計(jì)算BlueMix Paa

2015-11-04 12:23:56

ICT服務(wù)華為

2025-09-12 11:00:00

Akamai云計(jì)算安全

2021-09-07 05:36:59

藍(lán)牙漏洞惡意代碼

2018-01-12 15:00:50

iCloudApple ID云服務(wù)

2017-07-07 11:28:24

大數(shù)據(jù)大數(shù)據(jù)技術(shù)

2020-12-28 10:31:38

服務(wù)中斷網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)安全

2013-03-25 10:37:24

2012-12-20 11:16:16

IBMdW
點(diǎn)贊
收藏

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

国产成人在线视频观看| 精品日本一区二区三区| 成人免费看片载| 99青草视频在线播放视| 国内成人在线| 3d动漫精品啪啪一区二区竹菊| 麻豆av一区| 日韩成人免费在线观看| 136导航精品福利| 亚洲图片你懂的| 国产日韩欧美视频在线| www.中文字幕av | 亚洲午夜精品视频| 国产精品沙发午睡系列| 神马久久久久久久久久| 欧美日本免费| 日韩久久精品一区| 欧美日韩午夜爽爽| 国产成a人亚洲精v品无码| 婷婷精品进入| 欧美一区日本一区韩国一区| 中文字幕日韩一区二区三区| 亚洲无码精品在线观看| 久久视频精品| 欧美精品aⅴ在线视频| 伊人狠狠色丁香综合尤物| 中文字幕人成人乱码亚洲电影| 波多野结衣在线播放一区| 一本大道av伊人久久综合| 欧美日韩精品久久| 中文字幕a级片| 99热国内精品| 日韩一级视频免费观看在线| 久久综合亚洲精品| 韩国av免费在线| 国产精品亚洲产品| 亚洲欧美日韩综合| 午夜精品中文字幕| 99在线播放| 99久久精品99国产精品| 日本成人黄色片| 国产黄色录像视频| 久久久91麻豆精品国产一区| 亚洲高清一区二区三区| 欧美日韩一区在线视频| 亚洲一级特黄毛片| 亚洲国产一区二区三区在线播放| 日韩精品一区二区三区蜜臀| 91精品国产91久久久久麻豆 主演| 免费观看黄色一级视频| 久久久久国产精品午夜一区| 日韩中文字幕在线观看| 国产成人强伦免费视频网站| 国产在线观看www| 欧美激情综合在线| 成人欧美一区二区三区视频xxx| 国产又爽又黄的视频| 精品国产一区二区三区久久久樱花| 欧美日韩精品一区二区在线播放 | 最新亚洲激情| 影音先锋日韩有码| 第一页在线视频| 欧美大胆性生话| 亚洲免费观看视频| 欧美午夜精品理论片a级大开眼界| 中文字幕乱码中文字幕| 亚洲私人影院| 最新国产成人av网站网址麻豆| 亚洲热在线视频| 不卡av影片| 亚洲激情一二三区| 欧洲一区二区在线观看| 精品国产av鲁一鲁一区| 日本va欧美va瓶| 久久久久五月天| 欧美人与禽zoz0善交| 超碰在线成人| 欧美日韩国产综合一区二区| 国产毛片视频网站| 成人免费看片| 成人永久免费视频| 91免费视频国产| 国产精品第六页| 99精品国产在热久久下载| 久久亚洲精品网站| 一级肉体全黄裸片| 亚洲人成网亚洲欧洲无码| 日韩精品影音先锋| 亚洲天堂av一区二区| 欧美日韩成人影院| 欧美日韩国产专区| 中文字幕无码精品亚洲资源网久久| 欧美a在线看| 日本一二三不卡| 欧美另类一区| 青青草娱乐在线| 99久久久国产精品| 国产91一区二区三区| 夜夜爽8888| 日本aⅴ亚洲精品中文乱码| 欧美亚州一区二区三区| 亚洲国产123| 欧美色图激情小说| 一区二区三区在线播放欧美| 精品人妻一区二区三区香蕉| 精品久久ai| 日韩欧美一区中文| 天天色天天综合网| 英国三级经典在线观看| 欧美日韩国产黄| 男人添女人下部高潮视频在观看| 欧美卡一卡二| 亚洲国产另类av| 分分操这里只有精品| 欧美xxxx做受欧美88bbw| 亚洲人被黑人高潮完整版| 一区二区视频在线播放| 国产黄在线观看免费观看不卡| 91麻豆蜜桃一区二区三区| 久久av一区二区三区漫画| 国产黄色大片网站| 成人av免费网站| 国产美女99p| 天天色综合久久| 91免费在线看| 人禽交欧美网站免费| h网站在线免费观看| 国产精品国产馆在线真实露脸| 亚洲免费精品视频| 成人短视频在线| 亚洲一卡二卡三卡四卡五卡| 成人黄色av片| 欧美xnxx| 3d动漫精品啪啪一区二区竹菊| japan高清日本乱xxxxx| 国产精品高潮呻吟久久久久| 亚洲女人被黑人巨大进入al| 欧美激情 一区| 综合天堂av久久久久久久| 欧美高清激情视频| 精品国产一区二区三区四| 蜜臀91精品一区二区三区| 91夜夜未满十八勿入爽爽影院| 日本一级黄色录像| 国产 日韩 欧美在线| 久久国产精品久久久| 国产日本欧洲亚洲| 欧美日韩免费看| 人妻夜夜添夜夜无码av| 无遮挡在线观看| 欧美日韩一区成人| 爱情岛论坛亚洲自拍| 思热99re视热频这里只精品| 国产亚洲精品一区二555| 超碰在线国产97| 亚洲综合另类| 国产一区二区丝袜| 日韩在线观看视频一区| 国产欧美日韩麻豆91| 国产资源第一页| 亚洲欧美在线成人| 精品剧情在线观看| 国产成人免费观看网站| 欧美日韩国产在线一区| 国产999精品久久久影片官网| 国产又黄又猛又爽| 久久综合久久久久88| 超碰97免费观看| 爱情电影社保片一区| 日韩三级视频在线观看| 9.1片黄在线观看| 一区二区福利| 成人欧美一区二区三区在线观看| 中文日本在线观看| 日韩欧美国产激情| 国产大尺度视频| 五月天久久网站| 国产精品久久久久久久久久99| 人人妻人人澡人人爽久久av| 亚洲欧美影音先锋| 欧美精品一区二区三区免费播放| 日韩一区二区三区精品| 在线观看中文字幕亚洲| 国产嫩bbwbbw高潮| 成人免费毛片app| 特级毛片在线免费观看| 偷拍视频一区二区三区| 亚洲激情视频网站| 久草网视频在线观看| 狠狠色丁香久久婷婷综| 亚洲一区二区自拍偷拍| 色豆豆成人网| 亚洲人永久免费| 四虎成人永久免费视频| 99久久精品情趣| 野外做受又硬又粗又大视频√| 国产视频一区二| yellow中文字幕久久| 中文字幕欧美人妻精品| 国产欧美精品区一区二区三区| 男人用嘴添女人下身免费视频| 免费欧美网站| 美乳少妇欧美精品| 国产男男gay体育生白袜| 中文字幕日本不卡| 天堂在线中文在线| 欧美大黑bbbbbbbbb在线| 国产欧美亚洲视频| 毛片在线播放a| 在线播放一区二区三区| 九九热视频在线免费观看| 国产最新精品精品你懂的| 超碰在线免费观看97| 国产精品久久久久久av公交车| 久久精品99久久香蕉国产色戒| 91极品身材尤物theporn| 中文字幕亚洲欧美在线不卡| theporn国产精品| 中文字幕一区二区三区在线视频 | 亚洲电影第1页| 日韩成人免费在线视频| 97久久超碰国产精品电影| 日韩精品视频久久| 国产一区二区三区网| 国产精品网红福利| wwwav在线| 亚洲加勒比久久88色综合| 国产区在线观看视频| 日本一区二区三区高清不卡| 99sesese| 欧美激情自拍| 精品综合在线| 国产91亚洲精品久久久| 久久视频中文字幕| 色综合免费视频| 色妹子一区二区| 欧美性生交大片| 成人午夜激情片| 麻豆av免费在线| 91精品91| 久久国产精品一区二区三区四区 | 免费不卡的av| 美女视频一区免费观看| 亚洲免费不卡| 国产精品x8x8一区二区| 国产脚交av在线一区二区| 黄色网页在线免费观看| 欧美不卡一二三| 91久久国产视频| 国产精品日产欧美久久久久| 日本wwwxx| 久久婷婷丁香| 无码毛片aaa在线| 国产不卡av一区二区| 亚洲专区中文字幕| 欧洲av不卡| 欧美高清在线播放| 都市激情一区| 欧美精品一区二区三区四区 | 久久av免费观看| 91精品福利观看| 欧洲中文字幕国产精品| 青春草视频在线观看| 国产性猛交xxxx免费看久久| 亚洲av永久无码国产精品久久 | 九九精品视频在线观看| 户外极限露出调教在线视频| 日韩欧美不卡一区| 糖心vlog精品一区二区| 午夜精品国产更新| 男人的天堂久久久| 国产欧美日韩中文久久| 亚洲无人区码一码二码三码| 久久99热99| av网址在线观看免费| 亚洲小说欧美另类社区| 中文字幕在线亚洲精品| 国产精品羞羞答答在线观看| 国产精品一区二区a| 成人在线分类| 国产精品日韩av| 中文字幕在线视频网站| 欧美日韩爱爱视频| 激情成人四房播| 正在播放欧美一区| 色视频在线观看福利| 精品国产髙清在线看国产毛片| 亚洲系列第一页| 在线免费观看成人短视频| www成人在线| 精品日韩美女的视频高清| 国产一级在线观看视频| 亚洲精品v日韩精品| 国产精品夜夜夜爽阿娇| 国产精品女主播av| 国产精品情侣呻吟对白视频| 国产亚洲一区二区三区| 免费观看av网站| 99久久精品国产毛片| 性欧美18—19sex性高清| 成人午夜碰碰视频| 亚欧美一区二区三区| 国产一区在线精品| 色综合五月婷婷| 久久91精品久久久久久秒播| 亚洲一区日韩精品| 极品少妇xxxx偷拍精品少妇| 色呦色呦色精品| 国内精品伊人久久久久av一坑| 亚洲av无日韩毛片久久| 国产乱妇无码大片在线观看| 无码人妻少妇色欲av一区二区| 国产剧情av麻豆香蕉精品| 999热精品视频| 成人做爰69片免费看网站| 亚洲午夜精品在线观看| 高潮精品一区videoshd| 欧美肉大捧一进一出免费视频| av综合在线播放| 波多野结衣一本| 国产精品女同互慰在线看| 丝袜美腿小色网| 亚洲成人午夜影院| 天堂а√在线中文在线新版 | 人妻内射一区二区在线视频| 噜噜噜在线观看免费视频日韩| 国产无套粉嫩白浆内谢的出处| 视频一区国产视频| 日韩福利视频在线| 精一区二区三区| 日本亚洲一区二区三区| 成人国产精品视频| 中文字幕av网址| 国产精品蜜臀av| 特级片在线观看| 精品人伦一区二区三区蜜桃网站 | 国产精品乱码视频| 欧美日韩另类图片| 天堂社区 天堂综合网 天堂资源最新版 | 亚洲一区中文在线| 国产成人无码精品久在线观看 | 91在线你懂的| 精品日韩在线观看| 精品亚洲成a人片在线观看| 久久精品99久久久久久久久| 99色在线观看| 国产精品一区二区久久久| 日韩精品视频中文字幕| 欧美乱偷一区二区三区在线| 99久久精品国产亚洲精品 | 日本黄区免费视频观看 | 亚洲一区欧美在线| 欧美性色黄大片| 超碰免费在线97| 亚洲男人的天堂在线| а√资源新版在线天堂| 青青青国产精品一区二区| 亚洲欧美综合久久久久久v动漫| 国产伦视频一区二区三区| 日韩伦理一区| 免费在线观看亚洲视频| 精油按摩中文字幕久久| 蜜桃传媒一区二区亚洲av| 亚洲激情六月丁香| 97人妻精品视频一区| 亚洲黄页网在线观看| gogogogo高清视频在线| 国产激情久久久| 青青视频一区二区| 国产成人一二三区| 美女爽到高潮91| 日韩精品一区二区三区高清免费| 国产精品久久夜| 中文字幕在线欧美| 亚洲成人激情视频| a级影片在线| 国产一区二区在线免费视频| 日韩精品欧美大片| 日韩在线观看a| 国产一区二区三区免费播放| 亚洲色图欧美色| 色综合久久综合网97色综合| 三级网站免费观看| 色综合久久精品亚洲国产| 国产激情一区| 一区二区日本伦理| 免费视频最近日韩| 欧美熟妇激情一区二区三区| 午夜天堂影视香蕉久久| xxxwww在线观看| 久久在线免费视频| 伊人亚洲精品| 亚洲国内在线| 免费视频最近日韩| 免费看的黄色录像| 欧美日韩免费一区二区三区视频| 国产三级视频在线| 国产精品99蜜臀久久不卡二区| 美女久久99| 超碰网在线观看|