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

揭露數(shù)據(jù)不一致的利器 —— 實時核對系統(tǒng)

開發(fā) 架構(gòu)
本文介紹 Shopee Financial Products 團(tuán)隊設(shè)計和開發(fā)的 實時核對系統(tǒng)(Real-time Checking System)。

隨著企業(yè)業(yè)務(wù)發(fā)展,以及微服務(wù)化大趨勢下單體服務(wù)的拆分,服務(wù)間的通信交互越來越多。與單體服務(wù)不同,微服務(wù)間的數(shù)據(jù)往往需要通過額外的手段來保障一致性,例如事務(wù)消息、異步任務(wù)補償?shù)取3藦臋C(jī)制上最大程度保障以外,如何觀測并及時發(fā)現(xiàn)數(shù)據(jù)不一致也非常重要。

本文介紹 Shopee Financial Products 團(tuán)隊設(shè)計和開發(fā)的 實時核對系統(tǒng)(Real-time Checking System) ,它接入簡單,只需根據(jù)核對需求配置對應(yīng)的核對規(guī)則,實現(xiàn)了規(guī)則熱加載,并能在不侵入業(yè)務(wù)的前提下對系統(tǒng)數(shù)據(jù)進(jìn)行實時監(jiān)測對比,及時發(fā)現(xiàn)數(shù)據(jù)的不一致。系統(tǒng)落地至今,已在 Shopee 多個產(chǎn)品線推廣使用,幫助不同團(tuán)隊快速發(fā)現(xiàn)線上數(shù)據(jù)不一致問題,為數(shù)據(jù)保駕護(hù)航。

1. 背景

1.1 系統(tǒng)數(shù)據(jù)的不一致性

在日常的開發(fā)迭代中我們能發(fā)現(xiàn),系統(tǒng)的數(shù)據(jù)有時并不按照我們設(shè)想的那樣進(jìn)行變更。常見的場景如:用戶進(jìn)行了還款(Repay),系統(tǒng) A 收到了還款請求后調(diào)用系統(tǒng) B,將已凍結(jié)的賬戶進(jìn)行解凍,但因為某些原因(如系統(tǒng)故障、網(wǎng)絡(luò)分區(qū)等),解凍的請求沒有抵達(dá) B,或者解凍成功的響應(yīng)沒有返回給 A,此時會出現(xiàn)已經(jīng)確定收款但未解凍,或未確認(rèn)收款卻已解凍的情況,從而引起用戶投訴或資金損失。

Fig1. Data Inconsistency

造成這類問題的原因通常有:代碼邏輯 Bug、并發(fā)場景處理不當(dāng)、基礎(chǔ)組件(網(wǎng)絡(luò)、數(shù)據(jù)庫、中間件)故障、跨系統(tǒng)間缺乏原生的一致性保障等等。隨著業(yè)務(wù)擴(kuò)展,企業(yè)內(nèi)的應(yīng)用越來越多,且有許多 單體應(yīng)用 (Monolithic Application)向 微服務(wù) (Microservices)拆分轉(zhuǎn)型,分布式的場景下丟失了數(shù)據(jù)庫事務(wù)的支持,需要解決數(shù)據(jù)一致性的問題。

保障數(shù)據(jù)一致的方案有很多種,在單體服務(wù)且缺少不同組件間(例如跨 Database、不同存儲中間件)事務(wù)支持的場景下,可以使用本地事務(wù)表 + 補償任務(wù)的組合,將主表數(shù)據(jù)與檢查任務(wù)通過事務(wù)寫入,再通過異步任務(wù)不斷檢查目標(biāo)數(shù)據(jù)是否一致并進(jìn)行補償,可實現(xiàn)最終一致性;在跨服務(wù)場景下,Saga 模式通過可靠消息及服務(wù)提供回滾事務(wù)的能力,來實現(xiàn)分布式事務(wù)。

但是,對于重要的業(yè)務(wù),不管使用何種一致性方案, 提供額外的檢查、核對、兜底手段都是必要的 ,由此衍生出了很多的業(yè)務(wù)核對、對賬的需求。服務(wù)間通過特定手段保障數(shù)據(jù)一致性,并設(shè)計無侵入的旁路系統(tǒng)進(jìn)行數(shù)據(jù)核對和校驗,是微服務(wù)架構(gòu)下的典型搭配。

Fig2. Data Consistency Insurance

1.2 離線核對的缺陷

常見的離線數(shù)據(jù)核對可以通過定時任務(wù), 按照一定的篩選條件,從不同數(shù)據(jù)源中獲取特定數(shù)據(jù),再進(jìn)行比較 。這種方案的偽代碼如:

