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

Python接口優(yōu)化,性能飆升25倍!

開(kāi)發(fā) 后端
我們負(fù)責(zé)的一個(gè)業(yè)務(wù)平臺(tái),有次在發(fā)現(xiàn)設(shè)置頁(yè)面的加載特別特別地慢,簡(jiǎn)直就是令人發(fā)指,讓用戶等待 36s 肯定是不可能的,于是我們就要開(kāi)啟優(yōu)化之旅了。

 

背景

我們負(fù)責(zé)的一個(gè)業(yè)務(wù)平臺(tái),有次在發(fā)現(xiàn)設(shè)置頁(yè)面的加載特別特別地慢,簡(jiǎn)直就是令人發(fā)指

讓用戶等待 36s 肯定是不可能的,于是我們就要開(kāi)啟優(yōu)化之旅了。

投石問(wèn)路

既然是網(wǎng)站的響應(yīng)問(wèn)題,可以通過(guò) Chrome 這個(gè)強(qiáng)大的工具幫助我們快速找到優(yōu)化方向。

通過(guò) Chrome 的 Network 除了可以看到接口請(qǐng)求耗時(shí)之外,還能看到一個(gè)時(shí)間的分配情況,選擇一個(gè)配置沒(méi)有那么多的項(xiàng)目,簡(jiǎn)單請(qǐng)求看看:

雖然只是一個(gè)只有三條記錄的項(xiàng)目,加載項(xiàng)目設(shè)置都需要 17s,通過(guò) Timing, 可以看到總的請(qǐng)求共耗時(shí) 17.67s ,但有 17.57s 是在 Waiting(TTFB) 狀態(tài)。

  1. TTFB 是 Time to First Byte 的縮寫(xiě),指的是瀏覽器開(kāi)始收到服務(wù)器響應(yīng)數(shù)據(jù)的時(shí)間(后臺(tái)處理時(shí)間+重定向時(shí)間),是反映服務(wù)端響應(yīng)速度的重要指標(biāo)。 

Profile 火焰圖 + 代碼調(diào)優(yōu)

那么大概可以知道優(yōu)化的大方向是在后端接口處理上面,后端代碼是 Python + Flask 實(shí)現(xiàn)的,先不盲猜,直接上 Profile:

第一波優(yōu)化:功能交互重新設(shè)計(jì)

說(shuō)實(shí)話看到這段代碼是絕望的:完全看不出什么?只是看到很多 gevent 和 Threading,因?yàn)樘鄥f(xié)程或者線程?

這時(shí)候一定要結(jié)合代碼來(lái)分析(為了簡(jiǎn)短篇幅,參數(shù)部分用 “...” 代替): 

  1. def get_max_cpus(project_code, gids):  
  2.     """  
  3.     """  
  4.     ... 
  5.  
  6.     # 再定義一個(gè)獲取 cpu 的函數(shù)  
  7.     def get_max_cpu(project_setting, gid, token, headers):  
  8.         group_with_machines = utils.get_groups(...)  
  9.         hostnames = get_info_from_machines_info(...)  
  10.         res = fetchers.MonitorAPIFetcher.get(...)  
  11.         vals = [  
  12.             round(100 - val, 4)  
  13.             for ts, val in res['series'][0]['data']  
  14.             if not utils.is_nan(val)  
  15.         ]  
  16.         maxmax_val = max(vals) if vals else float('nan')  
  17.         max_cpus[gid] = max_val      
  18.      #  啟動(dòng)線程批量請(qǐng)求  
  19.     for gid in gids:  
  20.         t = Thread(target=get_max_cpuargs=(...))  
  21.         threads.append(t)  
  22.         t.start()        
  23.      # 回收線程  
  24.     for t in threads:  
  25.         t.join()  
  26.     return max_cpus 

通過(guò)代碼可以看到,為了更加快速獲取 gids 所有的 cpu_max 數(shù)據(jù),為每個(gè) gid 分配一個(gè)線程去請(qǐng)求,最終再返回最大值。

