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

美團面試官:說說你對數據庫分庫分表的理解?

數據庫 其他數據庫
當單表的數據量達到1000W或100G以后,由于查詢維度較多,即使添加從庫、優化索引,做很多操作時性能仍下降嚴重。此時就要考慮對其進行切分了,切分的目的就在于減少數據庫的負擔,縮短查詢時間。

# 數據切分

關系型數據庫本身比較容易成為系統瓶頸,單機存儲容量、連接數、處理能力都有限。當單表的數據量達到1000W或100G以后,由于查詢維度較多,即使添加從庫、優化索引,做很多操作時性能仍下降嚴重。此時就要考慮對其進行切分了,切分的目的就在于減少數據庫的負擔,縮短查詢時間。 

數據庫分布式核心內容無非就是數據切分(Sharding),以及切分后對數據的定位、整合。數據切分就是將數據分散存儲到多個數據庫中,使得單一數據庫中的數據量變小,通過擴充主機的數量緩解單一數據庫的性能問題,從而達到提升數據庫操作性能的目的。

數據切分根據其切分類型,可以分為兩種方式:垂直(縱向)切分和水平(橫向)切分 

1、垂直(縱向)切分

垂直切分常見有垂直分庫和垂直分表兩種。

垂直分庫就是根據業務耦合性,將關聯度低的不同表存儲在不同的數據庫。做法與大系統拆分為多個小系統類似,按業務分類進行獨立劃分。與"微服務治理"的做法相似,每個微服務使用單獨的一個數據庫。如圖:

垂直分表是基于數據庫中的"列"進行,某個表字段較多,可以新建一張擴展表,將不經常用或字段長度較大的字段拆分出去到擴展表中。在字段很多的情況下(例如一個大表有100多個字段),通過"大表拆小表",更便于開發與維護,也能避免跨頁問題,MySQL底層是通過數據頁存儲的,一條記錄占用空間過大會導致跨頁,造成額外的性能開銷。

另外數據庫以行為單位將數據加載到內存中,這樣表中字段長度較短且訪問頻率較高,內存能加載更多的數據,命中率更高,減少了磁盤IO,從而提升了數據庫性能。

垂直切分的優點:

  •  解決業務系統層面的耦合,業務清晰
  •  與微服務的治理類似,也能對不同業務的數據進行分級管理、維護、監控、擴展等
  •  高并發場景下,垂直切分一定程度的提升IO、數據庫連接數、單機硬件資源的瓶頸

缺點:

  •  部分表無法join,只能通過接口聚合方式解決,提升了開發的復雜度
  •  分布式事務處理復雜
  •  依然存在單表數據量過大的問題(需要水平切分) 

2、水平(橫向)切分

當一個應用難以再細粒度的垂直切分,或切分后數據量行數巨大,存在單庫讀寫、存儲性能瓶頸,這時候就需要進行水平切分了。

水平切分分為庫內分表和分庫分表,是根據表內數據內在的邏輯關系,將同一個表按不同的條件分散到多個數據庫或多個表中,每個表中只包含一部分數據,從而使得單個表的數據量變小,達到分布式的效果。如圖所示: 

庫內分表只解決了單一表數據量過大的問題,但沒有將表分布到不同機器的庫上,因此對于減輕MySQL數據庫的壓力來說,幫助不是很大,大家還是競爭同一個物理機的CPU、內存、網絡IO,最好通過分庫分表來解決。

水平切分的優點:

  •  不存在單庫數據量過大、高并發的性能瓶頸,提升系統穩定性和負載能力
  •  應用端改造較小,不需要拆分業務模塊

缺點:

  •  跨分片的事務一致性難以保證
  •  跨庫的join關聯查詢性能較差
  •  數據多次擴展難度和維護量極大

水平切分后同一張表會出現在多個數據庫/表中,每個庫/表的內容不同。幾種典型的數據分片規則為:

1、根據數值范圍

按照時間區間或ID區間來切分。例如:按日期將不同月甚至是日的數據分散到不同的庫中;將userId為1~9999的記錄分到第一個庫,10000~20000的分到第二個庫,以此類推。某種意義上,某些系統中使用的"冷熱數據分離",將一些使用較少的歷史數據遷移到其他庫中,業務功能上只提供熱點數據的查詢,也是類似的實踐。

這樣的優點在于:

  •  單表大小可控
  •  天然便于水平擴展,后期如果想對整個分片集群擴容時,只需要添加節點即可,無需對其他分片的數據進行遷移
  •  使用分片字段進行范圍查找時,連續分片可快速定位分片進行快速查詢,有效避免跨分片查詢的問題。

