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

DDD 與 CQRS 才是黃金組合,你覺(jué)得呢?

開(kāi)發(fā) 前端
“數(shù)據(jù)密集型系統(tǒng)”越來(lái)越多的應(yīng)用程序有著各種嚴(yán)格而廣泛的要求,單個(gè)工具不足以滿(mǎn)足所有的數(shù)據(jù)處理和存儲(chǔ)需求。取而代之的是,總體工作被拆分成一系列能被單個(gè)工具高效完成的任務(wù),并通過(guò)應(yīng)用代碼將它們縫合起來(lái),通過(guò) API 的方式,對(duì)外提供服務(wù),屏蔽內(nèi)部的復(fù)雜性。

在日常工作中,你是否也遇到過(guò)下面幾種情況:

  • 使用一個(gè)已有接口進(jìn)行業(yè)務(wù)開(kāi)發(fā),上線(xiàn)后出現(xiàn)嚴(yán)重的性能問(wèn)題,被老板當(dāng)眾質(zhì)疑:“你為什么不使用緩存接口,這個(gè)接口全部走數(shù)據(jù)庫(kù),這怎么能抗住!”
  • 開(kāi)發(fā)一個(gè)后臺(tái)管理功能,業(yè)務(wù)反饋說(shuō)數(shù)據(jù)一直不對(duì),對(duì)比后發(fā)現(xiàn)緩存與數(shù)據(jù)庫(kù)不一致,為什么要使用緩存接口呢,你陷入沉思?
  • 產(chǎn)品要求在 xxx 上增加新功能,編碼、測(cè)試、上線(xiàn)一氣呵成,最后發(fā)現(xiàn)另外一個(gè)流程被躺槍?zhuān)霈F(xiàn)異常不得不進(jìn)行回滾!
  • 在一個(gè)高并發(fā)的場(chǎng)景,DB 成為了系統(tǒng)瓶頸,不加索引查詢(xún)扛不住,加索引更新扛不住,又該如何處理?
  • 隨著數(shù)據(jù)量的激增,系統(tǒng)變得越來(lái)越慢,特別是后臺(tái)管理復(fù)雜的查詢(xún)場(chǎng)景下,復(fù)雜的 Join 讓 DB 不堪重負(fù)
  • ……

為什么會(huì)出現(xiàn)這種現(xiàn)象?其本質(zhì)仍舊是代碼組織結(jié)構(gòu)不合理,我們將不同的復(fù)雜性揉在一起,從而造成了更大的復(fù)雜性,然后如此往復(fù),不知不覺(jué)中陷入巨大的復(fù)雜性旋渦不可自拔。

1. CQRS 是什么?

CQRS 是 Command Query Responsibility Segregation 得簡(jiǎn)稱(chēng),簡(jiǎn)單理解就是對(duì) “寫(xiě)”(Command) 和 “讀” (Query)操作進(jìn)行分離。反應(yīng)快的同學(xué)會(huì)說(shuō):“也不是什么高深技術(shù)嗎,不就是數(shù)據(jù)庫(kù)的讀寫(xiě)分離嗎?”

是的,數(shù)據(jù)庫(kù)的讀寫(xiě)分離也算是一種 CQRS,但 CQRS 的含義要比這復(fù)雜的多。

CRQS 既是一種流行的業(yè)務(wù)架構(gòu),又是一種設(shè)計(jì)思維。

CQRS 的核心是“拆分”,將復(fù)雜系統(tǒng)拆分為 Command 和 Query 兩個(gè)部分,針對(duì)不同的場(chǎng)景使用不同的模式,選擇最合適的技術(shù)落地最佳解決方案,避免兩者相互掣肘相互影響。

CQRS的目的是降低整個(gè)系統(tǒng)的復(fù)雜性,那它背后的邏輯是什么?

假設(shè),在一個(gè)系統(tǒng)中:

  • Command 的復(fù)雜性為 M
  • Query 的復(fù)雜性為 N