這里會(huì)出現(xiàn)兩個(gè)問(wèn)題:

  1.  在一個(gè) web api 做線程的 創(chuàng)建 和 銷毀 是有很大成本的,因?yàn)榻涌跁?huì)頻繁被觸發(fā),線程的操作也會(huì)頻繁發(fā)生,應(yīng)該盡可能使用線程池之類的,降低系統(tǒng)花銷;
  2.  該請(qǐng)求是加載某個(gè) gid (群組) 下面的機(jī)器過(guò)去 7 天的 CPU 最大值,可以簡(jiǎn)單拍腦袋想下,這個(gè)值不是實(shí)時(shí)值也不是一個(gè)均值,而是一個(gè)最大值,很多時(shí)候可能并沒(méi)有想象中那么大價(jià)值;

既然知道問(wèn)題,那就有針對(duì)性的方案:

  1.  調(diào)整功能設(shè)計(jì),不再默認(rèn)加載 CPU 最大值,換成用戶點(diǎn)擊加載(一來(lái)降低并發(fā)的可能,二來(lái)不會(huì)影響整體);
  2.  因?yàn)?1 的調(diào)整,去掉多線程實(shí)現(xiàn);

再看第一波優(yōu)化后的火焰圖:

這次看的火焰圖雖然還有很大的優(yōu)化空間,但起碼看起來(lái)有點(diǎn)正常的樣子了。

第二波優(yōu)化:Mysql 操作優(yōu)化處理

我們?cè)購(gòu)捻?yè)面標(biāo)記處(接口邏輯處)放大火焰圖觀察:

看到好大一片操作都是由 utils.py:get_group_profile_settings 這個(gè)函數(shù)引起的數(shù)據(jù)庫(kù)操作熱點(diǎn)。

同理,也是需要通過(guò)代碼分析: 

  1. def get_group_profile_settings(project_code, gids):      
  2.     # 獲取 Mysql ORM 操作對(duì)象  
  3.     ProfileSetting = unpurview(sandman.endpoint_class('profile_settings'))  
  4.     session = get_postman_session()      
  5.     profile_settings = {}  
  6.     for gid in gids:  
  7.         compound_name = project_code + ':' + gid  
  8.         result = session.query(ProfileSetting).filter(  
  9.             ProfileSetting.name == compound_name  
  10.         ).first()       
  11.          if result:  
  12.             resultresult = result.as_dict()  
  13.             tag_indexes = result.get('tag_indexes')  
  14.             profile_settings[gid] = {  
  15.                 'tag_indexes': tag_indexes,  
  16.                 'interval': result['interval'],  
  17.                 'status': result['status'],  
  18.                 'profile_machines': result['profile_machines'],  
  19.                 'thread_settings': result['thread_settings']  
  20.             }  
  21.             ...(省略)  
  22.     return profile_settings 

看到 Mysql ,第一個(gè)反應(yīng)就是 索引問(wèn)題,所以優(yōu)先去看看數(shù)據(jù)庫(kù)的索引情況,如果有索引的話應(yīng)該不會(huì)是瓶頸:

很奇怪這里明明已經(jīng)有了索引了,為什么速度還是這個(gè)鬼樣子呢!

正當(dāng)毫無(wú)頭緒的時(shí)候,突然想起在 第一波優(yōu)化 的時(shí)候, 發(fā)現(xiàn) gid(群組)越多的影響越明顯,然后看回上面的代碼,看到那句: 

  1. for gid in gids:   
  2.     ... 

我仿佛明白了什么。

這里是每個(gè) gid 都去查詢一次數(shù)據(jù)庫(kù),而項(xiàng)目經(jīng)常有 20 ~ 50+ 個(gè)群組,那肯定直接爆炸了。

其實(shí) Mysql 是支持單字段多值的查詢,而且每條記錄并沒(méi)有太多的數(shù)據(jù),我可以嘗試下用 Mysql 的 OR 語(yǔ)法,除了避免多次網(wǎng)絡(luò)請(qǐng)求,還能避開(kāi)那該死的 for