func Check() {
// 獲取上游 update_time 落在 [a, b) 的數(shù)據(jù)行
upstreamRows := QueryUpstreamDB(a, b)

for uniqueKey, sourceData := range upstreamRows {
// 為每個上游數(shù)據(jù)查找對應(yīng)的下游數(shù)據(jù)
targetData := QueryDownstreamDB(uniqueKey)

// 對比上下游數(shù)據(jù)
Compare(sourceData, targetData)
}
}

時效性低是這類查表方案的通病。核對操作通常放在異步任務(wù)中定時執(zhí)行,執(zhí)行時間和離數(shù)據(jù)變更時間有一定延遲,且定時任務(wù)的查詢條件也會對核對目標(biāo)造成影響。當(dāng)出現(xiàn)異常數(shù)據(jù)時,不能及時發(fā)現(xiàn)問題,只能等待下次定時任務(wù)執(zhí)行后才能發(fā)現(xiàn)。

引入了 額外的掃表開銷 同樣是個不容忽視的問題。在數(shù)據(jù)量較大,尤其是存在大量 ??INSERT?? 操作的場景下,想要核對就需要 ??SELECT?? 出上下游的目標(biāo)數(shù)據(jù)。為了在不影響正常業(yè)務(wù)的情況下及時處理完核對任務(wù),開發(fā)者可通過將查詢轉(zhuǎn)移到從庫,甚至引入核對任務(wù)獨占的從庫,但此類查表核對方案在資源使用和實現(xiàn)復(fù)雜度方面都不夠理想。

同時,由于查表得到的結(jié)果只是當(dāng)前的數(shù)據(jù)版本,在兩次檢查之間,數(shù)據(jù)可能發(fā)生了多次變更, 定時任務(wù)無法感知和觀測到每個狀態(tài)變更 ,在數(shù)據(jù)被頻繁 ??UPDATE?? 的場景下也存在一定的核對和檢測難度。

因此,要實現(xiàn)更好的數(shù)據(jù)核對,我們需要考慮以下幾點目標(biāo):

  • 實現(xiàn)秒級核對。
  • 盡量減少數(shù)據(jù)庫查詢。
  • 核對數(shù)據(jù)變更,而非核對數(shù)據(jù)快照。
  • 簡單靈活的接入方式。

2. 實時數(shù)據(jù)核對

為了更好地發(fā)現(xiàn)數(shù)據(jù)不一致的情況,Shopee Financial Products 團(tuán)隊在 2021 年中設(shè)計并實現(xiàn)了 Real-time Checking System (實時核對系統(tǒng),RCS)。RCS 具有以下核心優(yōu)勢:

  • 秒級數(shù)據(jù)核對。
  • 對業(yè)務(wù)邏輯無侵入。
  • 可配置化接入。

從上線至今,RCS 幫助團(tuán)隊及時檢測到了多次數(shù)據(jù)問題,可以將原因歸納為以下幾個方面:

  • 代碼邏輯 Bug:包括冪等處理、并發(fā)問題、業(yè)務(wù)邏輯錯誤等。
  • 系統(tǒng)運行環(huán)境:DB 異常、網(wǎng)絡(luò)抖動、MQ 異常等。

Fig3. Types of spotted bugs

本節(jié)主要介紹 RCS 的實現(xiàn),包括系統(tǒng)架構(gòu)和核對流程、核對性能優(yōu)化、消息通知機(jī)制等。

2.1 系統(tǒng)架構(gòu)與核對流程

在系統(tǒng)設(shè)計上,我們將 RCS 分為了三層:

  • 變更數(shù)據(jù)獲取(Data Fetching Layer)
  • 數(shù)據(jù)核對(Data Checking Layer)
  • 核對結(jié)果處理(Result Handling Layer)

Fig4. System Layers

2.1.1 變更數(shù)據(jù)獲取

實時核對,顧名思義需要著重關(guān)注“實時”和“核對”兩個要點。Data Fetching Layer 負(fù)責(zé)達(dá)成實時的目標(biāo),通過對不同 CDC(Change Data Capture,變更數(shù)據(jù)抓取)方案的調(diào)研,我們使用了 Log-Based 的方案來提供時效性保障。

擴(kuò)展閱讀

CDC 模式用于感知數(shù)據(jù)變更,主要可以分為以下 4 類:

  • Timestamps,基于 update_time 或類似字段進(jìn)行查詢來獲取變更數(shù)據(jù)。
  • Table Differencing,獲取完整數(shù)據(jù)快照進(jìn)行比對。
  • Triggers,為 DDL、DML 設(shè)置 Trigger,將變更內(nèi)容用額外的操作記錄至數(shù)據(jù)庫。
  • Log-Based,典型例子為利用 MySQL binlog 和 MongoDB oplog。