缺點:

  •  熱點數據成為性能瓶頸。連續分片可能存在數據熱點,例如按時間字段分片,有些分片存儲最近時間段內的數據,可能會被頻繁的讀寫,而有些分片存儲的歷史數據,則很少被查詢

2、根據數值取模

一般采用hash取模mod的切分方式,例如:將 Customer 表根據 cusno 字段切分到4個庫中,余數為0的放到第一個庫,余數為1的放到第二個庫,以此類推。這樣同一個用戶的數據會分散到同一個庫中,如果查詢條件帶有cusno字段,則可明確定位到相應庫去查詢。

優點:

  •  數據分片相對比較均勻,不容易出現熱點和并發訪問的瓶頸

缺點:

  •  后期分片集群擴容時,需要遷移舊的數據(使用一致性hash算法能較好的避免這個問題)
  •  容易面臨跨分片查詢的復雜問題。比如上例中,如果頻繁用到的查詢條件中不帶cusno時,將會導致無法定位數據庫,從而需要同時向4個庫發起查詢,再在內存中合并數據,取最小集返回給應用,分庫反而成為拖累。

 

# 分庫分表帶來的問題

分庫分表能有效的環節單機和單庫帶來的性能瓶頸和壓力,突破網絡IO、硬件資源、連接數的瓶頸,同時也帶來了一些問題。下面將描述這些技術挑戰以及對應的解決思路。 

1、事務一致性問題

分布式事務

當更新內容同時分布在不同庫中,不可避免會帶來跨庫事務問題。跨分片事務也是分布式事務,沒有簡單的方案,一般可使用"XA協議"和"兩階段提交"處理。

分布式事務能最大限度保證了數據庫操作的原子性。但在提交事務時需要協調多個節點,推后了提交事務的時間點,延長了事務的執行時間。導致事務在訪問共享資源時發生沖突或死鎖的概率增高。隨著數據庫節點的增多,這種趨勢會越來越嚴重,從而成為系統在數據庫層面上水平擴展的枷鎖。

最終一致性

對于那些性能要求很高,但對一致性要求不高的系統,往往不苛求系統的實時一致性,只要在允許的時間段內達到最終一致性即可,可采用事務補償的方式。與事務在執行中發生錯誤后立即回滾的方式不同,事務補償是一種事后檢查補救的措施,一些常見的實現方法有:對數據進行對賬檢查,基于日志進行對比,定期同標準數據來源進行同步等等。事務補償還要結合業務系統來考慮。 

2、跨節點關聯查詢 join 問題

切分之前,系統中很多列表和詳情頁所需的數據可以通過sql join來完成。而切分之后,數據可能分布在不同的節點上,此時join帶來的問題就比較麻煩了,考慮到性能,盡量避免使用join查詢。

解決這個問題的一些方法:

1)全局表

全局表,也可看做是"數據字典表",就是系統中所有模塊都可能依賴的一些表,為了避免跨庫join查詢,可以將這類表在每個數據庫中都保存一份。這些數據通常很少會進行修改,所以也不擔心一致性的問題。

2)字段冗余

一種典型的反范式設計,利用空間換時間,為了性能而避免join查詢。例如:訂單表保存userId時候,也將userName冗余保存一份,這樣查詢訂單詳情時就不需要再去查詢"買家user表"了。

但這種方法適用場景也有限,比較適用于依賴字段比較少的情況。而冗余字段的數據一致性也較難保證,就像上面訂單表的例子,買家修改了userName后,是否需要在歷史訂單中同步更新呢?這也要結合實際業務場景進行考慮。

3)數據組裝

在系統層面,分兩次查詢,第一次查詢的結果集中找出關聯數據id,然后根據id發起第二次請求得到關聯數據。最后將獲得到的數據進行字段拼裝。

4)ER分片

關系型數據庫中,如果可以先確定表之間的關聯關系,并將那些存在關聯關系的表記錄存放在同一個分片上,那么就能較好的避免跨分片join問題。在1:1或1:n的情況下,通常按照主表的ID主鍵切分。如下圖所示:

這樣一來,Data Node1上面的order訂單表與orderdetail訂單詳情表就可以通過orderId進行局部的關聯查詢了,Data Node2上也一樣。 

3、跨節點分頁、排序、函數問題

跨節點多庫進行查詢時,會出現limit分頁、order by排序等問題。分頁需要按照指定字段進行排序,當排序字段就是分片字段時,通過分片規則就比較容易定位到指定的分片;當排序字段非分片字段時,就變得比較復雜了。

需要先在不同的分片節點中將數據進行排序并返回,然后將不同分片返回的結果集進行匯總和再次排序,最終返回給用戶。如圖所示:

上圖中只是取第一頁的數據,對性能影響還不是很大。但是如果取得頁數很大,情況則變得復雜很多,因為各分片節點中的數據可能是隨機的,為了排序的準確性,需要將所有節點的前N頁數據都排序好做合并,最后再進行整體的排序,這樣的操作時很耗費CPU和內存資源的,所以頁數越大,系統的性能也會越差。

在使用Max、Min、Sum、Count之類的函數進行計算的時候,也需要先在每個分片上執行相應的函數,然后將各個分片的結果集進行匯總和再次計算,最終將結果返回。如圖所示:

4、全局主鍵避重問題

在分庫分表環境中,由于表中數據同時存在不同數據庫中,主鍵值平時使用的自增長將無用武之地,某個分區數據庫自生成的ID無法保證全局唯一。因此需要單獨設計全局主鍵,以避免跨庫主鍵重復問題。有一些常見的主鍵生成策略:

1)UUID

UUID標準形式包含32個16進制數字,分為5段,形式為8-4-4-4-12的36個字符,

例如:550e8400-e29b-41d4-a716-446655440000

UUID是主鍵是最簡單的方案,本地生成,性能高,沒有網絡耗時。但缺點也很明顯,由于UUID非常長,會占用大量的存儲空間;另外,作為主鍵建立索引和基于索引進行查詢時都會存在性能問題,在InnoDB下,UUID的無序性會引起數據位置頻繁變動,導致分頁。

2)結合數據庫維護主鍵ID表

在數據庫中建立 sequence 表: 

  1. CREATE TABLE `sequence` (    
  2.   `id` bigint(20) unsigned NOT NULL auto_increment,    
  3.   `stub` char(1) NOT NULL default '',    
  4.   PRIMARY KEY  (`id`),    
  5.   UNIQUE KEY `stub` (`stub`)    
  6. ENGINE=MyISAM

stub字段設置為唯一索引,同一stub值在sequence表中只有一條記錄,可以同時為多張表生成全局ID。sequence表的內容,如下所示: 

  1. +-------------------+------+    
  2. | id                | stub |    
  3. +-------------------+------+    
  4. | 72157623227190423 |    a |   
  5. +-------------------+------+ 

使用 MyISAM 存儲引擎而不是 InnoDB,以獲取更高的性能。MyISAM使用的是表級別的鎖,對表的讀寫是串行的,所以不用擔心在并發時兩次讀取同一個ID值。

當需要全局唯一的64位ID時,執行: 

  1. REPLACE INTO sequence (stub) VALUES ('a');    
  2. SELECT LAST_INSERT_ID(); 

這兩條語句是Connection級別的,select last_insert_id() 必須與 replace into 在同一數據庫連接下才能得到剛剛插入的新ID。

使用replace into代替insert into好處是避免了表行數過大,不需要另外定期清理。

此方案較為簡單,但缺點也明顯:存在單點問題,強依賴DB,當DB異常時,整個系統都不可用。配置主從可以增加可用性,但當主庫掛了,主從切換時,數據一致性在特殊情況下難以保證。另外性能瓶頸限制在單臺MySQL的讀寫性能。

flickr團隊使用的一種主鍵生成策略,與上面的sequence表方案類似,但更好的解決了單點和性能瓶頸的問題。

這一方案的整體思想是:建立2個以上的全局ID生成的服務器,每個服務器上只部署一個數據庫,每個庫有一張sequence表用于記錄當前全局ID。表中ID增長的步長是庫的數量,起始值依次錯開,這樣能將ID的生成散列到各個數據庫上。如下圖所示:

由兩個數據庫服務器生成ID,設置不同的auto_increment值。第一臺sequence的起始值為1,每次步長增長2,另一臺的sequence起始值為2,每次步長增長也是2。結果第一臺生成的ID都是奇數(1, 3, 5, 7 ...),第二臺生成的ID都是偶數(2, 4, 6, 8 ...)。

這種方案將生成ID的壓力均勻分布在兩臺機器上。同時提供了系統容錯,第一臺出現了錯誤,可以自動切換到第二臺機器上獲取ID。但有以下幾個缺點:系統添加機器,水平擴展時較復雜;每次獲取ID都要讀寫一次DB,DB的壓力還是很大,只能靠堆機器來提升性能。

可以基于flickr的方案繼續優化,使用批量的方式降低數據庫的寫壓力,每次獲取一段區間的ID號段,用完之后再去數據庫獲取,可以大大減輕數據庫的壓力。如下圖所示:

還是使用兩臺DB保證可用性,數據庫中只存儲當前的最大ID。ID生成服務每次批量拉取6個ID,先將max_id修改為5,當應用訪問ID生成服務時,就不需要訪問數據庫,從號段緩存中依次派發0~5的ID。當這些ID發完后,再將max_id修改為11,下次就能派發6~11的ID。于是,數據庫的壓力降低為原來的1/6。

3)Snowflake分布式自增ID算法