正當(dāng)我想事不宜遲直接搞起的時(shí)候,余光瞥見(jiàn)在剛才的代碼還有一個(gè)地方可以優(yōu)化,那就是:

看到這里,熟悉的朋友大概會(huì)明白是怎么回事。

GetAttr 這個(gè)方法是Python 獲取對(duì)象的 方法/屬性 時(shí)候會(huì)用到,雖然不可不用,但是如果在使用太過(guò)頻繁也會(huì)有一定的性能損耗。

結(jié)合代碼一起來(lái)看: 

  1. def get_group_profile_settings(project_code, gids):   
  2.      # 獲取 Mysql ORM 操作對(duì)象  
  3.     ProfileSetting = unpurview(sandman.endpoint_class('profile_settings'))  
  4.     session = get_postman_session()    
  5.      profile_settings = {}  
  6.     for gid in gids:  
  7.         compound_name = project_code + ':' + gid  
  8.         result = session.query(ProfileSetting).filter(  
  9.             ProfileSetting.name == compound_name  
  10.         ).first()  
  11.         ... 

在這個(gè)遍歷很多次的 for 里面,session.query(ProfileSetting) 被反復(fù)無(wú)效執(zhí)行了,然后 filter 這個(gè)屬性方法也被頻繁讀取和執(zhí)行,所以這里也可以被優(yōu)化。

總結(jié)下的問(wèn)題就是: 

  1. 1. 數(shù)據(jù)庫(kù)的查詢沒(méi)有批量查詢;  
  2. 2. ORM 的對(duì)象太多重復(fù)的生成,導(dǎo)致性能損耗;  
  3. 3. 屬性讀取后沒(méi)有復(fù)用,導(dǎo)致在遍歷次數(shù)較大的循環(huán)體內(nèi)頻繁 getAttr,成本被放大; 

那么對(duì)癥下藥就是: 

  1. def get_group_profile_settings(project_code, gids):      
  2.     # 獲取 Mysql ORM 操作對(duì)象  
  3.     ProfileSetting = unpurview(sandman.endpoint_class('profile_settings'))  
  4.     session = get_postman_session()    
  5.         # 批量查詢 并將 filter 提到循環(huán)之外  
  6.     query_results = query_instance.filter(  
  7.         ProfileSetting.name.in_(project_code + ':' + gid for gid in gids)  
  8.     ).all()  
  9.     # 對(duì)全部的查詢結(jié)果再單條處理  
  10.     profile_settings = {}  
  11.     for result in query_results:  
  12.         if not result:  
  13.             continue  
  14.         resultresult = result.as_dict()  
  15.         gid = result['name'].split(':')[1]  
  16.         tag_indexes = result.get('tag_indexes')  
  17.         profile_settings[gid] = { 
  18.              'tag_indexes': tag_indexes,  
  19.             'interval': result['interval'],  
  20.             'status': result['status'],  
  21.             'profile_machines': result['profile_machines'],  
  22.             'thread_settings': result['thread_settings']  
  23.         }  
  24.             ...(省略)  
  25.     return profile_settings 

優(yōu)化后的火焰圖:

對(duì)比下優(yōu)化前的相同位置的火焰圖:

明顯的優(yōu)化點(diǎn):優(yōu)化前的,最底部的 utils.py:get_group_profile_settings 和 數(shù)據(jù)庫(kù)相關(guān)的熱點(diǎn)大大縮減。

優(yōu)化效果

同一個(gè)項(xiàng)目的接口的響應(yīng)時(shí)長(zhǎng)從 37.6 s 優(yōu)化成 1.47s,具體的截圖:

優(yōu)化總結(jié)

如同一句名言: 

  1. 如果一個(gè)數(shù)據(jù)結(jié)構(gòu)足夠優(yōu)秀,那么它是不需要多好的算法。 

在優(yōu)化功能的時(shí)候,最快的優(yōu)化就是:去掉那個(gè)功能!

其次快就是調(diào)整那個(gè)功能觸發(fā)的 頻率 或者 復(fù)雜度!

從上到下,從用戶使用場(chǎng)景去考慮這個(gè)功能優(yōu)化方式,往往會(huì)帶來(lái)更加簡(jiǎn)單高效的結(jié)果,嘿嘿!

