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

如何從0到1構建一個穩定、高性能的Redis集群?(附16張圖解)

存儲 存儲軟件 Redis
現如今 Redis 變得越來越流行,幾乎在很多項目中都要被用到,不知道你在使用 Redis 時,有沒有思考過,Redis 到底是如何穩定、高性能地提供服務的?

[[380437]]

大家好,我是 Kaito。

這篇文章我想和你聊一聊 Redis 的架構演化之路。

現如今 Redis 變得越來越流行,幾乎在很多項目中都要被用到,不知道你在使用 Redis 時,有沒有思考過,Redis 到底是如何穩定、高性能地提供服務的?

你也可以嘗試回答一下以下這些問題:

  • 我使用 Redis 的場景很簡單,只使用單機版 Redis 會有什么問題嗎?
  • 我的 Redis 故障宕機了,數據丟失了怎么辦?如何能保證我的業務應用不受影響?
  • 為什么需要主從集群?它有什么優勢?
  • 什么是分片集群?我真的需要分片集群嗎?
  • ...

如果你對 Redis 已經有些了解,肯定也聽說過數據持久化、主從復制、哨兵這些概念,它們之間又有什么區別和聯系呢?

如果你存在這樣的疑惑,這篇文章,我會從 0 到 1,再從 1 到 N,帶你一步步構建出一個穩定、高性能的 Redis 集群。

在這個過程中,你可以了解到 Redis 為了做到穩定、高性能,都采取了哪些優化方案,以及為什么要這么做?

掌握了這些原理,這樣平時你在使用 Redis 時,就能夠做到「游刃有余」。

這篇文章干貨很多,希望你可以耐心讀完。

從最簡單的開始:單機版 Redis

首先,我們從最簡單的場景開始。

假設現在你有一個業務應用,需要引入 Redis 來提高應用的性能,此時你可以選擇部署一個單機版的 Redis 來使用,就像這樣:

這個架構非常簡單,你的業務應用可以把 Redis 當做緩存來使用,從 MySQL 中查詢數據,然后寫入到 Redis 中,之后業務應用再從 Redis 中讀取這些數據,由于 Redis 的數據都存儲在內存中,所以這個速度飛快。

如果你的業務體量并不大,那這樣的架構模型基本可以滿足你的需求。是不是很簡單?

隨著時間的推移,你的業務體量逐漸發展起來了,Redis 中存儲的數據也越來越多,此時你的業務應用對 Redis 的依賴也越來越重。

但是,突然有一天,你的 Redis 因為某些原因宕機了,這時你的所有業務流量,都會打到后端 MySQL 上,這會導致你的 MySQL 壓力劇增,嚴重的話甚至會壓垮 MySQL。

這時你應該怎么辦?

我猜你的方案肯定是,趕緊重啟 Redis,讓它可以繼續提供服務。

但是,因為之前 Redis 中的數據都在內存中,盡管你現在把 Redis 重啟了,之前的數據也都丟失了。重啟后的 Redis 雖然可以正常工作,但是由于 Redis 中沒有任何數據,業務流量還是都會打到后端 MySQL 上,MySQL 的壓力還是很大。

這可怎么辦?你陷入了沉思。

有沒有什么好的辦法解決這個問題?

既然 Redis 只把數據存儲在內存中,那是否可以把這些數據也寫一份到磁盤上呢?

如果采用這種方式,當 Redis 重啟時,我們把磁盤中的數據快速恢復到內存中,這樣它就可以繼續正常提供服務了。

是的,這是一個很好的解決方案,這個把內存數據寫到磁盤上的過程,就是「數據持久化」。

數據持久化:有備無患

現在,你設想的 Redis 數據持久化是這樣的:

但是,數據持久化具體應該怎么做呢?

我猜你最容易想到的一個方案是,Redis 每一次執行寫操作,除了寫內存之外,同時也寫一份到磁盤上,就像這樣:

沒錯,這是最簡單直接的方案。

但仔細想一下,這個方案有個問題:客戶端的每次寫操作,既需要寫內存,又需要寫磁盤,而寫磁盤的耗時相比于寫內存來說,肯定要慢很多!這勢必會影響到 Redis 的性能。

如何規避這個問題?

我們可以這樣優化:Redis 寫內存由主線程來做,寫內存完成后就給客戶端返回結果,然后 Redis 用另一個線程去寫磁盤,這樣就可以避免主線程寫磁盤對性能的影響。