Twitter的snowflake算法解決了分布式系統生成全局ID的需求,生成64位的Long型數字,組成部分:

  •  第一位未使用
  •  接下來41位是毫秒級時間,41位的長度可以表示69年的時間
  •  5位datacenterId,5位workerId。10位的長度最多支持部署1024個節點
  •  最后12位是毫秒內的計數,12位的計數順序號支持每個節點每毫秒產生4096個ID序列

這樣的好處是:毫秒數在高位,生成的ID整體上按時間趨勢遞增;不依賴第三方系統,穩定性和效率較高,理論上QPS約為409.6w/s(1000*2^12),并且整個分布式系統內不會產生ID碰撞;可根據自身業務靈活分配bit位。

不足就在于:強依賴機器時鐘,如果時鐘回撥,則可能導致生成ID重復。

綜上

結合數據庫和snowflake的唯一ID方案,可以參考業界較為成熟的解法:Leaf——美團點評分布式ID生成系統,并考慮到了高可用、容災、分布式下時鐘等問題。 

5、數據遷移、擴容問題

當業務高速發展,面臨性能和存儲的瓶頸時,才會考慮分片設計,此時就不可避免的需要考慮歷史數據遷移的問題。一般做法是先讀出歷史數據,然后按指定的分片規則再將數據寫入到各個分片節點中。此外還需要根據當前的數據量和QPS,以及業務發展的速度,進行容量規劃,推算出大概需要多少分片(一般建議單個分片上的單表數據量不超過1000W)

如果采用數值范圍分片,只需要添加節點就可以進行擴容了,不需要對分片數據遷移。如果采用的是數值取模分片,則考慮后期的擴容問題就相對比較麻煩。

# 什么時候考慮切分

下面講述一下什么時候需要考慮做數據切分。

1、能不切分盡量不要切分

并不是所有表都需要進行切分,主要還是看數據的增長速度。切分后會在某種程度上提升業務的復雜度,數據庫除了承載數據的存儲和查詢外,協助業務更好的實現需求也是其重要工作之一。

不到萬不得已不用輕易使用分庫分表這個大招,避免"過度設計"和"過早優化"。分庫分表之前,不要為分而分,先盡力去做力所能及的事情,例如:升級硬件、升級網絡、讀寫分離、索引優化等等。當數據量達到單表的瓶頸時候,再考慮分庫分表。

2、數據量過大,正常運維影響業務訪問

這里說的運維,指:

1)對數據庫備份,如果單表太大,備份時需要大量的磁盤IO和網絡IO。例如1T的數據,網絡傳輸占50MB時候,需要20000秒才能傳輸完畢,整個過程的風險都是比較高的

2)對一個很大的表進行DDL修改時,MySQL會鎖住全表,這個時間會很長,這段時間業務不能訪問此表,影響很大。如果使用pt-online-schema-change,使用過程中會創建觸發器和影子表,也需要很長的時間。在此操作過程中,都算為風險時間。將數據表拆分,總量減少,有助于降低這個風險。

3)大表會經常訪問與更新,就更有可能出現鎖等待。將數據切分,用空間換時間,變相降低訪問壓力

3、隨著業務發展,需要對某些字段垂直拆分

舉個例子,假如項目一開始設計的用戶表如下: 

  1. id                   bigint             #用戶的ID  
  2. name                 varchar            #用戶的名字  
  3. last_login_time      datetime           #最近登錄時間  
  4. personal_info        text               #私人信息  
  5. .....                                   #其他信息字段 

在項目初始階段,這種設計是滿足簡單的業務需求的,也方便快速迭代開發。而當業務快速發展時,用戶量從10w激增到10億,用戶非常的活躍,每次登錄會更新 last_login_name 字段,使得 user 表被不斷update,壓力很大。而其他字段:id, name, personal_info 是不變的或很少更新的,此時在業務角度,就要將 last_login_time 拆分出去,新建一個 user_time 表。

personal_info 屬性是更新和查詢頻率較低的,并且text字段占據了太多的空間。這時候,就要對此垂直拆分出 user_ext 表了。

4、數據量快速增長

隨著業務的快速發展,單表中的數據量會持續增長,當性能接近瓶頸時,就需要考慮水平切分,做分庫分表了。此時一定要選擇合適的切分規則,提前預估好數據容量

5、安全性和可用性

雞蛋不要放在一個籃子里。在業務層面上垂直切分,將不相關的業務的數據庫分隔,因為每個業務的數據量、訪問量都不同,不能因為一個業務把數據庫搞掛而牽連到其他業務。利用水平切分,當一個數據庫出現問題時,不會影響到100%的用戶,每個庫只承擔業務的一部分數據,這樣整體的可用性就能提高。