其中,Timestamps 方案和 Table Differencing 均由定時任務(wù)驅(qū)動,時效性較弱。Timestamps 方案無法感知被刪除的數(shù)據(jù),使用時需要由軟刪除代替;Table Differencing 方案彌補了這個缺點,但是多次獲取完整數(shù)據(jù)會讓整套方案顯得非常笨重。

Triggers 方案和 Log-Based 方案獲取到的均為數(shù)據(jù)變更而非數(shù)據(jù)快照,但 Triggers 感知后以特定的語句將其記錄下來,本質(zhì)上是一次寫操作,仍給數(shù)據(jù)庫帶來了額外的負(fù)擔(dān)。

當(dāng) MySQL 產(chǎn)生數(shù)據(jù)變更時,高可用的 binlog 同步組件會獲取到對應(yīng) binlog,并將其投遞至 Kafka 中,以此獲取變更數(shù)據(jù)的數(shù)據(jù)值用于核對。

Fig5. Data Fetching Layer

在實際使用中,需要核對的數(shù)據(jù)可能并非都存在于 MySQL 中,例如我們也需要核對 MySQL 與 MongoDB 的數(shù)據(jù)、MySQL 與 Redis 的數(shù)據(jù)。為此,業(yè)務(wù)系統(tǒng)也可以通過自行投遞特定格式的 Kafka 消息來接入,從而保證接入的靈活性。

2.1.2 數(shù)據(jù)核對

Data Checking Layer 負(fù)責(zé)處理接收到的數(shù)據(jù)流,包括獲取特定的核對規(guī)則,接收到數(shù)據(jù)時進(jìn)行暫存或比對。RCS 對 binlog 數(shù)據(jù)進(jìn)行抽象,提煉了一套通用的可配置化的核對規(guī)則。用戶只需要填寫對應(yīng)的規(guī)則,即可實現(xiàn)自助接入。規(guī)則定義示例如下:

Fig6. Config Example

不難想象,不同系統(tǒng)間數(shù)據(jù)的變更是有先后的,且變更的消息被 RCS 接收到也會有先后順序。因此,先抵達(dá)的數(shù)據(jù)需要被存儲下來作為后續(xù)比對的目標(biāo),后抵達(dá)的數(shù)據(jù)則按照規(guī)則與已有數(shù)據(jù)進(jìn)行比對。

Fig7. Check Flow

為了便于描述,這里先定義幾個名稱:

  • 數(shù)據(jù)上游:先到達(dá) RCS 的數(shù)據(jù)為上游。
  • 數(shù)據(jù)下游:后到達(dá) RCS 的數(shù)據(jù)為下游。
  • 核對項:某個數(shù)據(jù)核對需求,包括上游數(shù)據(jù)和下游數(shù)據(jù)。例如:System A 與 System B 核對用戶資金狀態(tài)的需求。

Fig8. Kafka Data Check Flow

以下面這一次核對為例,它需要判斷數(shù)據(jù)是否在 10 秒達(dá)成一致,整體的核對流程可以簡要描述為:

比對數(shù)據(jù)到達(dá),進(jìn)行核對,并刪除 Redis key;

比對數(shù)據(jù)未到達(dá),判斷延遲隊列中的數(shù)據(jù)。

  • (圖 8)核對項的上游數(shù)據(jù)到達(dá),暫存 Redis 和延遲隊列。
  • (圖 8)RCS 等待核對項的下游數(shù)據(jù):
  • (圖 9)延遲隊列到達(dá)時間后,再次查詢在 Redis 中是否有對應(yīng)數(shù)據(jù):
  • 存在,則超過核對時間閾值,發(fā)送異常告警,刪除 Redis key;
  • 不存在,則已核對。

Fig9. DelayQueue Check Flow

2.1.3 消息通知機(jī)制

RCS 的目標(biāo)是及時發(fā)現(xiàn)數(shù)據(jù)不一致的問題,因此,在 Result Handling Layer 中接入了 Shopee 企業(yè) IM(SeaTalk)的機(jī)器人進(jìn)行告警。未來告警接口也會進(jìn)行開放,便于擴(kuò)展和讓其它消息應(yīng)用進(jìn)行接入。

我們設(shè)計了四種消息通知機(jī)制:

  • Mismatch Notice
  • Aggregated Notice
  • Recovery Notice
  • Statistical Notice