這確實是一個好方案。除此之外,我們可以換個角度,思考一下還有什么方式可以持久化數據?

這時你就要結合 Redis 的使用場景來考慮了。

回憶一下,我們在使用 Redis 時,通常把它用作什么場景?

是的,緩存。

把 Redis 當做緩存來用,意味著盡管 Redis 中沒有保存全量數據,對于不在緩存中的數據,我們的業務應用依舊可以通過查詢后端數據庫得到結果,只不過查詢后端數據的速度會慢一點而已,但對業務結果其實是沒有影響的。

基于這個特點,我們的 Redis 數據持久化還可以用「數據快照」的方式來做。

那什么是數據快照呢?

簡單來講,你可以這么理解:

  1. 你把 Redis 想象成一個水杯,向 Redis 寫入數據,就相當于往這個杯子里倒水
  2. 此時你拿一個相機給這個水杯拍一張照片,拍照的這一瞬間,照片中記錄到這個水杯中水的容量,就是水杯的數據快照

也就是說,Redis 的數據快照,是記錄某一時刻下 Redis 中的數據,然后只需要把這個數據快照寫到磁盤上就可以了。

它的優勢在于,只在需要持久化時,把數據「一次性」寫入磁盤,其它時間都不需要操作磁盤。

基于這個方案,我們可以定時給 Redis 做數據快照,把數據持久化到磁盤上。

其實,上面說的這些持久化方案,就是 Redis 的「RDB」和「AOF」:

  • RDB:只持久化某一時刻的數據快照到磁盤上(創建一個子進程來做)
  • AOF:每一次寫操作都持久到磁盤(主線程寫內存,根據策略可以配置由主線程還是子線程進行數據持久化)

它們的區別除了上面講到的,還有以下特點:

  1. RDB 采用二進制 + 數據壓縮的方式寫磁盤,這樣文件體積小,數據恢復速度也快
  2. AOF 記錄的是每一次寫命令,數據最全,但文件體積大,數據恢復速度慢

如果讓你來選擇持久化方案,你可以這樣選擇:

  • 如果你的業務對于數據丟失不敏感,采用 RDB 方案持久化數據
  • 如果你的業務對數據完整性要求比較高,采用 AOF 方案持久化數據

假設你的業務對 Redis 數據完整性要求比較高,選擇了 AOF 方案,那此時你又會遇到這些問題:

AOF 記錄每一次寫操作,隨著時間增長,AOF 文件體積會越來越大

這么大的 AOF 文件,在數據恢復時變得非常慢

這怎么辦?數據完整性要求變高了,恢復數據也變困難了?有沒有什么方法,可以縮小文件體積?提升恢復速度呢?

我們繼續來分析 AOF 的特點。

由于 AOF 文件中記錄的都是每一次寫操作,但對于同一個 key 可能會發生多次修改,我們只保留最后一次被修改的值,是不是也可以?

是的,這就是我們經常聽到的「AOF rewrite」,你也可以把它理解為 AOF 「瘦身」。

我們可以對 AOF 文件定時 rewrite,避免這個文件體積持續膨脹,這樣在恢復時就可以縮短恢復時間了。

再進一步思考一下,還有沒有辦法繼續縮小 AOF 文件?

回顧一下我們前面講到的,RDB 和 AOF 各自的特點:

RDB 以二進制 + 數據壓縮方式存儲,文件體積小

AOF 記錄每一次寫命令,數據最全

我們可否利用它們各自的優勢呢?

當然可以,這就是 Redis 的「混合持久化」。

具體來說,當 AOF rewrite 時,Redis 先以 RDB 格式在 AOF 文件中寫入一個數據快照,再把在這期間產生的每一個寫命令,追加到 AOF 文件中。因為 RDB 是二進制壓縮寫入的,這樣 AOF 文件體積就變得更小了。

此時,你在使用 AOF 文件恢復數據時,這個恢復時間就會更短了!

Redis 4.0 以上版本才支持混合持久化。

這么一番優化,你的 Redis 再也不用擔心實例宕機了,當發生宕機時,你就可以用持久化文件快速恢復 Redis 中的數據。

但這樣就沒問題了嗎?

仔細想一下,雖然我們已經把持久化的文件優化到最小了,但在恢復數據時依舊是需要時間的,在這期間你的業務應用還是會受到影響,這怎么辦?

