成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

嚴(yán)選交易數(shù)據(jù)源獨(dú)立切換實(shí)踐

開發(fā) 前端
針對嚴(yán)選交易DB如何進(jìn)行數(shù)據(jù)源獨(dú)立以及在數(shù)據(jù)源切換整體流程的解決方案以及實(shí)施遷移的過程中遇到的一些問題解決思路作為經(jīng)驗(yàn)分享給大家,希望對后續(xù)業(yè)務(wù)團(tuán)隊(duì)在進(jìn)行相關(guān)工作開展有所幫助。?

1. 前言

嚴(yán)選在前期發(fā)展過程中,為了快速交付需求,絕大部分系統(tǒng)采用的都是單體架構(gòu),主站商城也不例外。

隨著業(yè)務(wù)復(fù)雜度的不斷攀升,才逐步開始進(jìn)行業(yè)務(wù)拆分,由各個(gè)業(yè)務(wù)團(tuán)隊(duì)(商城、渠道以及倉配等等)在各自業(yè)務(wù)域內(nèi)推動服務(wù)化改造,所在的主站商城業(yè)務(wù)團(tuán)隊(duì)隨之相繼孵化出交易中心、促銷中心以及用戶中心等等業(yè)務(wù)中心。

但是各業(yè)務(wù)中心DB資源共用的局面一直未得到改善,導(dǎo)致各業(yè)務(wù)中心數(shù)據(jù)持續(xù)處于裸奔狀態(tài),業(yè)務(wù)系統(tǒng)穩(wěn)定性也大打折扣。

交易作為其中的一員,在經(jīng)歷了20-21年平臺化改造的基礎(chǔ)之后,通過業(yè)務(wù)抽象使得交易中心的平臺化能力更加的內(nèi)聚和穩(wěn)定,故而我們決定乘勝追擊進(jìn)行交易DB資源獨(dú)立拆解。

本文主要介紹了在當(dāng)下的業(yè)務(wù)背景下存在挑戰(zhàn)以及面對挑戰(zhàn)的應(yīng)對之法,最后詳細(xì)介紹了基礎(chǔ)保障工作的落地和核心獨(dú)立流程的組織串聯(lián)。

2. 業(yè)務(wù)背景

圖片

嚴(yán)選業(yè)務(wù)發(fā)展初期,為了支撐業(yè)務(wù)的快速發(fā)展,采用集中式架構(gòu)和開發(fā)模式,上圖所示為嚴(yán)選交易的架構(gòu)演進(jìn)路線,在早期,交易不僅僅業(yè)務(wù)耦合在商城中,且商城業(yè)務(wù)之間共享DDB集群。

截止到21年,交易借助業(yè)務(wù)抽象、架構(gòu)分層以及標(biāo)準(zhǔn)化的思想逐步向中臺化架構(gòu)方向演進(jìn),但是訂單操作等核心業(yè)務(wù)依然保留在交易前臺業(yè)務(wù)中,導(dǎo)致需求迭代成本居高不下,代碼嚴(yán)重腐化。同時(shí)商城中各業(yè)務(wù)的DDB資源利用率各不相同,出現(xiàn)能力過剩和瓶頸凸顯兩極分化的局面,亟需各業(yè)務(wù)進(jìn)行邊界治理。

邊界治理的核心難點(diǎn)之一就是如何做好穩(wěn)定性保障,因?yàn)樯婕暗侥芰w移以及內(nèi)外部依賴改造,如何確保改造范圍的完整性、準(zhǔn)確性以及平滑性,這與系統(tǒng)的穩(wěn)定性息息相關(guān)。

以交易能力遷移為例,核心交易能力累計(jì)20+,能力依賴接口1000+,涉及30+表,因此在基于交易核心能力高度頻繁使用的前提下,采取了先完成交易能力收歸,再進(jìn)行交易DB獨(dú)立的執(zhí)行策略, 在22年初完成了全量交易能力的遷移,基于這個(gè)背景條件之下,故而開展交易DB獨(dú)立遷移工作。

3. 面臨的挑戰(zhàn)