Mismatch Notice 應(yīng)對一般場景下的核對失敗,及時通知到對應(yīng)的業(yè)務(wù)負(fù)責(zé)人,便于快速定位問題原因并修復(fù)數(shù)據(jù)。但當(dāng)大量數(shù)據(jù)出現(xiàn)不一致時,Aggregated Notice 會取而代之,將告警進(jìn)行聚合發(fā)送,避免影響到值班人員的正常閱讀。

RCS 也會將核對失敗的數(shù)據(jù)持久化,因而具備恢復(fù)感知的能力。當(dāng)異常數(shù)據(jù)恢復(fù)時,Recovery Notice 會發(fā)送消息告知使用者何種不一致已經(jīng)恢復(fù),間隔了多少時間。

最后,Statistical Notice 會向使用者報告常規(guī)的統(tǒng)計數(shù)據(jù),包括 DB 主從延遲、當(dāng)日核對成功率等。

2.2 核對功能演進(jìn)

系統(tǒng)上線至今,接入或自行部署使用 RCS 的團(tuán)隊越來越多,對應(yīng)的業(yè)務(wù)場景也各不相同,早期的核對規(guī)則難以滿足不同團(tuán)隊的核對需求。在 2021 年末,Shopee Financial Products 研發(fā)團(tuán)隊又對 Data Checking Layer 進(jìn)行了一系列的擴(kuò)展,目的是減少維護(hù)成本,以較為通用的方式支持不同團(tuán)隊的使用。

2.2.1 等值 / 映射核對

在最早上線的版本中,RCS 系統(tǒng)包含了等值和狀態(tài)映射核對的功能,是針對組內(nèi)實際面臨的場景設(shè)計的,滿足日常的使用需求。

核對系統(tǒng)主要處理的是上下游系統(tǒng)之間金額數(shù)值、狀態(tài)的變化,通常我們能獲取到的 binlog 核心字段示例和核對邏輯如下:

Fig10. Equivalence Check

假設(shè)先接收到 System A 的 binlog 消息,暫存 Redis,規(guī)定時間內(nèi)也接收到了 System B 的 binlog 消息:

??loan_amount?? 為 200,需要找到一條對應(yīng)的 System A 的 binlog,且 ??order_amount?? 需與之匹配;

??loan_status?? 為 4,需要找到一條對應(yīng)的 System A 的 binlog,且 ??order_status?? 需為 2。

  • 根據(jù) System B 這條 binlog 的特征,發(fā)現(xiàn)配置有兩條核對規(guī)則:

對于不同系統(tǒng)間產(chǎn)生的單條記錄變更的核對,等值和映射檢查能覆蓋到大部分場景。但是因為這兩種核對的邏輯都是固定下來的,所以業(yè)務(wù)方如果有不同的核對需要,則需要新的代碼邏輯實現(xiàn)。為此,研發(fā)團(tuán)隊考慮 將核對邏輯交給使用方來描述 ,因而催生出了表達(dá)式核對的功能。

2.2.2 表達(dá)式核對

如果我們考慮以下的 binlog 示例,不同系統(tǒng)間的數(shù)據(jù)模型設(shè)計并不一致,字段非一一對應(yīng)。

Fig11. Expression Check

System A 記錄了 訂單的金額為 100 ,而 System B 記錄了訂單的 已支付金額為 30,借貸金額為 70 ,需要核對的是 System A ??order_amount?? 是否等于 System B ??paid_amount + loan_amount?? ,原有的設(shè)計無法支持。

為此,我們引入了表達(dá)式求值的方案,當(dāng) binlog 抵達(dá)時, 使用方通過一個返回值為布爾類型的表達(dá)式來描述自己的核對邏輯 ,如:

??a.order_amount == b.loan_amount??

??a.order_status == 2 && b.loan_status == 4??

  • 判斷 2.2.2 中求和場景: ??a.order_amount == b.paid_amount + b.loan_amount??
  • 兼容判斷 2.2.1 中場景:

在表達(dá)式核對方案下,兩個系統(tǒng)間的幾乎所有的單條數(shù)據(jù)核對場景都能進(jìn)行覆蓋,且這種方案的好處在于研發(fā)團(tuán)隊不用再費心思提供新的計算、映射、與或非邏輯實現(xiàn)的支持,大大減少了維護(hù)成本。

2.2.3 動態(tài)配置數(shù)據(jù)核對

在電商和金融的場景中,存在一些動態(tài)數(shù)據(jù),例如費率、活動優(yōu)惠折扣等,會隨著業(yè)務(wù)和運營計劃發(fā)生實時變化。這類數(shù)據(jù)通常存儲在配置表中,因此通過簡單的表達(dá)式無法進(jìn)行定義,而不同業(yè)務(wù)系統(tǒng)中的配置表結(jié)構(gòu)設(shè)計也不一樣,很難在核對系統(tǒng)代碼中進(jìn)行聲明。