我們來分析有沒有更好的方案。

一個實例宕機,只能用恢復數據來解決,那我們是否可以部署多個 Redis 實例,然后讓這些實例數據保持實時同步,這樣當一個實例宕機時,我們在剩下的實例中選擇一個繼續提供服務就好了。

沒錯,這個方案就是接下來要講的「主從復制:多副本」。

主從復制:多副本

此時,你可以部署多個 Redis 實例,架構模型就變成了這樣:

我們這里把實時讀寫的節點叫做 master,另一個實時同步數據的節點叫做 slave。

采用多副本的方案,它的優勢是:

  1. 縮短不可用時間:master 發生宕機,我們可以手動把 slave 提升為 master 繼續提供服務
  2. 提升讀性能:讓 slave 分擔一部分讀請求,提升應用的整體性能

這個方案不錯,不僅節省了數據恢復的時間,還能提升性能,那它有什么問題嗎?

你可以思考一下。

其實,它的問題在于:當 master 宕機時,我們需要「手動」把 slave 提升為 master,這個過程也是需要花費時間的。

雖然比恢復數據要快得多,但還是需要人工介入處理。一旦需要人工介入,就必須要算上人的反應時間、操作時間,所以,在這期間你的業務應用依舊會受到影響。

怎么解決這個問題?我們是否可以把這個切換的過程,變成自動化呢?

對于這種情況,我們需要一個「故障自動切換」機制,這就是我們經常聽到的「哨兵」所具備的能力。

哨兵:故障自動切換

現在,我們可以引入一個「觀察者」,讓這個觀察者去實時監測 master 的健康狀態,這個觀察者就是「哨兵」。

具體如何做?

  1. 哨兵每間隔一段時間,詢問 master 是否正常
  2. master 正常回復,表示狀態正常,回復超時表示異常
  3. 哨兵發現異常,發起主從切換

有了這個方案,就不需要人去介入處理了,一切就變得自動化了,是不是很爽?

但這里還有一個問題,如果 master 狀態正常,但這個哨兵在詢問 master 時,它們之間的網絡發生了問題,那這個哨兵可能會誤判。

這個問題怎么解決?

答案是,我們可以部署多個哨兵,讓它們分布在不同的機器上,它們一起監測 master 的狀態,流程就變成了這樣:

  1. 多個哨兵每間隔一段時間,詢問 master 是否正常
  2. master 正常回復,表示狀態正常,回復超時表示異常
  3. 一旦有一個哨兵判定 master 異常(不管是否是網絡問題),就詢問其它哨兵,如果多個哨兵(設置一個閾值)都認為 master 異常了,這才判定 master 確實發生了故障
  4. 多個哨兵經過協商后,判定 master 故障,則發起主從切換

所以,我們用多個哨兵互相協商來判定 master 的狀態,這樣一來,就可以大大降低誤判的概率。

哨兵協商判定 master 異常后,這里還有一個問題:由哪個哨兵來發起主從切換呢?

答案是,選出一個哨兵「領導者」,由這個領導者進行主從切換。

問題又來了,這個領導者怎么選?

想象一下,在現實生活中,選舉是怎么做的?

是的,投票。

在選舉哨兵領導者時,我們可以制定這樣一個選舉規則:

  1. 每個哨兵都詢問其它哨兵,請求對方為自己投票
  2. 每個哨兵只投票給第一個請求投票的哨兵,且只能投票一次
  3. 首先拿到超過半數投票的哨兵,當選為領導者,發起主從切換

其實,這個選舉的過程就是我們經常聽到的:分布式系統領域中的「共識算法」。

什么是共識算法?

我們在多個機器部署哨兵,它們需要共同協作完成一項任務,所以它們就組成了一個「分布式系統」。

在分布式系統領域,多個節點如何就一個問題達成共識的算法,就叫共識算法。

在這個場景下,多個哨兵共同協商,選舉出一個都認可的領導者,就是使用共識算法完成的。

這個算法還規定節點的數量必須是奇數個,這樣可以保證系統中即使有節點發生了故障,剩余超過「半數」的節點狀態正常,依舊可以提供正確的結果,也就是說,這個算法還兼容了存在故障節點的情況。

共識算法在分布式系統領域有很多,例如 Paxos、Raft,哨兵選舉領導者這個場景,使用的是 Raft 共識算法,因為它足夠簡單,且易于實現。