# 案例分析

1、用戶中心業務場景

用戶中心是一個非常常見的業務,主要提供用戶注冊、登錄、查詢/修改等功能,其核心表為: 

  1. User(uid, login_name, passwd, sex, age, nickname)  
  2. uid為用戶ID,  主鍵  
  3. login_name, passwd, sex, age, nickname,  用戶屬性 

任何脫離業務的架構設計都是耍流氓,在進行分庫分表前,需要對業務場景需求進行梳理:

1.用戶側:前臺訪問,訪問量較大,需要保證高可用和高一致性。主要有兩類需求:

用戶登錄:通過login_name/phone/email查詢用戶信息,1%請求屬于這種類型用戶信息查詢:登錄之后,通過uid來查詢用戶信息,99%請求屬這種類型

2.運營側:后臺訪問,支持運營需求,按照年齡、性別、登陸時間、注冊時間等進行分頁的查詢。是內部系統,訪問量較低,對可用性、一致性的要求不高。 

2、水平切分方法

當數據量越來越大時,需要對數據庫進行水平切分,上文描述的切分方法有"根據數值范圍"和"根據數值取模"。

"根據數值范圍":以主鍵uid為劃分依據,按uid的范圍將數據水平切分到多個數據庫上。例如:user-db1存儲uid范圍為0~1000w的數據,user-db2存儲uid范圍為1000w~2000wuid數據。

優點是:擴容簡單,如果容量不夠,只要增加新db即可。

不足是:請求量不均勻,一般新注冊的用戶活躍度會比較高,所以新的user-db2會比user-db1負載高,導致服務器利用率不平衡

"根據數值取模":也是以主鍵uid為劃分依據,按uid取模的值將數據水平切分到多個數據庫上。例如:user-db1存儲uid取模得1的數據,user-db2存儲uid取模得0的uid數據。

優點是:數據量和請求量分布均均勻

不足是:擴容麻煩,當容量不夠時,新增加db,需要rehash。需要考慮對數據進行平滑的遷移。 

3、非uid的查詢方法

水平切分后,對于按uid查詢的需求能很好的滿足,可以直接路由到具體數據庫。而按非uid的查詢,例如login_name,就不知道具體該訪問哪個庫了,此時需要遍歷所有庫,性能會降低很多。

對于用戶側,可以采用"建立非uid屬性到uid的映射關系"的方案;對于運營側,可以采用"前臺與后臺分離"的方案。

建立非uid屬性到uid的映射關系

1)映射關系

例如:login_name不能直接定位到數據庫,可以建立login_name→uid的映射關系,用索引表或緩存來存儲。當訪問login_name時,先通過映射表查詢出login_name對應的uid,再通過uid定位到具體的庫。

映射表只有兩列,可以承載很多數據,當數據量過大時,也可以對映射表再做水平切分。這類kv格式的索引結構,可以很好的使用cache來優化查詢性能,而且映射關系不會頻繁變更,緩存命中率會很高。

2)基因法

分庫基因:假如通過uid分庫,分為8個庫,采用uid%8的方式進行路由,此時是由uid的最后3bit來決定這行User數據具體落到哪個庫上,那么這3bit可以看為分庫基因。

上面的映射關系的方法需要額外存儲映射表,按非uid字段查詢時,還需要多一次數據庫或cache的訪問。如果想要消除多余的存儲和查詢,可以通過f函數取login_name的基因作為uid的分庫基因。生成uid時,參考上文所述的分布式唯一ID生成方案,再加上最后3位bit值=f(login_name)。當查詢login_name時,只需計算f(login_name)%8的值,就可以定位到具體的庫。不過這樣需要提前做好容量規劃,預估未來幾年的數據量需要分多少庫,要預留一定bit的分庫基因。

 

前臺與后臺分離

對于用戶側,主要需求是以單行查詢為主,需要建立login_name/phone/email到uid的映射關系,可以解決這些字段的查詢問題。

而對于運營側,很多批量分頁且條件多樣的查詢,這類查詢計算量大,返回數據量大,對數據庫的性能消耗較高。此時,如果和用戶側公用同一批服務或數據庫,可能因為后臺的少量請求,占用大量數據庫資源,而導致用戶側訪問性能降低或超時。

這類業務最好采用"前臺與后臺分離"的方案,運營側后臺業務抽取獨立的service和db,解決和前臺業務系統的耦合。由于運營側對可用性、一致性的要求不高,可以不訪問實時庫,而是通過binlog異步同步數據到運營庫進行訪問。在數據量很大的情況下,還可以使用ES搜索引擎或Hive來滿足后臺復雜的查詢方式。

# 支持分庫分表中間件