當(dāng)然很多時(shí)候我們是無(wú)法那么幸運(yùn)的,如果我們實(shí)在無(wú)法去掉或者調(diào)整,那么就發(fā)揮做程序猿的價(jià)值咯:Profile

針對(duì) Python 可以嘗試:cProflile + gprof2dot

而針對(duì) Go 可以使用: pprof + go-torch

很多時(shí)候看到的代碼問(wèn)題都不一定是真正的性能瓶頸,需要結(jié)合工具來(lái)客觀分析,這樣才能有效直擊痛點(diǎn)!

其實(shí)這個(gè) 1.47s,其實(shí)還不是最好的結(jié)果,還可以有更多優(yōu)化的空間,比如:

  1.  前端渲染和呈現(xiàn)的方式,因?yàn)檎麄€(gè)表格是有很多數(shù)據(jù)組裝后再呈現(xiàn)的,響應(yīng)慢的單元格可以默認(rèn)先顯示 菊花,數(shù)據(jù)返回再更新;
  2.  火焰圖看到還有挺多細(xì)節(jié)可以優(yōu)化,可以替換請(qǐng)求數(shù)據(jù)的外部接口,比如再優(yōu)化徹底 GetAttr 相關(guān)的邏輯;
  3.  更極端就是直接 Python 轉(zhuǎn) GO;

但是這些優(yōu)化已經(jīng)不是那么迫切了,因?yàn)檫@個(gè) 1.47s 是比較大型項(xiàng)目的優(yōu)化結(jié)果了,絕大部分的項(xiàng)目其實(shí)不到 1s 就能返回

再優(yōu)化可能付出更大成本,而結(jié)果可能也只是從 500ms 到 400ms 而已,結(jié)果并不那么高性價(jià)比。

所以我們一定要時(shí)刻清晰自己優(yōu)化的目標(biāo),時(shí)刻考慮 投入產(chǎn)出比,在有限的時(shí)間做出比較高的價(jià)值(如果有空閑時(shí)間當(dāng)然可以盡情干到底) 

 

責(zé)任編輯:龐桂玉 來(lái)源: Linux公社
相關(guān)推薦

2020-08-10 11:00:02

Python優(yōu)化代碼

2025-07-30 09:08:44

2025-06-05 03:00:00

Spring異步接口

2022-05-23 13:44:53

前端開(kāi)發(fā)優(yōu)化

2025-04-21 09:07:00

2016-08-29 17:16:18

NVIDIA

2025-02-26 11:27:43

2025-09-30 02:11:00

2025-07-22 13:17:30

2020-07-22 08:30:02

代碼開(kāi)發(fā)工具

2017-08-08 09:45:43

Python性能優(yōu)化

2025-07-08 09:33:08

2013-09-26 14:11:23

SQL性能優(yōu)化

2025-10-10 05:56:11

2025-04-27 09:15:40

2022-10-09 13:36:44

接口性能優(yōu)化

2024-01-22 13:16:00

接口性能優(yōu)化本地緩存

2020-06-05 08:53:31

接口性能實(shí)踐

2012-11-21 17:35:21

Oracle技術(shù)嘉年華

2022-04-11 15:56:51

Golang代碼框架
點(diǎn)贊
收藏

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