為了滿足這種場景,RCS 引入了對業(yè)務(wù)系統(tǒng) SQL 查詢的支持,當(dāng)獲取到新的 binlog 時,檢查這條 binlog 滿足的核對規(guī)則,使用方在核對規(guī)則中會配置需要執(zhí)行的 SQL 語句,以及分庫分表規(guī)則,由核對系統(tǒng)執(zhí)行并得到比對的內(nèi)容,再進(jìn)行表達(dá)式核對:

  • binlog 中獲取到當(dāng)前訂單的費率 ??order_rate?? 為 0.5。
  • 根據(jù)配置信息執(zhí)行 ??SELECT?? 語句查詢實時的費率 ??rate?? 
  • 執(zhí)行表達(dá)式核對 ??a.order_rate == rate?? 

除此之外,RCS 也能支持 JSON 串核對,譬如 System A 需要核對 ??order_rate?? ,但是存儲 ??order_rate?? 信息是一個 JSON 串, ??rate_info = {"decimal_base":"10000", "order_rate":"0.5"}?? 。可以在 RCS 的核對規(guī)則中,自定義 JSON 解析表達(dá)式,提取真實需要核對的字段。

3. 性能表現(xiàn)

RCS 系統(tǒng)的性能主要取決于 Data Fetching Layer 和 Data Checking Layer。

Data Fetching Layer 的性能代表實時獲取變更數(shù)據(jù)的能力,受 binlog 解析(CPU 密集型任務(wù))及 Kafka 的消息持久化(I/O 密集型任務(wù))影響。 業(yè)務(wù)團(tuán)隊可根據(jù)需要選擇對應(yīng)的硬件搭建 CDC 模塊 ,以我們使用場景為例,每秒可投遞的消息數(shù)量超過 20K 

Data Checking Layer 則負(fù)責(zé)進(jìn)行數(shù)據(jù)核對,為了測試 RCS 的性能極限,Data Fetching 采用 Kafka 發(fā)送源數(shù)據(jù),核對系統(tǒng)采用單機(jī)部署。測試結(jié)果表明, RCS 每秒可完成核對 10K+ 次 ,詳細(xì)數(shù)據(jù)如下:

Component

Machine

Kafka

3 * 48 Core 128 GB

Redis

3 * 48 Core 128 GB

Real-time Checking System

1 * 48 Core 128 GB

Number of check entry

TPS

CPU Cost

1 entry

14.3K

454%

2 entries

12.0K

687%

3 entries

10.4K

913%

從壓測結(jié)果分析,RCS 的性能瓶頸主要取決于 Redis 集群的性能,單次核對耗時約為 0.5ms。當(dāng)然,RCS 支持集群部署,做為 Kafka 的消費者,可以利用 Kafka consumer group 的 Rebanancing 機(jī)制,從而實現(xiàn)動態(tài)擴(kuò)/縮容的機(jī)制。

4. 總結(jié)

Shopee Financial Products 團(tuán)隊在 2021 年落地的 RCS 目前在多個產(chǎn)品線推廣和使用,主要解決傳統(tǒng) T+1 式離線數(shù)據(jù)核對延遲高、業(yè)務(wù)耦合緊密,且隨新業(yè)務(wù)上線還帶來額外的開發(fā)負(fù)擔(dān)的問題。

RCS 通過靈活的核對規(guī)則配置化、表達(dá)式場景覆蓋以及 Log-Based 的 CDC 方案,提供近實時的數(shù)據(jù)核對解決方案,最大程度地降低數(shù)據(jù)不一致導(dǎo)致的資金、信息安全等風(fēng)險。我們也歡迎不同的用戶和團(tuán)隊接入或部署使用,在后續(xù)的更新迭代中,RCS 會進(jìn)一步提升核對的性能,以支撐業(yè)務(wù)量增長帶來的核對需求。

本文作者

Yizhong、Songtao,后端研發(fā)工程師。來自 Shopee Financial Products 團(tuán)隊。

Jiekun,后端研發(fā)工程師,熱衷于分布式系統(tǒng) & Kubernetes。來自 Shopee Off-Platform Ads 團(tuán)隊。


責(zé)任編輯:張燕妮 來源: Shopee技術(shù)團(tuán)隊
相關(guān)推薦

2024-05-11 07:37:43

數(shù)據(jù)Redis策略

2017-06-20 09:42:52

網(wǎng)絡(luò)安全法數(shù)據(jù)隱私法網(wǎng)絡(luò)安全

2021-04-18 15:01:56

緩存系統(tǒng)數(shù)據(jù)

2018-07-15 08:18:44