現在,我們用多個哨兵共同監測 Redis 的狀態,這樣一來,就可以避免誤判的問題了,架構模型就變成了這樣:

好了,到這里我們先小結一下。

你的 Redis 從最簡單的單機版,經過數據持久化、主從多副本、哨兵集群,這一路優化下來,你的 Redis 不管是性能還是穩定性,都越來越高,就算節點發生故障,也不用擔心了。

你的 Redis 以這樣的架構模式部署,基本上就可以穩定運行很長時間了。

...

隨著時間的發展,你的業務體量開始迎來了爆炸性增長,此時你的架構模型,還能夠承擔這么大的流量嗎?

我們一起來分析一下:

  1. 穩定性:Redis 故障宕機,我們有哨兵 + 副本,可以自動完成主從切換
  2. 性能:讀請求量增長,我們可以再部署多個 slave,讀寫分離,分擔讀壓力
  3. 性能:寫請求量增長,但我們只有一個 master 實例,這個實例達到瓶頸怎么辦?

看到了么,當你的寫請求量越來越大時,一個 master 實例可能就無法承擔這么大的寫流量了。

要想完美解決這個問題,此時你就需要考慮使用「分片集群」了。

分片集群:橫向擴展

什么是「分片集群」?

簡單來講,一個實例扛不住寫壓力,那我們是否可以部署多個實例,然后把這些實例按照一定規則組織起來,把它們當成一個整體,對外提供服務,這樣不就可以解決集中寫一個實例的瓶頸問題嗎?

所以,現在的架構模型就變成了這樣:

現在問題又來了,這么多實例如何組織呢?

我們制定規則如下:

  1. 每個節點各自存儲一部分數據,所有節點數據之和才是全量數據
  2. 制定一個路由規則,對于不同的 key,把它路由到固定一個實例上進行讀寫

而分片集群根據路由規則所在位置的不同,還可以分為兩大類:

  1. 客戶端分片
  2. 服務端分片

客戶端分片指的是,key 的路由規則放在客戶端來做,就是下面這樣:

這個方案的缺點是,客戶端需要維護這個路由規則,也就是說,你需要把路由規則寫到你的業務代碼中。

如何做到不把路由規則耦合在業務代碼中呢?

你可以這樣優化,把這個路由規則封裝成一個模塊,當需要使用時,集成這個模塊就可以了。

這就是 Redis Cluster 的采用的方案。

Redis Cluster 內置了哨兵邏輯,無需再部署哨兵。

當你使用 Redis Cluster 時,你的業務應用需要使用配套的 Redis SDK,這個 SDK 內就集成好了路由規則,不需要你自己編寫了。

再來看服務端分片。

這種方案指的是,路由規則不放在客戶端來做,而是在客戶端和服務端之間增加一個「中間代理層」,這個代理就是我們經常聽到的 Proxy。

而數據的路由規則,就放在這個 Proxy 層來維護。

這樣一來,你就無需關心服務端有多少個 Redis 節點了,只需要和這個 Proxy 交互即可。

Proxy 會把你的請求根據路由規則,轉發到對應的 Redis 節點上,而且,當集群實例不足以支撐更大的流量請求時,還可以橫向擴容,添加新的 Redis 實例提升性能,這一切對于你的客戶端來說,都是透明無感知的。

業界開源的 Redis 分片集群方案,例如 Twemproxy、Codis 就是采用的這種方案。

分片集群在數據擴容時,還涉及到了很多細節,這塊內容不是本文章重點,所以暫不詳述。

至此,當你使用分片集群后,對于未來更大的流量壓力,都可以從容面對了!

總結

好了,我們來總結一下,我們是如何一步步構建一個穩定、高性能的 Redis 集群的。

首先,在使用最簡單的單機版 Redis 時,我們發現當 Redis 故障宕機后,數據無法恢復的問題,因此我們想到了「數據持久化」,把內存中的數據也持久化到磁盤上一份,這樣 Redis 重啟后就可以從磁盤上快速恢復數據。

在進行數據持久化時,我們又面臨如何更高效地將數據持久化到磁盤的問題。之后我們發現 Redis 提供了 RDB 和 AOF 兩種方案,分別對應了數據快照和實時的命令記錄。當我們對數據完整性要求不高時,可以選擇 RDB 持久化方案。如果對于數據完整性要求較高,那么可以選擇 AOF 持久化方案。