站在巨人的肩膀上能省力很多,目前分庫分表已經有一些較為成熟的開源解決方案:

  •  sharding-jdbc(當當)
  •  TSharding(蘑菇街)
  •  Atlas(奇虎360)
  •  Cobar(阿里巴巴)
  •  MyCAT(基于Cobar)
  •  Oceanus(58同城)
  •  Vitess(谷歌) 

 

責任編輯:龐桂玉 來源: JAVA高級架構
相關推薦

2024-07-25 18:20:03

2025-04-09 00:00:00

2021-11-25 10:18:42

RESTfulJava互聯網

2021-08-09 07:47:40

Git面試版本

2025-11-19 01:00:00

2020-12-01 08:47:36

Java異常開發

2020-06-12 15:50:56

options前端服務器

2020-08-17 07:40:19

消息隊列

2023-05-22 08:17:04

2021-10-15 09:53:12

工具

2021-09-16 07:52:18

算法應用場景

2019-05-10 10:50:04

Spring AOPJDK動態代理CGLIB動態代理

2021-11-05 07:47:56

代理模式對象

2020-12-04 06:27:04

序列化面試官Java

2021-11-09 08:51:13

模式命令面試

2021-11-10 07:47:49

組合模式場景

2021-11-02 22:04:58

模式

2022-02-21 17:24:18

序列化對象存儲

2021-08-16 08:33:26

git

2021-11-04 06:58:32

策略模式面試
點贊
收藏

51CTO技術棧公眾號