如果使用同一套模型來(lái)處理 Command 和 Query,那在極端情況下,系統(tǒng)的復(fù)雜性為 M * N,因?yàn)閮烧呦嗷ビ绊懀{(diào)整一方的同時(shí)要時(shí)刻關(guān)注對(duì)另一方的影響。

這種“你中有我,我中有你”的設(shè)計(jì)方式,“兩者的相互影響”成為系統(tǒng)最為復(fù)雜之處,大量精力消耗在“排查影響”,而非最有價(jià)值的設(shè)計(jì)和編碼。

如果,將 Command 和 Query 徹底分離,系統(tǒng)的復(fù)雜性變成 M + N。Command 的變更不會(huì)影響 Query,而 Query 的修改也不會(huì)影響 Command。

當(dāng)然,以上兩個(gè)極端在實(shí)際工作中也很少見(jiàn),通常系統(tǒng)的復(fù)雜性介于兩者之間。

這只是從理論進(jìn)行推導(dǎo),在實(shí)際工作中隨處可見(jiàn)的“沖突”也是對(duì)“拆分”的一種暗示。

2. 分層架構(gòu)中的沖突

以最常見(jiàn)的分層架構(gòu)進(jìn)行介紹,具體如下:

如圖所示,將系統(tǒng)分成5層,每層的含義如下:

  1. Web 接入層。主要用于處理系統(tǒng)輸入,對(duì)輸入信息進(jìn)行驗(yàn)證,調(diào)用應(yīng)用服務(wù)完成業(yè)務(wù)操作,對(duì)結(jié)果進(jìn)行轉(zhuǎn)換,最終返回給調(diào)用方;
  2. 應(yīng)用服務(wù)層。主要處理業(yè)務(wù)流程編排,從倉(cāng)庫(kù)中獲取領(lǐng)域?qū)ο螅瑘?zhí)行領(lǐng)域模型的業(yè)務(wù)操作,將最新的對(duì)象狀態(tài)通過(guò)倉(cāng)庫(kù)同步到數(shù)據(jù)存儲(chǔ)引擎,并對(duì)外發(fā)布領(lǐng)域事件;
  3. 領(lǐng)域?qū)印I(yè)務(wù)邏輯的承載點(diǎn),是業(yè)務(wù)價(jià)值的集中體現(xiàn),通常構(gòu)建于面向?qū)ο笤O(shè)計(jì)之上,基于封裝、繼承、多態(tài)等特性保障業(yè)務(wù)邏輯的復(fù)用性和擴(kuò)展性;
  4. 倉(cāng)庫(kù)層。主要用于數(shù)據(jù)訪(fǎng)問(wèn),向上為應(yīng)用服務(wù)提供數(shù)據(jù)操作服務(wù),向下屏蔽各類(lèi)存儲(chǔ)引擎的差異;
  5. 數(shù)據(jù)層。主要用于數(shù)據(jù)保存和檢索,常見(jiàn)的數(shù)據(jù)存儲(chǔ)引擎全部屬于這一層,比如 MySQL、Redis、ES 等;

其實(shí),分層架構(gòu)本身也是一種“拆分”,將不同的關(guān)注點(diǎn)封裝在不同的層次。但除了橫向分層,還可以基于 CQRS 對(duì)其進(jìn)行縱向拆分,也就是將每個(gè)層的組件拆分為 Command 和 Query 兩部分。

由于接入層沖突較小,本身拆分的意義不大,在此不做要求,但從嚴(yán)格意義上講,仍舊建議進(jìn)行拆分。

3. 應(yīng)用服務(wù)層沖突與拆分

應(yīng)用服務(wù)層拆分就是將一個(gè)應(yīng)用服務(wù)拆分為 CommandService 和 QueryService 兩組。

這樣做可以避免很多不必要的麻煩,Command 和 Query 存在較大的區(qū)別,具體如下:


CommandService

QueryService

依賴(lài)組件不同

ValidateService 驗(yàn)證服務(wù);LazyLoaderFactory 延遲加載服務(wù);CommandRepository 不帶緩存的倉(cāng)庫(kù);EventPublisher 事件發(fā)表器

QueryRepository 帶緩存功能的倉(cāng)庫(kù);JoinService 數(shù)據(jù)聚合服務(wù);Converter 數(shù)據(jù)轉(zhuǎn)換服務(wù)

核心流程不同

驗(yàn)證、加載、業(yè)務(wù)操作、同步、發(fā)布事件

驗(yàn)證、加載、數(shù)據(jù)組裝、轉(zhuǎn)換

功能加強(qiáng)不同

主要是事務(wù)管理器

主要是緩存組件