国产精品免费久久久久久| 欧美性大战久久久久久久| 国产精品伊人日日| 国产99免费视频| 久久一区二区三区电影| 日韩午夜精品视频| 无码人妻h动漫| 2019中文字幕在线视频| 国产成人av一区二区三区在线 | 精品欧美aⅴ在线网站| 欧美一区二区三区四区五区六区| 一本色道久久综合精品婷婷| 亚洲成人中文| 日韩亚洲国产中文字幕| 漂亮人妻被黑人久久精品| 国产精品诱惑| 欧美日韩中文在线| 福利在线小视频| 成人午夜影视| 99热精品一区二区| 91免费精品国偷自产在线| 国产精品一区二区三区四| 亚洲成人日韩| 中文字幕亚洲欧美| 制服丝袜第二页| avtt综合网| 日韩一区二区三区电影| 中文字幕av不卡在线| 91超碰免费在线| 亚洲精品水蜜桃| 亚洲第一在线综合在线| 欧美女优在线| wwwwww.欧美系列| 97人人模人人爽视频一区二区| 波多野结衣小视频| 亚洲主播在线| 97免费在线视频| 久久亚洲精品大全| 亚洲第一天堂| 久久久国产精品x99av| 亚洲av毛片基地| 美女久久久久| 精品五月天久久| 久久久久麻豆v国产精华液好用吗| 欧美成人精品午夜一区二区| 欧美人伦禁忌dvd放荡欲情| 欧美在线观看视频网站| www.com.cn成人| 欧美性少妇18aaaa视频| 亚洲色欲综合一区二区三区| 五月天国产在线| 日韩欧美高清在线视频| 91九色在线观看视频| 国产在线美女| 激情av一区二区| 日韩人妻精品无码一区二区三区| sm捆绑调教国产免费网站在线观看 | 亚洲第一区色| 91国内产香蕉| 在线精品免费视| 日日夜夜免费精品| 国产精品香蕉国产| 91国产免费视频| 国产一区高清在线| 99在线观看| 欧美自拍偷拍一区二区| 99国产欧美久久久精品| 鲁片一区二区三区| 成年人在线看| 中文字幕在线免费不卡| 男女h黄动漫啪啪无遮挡软件| 黄色在线论坛| 亚洲国产精品一区二区www在线 | 美腿丝袜亚洲三区| 91深夜福利视频| 国产香蕉在线观看| 久久久久久久久岛国免费| 日韩一区不卡| av网站在线免费看推荐| 亚洲aaa精品| 日本成人在线免费视频| 99综合99| 亚洲第一视频网站| 男人的天堂官网| 亚洲电影影音先锋| 69久久夜色精品国产69乱青草| 无码人妻一区二区三区免费| 久久成人av少妇免费| 国产精品美女xx| 国产九九在线| 亚洲一区二区在线免费观看视频| 337p粉嫩大胆噜噜噜鲁| 精品伦一区二区三区| 国产女人高潮时对白| 成人美女在线视频| 日韩免费电影一区二区| 成人无遮挡免费网站视频在线观看| 夜夜精品视频一区二区| 任你操这里只有精品| **国产精品| 亚洲精品720p| 亚洲熟女毛茸茸| 国产日韩欧美一区二区三区在线观看| 国产精品伦子伦免费视频| 亚洲免费一级片| 国产精品嫩草久久久久| 少妇人妻大乳在线视频| 亚洲日日夜夜| 亚洲欧美国产日韩中文字幕| 青草影院在线观看| 奇米精品一区二区三区在线观看| www日韩av| 337p日本欧洲亚洲大胆鲁鲁| 懂色av影视一区二区三区| а 天堂 在线| 国产影视精品一区二区三区| 国内精品中文字幕| 国产乱码精品一区二区| 欧美韩国一区二区| 欧美三级在线观看视频| 亚洲国产中文在线| 日韩中文字在线| 欧美精品一二三四区| 国产成人在线视频免费播放| 亚洲人体一区| 日本综合字幕| 日韩精品在线视频美女| 麻豆视频在线观看| 国内外成人在线| 亚洲免费视频一区| 校园春色亚洲色图| 日韩经典一区二区三区| 日本特黄一级片| 粉嫩嫩av羞羞动漫久久久| 爱爱爱视频网站| 精品久久在线| 日韩中文字幕精品| 成人写真福利网| 国产黄色片免费观看| 国产精品丝袜久久久久久app| 免费无遮挡无码永久视频| 亚洲免费一区三区| 欧美黑人极品猛少妇色xxxxx | 日韩电影在线观看一区| 久久国产精品久久精品国产| jizzjizz中国精品麻豆| 精品欧美久久久| 久久久久久久久久一区二区三区| 久久国产精品99精品国产| 天堂精品一区二区三区| 成人黄色免费短视频| 国产亚洲人成网站在线观看| 无码免费一区二区三区| 欧美韩日一区二区三区四区| 亚洲第一狼人区| 国产精品久久久久久久久妇女| 国产又爽又黄的激情精品视频 | 亚洲av综合色区无码一区爱av| 亚洲欧美日韩国产一区二区三区| 午夜激情影院在线观看| 91精品一区二区三区综合| 亚洲在线观看视频| 丁香花电影在线观看完整版 | 国产免费a∨片在线观看不卡| 在线亚洲一区二区| 三级黄色在线观看| 国产91丝袜在线播放九色| 久久久久久免费看| 一本久久青青| 国产日韩av在线播放| 羞羞视频在线观看不卡| 欧美精品一区二区不卡| 日日骚av一区二区| 国产精品丝袜一区| 香蕉视频免费网站| 亚洲专区欧美专区| 午夜欧美性电影| 日本一区二区三区播放| 国产91精品高潮白浆喷水| 波多野结衣在线影院| 日韩一级大片在线| 亚洲精品男人的天堂| 国产精品区一区二区三| 两性午夜免费视频| 亚洲在线一区| 视频一区二区视频| 日韩精品免费一区二区三区竹菊 | 日韩一区二区三区精品| 97超视频免费观看| 免费大片黄在线观看视频网站| 精品国产伦理网| 亚洲无码精品一区二区三区| 亚洲人吸女人奶水| 五级黄高潮片90分钟视频| 国内成人免费视频| 欧美aⅴ在线观看| 亚洲一区二区三区| 欧美日韩在线高清| 97品白浆高清久久久久久| 91精品国产91久久久久久不卡| av在线收看| 亚洲免费中文字幕| 亚洲a视频在线观看| 欧美日韩国产首页| 在线能看的av| 一区二区久久久久久| 日本成人免费视频| 99久久精品国产一区| 日本中文字幕二区| 久久av一区| 国产精品久久久久9999爆乳| 欧美丰满日韩| 欧美视频1区| 开心激情综合| 99国产在线| 国产不卡精品在线| 国产精品久久久久久久久免费| av免费不卡国产观看| 久久这里有精品| 亚洲s色大片| 亚洲香蕉伊综合在人在线视看| 成人毛片在线精品国产| 日韩一级免费观看| av官网在线观看| 欧美日韩国产一级片| 中文字幕人妻一区二区在线视频 | 亚洲理论电影片| 国产中文一区二区| 91精品入口| 91在线观看网站| 91精品国产自产观看在线| 国产99久久精品一区二区永久免费| 91制片在线观看| 久久久久亚洲精品成人网小说| 黄色成人在线观看| 俺去亚洲欧洲欧美日韩| 91福利在线视频| 国产一区二区三区三区在线观看| 污污视频在线观看网站| 精品国产乱码久久久久久夜甘婷婷 | 九色91国产| 男人的天堂久久| 国产三级精品在线不卡| 精品淫伦v久久水蜜桃| 国产欧美综合精品一区二区| 凹凸av导航大全精品| 成人av蜜桃| caoporn成人免费视频在线| 不卡视频一区二区三区| 成人性生交大片免费看96| 粉嫩av一区二区三区免费观看| 日韩精品一区二区三区中文在线 | www香蕉视频| 亚洲精品在线一区二区| 婷婷综合激情网| 精品亚洲一区二区三区| 日韩毛片在线一区二区毛片| 亚洲欧美日韩一区二区在线| 国产二区在线播放| www.欧美精品一二三区| www.在线视频| 欧美午夜视频在线观看| 精品久久久久久亚洲| 精品国产鲁一鲁****| 成人综合色站| 日韩精品免费一区二区夜夜嗨 | 亚洲色图狠狠干| 亚洲欧美日韩区| 日韩大片在线永久免费观看网站| 日韩中文字幕不卡视频| av中文字幕在线观看| 午夜精品一区二区三区在线播放| 在线视频cao| 国产欧美精品xxxx另类| 日韩精品一区二区三区中文字幕| 精品国产91亚洲一区二区三区www 精品国产_亚洲人成在线 | 天天操天天色综合| 日韩乱码一区二区三区| 欧美一区二区三区小说| 天天操天天干天天干| 亚洲一区二区国产| av网站在线免费| 欧美一区二区三区…… | 56国语精品自产拍在线观看| 性生活免费网站| 亚洲美女激情视频| 麻豆网站在线| 91成人福利在线| 日本国产亚洲| 精品免费一区二区三区蜜桃| 精品久久久亚洲| av在线免费观看国产| 久久在线精品| 一级黄色免费毛片| 国产免费观看久久| 国产一级免费av| 欧美在线免费观看视频| 亚洲av永久无码国产精品久久| 亚洲人成在线电影| 激情av在线| 国产精品尤物福利片在线观看| 久久九九热re6这里有精品| 一本色道久久综合亚洲精品婷婷| 红桃视频国产一区| 五月天婷婷亚洲| 久久美女艺术照精彩视频福利播放| 五月天激情丁香| 色8久久精品久久久久久蜜| 亚洲高清视频网站| 色综合亚洲精品激情狠狠| 最近高清中文在线字幕在线观看1| 成人激情视频在线| 精品国产一区一区二区三亚瑟| 全黄性性激高免费视频| 国产一区二区不卡| 婷婷丁香综合网| 色猫猫国产区一区二在线视频| 内射无码专区久久亚洲| 欧美裸体xxxx极品少妇| 国产精品久久久久久妇女| 欧美另类一区| 在线一区免费观看| 激情av中文字幕| 亚洲精品乱码久久久久| 伊人精品在线视频| 一区二区三区国产在线观看| 麻豆免费在线| 国产精品视频在线免费观看| 一区二区三区四区日韩| 中文字幕第88页| 欧美国产一区在线| 久久久久久亚洲av无码专区| 日韩精品高清在线观看| 7777kkk亚洲综合欧美网站| 91网免费观看| 午夜精品偷拍| 亚洲熟妇一区二区| 亚洲免费观看高清完整版在线| 91成人国产综合久久精品| 在线电影中文日韩| 不卡亚洲精品| 一区二区三区视频| 精品一区二区影视| 欧美成人777| 欧美一区二区三区视频在线 | 欧美 日韩 国产 成人 在线| 欧美猛交ⅹxxx乱大交视频| 国产精品高清一区二区| 午夜久久久久久久久久久| 国产一区二区91| 在线免费观看亚洲视频| 精品国产sm最大网站免费看| av福利导福航大全在线| 国产无套精品一区二区| 亚洲综合丁香| 国产jk精品白丝av在线观看| 欧美日韩一卡二卡| 哥也色在线视频| yellow视频在线观看一区二区| 最新日韩欧美| 黄色在线观看av| 欧美日韩亚洲综合在线 | 国产精品久久久久久av下载红粉| 国产一区二区区别| 奇米视频888| 亚洲激情图片小说视频| 日本高清视频免费观看| 日本高清不卡在线| 四虎国产精品免费观看 | 久久久久久久久久久99999| 国产精品自拍第一页| 精品国产自在精品国产浪潮| 影音先锋欧美激情| 日本精品一区在线观看| 国产精品天天看| 亚洲av永久纯肉无码精品动漫| 欧美在线欧美在线| 超碰成人久久| 色哟哟网站在线观看| 色综合激情五月| 黄色片网站在线观看| 精品国产乱码久久久久久88av| 日韩av成人高清| 美女福利视频在线观看| 国产丝袜一区视频在线观看 | 日韩欧美在线影院| 蜜桃视频在线观看播放| 一本一本a久久| 99久久99久久精品国产片果冻| 波多野结衣一区二区三区在线| 久久综合电影一区| 亚洲人挤奶视频| 男插女视频网站| 日本道精品一区二区三区| 欧美人体视频xxxxx| 神马影院午夜我不卡影院| 风流少妇一区二区| 国产精品久久久久久久久久久久久久久久| 欧美日韩国产二区| 日本精品黄色|