在基于交易DB和商城DB共享的背景之下,需要達(dá)成交易DB獨(dú)立于商城DB的核心目標(biāo),而目標(biāo)的達(dá)成涉及交易DB遷移獨(dú)立問題,結(jié)合交易業(yè)務(wù)場景的特殊性,交易DB作為核心業(yè)務(wù)的強(qiáng)依賴方,任何變動行為都有可能觸達(dá)線上用戶感知,故而這對我們提出了極大的挑戰(zhàn),確保對用戶的影響最小,避免由于遷移獨(dú)立引發(fā)一系列連帶負(fù)面影響(諸如: 資損、客訴等問題產(chǎn)生),主要表現(xiàn)為3個(gè)方面,交易前用戶無法進(jìn)行交易行為、交易中用戶交易行為被阻塞中斷、交易后交易數(shù)據(jù)前后不一致。可以簡單概括總結(jié)為對數(shù)據(jù)一致性和平滑遷移的保障:

  • 數(shù)據(jù)一致性保障
  • 數(shù)據(jù)不丟失:無論是切換到目標(biāo)數(shù)據(jù)庫或者回切回源數(shù)據(jù)庫,要確保沒有數(shù)據(jù)丟失;
  • 不產(chǎn)生臟數(shù)據(jù):需要保障同一筆訂單數(shù)據(jù)在新數(shù)據(jù)庫和老數(shù)據(jù)庫之間保持一致。
  • 平滑遷移保障
  • 數(shù)據(jù)源切換平滑:在進(jìn)行新老數(shù)據(jù)庫切換過程中保證盡可能平滑切換;
  • 業(yè)務(wù)切換平滑:需要確保在切換到新數(shù)據(jù)庫的過程中受影響用戶范圍以及業(yè)務(wù)場景最少。

3.1 挑戰(zhàn):數(shù)據(jù)一致性保障

在數(shù)據(jù)一致性保障方面,主要是從兩個(gè)方面入手,分別是數(shù)據(jù)遷移工具和業(yè)務(wù)切換方案的選擇來確保,通過數(shù)據(jù)遷移工具來達(dá)成源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫之間的數(shù)據(jù)同步,確保沒有數(shù)據(jù)丟失現(xiàn)象產(chǎn)生,以及業(yè)務(wù)切換方案的制定,防止遷移過程中臟數(shù)據(jù)的引入。

3.1.1 遷移工具

3.1.1.1 杭研NDC

數(shù)據(jù)同步總體分為離線和實(shí)時(shí)兩類,業(yè)內(nèi)常見的離線數(shù)據(jù)同步方案有三種: Sqoop、DataX以及Kettle,實(shí)時(shí)數(shù)據(jù)同步主要有Canal、Otter以及杭研自研的NDC。而我們的業(yè)務(wù)場景決定了需要采用實(shí)時(shí)同步方案,在最終方案方案選型上采用了NDC(Netease Data Canal)。它是網(wǎng)易自研的一套集數(shù)據(jù)遷移、數(shù)據(jù)訂閱、數(shù)據(jù)實(shí)時(shí)同步、數(shù)據(jù)校驗(yàn)于一體的數(shù)據(jù)傳輸服務(wù)。在支持 0 -> 1 全量數(shù)據(jù)遷移的同時(shí),也可以很好的支持從1 ->1.1 增量同步,更為重要的是可以更好的支持DDB(目前NDC同步功能的源端可支持MySQL、DDB、Oracle三種類型,同步功能的目標(biāo)端端可支持MySQL、DDB、Oracle, 交易業(yè)務(wù)全量使用DDB作為存儲依賴)。

3.1.1.2 架構(gòu)簡介

架構(gòu)上NDC大致可以分為源端系統(tǒng)、NDC集群和目標(biāo)端系統(tǒng)三部分。NDC拉取源端系統(tǒng)的全量或增量數(shù)據(jù),經(jīng)過轉(zhuǎn)化和過濾寫入目標(biāo)系統(tǒng)之中。架構(gòu)圖如下:

圖片

3.1.1.3 注意事項(xiàng)

NDC的回放的流程大致可以理解為與源端建立連接,拉取源端binlog,解析binlog,并對目標(biāo)端進(jìn)行相應(yīng)dml操作,但是需要注意的是整個(gè)回放的過程中是不具備原子性的。所以在進(jìn)行鏡像庫切換的過程中,會偶發(fā)出現(xiàn)數(shù)據(jù)不全的現(xiàn)象。

建議:需要使用方結(jié)合業(yè)務(wù)場景對數(shù)據(jù)的完整性和實(shí)時(shí)性的要求Case by Case分析,如果要求很高,可以在主庫切換之前再做鏡像庫切換。

3.1.2 業(yè)務(wù)切換