回想開(kāi)篇時(shí)提到的場(chǎng)景,完成應(yīng)用層拆分,就不在為使用錯(cuò)組件而煩惱:

  • CommandService 的 Repository 不使用緩存,僅操作數(shù)據(jù)庫(kù)
  • QueryService 的 Repository 可以使用緩存,以提升訪(fǎng)問(wèn)性能

除此之外,針對(duì)統(tǒng)一的操作流程,還可以進(jìn)一步抽象來(lái)消除重復(fù)的“模板代碼”,比如:

  • 引入“模板方法設(shè)計(jì)模式” 以達(dá)到核心邏輯的復(fù)用

抽象出 BaseCommandService 和 BaseQueryService 兩個(gè)父類(lèi)用于統(tǒng)一核心流程

子類(lèi)實(shí)現(xiàn) BaseCommandService 和 BaseQueryService 的抽象方法完成功能擴(kuò)展

  • 基于“約定優(yōu)于配置” 使用 Proxy 模型,只定義接口不寫(xiě)實(shí)現(xiàn)代碼
  • 按規(guī)范定義 CommandService 和 QueryService 接口,通過(guò)注解完成相關(guān)配置
  • 自動(dòng)生成 Proxy 實(shí)現(xiàn)類(lèi),完成流程編排

4. 模型層沖突與拆分

模型層是系統(tǒng)的核心,它的設(shè)計(jì)直接影響整個(gè)系統(tǒng)的質(zhì)量。作為承接業(yè)務(wù)邏輯的核心,比較流程的實(shí)現(xiàn)策略包括:

  • DDD 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),其核心是使用面向?qū)ο蟮母呒?jí)特性(封裝、繼承、多態(tài)、組合等)來(lái)進(jìn)行設(shè)計(jì),非常適合復(fù)雜的業(yè)務(wù)場(chǎng)景。其體現(xiàn)就是存在很多高內(nèi)聚低耦合的對(duì)象組(聚合根),業(yè)務(wù)邏輯由這些小對(duì)象相互協(xié)作共同完成;
  • 事務(wù)腳本,使用過(guò)程式思維,將數(shù)據(jù)操作編織到流程中,比較適合并不復(fù)雜的業(yè)務(wù)場(chǎng)景。其體現(xiàn)就是存在很多“上帝 Service”,Service 中存在很多非常長(zhǎng)的方法,業(yè)務(wù)邏輯由這些方法完成;

關(guān)于哪個(gè)才是最優(yōu)解,網(wǎng)上已經(jīng)爭(zhēng)論多年,最終也沒(méi)有結(jié)論。但我始終認(rèn)為“沒(méi)有業(yè)務(wù)場(chǎng)景就討論方案,就是在耍流氓”。

從不同應(yīng)用場(chǎng)景出發(fā)便可得到如下結(jié)論:

  • Command 場(chǎng)景需要保障嚴(yán)謹(jǐn)?shù)臉I(yè)務(wù)邏輯,通常復(fù)雜性偏高,所以DDD 是最優(yōu)解
  • Query 場(chǎng)景需要更靈活的數(shù)據(jù)組裝能力作為支持,通常比較簡(jiǎn)單,所以 事務(wù)腳本 是最優(yōu)解

我經(jīng)常說(shuō):“最簡(jiǎn)單的“寫(xiě)”也是復(fù)雜,最復(fù)雜的“讀”也是簡(jiǎn)單”,其背后邏輯是基于對(duì) Command 和 Query 的場(chǎng)景判斷。

將模型拆分為 Command 和 Query,具體如下:


完成模型拆分后,新模型具有以下特征:

  • Agg 也就是 DDD 中聚合根,主要用于處理復(fù)雜的 Command 邏輯,由具有大量業(yè)務(wù)操作的"富對(duì)象"構(gòu)成;
  • View 是標(biāo)準(zhǔn)的 POJO,主要充當(dāng) Query 結(jié)果對(duì)象,典型的“貧血對(duì)象”,僅作為數(shù)據(jù)的載體,根據(jù)展示需求對(duì)數(shù)據(jù)進(jìn)行組裝;
  • View 沒(méi)有自己的 Repository,只能依賴(lài) CommandRepository 獲取數(shù)據(jù),Converter 組件負(fù)責(zé)將 Agg 模型轉(zhuǎn)換為 View 模型;

這塊是拆分的重點(diǎn),為了方便理解,簡(jiǎn)單舉個(gè)例子:

比如在電商的訂單模塊:

  • 生單流程,由 Order 作為聚合根對(duì)內(nèi)部 OrderItem 和 PayInfo 進(jìn)行統(tǒng)一協(xié)調(diào)
  • 訂單列表頁(yè),只需展示 Order 和 User 信息
  • 訂單詳情,需要展示Order、User、Address、OrderItem、PayInfo、Product等信息

如果讓一個(gè)模型同時(shí)支持著三個(gè)場(chǎng)景,那模型自己就變的非常復(fù)雜,很難判斷某個(gè)方法、某個(gè)字段究竟屬于哪個(gè)場(chǎng)景。

此時(shí),應(yīng)該根據(jù)場(chǎng)景對(duì)模型進(jìn)行拆分:

  • OrderBO 以 DDD 方式進(jìn)行建模,對(duì)外提供統(tǒng)一的業(yè)務(wù)操作,對(duì)內(nèi)協(xié)調(diào) OrderItem 和 PayInfo 等多個(gè)實(shí)體對(duì)象;
  • OrderListVO 以 POJO 方式進(jìn)行建模,屬性中包含 Order 和 User 信息;
  • OrderDetailVO 以 POJO 方式進(jìn)行建模,屬性中包括 Order、User、Address、OrderItem、PayInfo、Product 等信息;

三個(gè)模型相互獨(dú)立,互不影響。

當(dāng)然,由于使用統(tǒng)一的 Repository 還需提供對(duì)應(yīng) VO 的 Converter:

  • OrderListVOConverter 將 OrderBO 轉(zhuǎn)換為 OrderListVO 對(duì)象
  • OrderDetailVOConverter 將 OrderBO 轉(zhuǎn)化為 OrderDetailVO 對(duì)象

5. 倉(cāng)庫(kù)層沖突與拆分

倉(cāng)庫(kù)層拆分也是非常有必要的,在這一層主要有幾項(xiàng)沖突:


CommandRepository

QueryRepository

底層實(shí)現(xiàn)不同

主要基于 DB 實(shí)現(xiàn)

基于 DB、Redis、ES 等多種存儲(chǔ)引擎

方法復(fù)雜性不同

提供僅有的少量方法并足以支持大多數(shù)場(chǎng)景,比如 save、update、getById 等

根據(jù)業(yè)務(wù)場(chǎng)景進(jìn)行定制,方法多種多樣(單條、批量、分頁(yè)、排序、統(tǒng)計(jì)等),維度多種多樣(id、user、status)

返回值不同

直接返回裝配完整的富對(duì)象

根據(jù)業(yè)務(wù)場(chǎng)景定制返回值

倉(cāng)庫(kù)拆分后整體架構(gòu)如下:

倉(cāng)庫(kù)拆分具有以下特點(diǎn):

  • View 不在需要 Converter 組件完成數(shù)據(jù)轉(zhuǎn)換
  • View 的數(shù)據(jù)來(lái)自于自己的 Repository,可以根據(jù)展示需求進(jìn)行靈活定制
  • Command 和 Query 仍舊使用同一套數(shù)據(jù)庫(kù)、同一套數(shù)據(jù)表

6. 數(shù)據(jù)層沖突與拆分

數(shù)據(jù)層拆分是最重要的拆分,提到分離第一反應(yīng)也是“數(shù)據(jù)庫(kù)主從分離”。

數(shù)據(jù)層拆分的本質(zhì)是:各種數(shù)據(jù)存儲(chǔ)引擎的最佳應(yīng)用場(chǎng)景相差巨大,讀 和 寫(xiě) 優(yōu)化往往存在矛盾。

仍舊以最常見(jiàn)的數(shù)據(jù)庫(kù)為例:

  • 提升查詢(xún)性能,建議為各種查詢(xún)維度建立索引
  • 提升寫(xiě)入性能,需要讓表上的索引越來(lái)越少
  • 為了加速更新性能,建議使用三范式設(shè)計(jì)表結(jié)構(gòu),減少冗余信息
  • 為了加速查詢(xún)性能,建議使用反范式設(shè)計(jì),盡量冗余數(shù)據(jù),避免數(shù)據(jù)表間的 Join 操作

魚(yú)和熊掌不可兼得,在數(shù)據(jù)庫(kù)層展示的淋漓盡致!

數(shù)據(jù)層拆分后架構(gòu)如下:

該模型具有以下特點(diǎn):

  • 數(shù)據(jù)存儲(chǔ)進(jìn)行了徹底拆分;Command 和 Query 都可以靈活的選擇最合適的存儲(chǔ)引擎;
  • Command 與 Query 需要引入一套同步機(jī)制以完成兩者的數(shù)據(jù)同步,常見(jiàn)的同步機(jī)制有:

工作在應(yīng)用層基于領(lǐng)域事件的數(shù)據(jù)同步,如圖所示

工作在數(shù)據(jù)層基于log的數(shù)據(jù)同步,如 MySQL 的主從同步、Canal2XX 等

數(shù)據(jù)層拆分是大型系統(tǒng)最終的歸宿,仍舊以訂單系統(tǒng)為例:

  • 訂單作為一致性要求極高的系統(tǒng),Command 側(cè)首選仍舊為具有 ACID 的關(guān)系型數(shù)據(jù)庫(kù),哪怕是分庫(kù)分表底層存儲(chǔ)仍舊不變;
  • 為了滿(mǎn)足高性能查詢(xún)需求,需要在 Query 側(cè)引入 Redis 作為分布式緩存對(duì)訪(fǎng)問(wèn)進(jìn)行加速;
  • 為了滿(mǎn)足后臺(tái)復(fù)雜且多維度的業(yè)務(wù)查詢(xún),需要在 Query 側(cè)引入 ES 為全文檢索進(jìn)行加速;
  • 為了滿(mǎn)足各種實(shí)時(shí)報(bào)表需求,需要在 Query 側(cè)引入 TiDB 以滿(mǎn)足海量數(shù)據(jù)的實(shí)時(shí)檢索;

這就是我們面臨的現(xiàn)狀:“數(shù)據(jù)密集型系統(tǒng)”越來(lái)越多的應(yīng)用程序有著各種嚴(yán)格而廣泛的要求,單個(gè)工具不足以滿(mǎn)足所有的數(shù)據(jù)處理和存儲(chǔ)需求。取而代之的是,總體工作被拆分成一系列能被單個(gè)工具高效完成的任務(wù),并通過(guò)應(yīng)用代碼將它們縫合起來(lái),通過(guò) API 的方式,對(duì)外提供服務(wù),屏蔽內(nèi)部的復(fù)雜性。

7. 小結(jié)

“拆分”是“分離關(guān)注點(diǎn)”的重要手段之一。拆分的目的是將問(wèn)題進(jìn)行歸類(lèi),然后采取有針對(duì)性的手段更好的解決問(wèn)題。

CQRS 作為一種架構(gòu),將業(yè)務(wù)系統(tǒng)不同部分進(jìn)行歸類(lèi),接下來(lái)需要為 Command 和 Query 尋找最優(yōu)解決方案:

  • Command,以 DDD 作為理論基礎(chǔ)將戰(zhàn)術(shù)模型中最佳實(shí)戰(zhàn)進(jìn)行落地,包括

聚合設(shè)計(jì)

倉(cāng)庫(kù)設(shè)計(jì)

LazyLoad + Context 模式

業(yè)務(wù)驗(yàn)證

領(lǐng)域事件

  • Query,以數(shù)據(jù)檢索和組裝作為核心能力,設(shè)計(jì)留給開(kāi)發(fā)人員,實(shí)現(xiàn)留給框架,包括
  • QueryObject 查詢(xún)對(duì)象模式
  • 內(nèi)存 Join 模式
  • 寬表&冗余表模式
責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-08-14 23:23:56

2025-05-20 03:00:00

2025-03-03 08:49:59

2024-06-11 08:50:43

xlwingsPython庫(kù)Excel

2025-10-10 04:10:00

2009-06-22 16:19:27

無(wú)線(xiàn)路由器產(chǎn)品華碩

2022-12-08 19:20:11

開(kāi)源用戶(hù)使用軟件

2025-04-21 09:07:00

2021-02-02 09:37:20

CQRS系統(tǒng)數(shù)據(jù)庫(kù)

2023-08-10 13:57:50

模型AI

2017-07-06 14:01:32

CQRSEvent Sourc架構(gòu)

2019-04-02 10:39:42

WiFiLiFi5G

2021-12-05 23:17:18

iOS蘋(píng)果系統(tǒng)

2009-05-25 10:18:29

PHPLAMPGLAMMP