校花撩起jk露出白色内裤国产精品| 精品人妻av一区二区三区| 香蕉久久精品| 欧美日韩免费高清一区色橹橹| 亚洲 日韩 国产第一区| 国产熟女一区二区三区五月婷 | 欧美日韩精品在线观看视频| 精品精品国产毛片在线看| 日韩欧美精品网址| 欧美视频小说| 成人黄色在线观看视频| 久久高清一区| 久久夜色撩人精品| 熟女人妻一区二区三区免费看| 理论不卡电影大全神| 国产精品伦一区| 九色综合日本| 97精品人妻一区二区三区| 亚洲看片免费| www.久久久久久.com| 香蕉视频污视频| 粉嫩av一区二区三区四区五区| 一区二区三区加勒比av| 色综合电影网| 性感美女视频一二三| 精品一区二区三区视频在线观看 | 欧美黑人巨大xxxxx| 亚洲综合区在线| 亚洲精品自在在线观看| 欧美一级一区二区三区| 免费高清在线一区| 国内外成人免费激情在线视频| 欧美福利第一页| 美女视频亚洲色图| 日韩欧美在线网站| 九九热免费在线观看| 日韩pacopacomama| 精品久久久一区| 中国丰满熟妇xxxx性| 国内精品久久久久久野外| 97精品久久久久中文字幕| 成人3d动漫一区二区三区91| 在线视频欧美亚洲| 日韩va亚洲va欧美va久久| 国模精品视频一区二区三区| 夫妻性生活毛片| 三区四区不卡| 中文字幕国内精品| 国产精品成人无码免费| 国产一区二区三区四区五区| 亚洲精品视频久久| 亚洲av无码国产精品久久| 亚洲视频国产| 日韩免费观看高清完整版| 久久成年人网站| 日韩黄色在线| 5858s免费视频成人| 国产日韩欧美久久| 日韩av懂色| 欧美人xxxx| 久久久福利影院| 免费观看亚洲天堂| 日韩欧美资源站| 亚洲美女高潮久久久| 永久免费精品视频| 亚洲大胆人体视频| 无遮挡aaaaa大片免费看| 麻豆一区二区麻豆免费观看| 精品亚洲夜色av98在线观看| 国产网站无遮挡| 伊人久久综合影院| 伊人男人综合视频网| 久久久国产一级片| 久久精品国内一区二区三区水蜜桃| 色伦专区97中文字幕| 欧美做爰爽爽爽爽爽爽| 欧美福利电影在线观看| 高清亚洲成在人网站天堂| 国产成人精品一区二三区| 鲁大师影院一区二区三区| 国产精品av电影| 国产精品久久久久久久一区二区| 国产一区二区在线看| 国产精品一级久久久| 色窝窝无码一区二区三区| 久久人人爽爽爽人久久久| 日韩欧美精品一区二区| 成码无人av片在线观看网站| 亚洲一区二区三区四区中文字幕| 精品这里只有精品| 国产欧美自拍| 亚洲成人在线网| 亚洲天堂最新地址| 午夜精品网站| 日本精品视频网站| 999国产精品视频免费| 99免费精品在线观看| 日韩高清国产精品| 婷婷丁香在线| 在线一区二区视频| 美女日批在线观看| 国产成人黄色| 色综合男人天堂| 亚洲综合图片网| 国产乱码精品一区二区三区忘忧草| 好吊妞www.84com只有这里才有精品 | 久久综合狠狠| 亚洲aaaaaa| 国产亚洲依依| 性久久久久久久久久久久| 尤蜜粉嫩av国产一区二区三区| 亚洲视频一起| 日韩在线中文字| 天堂在线免费观看视频| 国产激情偷乱视频一区二区三区| 久久综合久久久| 午夜伦理在线视频| 欧美色区777第一页| 一区二区免费在线观看视频| 天堂美国久久| 国产精品jizz在线观看麻豆| 黄色三级网站在线观看| 中文字幕在线不卡| 老头吃奶性行交视频| 久久精品色综合| 日韩在线观看网址| www.欧美色| 91视频一区二区| 国产精品免费看久久久无码| 精品久久在线| 夜夜嗨av色一区二区不卡| 精品美女久久久久| 国产·精品毛片| 在线视频不卡一区二区| av在线日韩| 日韩精品中文字幕在线播放| 久久久久亚洲av无码专区| 激情伊人五月天久久综合| 日韩视频在线观看国产| 美女日韩欧美| 亚洲精品之草原avav久久| 国产精品99精品无码视| 国产精品亚洲第一区在线暖暖韩国 | 97成人超碰免| 日本成人动漫在线观看| 亚洲一区二区免费视频| 久久黄色一级视频| 欧美激情视频一区二区三区免费| 91夜夜揉人人捏人人添红杏| 麻豆系列在线观看| 91精品国产91久久久久久最新毛片 | 欧美国产综合色视频| 久久久久久久久久久久久国产精品| jizz久久精品永久免费| 久久久黄色av| 精品人妻午夜一区二区三区四区 | 亚洲最新中文字幕| 国产一级片一区二区| 欧美激情一区三区| 免费午夜视频在线观看| 国内黄色精品| 国产免费观看久久黄| 黄色精品在线观看| 日韩一区二区精品葵司在线| 九九热只有精品| 成人美女在线观看| 男人靠女人免费视频网站| 偷拍亚洲精品| 国产精品入口夜色视频大尺度 | 97精品国产91久久久久久| 欧美视频一二区| 丰满岳妇乱一区二区三区| 熟女少妇一区二区三区| 日韩国产高清影视| 异国色恋浪漫潭| 成人午夜网址| 青青在线视频一区二区三区| 中文字幕在线免费| 欧美一区二区三区免费视频| 国产污视频在线看| 久久久久久久久伊人| 伊人色在线观看| 红桃视频亚洲| 神马影院午夜我不卡影院| 欧洲美女精品免费观看视频| 欧美极度另类性三渗透| 欧美成熟毛茸茸| 91精品久久久久久久91蜜桃| 久久久久久久国产视频| 久久综合九色综合欧美亚洲| 美女在线视频一区二区| 亚洲福利免费| 亚洲精美视频| 澳门精品久久国产| 国产精品日韩久久久久| eeuss鲁一区二区三区| 亚洲精品动漫100p| 91国偷自产中文字幕久久| 亚洲成a人在线观看| 能直接看的av| av电影在线观看完整版一区二区| 天美星空大象mv在线观看视频| 欧美成人精品| 亚洲电影网站| 欧美自拍一区| 91在线播放国产| 欧美xoxoxo| 欧美激情中文网| 成人影院www在线观看| 日韩激情av在线播放| 国产男男gay体育生白袜| 欧美性20hd另类| 久久久久久久久精| 中文字幕一区二区三| 国产男女猛烈无遮挡a片漫画| 国产精品伊人色| 中文字幕 日韩 欧美| 欧美亚洲在线| 国产欧美日韩网站| 伊人色**天天综合婷婷| 日韩一区不卡| 最新国产一区| 久久国产精品-国产精品| 视频精品一区| 91久久精品一区| 色综合天天色| 日韩美女视频免费在线观看| av成人福利| 欧美多人爱爱视频网站| 欧美精品hd| 色系列之999| 成年人视频网站在线| 国产网站欧美日韩免费精品在线观看 | 国产精品一区亚洲| 国产高清www| 国产精品s色| 日本精品福利视频| 一区二区日韩欧美| 精品久久免费观看| 97视频精品| 欧美精品一区二区性色a+v| 久久一级电影| 一区在线电影| 我不卡影院28| 欧美日韩亚洲国产成人| 婷婷亚洲五月| 免费成人进口网站| 在线看片不卡| 少妇久久久久久被弄到高潮| 午夜精品久久99蜜桃的功能介绍| 亚洲av综合色区| 欧美一区网站| 青青青在线观看视频| 亚洲成人资源| 六月丁香激情网| 久久精品午夜| 国产高潮免费视频| 激情综合色丁香一区二区| 毛毛毛毛毛毛毛片123| 国产精品一区二区男女羞羞无遮挡| 亚洲天堂网站在线| 国产成人免费网站| 久久午夜夜伦鲁鲁片| 久久综合久久综合久久综合| 无码人妻aⅴ一区二区三区69岛| 欧美激情中文不卡| 久久中文免费视频| 亚洲成人自拍一区| 欧美精品韩国精品| 欧美色视频一区| 亚洲福利在线观看视频| 亚洲黄在线观看| 成年人在线免费观看| 久久五月天色综合| 成人ssswww在线播放| 青草青草久热精品视频在线观看| 国产精品久久久久久吹潮| 亚洲自拍中文字幕| 亚洲国产精品嫩草影院久久av| 日韩精品久久一区二区三区| 亚洲mv大片欧洲mv大片| 阿v天堂2018| 免费在线成人网| 国产精品无码自拍| 久久久久99精品国产片| 精品国产视频在线观看| 欧美日韩国产丝袜另类| 亚洲天堂网在线视频| 亚洲精品在线电影| 国产鲁鲁视频在线观看免费| 九九热精品视频国产| 欧美特大特白屁股xxxx| 91精品婷婷国产综合久久蝌蚪| 欧美亚洲国产日韩| 国产又粗又爽又黄的视频| 国产欧美一区二区色老头 | 懂色av噜噜一区二区三区av| 欧美性xxxx图片| 亚洲精品视频一区| 中文字幕在线天堂| 精品国产成人系列| 色综合久久影院| 38少妇精品导航| 精品999日本久久久影院| 农村寡妇一区二区三区| 欧美成熟视频| 亚洲xxxx2d动漫1| 99久久er热在这里只有精品66| 黄色精品视频在线观看| 色综合天天综合网天天看片| 国产高清在线免费| 中日韩美女免费视频网站在线观看 | 久久婷婷国产精品| 成人sese在线| 天天看天天摸天天操| 色屁屁一区二区| 嫩草影院一区二区| 欧美久久精品午夜青青大伊人| 欧美大胆成人| 狠狠色狠狠色综合人人| 伊人情人综合网| 手机在线国产视频| 国产欧美日韩不卡免费| 免费av网站在线| 亚洲第一区在线观看| 色网在线观看| 国产欧美一区二区三区视频| 国内精品久久久久久99蜜桃| 青青草原成人网| www.66久久| 日韩激情一区二区三区| 日韩亚洲电影在线| 免费高清完整在线观看| 国产精品久久久久久久久| 一区二区三区韩国免费中文网站| 国产精品12345| 成人一区二区在线观看| 国产精品九九九九九九| 欧美精品丝袜久久久中文字幕| 91伦理视频在线观看| 国产精品r级在线| 国产99精品一区| 99久久久无码国产精品6| 91在线视频网址| 成人免费视频毛片| 亚洲欧美国产精品专区久久| 欧美另类老肥妇| 蜜桃999成人看片在线观看| 亚洲欧美日本日韩| 蜜桃精品一区二区| 91国产丝袜在线播放| 成人高清网站| 91精品国产综合久久香蕉922| 日韩精品久久| 色一情一区二区三区| 亚洲美女少妇撒尿| 丰满肉肉bbwwbbww| 97avcom| 九热爱视频精品视频| 亚洲中文字幕久久精品无码喷水| 国产亚洲污的网站| 一级全黄裸体免费视频| 久久精品福利视频| 欧美a在线观看| 精品久久久久久久久久中文字幕| 91影院在线免费观看| 亚洲GV成人无码久久精品| 伊人久久综合97精品| 国产一区精品二区| 国产欧美日韩网站| 欧美激情中文字幕一区二区| 国产免费av电影| 97国产精品视频人人做人人爱| 免费短视频成人日韩| 亚洲天堂2018av| 亚洲综合激情网| 美州a亚洲一视本频v色道| 国产在线视频91| 国产精品黄色| av男人的天堂av| 制服丝袜在线91| 国产精品vvv| 亚洲国产精品视频一区| 国产麻豆成人精品| 久久国产黄色片| 久久视频免费在线播放| 欧美顶级毛片在线播放| 日本免费色视频| 亚洲国产另类精品专区| 国产原创av在线| 成人免费视频网站入口| 视频一区欧美精品| 久久久久国产精品夜夜夜夜夜| 亚洲天堂av在线免费| 日韩激情精品| 亚洲综合色在线观看| 香蕉加勒比综合久久| 麻豆免费在线观看| 农村寡妇一区二区三区| 国产福利一区在线|