業(yè)務(wù)平滑切換常見的落地方案主要有三類,分別是停寫、不停寫、雙寫,不同的方案各有優(yōu)劣,雖然雙寫在業(yè)務(wù)上對用戶層面上的感知是最小的,但是改造成本以及遷移周期也會隨之增加,在結(jié)合嚴(yán)選商城C端現(xiàn)有業(yè)務(wù)流量特性(夜間流量相對偏低)以及成本等各項(xiàng)綜合因素考量之下,最終方案選型上采用了數(shù)據(jù)庫停寫方案。

方案

優(yōu)點(diǎn)

缺點(diǎn)


停寫

低成本,簡單

遷移過程中影響業(yè)務(wù)的正常運(yùn)轉(zhuǎn)

不停寫

低成本,簡單

遷移過程中可能有臟數(shù)據(jù)產(chǎn)生,人工修復(fù)

雙寫

真正意義上的平滑切換, 用戶無感知

整體改造工作量大,時(shí)間跨度長,需要解決數(shù)據(jù)一致性問題

通過停寫方案,可以確保在同一個(gè)時(shí)刻,只會有一個(gè)交易數(shù)據(jù)源可以提供寫入,避免了多數(shù)據(jù)源寫入導(dǎo)致的數(shù)據(jù)同步引發(fā)的數(shù)據(jù)覆蓋,從而導(dǎo)致的臟數(shù)據(jù)的產(chǎn)生。

3.2 挑戰(zhàn):平滑遷移保障

平滑遷移保障主要從數(shù)據(jù)源動態(tài)切換和賬號精準(zhǔn)管控兩方面入手:

  • 通過數(shù)據(jù)源動態(tài)切換確保在切換過程中DB配置可以實(shí)時(shí)生效,不用重啟就可以達(dá)到切換到目標(biāo)數(shù)據(jù)源的效果;
  • 針對賬號精準(zhǔn)管控,通過在源數(shù)據(jù)庫中進(jìn)行一系列賬號重新分配、授權(quán)、回收等措施確保實(shí)際切換到目標(biāo)數(shù)據(jù)庫過程中不會產(chǎn)生遺漏。

3.2.1 數(shù)據(jù)源動態(tài)切換

3.2.1.1 嚴(yán)選Pandora

在進(jìn)行數(shù)據(jù)源切換過程中,需要顯式支持?jǐn)?shù)據(jù)源的動態(tài)切換,業(yè)內(nèi)也有很多比較成熟的動態(tài)切換數(shù)據(jù)源的方案總結(jié)(dynamic-datasource-spring-boot-starter、基于Springboot的AbstractRoutingDataSource等等),大致原理是通過配置多數(shù)據(jù)源從而達(dá)到動態(tài)切換的效果。最終還是選擇了嚴(yán)選自研的中間件Pandora,相比較于業(yè)內(nèi)的常見的方案,它在支持?jǐn)?shù)據(jù)源的動態(tài)切換,無需重啟的基礎(chǔ)能力下,還支持?jǐn)?shù)據(jù)源配置動態(tài)下發(fā)生效,前后數(shù)據(jù)源數(shù)據(jù)Diff(和數(shù)據(jù)源切換結(jié)合使用效果更佳)等功能特性。

3.2.2 賬號精準(zhǔn)管控

在遷移過程需要保障在切換到新交易數(shù)據(jù)源后不會存在有表遺漏等場景的出現(xiàn),避免二次回切,因?yàn)楸旧碓谇袚Q的過程中我們采用的方案是需要停寫的,在生產(chǎn)環(huán)境這無疑會增加對線上用戶的有損感知(即便是在流量低峰期),因此需要盡可能保障切換過程不會出現(xiàn)遺漏。

3.2.2.1 業(yè)務(wù)監(jiān)控

如何高質(zhì)量保障沒有遺漏場景的產(chǎn)生,即現(xiàn)有對交易DB的所有寫操作都已經(jīng)全量收攏完成,不存在有遺漏的寫操作,這是我們需要重點(diǎn)關(guān)注和解決的。