但是我們又發現,AOF 文件體積會隨著時間增長變得越來越大,此時我們想到的優化方案是,使用 AOF rewrite 的方式對其進行瘦身,減小文件體積,再后來,我們發現可以結合 RDB 和 AOF 各自的優勢,在 AOF rewrite 時使用兩者結合的「混合持久化」方式,又進一步減小了 AOF 文件體積。

之后,我們發現盡管可以通過數據恢復的方式還原數據,但恢復數據也是需要花費時間的,這意味著業務應用還是會受到影響。我們進一步優化,采用「多副本」的方案,讓多個實例保持實時同步,當一個實例故障時,可以手動把其它實例提升上來繼續提供服務。

但是這樣也有問題,手動提升實例上來,需要人工介入,人工介入操作也需要時間,我們開始想辦法把這個流程變得自動化,所以我們又引入了「哨兵」集群,哨兵集群通過互相協商的方式,發現故障節點,并可以自動完成切換,這樣就大幅降低了對業務應用的影響。

最后,我們把關注點聚焦在如何支撐更大的寫流量上,所以,我們又引入了「分片集群」來解決這個問題,讓多個 Redis 實例分攤寫壓力,未來面對更大的流量,我們還可以添加新的實例,橫向擴展,進一步提升集群的性能。

至此,我們的 Redis 集群才得以長期穩定、高性能的為我們的業務提供服務。

這里我畫了一個思維導圖,方便你更好地去理解它們之間的關系,以及演化的過程。 

后記

看到這里,我想你對如何構建一個穩定、高性能的 Redis 集群問題時,應該會有自己的見解了。

其實,這篇文章所講的優化思路,圍繞的主題就是「架構設計」的核心思想:

高性能:讀寫分離、分片集群

高可用:數據持久化、多副本、故障自動切換

易擴展:分片集群、橫向擴展

當我們講到哨兵集群、分片集群時,這還涉及到了「分布式系統」相關的知識:

分布式共識:哨兵領導者選舉

負載均衡:分片集群數據分片、數據路由

當然,除了 Redis 之外,對于構建任何一個數據集群,你都可以沿用這個思路去思考、去優化,看看它們到底是如何做的。

例如當你在使用 MySQL 時,你可以思考一下 MySQL 與 Redis 有哪些不同?MySQL 為了做到高性能、高可用,又是如何做的?其實思路都是類似的。

我們現在到處可見分布式系統、數據集群,我希望通過這篇文章,你可以理解這些軟件是如何一步步演化過來的,在演化過程中,它們遇到了哪些問題,為了解決這些問題,這些軟件的設計者設計了怎樣的方案,做了哪些取舍?

你只有了解了其中的原理,掌握了分析問題、解決問題的能力,這樣在以后的開發過程中,或是學習其它優秀軟件時,就能快速地找到「重點」,在最短的時間掌握它,并能在實際應用中發揮它們的優勢。

其實這個思考過程,也是做「架構設計」的思路。在做軟件架構設計時,你面臨的場景就是發現問題、分析問題、解決問題,一步步去演化、升級你的架構,最后在性能、可靠性方面達到一個平衡。雖然各種軟件層出不窮,但架構設計的思想不會變,我希望你真正吸收的是這些思想,這樣才可以做到以不變應萬變。

本文轉載自微信公眾號「水滴與銀彈」,可以通過以下二維碼關注。轉載本文請聯系水滴與銀彈公眾號。

 

責任編輯:武曉燕 來源: 水滴與銀彈
相關推薦

2021-03-10 09:52:38

開發技能架構

2017-06-27 09:26:53

運維app開發

2022-07-06 07:27:52

32Core樹莓派集群

2019-10-22 08:12:49

消息隊列分布式系統

2022-07-13 11:17:00

大數據規劃

2016-01-14 13:07:20

美團壓測工具工具

2022-06-10 14:52:46

開源項目字節跳動

2021-08-03 09:07:39

GolangGrpc服務

2019-06-12 15:20:25

Redis高性能線程

2017-08-10 09:11:38

規則引擎構建

2019-10-29 15:46:07

區塊鏈區塊鏈技術

2025-06-27 10:41:04

Redis數據庫集群

2023-02-27 18:31:20

架構服務監控

2024-01-09 18:00:22

Rust后端slvelte

2017-05-08 14:27:49