緩存數(shù)據(jù)庫數(shù)據(jù)

2025-04-03 09:51:37

2017-08-25 17:59:41

浮點運算C語言

2020-07-20 14:06:38

數(shù)據(jù)庫主從同步服務(wù)

2018-07-08 07:38:28

數(shù)據(jù)庫緩存數(shù)據(jù)

2021-05-27 18:06:30

MySQL編碼數(shù)據(jù)

2010-06-02 10:53:28

MySQL版本

2021-01-19 10:39:03

Redis緩存數(shù)據(jù)

2024-11-18 08:00:00

數(shù)據(jù)倉庫通用語義層商業(yè)智能

2022-03-16 15:54:52

MySQL數(shù)據(jù)format

2013-12-13 14:46:55

OSPFMTU鄰接關(guān)系

2023-12-22 10:19:19

數(shù)據(jù)庫鎖機(jī)制

2024-04-07 09:00:00

MySQL

2011-02-22 14:02:48

vsftpd

2020-04-26 21:57:46

etcd3元數(shù)據(jù)存儲

2021-09-02 07:56:46

HDFSHIVE元數(shù)據(jù)

2025-04-08 09:00:00

數(shù)據(jù)庫緩存架構(gòu)
點贊
收藏

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

国产成人在线视频播放| 国产一级成人av| 亚洲欧洲综合另类| 国产精品毛片一区视频| 亚洲久久在线观看| 日本久久精品| 欧美xxxxx牲另类人与| 欧美爱爱视频免费看| 国产69精品久久app免费版| 久久国产精品第一页| 久久久亚洲成人| 亚洲图片另类小说| 亚洲日本va| 欧美日韩一区在线| 妞干网在线视频观看| 网友自拍视频在线| av网站免费线看精品| 国产三级精品网站| 亚洲午夜18毛片在线看| 综合天堂av久久久久久久| 亚洲天堂av电影| 国内精品免费视频| 婷婷成人av| 色婷婷av久久久久久久| 日本一道在线观看| 91社区在线高清| 99精品欧美一区二区蜜桃免费| 国产一区深夜福利| chinese国产精品| 一区二区自拍| 成年人精品视频| 色婷婷国产精品免| 亚洲美女15p| 亚洲成人教育av| 中文字幕12页| 另类一区二区| 精品国产乱码久久久久久虫虫漫画| 美国av在线播放| 成人在线免费电影| 久久这里只有精品6| 国产伦精品一区二区三区四区免费| 国产又粗又猛又爽又黄的视频一| 香蕉亚洲视频| 欧美亚洲在线视频| 国内精品小视频| 日本不卡视频一区| 欧美福利影院| 日韩国产激情在线| 在线中文字幕一区| 欧美视频在线第一页| 含羞草www国产在线视频| 中文字幕国产一区二区| 日韩欧美第二区在线观看| 欧美孕妇性xxxⅹ精品hd| 91丨porny丨中文| 精品久久久久久亚洲| 韩国中文字幕hd久久精品| 丁香六月综合激情| 国产欧美日韩一区二区三区| 欧美一级片免费| 成人av网址在线观看| 国产一区二区免费电影| 天堂在线视频免费观看| 99久久免费国产| 久久精品一二三区| 九色在线免费| 欧美国产精品中文字幕| 亚洲精品一区二区毛豆| 夜级特黄日本大片_在线| 亚洲欧洲一区二区三区| 日本丰满大乳奶| 爱情岛论坛亚洲品质自拍视频网站| 亚洲va欧美va人人爽| 九色在线视频观看| 欧洲av一区二区| 欧美日韩高清一区二区| 国产老头和老头xxxx×| 美女一区二区在线观看| 亚洲美女在线观看| 最新日韩免费视频| 欧美不卡视频| 91成人免费观看网站| av片免费观看| 国内一区二区视频| 肥熟一91porny丨九色丨| 色就是色亚洲色图| 国产精品免费久久久久| 美女黄色免费看| 亚洲欧洲美洲av| 欧美剧情片在线观看| 在线中文字日产幕| 国产九一精品| 久久91亚洲精品中文字幕| 欧美日韩综合在线观看| 免费观看成人av| 国产精品久久久久久久小唯西川| 青青草视频在线观看| 中文字幕一区免费在线观看| 男人日女人视频网站| 国产极品一区| 精品蜜桃在线看| 亚洲色图 激情小说| 亚洲视频一二| 国产欧美精品日韩精品| 人妻与黑人一区二区三区| 国产精品免费久久| 69堂免费视频| 日韩在线视频一区二区三区| 亚洲天堂成人在线| 国产在线成人精品午夜| 青青草国产精品97视觉盛宴| 好吊妞www.84com只有这里才有精品 | 亚洲午夜在线视频| 北条麻妃视频在线| 高潮按摩久久久久久av免费| 日韩在线观看免费全| 中文字幕视频网| 国产99精品在线观看| 偷拍视频一区二区| 神马久久午夜| 精品国产乱码久久久久久牛牛| 91动漫免费网站| 亚洲欧美清纯在线制服| 国产精品免费一区二区三区观看| 日本高清视频在线播放| 色哟哟亚洲精品| 麻豆短视频在线观看| 99视频精品全部免费在线视频| 欧洲一区二区视频| 蜜臀av中文字幕| 亚洲三级视频在线观看| 日韩一级免费片| 国内黄色精品| 欧美专区中文字幕| 香港三日本三级少妇66| 亚洲高清免费一级二级三级| 免费不卡av网站| 91成人国产| 成人在线精品视频| 午夜国产福利在线| 日本高清不卡在线观看| 国产中年熟女高潮大集合| 国产欧美日韩一区二区三区在线| 国产91精品入口17c| 影音先锋在线播放| 欧美一区二区三区四区高清| 成人一级黄色大片| 久久99精品一区二区三区| 亚洲精品国产精品久久| 成人毛片免费| 深夜福利国产精品| 91国产免费视频| 亚洲视频在线一区二区| 手机在线观看日韩av| 日韩免费久久| 国产欧美精品一区二区三区介绍 | 久久草在线视频| 欧美激情影音先锋| 人妻夜夜爽天天爽| 欧美日韩亚洲一区二区| 国产精品无码久久久久一区二区| 免费亚洲视频| 神马影院午夜我不卡| 高清亚洲高清| 久久亚洲影音av资源网| www.xxxx国产| 精品久久久久久亚洲国产300| 9.1成人看片| 日韩电影在线观看一区| 亚洲三区在线| 一区二区三区免费在线看| 欧美极度另类性三渗透| 日韩午夜影院| 欧美日韩国产乱码电影| 欧美激情精品久久| 99久久99久久精品免费看蜜桃 | 精品91久久| 色爱精品视频一区| 国产suv精品一区二区69| 亚洲成人av中文| b站大片免费直播| 国产精一区二区三区| 欧美,日韩,国产在线| 欧美美女视频| 91精品国产高清久久久久久91裸体| 2019中文字幕在线电影免费| 一区二区成人精品| www黄色网址| 色狠狠av一区二区三区| 最新一区二区三区| 91麻豆国产福利精品| 亚洲黄色小视频在线观看| 你懂的一区二区| 欧美日韩国产一二| 久久伊人久久| 国产精品pans私拍| 日本三级韩国三级欧美三级| 亚洲色图激情小说| 亚洲产国偷v产偷v自拍涩爱| 日韩欧美在线观看| 青青草手机在线观看| 久久久噜噜噜久噜久久综合| 国产又粗又长又爽| 91福利精品在线观看| 欧美大尺度激情区在线播放| 天天干天天舔天天射| 欧美日韩高清一区| 日韩成人免费在线观看| 中文字幕一区二区在线播放| 亚洲av无码国产精品久久| 国产主播一区二区三区| 少妇高潮喷水久久久久久久久久| 9999国产精品| 欧美少妇一区| 国产美女撒尿一区二区| 成人在线视频网站| 色老太综合网| …久久精品99久久香蕉国产| www红色一片_亚洲成a人片在线观看_| 亚洲精品中文字幕有码专区| 亚洲国产中文字幕在线| 欧美日韩一级片网站| 亚洲另类在线观看| 午夜精品一区二区三区电影天堂 | 亚洲精品乱码久久久久久久久| 瑟瑟视频在线观看| www..com久久爱| 一区二区三区人妻| 国内精品在线播放| 黄色在线视频网| 首页欧美精品中文字幕| 5月婷婷6月丁香| 亚洲精选在线| 黄网站欧美内射| 韩国精品一区二区三区| 久久天天东北熟女毛茸茸| 久久国产亚洲精品| 四虎影院一区二区三区| 一区二区美女| 欧美日韩中文国产一区发布| 久久99精品久久久久久园产越南| 久久99欧美| 羞羞色国产精品网站| 久久久久久高清| 亚洲综合福利| 青青成人在线| 国产伦一区二区三区| 青青草成人网| 日韩电影在线视频| 视频一区二区精品| 欧美3p在线观看| 三上悠亚免费在线观看| 欧美不卡在线| 黄色大片中文字幕| 国产人成精品一区二区三| 91视频 -- 69xx| 免费一区视频| 国内自拍视频网| 久久成人18免费观看| 亚洲一区二区三区四区五区| 国产精品影音先锋| 中文字幕在线国产| 99re热这里只有精品免费视频| 青青草视频播放| 欧美激情一区二区三区四区| 中文字幕乱码av| 亚洲另类春色国产| 国产又大又黑又粗免费视频| 色婷婷久久久亚洲一区二区三区| 在线观看免费视频一区| 欧美一区二区三区性视频| 韩国av电影在线观看| 亚洲欧美三级在线| 日本中文字幕在线2020| 欧美激情欧美狂野欧美精品| 国产不卡网站| 成人激情在线观看| 91在线一区| 日本电影一区二区三区| 自拍欧美日韩| 成年人观看网站| 久久99精品国产麻豆婷婷| 伊人影院在线观看视频| 久久久久久久久免费| 日本 欧美 国产| 香蕉加勒比综合久久| 亚洲性猛交富婆| 精品久久五月天| 国产粉嫩一区二区三区在线观看| 欧美日韩福利在线观看| sis001欧美| 99精品欧美一区二区三区| 欧美日韩xxxx| 精品久久久久久无码中文野结衣| 日韩不卡免费视频| 熟妇高潮一区二区| 国产精品天干天干在观线| 国产香蕉在线视频| 美国毛片一区二区三区| 久久精品国产精品亚洲精品色| 雨宫琴音一区二区在线| 91极品尤物在线播放国产| 国产ts人妖一区二区| 亚洲无人区码一码二码三码的含义| 亚洲女人的天堂| wwwwww在线观看| 亚洲国产婷婷香蕉久久久久久| 日本激情视频在线观看| 欧美国产高跟鞋裸体秀xxxhd| 久久91导航| 国产亚洲精品久久飘花| 99成人在线视频| 一本久道综合色婷婷五月| 国产传媒欧美日韩成人| 精品一区二区三孕妇视频| 疯狂做受xxxx高潮欧美日本| www.国产.com| 日韩在线观看免费全| 桃子视频成人app| 国产中文一区二区| 欧美福利网址| www.成人黄色| 国产精品久久久久国产精品日日| 精品人妻一区二区三区免费看| 亚洲的天堂在线中文字幕| 国产写真视频在线观看| 91精品国产综合久久香蕉| 国产欧美日韩在线一区二区 | 永久免费看mv网站入口78| 亚洲国产日日夜夜| 国产富婆一级全黄大片| 久久久精品一区二区| 国外成人福利视频| 日韩一本精品| 日韩精品三区四区| 一道本在线观看| 日韩欧美国产激情| 日本免费网站在线观看| 国内成人精品视频| 成人爽a毛片| 给我免费播放片在线观看| 国产精品18久久久久| 午夜免费激情视频| 欧美一卡在线观看| 午夜影院免费在线| 99久久久精品免费观看国产| 欧美在线首页| 欧美激情一区二区三区p站| 亚洲一二三区不卡| 欧美在线 | 亚洲| 69av在线视频| 中日韩免视频上线全都免费| 欧美一级黄色片视频| 国产日本一区二区| 中文字幕+乱码+中文乱码www| 中文字幕日韩欧美在线视频| 精品久久在线| 亚洲国产精品女人| 国产精品系列在线播放| 国产精品 欧美 日韩| 日韩h在线观看| 小黄鸭精品aⅴ导航网站入口| 亚洲国产另类久久久精品极度| 蜜桃一区二区三区在线观看| 精品国产视频一区二区三区| 日韩精品自拍偷拍| 理论片午夜视频在线观看| 欧美精品一区二区三区四区五区| 美女久久久精品| a级黄色片免费看| 亚洲国产欧美一区二区三区同亚洲 | 最近免费中文字幕中文高清百度| 国产精品女同一区二区三区| 性网爆门事件集合av| 97国产在线视频| 欧洲美女日日| 日本久久久久久久久久| 色伊人久久综合中文字幕| 久草中文在线观看| 国产美女在线精品免费观看| 天堂蜜桃91精品| 国产精品成人免费观看| 日韩激情视频在线| 欧美亚洲黄色| 婷婷夜色潮精品综合在线| 精品三级久久久久久久电影聊斋| 国产在线a不卡| 亚洲精品少妇| 久久一级免费视频| 精品国产乱码久久久久久夜甘婷婷 | 黄色成人在线播放| 98在线视频| 国产主播一区二区三区四区| 麻豆国产精品视频| 日本午夜精品理论片a级app发布| 中文字幕久热精品在线视频 | 五月婷婷一区| 成人精品小蝌蚪| 国产精品国产一区二区三区四区 | 国产欧美1区2区3区|