圖片

  • 階段一:DB層監(jiān)控
  • 初期寄希望于DDB自身,希望可以做到指定表的ip進(jìn)行訪問監(jiān)控,但是很遺憾無法支持轉(zhuǎn)而考慮使用消費(fèi)Binlog的方式進(jìn)行解析,但是整個(gè)主站的Binlog過于龐大。
  • 階段二:Proxy層監(jiān)控
  • 既然DB層監(jiān)控不行,轉(zhuǎn)而考慮代理層,APM中維護(hù)了服務(wù)于表的鏈路關(guān)系,可以顯式的支持部分表集合和服務(wù)是否存在訪問關(guān)系,但是隨之而來的問題則是,這種關(guān)聯(lián)關(guān)系無法詳細(xì)區(qū)分讀寫,需要額外成本支持。但是通過此類方式可以確定交易表存在直連關(guān)系的服務(wù)是明確。
  • 階段三:Application層監(jiān)控
  • 既然圈定了服務(wù)范圍,具體讀寫請求區(qū)分可以直接代碼DAO攔截解析識別,輔之監(jiān)控報(bào)警可以有效幫助識別是否還存在非預(yù)期場景。

總結(jié)解決方案:APM表查詢 + AOP攔截

3.2.2.2 專號專用

在遷移過程需要保障在切換到新交易數(shù)據(jù)源后不會存在有表遺漏等場景的出現(xiàn),避免二次回切,因?yàn)楸旧碓谇袚Q的過程中是停寫的,在生產(chǎn)環(huán)境這無疑會增加對線上用戶的有損感知,因此需要盡可能保障切換過程不會出現(xiàn)遺漏,在實(shí)施策略上,主要通過隔離賬號與權(quán)限隔離來保障, 確保專號專用:

  • 賬號隔離
  • 通過對現(xiàn)有賬號yanxuan進(jìn)行拷貝相同權(quán)限賬號yanxuan_new
  • 權(quán)限隔離
  • 針對yanxuan賬號Exclude交易表集合
  • 針對yanxuan_new 限定只允許訪問交易表集合

圖片

3.2.2.3 質(zhì)量回歸

除此之外可以通過現(xiàn)有沉淀的自動化回歸測試,幫助我們發(fā)現(xiàn),在賬號切換環(huán)節(jié) or 權(quán)限回收環(huán)節(jié)驗(yàn)證現(xiàn)有流程的正確性,防止遺漏場景產(chǎn)生, 但是隨之而來的問題則是,現(xiàn)有沉淀的自動化測試用例并沒有100%覆蓋,如果單純依靠人工代碼檢查,則面臨排查周期長,耗費(fèi)精力,還有可能存在遺漏等問題。

代碼變更分析SDK:目前SDK應(yīng)用于集團(tuán)各部門精準(zhǔn)測試領(lǐng)域,由集團(tuán)各BU測試團(tuán)隊(duì)來維護(hù)共建以及開源化,主要支持版本變更分析和指定方法分析:

  • 版本變更分析
  • 可以針對工程內(nèi)(包括依賴的工程)兩個(gè)不同分支或版本之間差異化代碼進(jìn)行Diff計(jì)算,得出變更的類和變更的方法。同時(shí)通過靜態(tài)代碼調(diào)用鏈路分析,計(jì)算出這些變更方法所影響的最上層Controller接口(或Service/Compont/RPC方法)。
  • 指定方法分析
  • 可以針對工程內(nèi)(包括依賴的工程)指定類的指定方法,通過靜態(tài)代碼調(diào)用鏈路分析,計(jì)算出這些變更方法所影響的最上層Controller接口(或Service/Compont/RPC方法)。

通過借助代碼變更分析SDK-指定方法分析可以完美契合我們的訴求,大致實(shí)現(xiàn)原理如下圖所示:

圖片

下圖所示是在天磯平臺(基于精準(zhǔn)SDK平臺化產(chǎn)物)進(jìn)行樣例分析的DEMO,通過指定項(xiàng)目、指定類名、指定方法的方式幫助我們有效構(gòu)建了依賴鏈路:

圖片

4 必備保障工作

4.1 數(shù)據(jù)源動態(tài)切換改造

涉及遷移的業(yè)務(wù)方需要顯式接入Pandora用于數(shù)據(jù)庫配置的動態(tài)下發(fā)。除了Pandora接入之外,由于我們的應(yīng)用中只有交易切換了新交易DB,必然還會保留有部分業(yè)務(wù)對主站DB的訪問。因此整體的改造設(shè)計(jì)思路是進(jìn)行數(shù)據(jù)源拷貝 + 數(shù)據(jù)源動態(tài)切換識別來實(shí)現(xiàn)的,具體實(shí)現(xiàn)思路可以參照下圖:

圖片