PHP框架函數框架

2021-02-04 10:22:32

前端開發技術

2023-05-10 10:45:06

開源工具庫項目

2019-07-31 10:18:17

Web 開發Python

2025-07-23 08:13:10

2021-01-08 08:19:36

數據庫TiDB集群
點贊
收藏

51CTO技術棧公眾號

欧美日韩人妻精品一区二区三区| 国产一区二区三区小说| 成人黄色三级视频| 综合久久一区| 亚洲男女性事视频| 黄色片子免费看| 成人免费看黄| 一区二区三区四区在线免费观看| 久久久久综合一区二区三区| 国产精品永久久久久久久久久| 亚洲看片一区| 久久亚洲精品毛片| www.av欧美| 91久久精品无嫩草影院| 欧美在线免费观看亚洲| 色欲色香天天天综合网www| 69久久久久| 91性感美女视频| 成人在线观看av| 国产精品丝袜黑色高跟鞋| 小嫩嫩精品导航| 欧美激情亚洲一区| 国产极品美女在线| 波多野结衣在线播放一区| 亚洲国产精品系列| 国产精品偷伦视频免费观看了| 国产福利亚洲| 一本色道久久综合精品竹菊| 丰满的少妇愉情hd高清果冻传媒| h片在线观看网站| 欧美日韩经典丝袜| av亚洲精华国产精华| 91传媒免费看| 97人妻精品一区二区三区软件 | 波多野结衣视频在线看| 亚洲精品美女91| 欧美激情在线观看| 欧美成人精品欧美一级| 亚洲欧美综合久久久| 日韩在线视频线视频免费网站| 在线免费看黄视频| 免费欧美一区| 亚洲欧美另类人妖| 亚洲成人黄色av| 免费成人av| 亚洲欧美资源在线| 色哟哟精品观看| 蜜臀91精品国产高清在线观看| 日韩精品电影网| 成年人的黄色片| 欧美日韩一区二区三区四区不卡 | 欧产日产国产精品98| 日韩欧美久久| 日韩一区二区在线观看视频播放| 亚洲精品国产久| 国产一区一区| 日韩欧美一级特黄在线播放| 亚洲黄色小说在线观看| 福利电影一区| 精品偷拍一区二区三区在线看| 熟女少妇一区二区三区| 少妇精品久久久一区二区三区 | 亚洲综合影视| 亚洲一级二级在线| 国产一区二区在线视频播放| 午夜探花在线观看| 香蕉视频网站在线| 国产欧美精品一区二区色综合| 午夜精品一区二区在线观看的 | 免费欧美网站| 精品国产免费久久| 香蕉网在线播放| 欧美日韩一二三四| 久久亚洲精品毛片| 久久不卡免费视频| 奇米综合一区二区三区精品视频| 国产日韩中文字幕| 性生活黄色大片| 91女厕偷拍女厕偷拍高清| 色一情一乱一伦一区二区三区| 日本综合在线| 亚洲成人午夜电影| 搡女人真爽免费午夜网站| www.久久久.com| 亚洲国产一区二区三区在线观看 | 天天干天天干天天干| 国产亚洲1区2区3区| 男人的天堂成人| 理论片午夜视频在线观看| 欧美无砖砖区免费| 亚洲香蕉中文网| 欧美日中文字幕| 欧美激情区在线播放| 亚洲天堂一区在线| 国产一区二区网址| 欧美色图亚洲自拍| 天堂成人av| 91福利在线播放| 欧美图片自拍偷拍| 欧美疯狂party性派对| 国模吧一区二区三区| 在线视频欧美亚洲| 91蜜桃在线免费视频| 大地资源网在线观看免费官网| 欧美日韩123区| 精品久久国产97色综合| www.com.av| 久久亚洲色图| 岛国视频一区免费观看| 欧美三级理伦电影| 色妞www精品视频| 亚洲色图欧美日韩| 欧美国产专区| 国产一区香蕉久久| 国产黄色片在线播放| 亚洲大型综合色站| 欧美污在线观看| 999国产精品999久久久久久| 日本久久久久亚洲中字幕| 老司机午夜福利视频| 亚洲桃色在线一区| 欧美伦理片在线观看| 亚洲电影一级片| 午夜免费日韩视频| 亚洲国产精品久久久久久6q | 亚洲一区二区国产| 国产性xxxx高清| 懂色av一区二区三区免费观看| 在线视频福利一区| 久久精品嫩草影院| 自拍偷拍免费精品| 伊人久久一区二区| 日本一区二区三区免费乱视频| 免费观看日韩毛片| 色婷婷精品视频| 91tv亚洲精品香蕉国产一区7ujn| 国产91久久久| 午夜av电影一区| 丰满岳乱妇一区二区| 在线精品福利| 国内视频一区| 日韩伦理在线一区| 精品视频久久久| 久久久久99精品成人片我成大片 | 三级成人在线| 亚洲色图50p| 中文字幕一区二区久久人妻| 中文字幕va一区二区三区| 中文字幕第88页| 亚洲不卡av不卡一区二区| 国产剧情日韩欧美| 黄色网页在线观看| 日韩午夜小视频| 国产在线观看成人| 99re8在线精品视频免费播放| 无码播放一区二区三区| 亚洲香蕉视频| 国产精品久久久久久久久久小说 | 欧美人与牛zoz0性行为| 国产成人91久久精品| 98在线视频| 欧美老肥妇做.爰bbww| a级黄色片免费看| 懂色av一区二区三区免费观看| 精品视频免费在线播放| 国内精品久久久久久久影视简单| 国产精品视频色| 丝袜美腿av在线| 亚洲国产精品va在线观看黑人| 毛片基地在线观看| 国产精品成人一区二区三区夜夜夜 | 午夜剧场免费在线观看| 懂色中文一区二区在线播放| 亚洲中文字幕无码专区| 俺要去色综合狠狠| 不卡一区二区三区视频| 在线观看欧美日韩电影| 精品国偷自产在线| 天天色综合av| 欧美色窝79yyyycom| 青青草手机在线观看| 91片在线免费观看| 亚洲黄色片免费看| 国产欧美成人| 一区二区三区|亚洲午夜| 中文字幕一区图| 日韩av成人在线| 青草在线视频| 在线中文字幕日韩| 亚洲国产剧情在线观看| 欧美在线free| 日本免费在线播放| 国产精品天干天干在线综合| 精品国产aⅴ一区二区三区东京热| 三级欧美在线一区| 欧美久久久久久久久久久久久久| 欧美日韩第一| 久久99蜜桃综合影院免费观看| 四虎影视精品永久在线观看| 69久久夜色精品国产69乱青草| 免费黄色在线| 亚洲一区二区久久久| 亚洲精品一区二区三区不卡| 欧美视频一区在线观看| 精品91久久久| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲av无码一区二区二三区| 国产成人精品亚洲日本在线桃色 | 成人做爰69片免费看网站| 久久99爱视频| 麻豆精品91| 黄色国产一级视频| 欧美精品综合| 一级黄色免费在线观看| 精品黄色一级片| 女同一区二区| 美腿丝袜亚洲图片| 99re国产在线播放| 国产95亚洲| 国产免费一区二区三区在线能观看| 女人高潮被爽到呻吟在线观看| 欧美黄色片在线观看| 亚洲综合影视| 欧美成人自拍视频| 18视频在线观看网站| 久久精品国产清自在天天线 | 日韩美女久久久| 欧美人妻一区二区三区| 久久久精品tv| 免费看黄色的视频| 久久久九九九九| 欧美老熟妇乱大交xxxxx| 9色porny自拍视频一区二区| 午夜影院福利社| 成人爽a毛片一区二区免费| 黄页网站在线看| 国产乱码精品1区2区3区| 国产3p在线播放| 国产综合成人久久大片91| 在线看免费毛片| 国产一区啦啦啦在线观看| 亚洲免费av一区| 蜜臀av一区二区| 老司机久久精品| 狠狠色丁香久久婷婷综| 91亚洲一区二区| 国产成人免费视频网站高清观看视频 | 亚洲欧洲日产国产网站| 精品av中文字幕在线毛片| 亚洲天堂av在线播放| 成年人在线观看视频| 色婷婷久久一区二区| 国产激情小视频在线| 欧美巨乳在线观看| 91黄页在线观看| 欧美中文字幕在线观看| 97成人超碰| 成人在线国产精品| 亚洲啊v在线免费视频| 国产欧美丝袜| 欧美人与牛zoz0性行为| 亚洲综合av一区| 午夜日本精品| 国产l精品国产亚洲区久久| 日日嗨av一区二区三区四区| 另类小说色综合| 国产一区二区精品在线观看| 国产女主播在线播放| 久久综合狠狠综合久久综合88| 精品国产成人亚洲午夜福利| 中文字幕中文字幕一区二区| 免费一级肉体全黄毛片| 欧美性xxxxxx| 一本一道人人妻人人妻αv | 黑人与亚洲人色ⅹvideos| 色妞一区二区三区| 色av手机在线| 国产91精品最新在线播放| 999色成人| 免费看污久久久| 综合五月婷婷| 成人黄色一区二区| 成人一二三区视频| 久久久久久成人网| 亚洲成人免费视| 在线观看国产精品入口男同| 亚洲国产精品女人久久久| 永久av在线| 97超碰国产精品女人人人爽| 欧美激情三区| 久久久久久a亚洲欧洲aⅴ| 一区二区三区在线电影| 无码日韩人妻精品久久蜜桃| 国产成人精品一区二| 内射毛片内射国产夫妻| 亚洲成a人片在线观看中文| 夜夜躁狠狠躁日日躁av| 日韩精品高清在线| 成人黄色网址| 国产成人精品在线播放| 91精品国产乱码久久久竹菊| 日韩视频在线播放| 国产视频欧美| 亚洲三级在线视频| 国产精品欧美极品| 欧美三级一区二区三区| 91精品国产麻豆| 成人高清免费在线播放| 久久人人爽人人爽人人片av高请| 日本精品久久| 日韩国产欧美一区| 国产亚洲一区在线| 亚洲乱妇老熟女爽到高潮的片| 国产精品成人一区二区三区夜夜夜| 日本高清不卡码| 亚洲精品久久久久国产| 污污网站在线看| 成人午夜在线视频一区| 久久中文字幕av| 精品久久久久久久无码 | 日韩欧美视频一区二区| 国产精品婷婷| 欲求不满的岳中文字幕| 夜夜精品浪潮av一区二区三区| 国产精品毛片久久久久久久av| 国产亚洲一区二区在线| 少妇一区视频| 欧美一区二区三区四区五区六区| 99精品热6080yy久久| 国产精品99精品无码视亚| 亚洲精选免费视频| 国产乱色精品成人免费视频| 日韩专区在线播放| 成人黄色免费观看| 亚洲精品成人自拍| 免费在线观看一区二区三区| 真实乱视频国产免费观看| 91成人免费网站| 高清在线观看av| 国产男女猛烈无遮挡91| 久久性感美女视频| 日韩av一卡二卡三卡| 亚洲欧美在线高清| 精品区在线观看| 久久久久久噜噜噜久久久精品| 国产精品nxnn| 日韩久久一级片| 国产午夜亚洲精品午夜鲁丝片| 无码人妻久久一区二区三区| 亚洲一区www| 欧美一区二区三区婷婷| 国产人妻互换一区二区| 国产成人午夜片在线观看高清观看| 青草草在线视频| 亚洲国产成人精品女人久久久 | 色呦呦在线播放| 国产精品一区二区av| 国产精品日本| 少妇无套高潮一二三区| 欧美日韩国产123区| 亚洲国产精品精华素| 国产一区免费| 久久综合九色综合欧美狠狠| wwwww黄色| 日韩欧美一区二区免费| 在线看的毛片| 亚洲人一区二区| 国产91高潮流白浆在线麻豆| 国产精品午夜影院| 亚洲一区二区福利| 日韩在线成人| 91免费视频网站在线观看| 国产精品日韩精品欧美在线| 精品国自产在线观看| 欧美尤物巨大精品爽| 日韩精品影视| 亚洲成年人在线观看| 在线欧美小视频| 羞羞的视频在线看| 欧美午夜精品久久久久免费视| 久久99日本精品| 日本道在线观看| 久久影视电视剧免费网站| 欧美变态网站| xxxx在线免费观看| 精品国产精品三级精品av网址| 国产乱理伦片a级在线观看| 99国产在线| 琪琪一区二区三区| 国产成人亚洲精品自产在线 | 日韩在线电影一区| 国产成人精品一区二区三区网站观看| 一本一道无码中文字幕精品热| 久久精品国产亚洲7777| 天天躁日日躁狠狠躁欧美| 99re6在线观看| 日韩欧美在线免费观看| 97caopron在线视频| 日韩欧美亚洲精品| gogogo免费视频观看亚洲一|