2016-03-25 09:29:24

Apple開(kāi)發(fā)工具開(kāi)發(fā)者

2025-08-20 09:34:57

2014-01-14 10:18:02

智能硬件CES2014升級(jí)系統(tǒng)

2023-01-10 08:43:15

定義DDD架構(gòu)

2022-10-19 12:06:12

2025-09-22 09:02:00

OpenAI蘋(píng)果硬件
點(diǎn)贊
收藏

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

伊人免费在线| 黄色一级片在线| 日韩视频网站在线观看| 国产精品家庭影院| 成人午夜影院在线观看| 国产精品xxxx喷水欧美| 奇米影视亚洲| 精品福利av导航| 超碰网在线观看| caopon在线免费视频| 92精品国产成人观看免费| 国产精品免费视频久久久| 国产精品白嫩白嫩大学美女| 麻豆一区一区三区四区| 欧美日韩色综合| 成人精品视频在线播放| 99riav在线| 不卡的av网站| 成人深夜直播免费观看| av大片在线免费观看| 亚洲在线久久| 亚洲性生活视频| 国产精品亚洲一区二区无码| 福利视频一区| 欧美日韩人人澡狠狠躁视频| 国产欧美综合一区| 国产福利小视频在线观看| 成人黄页在线观看| 91在线观看免费| 波多野结衣在线电影| 狠狠爱www人成狠狠爱综合网| 在线观看日韩www视频免费| 污网站免费观看| 国产午夜亚洲精品一级在线| 一本大道久久a久久精品综合 | 日本一二区不卡| 精品国产乱码久久久久久影片| 亚洲不卡视频在线| 小草在线视频免费播放| 亚洲一区国产视频| 午夜久久久久久久久久久| 91在线网址| 国产欧美一区二区精品性色超碰| 精品国产aⅴ麻豆| 亚洲av无码乱码在线观看性色 | 一区二区三区四区影院| 亚洲日本免费电影| 欧美色图免费看| www黄色av| 欧美男男tv网站在线播放| 一区二区不卡在线播放| www.99riav| av在线免费播放| 成人免费在线视频| 小说区视频区图片区| 在线观看麻豆| 国产精品久久久久久久久图文区| 日本视频一区二区不卡| 邻家有女韩剧在线观看国语| 91原创在线视频| 国内成+人亚洲| 四虎精品一区二区三区| www.性欧美| 精品国产乱码久久久久| 深夜福利视频网站| 久久综合网色—综合色88| 蜜桃传媒视频第一区入口在线看| 五月婷婷免费视频| wwwwxxxxx欧美| 欧美日韩国产三区| 九色蝌蚪在线| 国产精品免费观看视频| 手机在线视频你懂的| 91中文在线| 亚洲线精品一区二区三区| 亚洲人精品午夜射精日韩 | 国产精品x453.com| 久久综合九色九九| 国产成人精品av久久| 99热这里只有成人精品国产| 人九九综合九九宗合| 无码久久精品国产亚洲av影片| 日本特黄久久久高潮| 国产精品揄拍500视频| 99热这里只有精| 成人av免费观看| 欧美精品亚洲精品| 五月香视频在线观看| 一区二区三区免费在线观看| 日本中文字幕网址| 写真福利精品福利在线观看| 制服丝袜中文字幕亚洲| 日韩少妇一区二区| 国产va免费精品观看精品视频| 中文字幕精品视频| 久久97人妻无码一区二区三区| 亚洲综合欧美| 国产在线观看一区二区三区 | 日韩精品www| 91动漫免费网站| 激情欧美国产欧美| 国产va免费精品高清在线观看| 亚洲一卡二卡在线观看| 岛国精品在线观看| 午夜精品亚洲一区二区三区嫩草| 污网站在线免费看| 色婷婷综合久久久中文一区二区 | 26uuu成人| 在线女人免费视频| 欧美一区日本一区韩国一区| 欧美色图亚洲激情| 综合在线一区| 国产福利成人在线| 成 人 免费 黄 色| 国产蜜臀av在线一区二区三区| 在线观看17c| 国模视频一区| 亚洲国产精品一区二区久| 99久久精品久久亚洲精品| 一本综合久久| 99久久综合狠狠综合久久止| 国产在线观看黄| 亚洲国产欧美另类丝袜| 男生操女生视频在线观看| 欧美男人操女人视频| 久久精品在线播放| 亚洲高清在线看| 99久久久精品| 亚洲精品天堂成人片av在线播放 | 国内精品久久久久久久97牛牛 | 国产成人午夜电影网| 日韩精品久久一区二区三区| 成人免费图片免费观看| 日韩午夜精品电影| 999精品视频在线观看播放 | 亚洲美女性囗交| 日韩激情图片| 国产精品va在线| 免费人成黄页在线观看忧物| 亚洲va韩国va欧美va精品| 国产精品手机播放| 亚洲aⅴ在线观看| 亚洲第一福利一区| 在线播放国产视频| 国产精品伦理久久久久久| 国产经典一区二区| 你懂的在线看| 狠狠色噜噜狠狠狠狠97| 精品影片一区二区入口| 欧美深夜福利| 亚洲xxx自由成熟| 国产鲁鲁视频在线观看特色| 欧美日韩一级视频| 性猛交娇小69hd| 日韩av一区二区三区四区| 日本三级中国三级99人妇网站| 欧美成人h版| 亚洲女人天堂色在线7777| 日本中文字幕在线| 久久久精品中文字幕麻豆发布| 精品人妻一区二区三区四区在线 | 7777精品伊人久久久大香线蕉的| 日本成人免费在线观看| 美女网站色91| 中文字幕超清在线免费观看| 国产精品一级在线观看| 久久五月天色综合| 性欧美videos另类hd| 亚洲成人tv网| 日本xxx在线播放| 石原莉奈在线亚洲三区| 日韩精品在在线一区二区中文 | 91精品国产综合久久久久久丝袜 | 国产精品一区2区3区| 国产精品高潮在线| 日韩在线观看www| 欧美一区二区福利在线| 国产第一页在线播放| 99久久久免费精品国产一区二区| 欧美三级午夜理伦三级| 成人精品视频| 爱情岛论坛亚洲入口| 一二三四视频在线中文| 中文字幕亚洲情99在线| 午夜精品久久久久久久99热黄桃 | 久久久久国产精品人| 麻豆一区二区三区视频| 欧美成人首页| 久久久精彩视频| 国产一区高清| 孩xxxx性bbbb欧美| 国产免费av高清在线| 日韩一区二区中文字幕| 欧美亚洲精品天堂| 国产精品久久久久四虎| 丰满少妇xbxb毛片日本| 日韩精品亚洲专区| 裸体大乳女做爰69| 欧美日韩一区二区三区四区不卡| 国产精品视频男人的天堂| 五月花成人网| 中文字幕日韩有码| 天天干天天草天天射| 精品视频一区二区三区免费| 久久老司机精品视频| 国产天堂亚洲国产碰碰| 国产精品99久久久精品无码| 三级欧美韩日大片在线看| av中文字幕av| 精品一区二区三区在线| 国产精品香蕉视屏| 亚洲伦理一区二区| 911国产网站尤物在线观看| 精品国产白色丝袜高跟鞋| 亚洲男人天堂古典| 亚洲第一色视频| 欧美色男人天堂| 国产性猛交╳xxx乱大交| 亚洲精品国产无天堂网2021| 国产一区二区三区四区五区六区| 成人午夜短视频| 999在线精品视频| 久久先锋资源| 久久久一本二本三本| 综合精品久久| 久久av秘一区二区三区| 嫩草一区二区三区| 国产一区精品在线| 美国十次综合久久| 国产精品主播视频| 日韩在线影院| 欧洲成人在线视频| 麻豆mv在线看| 久久久久久久亚洲精品| a天堂中文在线官网在线| 最近2019好看的中文字幕免费| 深夜福利视频在线免费观看| 精品国产一区二区三区久久久蜜月| 中文字幕一区二区在线视频| 色婷婷亚洲精品| 日本一区二区三区精品| 午夜成人免费电影| 国产第一页第二页| 亚洲成人一区二区| 国产中文字幕免费| 亚洲国产精品嫩草影院| 欧美黄色一级网站| 一区二区三区四区乱视频| 欧美做爰啪啪xxxⅹ性| 综合激情成人伊人| 亚洲综合视频网站| 亚洲色图欧美激情| 印度午夜性春猛xxx交| 亚洲欧洲国产日本综合| 黄色一级片一级片| 亚洲欧美在线高清| 糖心vlog免费在线观看| 亚洲同性gay激情无套| 日韩精品123区| 亚洲日本在线观看| 九九热视频精品| 亚洲成人激情自拍| 9i看片成人免费看片| 在线亚洲欧美专区二区| 中文字幕理论片| 欧美日本一区二区在线观看| 国产人妖一区二区| 亚洲同性同志一二三专区| www深夜成人a√在线| 亚洲黄色小视频| 日本在线视频免费| 欧美日韩国产中文精品字幕自在自线| 国产精品suv一区二区三区| 欧美性猛交xxxxx水多| 懂色av蜜臀av粉嫩av分享吧最新章节| 欧美在线小视频| 91激情在线观看| 精品99久久久久久| 久青草国产在线| 久久久成人精品| 大桥未久在线播放| 日本久久精品视频| 伊人亚洲精品| 国产伦精品一区二区三区四区免费| 婷婷五月色综合香五月| 亚洲国产欧美不卡在线观看| 自拍欧美日韩| 丰满爆乳一区二区三区| 日韩激情在线观看| 26uuu国产| 国产亚洲欧美色| 国产探花在线免费观看| 欧美日韩亚洲一区二区| 91亚洲国产成人久久精品麻豆| 精品精品欲导航| 国产69久久| 久久久久久久久久久国产| 户外露出一区二区三区| 亚洲自拍偷拍区| 免费看成人哺乳视频网站| 7777在线视频| 日韩av电影一区| 88av在线播放| 中文字幕一区二区三区不卡在线| 国产精品99精品| 欧美日韩aaaaaa| 美女欧美视频在线观看免费| 欧美成人黄色小视频| 成人爱爱网址| 国产视频不卡| 欧美 日韩 国产 一区| 男操女免费网站| 99麻豆久久久国产精品免费| 日韩欧美视频免费观看| 欧美日韩在线视频首页| av中文字幕第一页| 在线播放日韩专区| 涩涩视频在线| 国产二区不卡| 久久久久久久久久久9不雅视频| 男人天堂999| 久久久国产成人精品| 亚洲成人在线网| 久久精品一级片| 在线日韩国产精品| 亚洲精品国产手机| 久久九九全国免费精品观看| 成人小电影网站| 精品国产综合| 国产一区欧美| 尤物网站在线看| 国产精品成人免费| 日本精品入口免费视频| 日韩成人久久久| а√天堂8资源在线| 97中文在线| 一区二区影院| 欧美精品色视频| 亚洲男人电影天堂| 国产一区二区在线不卡| 中文字幕日韩综合av| 外国成人直播| 欧美精品一区二区三区四区五区| 国产欧美综合一区二区三区| 欧美在线一级片| 欧美日韩国产综合新一区 | 亚洲欧美日本国产专区一区| 日本wwww色| 亚洲综合精品自拍| 成人毛片在线免费观看| 欧美日韩第一页| 在线播放一区二区精品视频| 99久久99久久精品| 国产宾馆实践打屁股91| 精品小视频在线观看| 日韩欧美123| 538视频在线| 欧美动漫一区二区| 免费观看久久久4p| 国产又粗又硬又长又爽| 欧美一区二区久久久| 在线观看三级视频| 国产精品.com| 中文亚洲欧美| 中文字幕在线看高清电影| 色婷婷av一区二区三区软件| 国产专区在线| 国产精品亚发布| 欧美在线国产| 丰满岳乱妇一区二区 | 免费在线不卡av| 中文字幕久久亚洲| 国产精品美女久久久久人| 国产精品无码电影在线观看| 成人av片在线观看| 中文字幕视频网| 中文字幕日韩有码| 亚洲1区在线| 国产l精品国产亚洲区久久| 国产日韩欧美一区二区三区综合| 国产精品伦理一区| 91国语精品自产拍在线观看性色 | 韩国欧美国产1区| 青青草原国产视频| 日韩激情av在线免费观看| 中文字幕日本一区二区| 激情视频小说图片| www国产精品av| 国产精品无码AV| 欧美在线观看一区二区三区| 欧美日韩亚洲在线观看| 一级黄色免费毛片| 无码av中文一区二区三区桃花岛| 国产在线色视频| 97中文在线观看| 日韩高清一区在线| 久久亚洲成人av| 在线一区二区日韩| 欧美亚洲色图校园春色| 色乱码一区二区三区在线|