DataSourceA是系統(tǒng)默認(rèn)數(shù)據(jù)源(主站DB),DataSourceB是對DataSourceA的拷貝,在進(jìn)行主站DB切換之前,DataSourceA和DataSourceB都用于對主站DB的訪問。當(dāng)通過Pandora切換到交易DB后,DataSourceA的連接從源數(shù)據(jù)庫(主站DB)切換到了目標(biāo)數(shù)據(jù)庫(交易DB),但是由于系統(tǒng)默認(rèn)的是數(shù)據(jù)源是DataSourceA,針對非交易業(yè)務(wù)DB資源的訪問需要通過DataSourceB才可以獲取,因此需要顯式識別切換。

4.2 事務(wù)中切換數(shù)據(jù)源

由于涉及遷移工程的項(xiàng)目都使用了Spring+MyBatis用于訪問操作數(shù)據(jù)源,基于交易DB獨(dú)立必然性的條件基礎(chǔ)之下,必然涉及到事務(wù)中切換數(shù)據(jù)源的問題。

我們知道如果開啟Spring事務(wù),則先有Spring的Transaction,然后Mybatis創(chuàng)建SqlSession時(shí),會創(chuàng)建SpringManagedTransaction并加入SqlSession中,通過查看源碼可知SpringManagedTransaction中的Connection會從TheadLocal中獲取(@Transaction會創(chuàng)建的Connection并放入ThreadLocal,ThreadLocal是以DataSource生成的actualKey為key值和ConnectionHolder作為value值封裝成的Map)。

因此想要支持事務(wù)中切換數(shù)據(jù)源,必須改寫SqlSessionTemplate,復(fù)寫getSqlSession方法,根據(jù)需要切換的key(對應(yīng)具體數(shù)據(jù)源),重新構(gòu)造SqlSession。如果SqlSession包含的數(shù)據(jù)源是開啟事務(wù)的數(shù)據(jù)源就會取Spring已經(jīng)創(chuàng)建的,否則就會重新創(chuàng)建。

4.3 大數(shù)據(jù)平臺切換

根據(jù)數(shù)據(jù)集成平臺Datahub現(xiàn)有功能支持,如果主站庫(源數(shù)據(jù)庫)表直接切換到訂單庫(目標(biāo)數(shù)據(jù)庫)且使用訂單庫現(xiàn)有數(shù)倉表命名規(guī)則,則需要把遷移過的rdb表名全部更改名稱,工作量巨大且存在較大風(fēng)險(xiǎn)。

考慮到目標(biāo)庫(歷史已經(jīng)存在,但是核心的交易表相關(guān)數(shù)據(jù)依然存留在主站庫中)現(xiàn)有數(shù)倉表僅被1個(gè)下游任務(wù)依賴,采用單獨(dú)配置訂單庫binlog Kafka topic、rdb表名適配被遷移的主站表命名的方式進(jìn)行切換,基本可以做到被遷移表相關(guān)離線數(shù)倉任務(wù)不需要感知影響,最大限度減少下游影響。

5 獨(dú)立流程編排

獨(dú)立流程是通過開發(fā)人為操作指令來實(shí)施的,因此在實(shí)施過程中如何確保不出錯(cuò),高效完成獨(dú)立需要重點(diǎn)關(guān)注的。需要所有參與人員明確整體的獨(dú)立思路、敲定詳細(xì)的獨(dú)立步驟(約束行為),以及通過反復(fù)的獨(dú)立演練幫助我們發(fā)現(xiàn)問題,以此來不斷優(yōu)化完善我們的獨(dú)立流程。

5.1 獨(dú)立思路

圖片

整體遷移思路是針對交易表寫權(quán)限已經(jīng)回收完成(依賴交易能力全量收攏完成)背景之下開展,整體流程上大致可以分為兩個(gè)階段:鏡像庫切換階段和主庫切換階段。

  • 鏡像庫切換
  • 流程上可以先行主庫切換,有助于發(fā)現(xiàn)問題;
  • 因?yàn)橐肓薔DC,相比較于常規(guī)的鏡像庫復(fù)制流程,鏈路被放大,延遲略有提升。
  • 主庫切換
  • 在完成主庫切換之后,需要斷開源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫之間的NDC同步任務(wù),同期創(chuàng)建反向同步任務(wù),防止回切造成數(shù)據(jù)丟失。

5.2 獨(dú)立流程

大致遷移流程如圖所示,主要包括遷移階段、回滾階段、以及收尾階段。

圖片

5.3 驗(yàn)證演練

由于交易DB切換涉及服務(wù)眾多(累計(jì)13個(gè)核心服務(wù)),因此在生產(chǎn)環(huán)境切換之前,需要在測試環(huán)境進(jìn)行反復(fù)演練,即正向(源數(shù)據(jù)庫->目標(biāo)數(shù)據(jù)庫)和逆向(目標(biāo)數(shù)據(jù)庫-> 源數(shù)據(jù)庫)流程全量切換演練。通過切換演練有助于完善現(xiàn)有的切換劇本,細(xì)化人員分配安排,以及明確業(yè)務(wù)影響觀察指標(biāo)。

在測試環(huán)境交易DB的遷移的過程中,依托前置完善后的用例場景全量回歸不僅僅可以幫助發(fā)現(xiàn)遷移過程是否有遺漏,還可以對原有的交易能力收攏進(jìn)行二次查漏補(bǔ)缺,確保萬無一失。

在切換過程中可以借助NDC的數(shù)據(jù)比對校驗(yàn)?zāi)芰Γ瑤椭覀儨y出源端與目標(biāo)端不一致的數(shù)據(jù),保證數(shù)據(jù)同步功能的正確性。

6 總結(jié)

針對嚴(yán)選交易DB如何進(jìn)行數(shù)據(jù)源獨(dú)立以及在數(shù)據(jù)源切換整體流程的解決方案以及實(shí)施遷移的過程中遇到的一些問題解決思路作為經(jīng)驗(yàn)分享給大家,希望對后續(xù)業(yè)務(wù)團(tuán)隊(duì)在進(jìn)行相關(guān)工作開展有所幫助。

責(zé)任編輯:武曉燕 來源: 嚴(yán)選技術(shù)產(chǎn)品團(tuán)隊(duì)
相關(guān)推薦

2020-03-13 14:05:14

SpringBoot+數(shù)據(jù)源Java

2022-12-06 17:52:57

離線數(shù)倉治理

2023-01-27 19:33:10

消息中心管理平臺

2022-08-14 14:41:57

系統(tǒng)建設(shè)實(shí)踐

2023-06-19 07:27:50

網(wǎng)易嚴(yán)選全鏈路

2023-01-04 09:33:31

SpringBootMybatis

2023-08-15 08:12:12

數(shù)倉建模數(shù)倉建設(shè)

2022-05-10 10:43:35

數(shù)據(jù)源動態(tài)切換Spring

2025-01-17 09:11:51

2018-03-27 15:02:44

互聯(lián)網(wǎng)

2009-06-15 13:24:46

JBoss數(shù)據(jù)源

2010-12-27 09:59:11

ODBC數(shù)據(jù)源

2024-03-28 09:46:50

2017-09-04 14:52:51

Tomcat線程數(shù)據(jù)源

2023-11-27 09:16:53

Python數(shù)據(jù)源類型

2023-11-27 07:33:55

2017-06-14 23:42:27

大數(shù)據(jù)數(shù)據(jù)源架構(gòu)

2009-09-08 11:09:39

LINQ數(shù)據(jù)源

2009-09-15 17:15:33

Linq排序

2024-10-30 10:22:17

點(diǎn)贊
收藏

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

主站蜘蛛池模板: a级毛片免费高清视频 | 色在线免费视频 | 中文字幕亚洲一区二区三区 | 91精品久久久久久久久久入口 | 精品久久久久久久 | 精品国产乱码久久久 | 求个av网址 | 国产伦精品一区二区三区照片91 | 特一级黄色毛片 | 羞羞视频免费观看入口 | 在线中文视频 | 亚洲欧美激情精品一区二区 | 伊色综合久久之综合久久 | 日日天天| 欧美一区免费 | 国产乱码精品1区2区3区 | 国产男女视频网站 | 亚洲 欧美 在线 一区 | 久久99久久98精品免观看软件 | 精品欧美一区二区三区久久久 | 涩涩片影院 | 亚洲精品一区二区三区在线观看 | 在线高清免费观看视频 | 91久久国产综合久久 | 精品福利av导航 | 午夜国产羞羞视频免费网站 | 91高清免费 | 亚洲国产一区二区三区四区 | 久久精品国产一区二区电影 | 欧美三级成人理伦 | 久久亚洲精品国产精品紫薇 | 免费av一区二区三区 | 亚洲视频网 | 亚洲第一网站 | 国产高清一二三区 | 九色 在线 | 国产探花在线精品一区二区 | 欧美成人手机在线 | 黄一级| 男人亚洲天堂 | 国产高清在线观看 |