国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Python這么慢,為啥大公司還在用?

共 9479字,需瀏覽 19分鐘

 ·

2022-05-10 18:09



來自:https://www.jianshu.com/p/e18e01ad7ad9

前言

PyCon 是全世界最大的以 Python 編程語言 為主題的技術(shù)大會,大會由 Python 社區(qū)組織,每年舉辦一次。在 Python 2017 上,Instagram 的工程師們帶來了一個有關(guān) Python 在 Instagram 的主題演講,同時還分享了 Instagram 如何將整個項目運行環(huán)境升級到 Python 3 的故事。本文為該次演講的內(nèi)容摘要,由 Python 愛好者朱雷撰寫。
Instagram 是一款移動端的照片與視頻分享軟件,由 Kevin Systrom 和 Mike Krieger 在 2010 年創(chuàng)辦。Instagram 在發(fā)布后開始快速流行。于 2012 年被 Facebook 以 10 億美元的價格收購。而當(dāng)時 Instagram 的員工僅有區(qū)區(qū) 13 名。
如今,Instagram 的總注冊用戶達(dá)到 30 億,月活用戶超過 7 億 (作為對比,微信最新披露的月活躍用戶為 9.38 億)。而令人吃驚的是,這么高的訪問量背后,竟完全是由以速度慢著稱的 Python + Django 支撐。

為什么選擇 Python 和 Django

Instagram 選擇 Django 的原因很簡單,Instagram 的兩位創(chuàng)始人 (Kevin Systrom and Mike Krieger) 都是產(chǎn)品經(jīng)理出身。在他們想要創(chuàng)造 Instagram 時,Django 是他們所知道的最穩(wěn)定和成熟的技術(shù)之一。
時至今日,即使已經(jīng)擁有超過 30 億的注冊用戶。Instagram 仍然是 Python 和 Django 的重度使用者。Instagram 的工程師 Hui Ding 說到:『一直到用戶 ID 已經(jīng)超過了 32bit int 的限額(約為 20 億),Django 本身仍然沒有成為我們的瓶頸所在?!?/span>
不過,除了使用 Django 的原生功能外,Instagram 還對 Django 做了很多定制化工作:
  • 擴展 Django Models 使其支持 Sharding (一種數(shù)據(jù)庫分片技術(shù))。
  • 手動關(guān)閉 GC(垃圾回收)來提升 Python 內(nèi)存管理效率,他們同樣也寫過一篇博客來說明這件事情:Dismissing Python Garbage Collection at Instagram。
  • 在位于不同地理位置的多個數(shù)據(jù)中心部署整套系統(tǒng)。

?

Python 語言的優(yōu)勢所在

Instagram 的聯(lián)合創(chuàng)始人 Mike Krieger 說過:『我們的用戶根本不關(guān)心 Instagram 使用了哪種關(guān)系數(shù)據(jù)庫,他們當(dāng)然也不關(guān)心 Instagram 是用什么編程語言開發(fā)的?!?br>
所以,Python 這種 簡單 而且 實用至上 的編程語言最終贏得了 Instagram 的青睞。他們認(rèn)為,使用 Python 這種簡單的語言有助于塑造 Instagram 的工程師文化,那就是:
  1. 專注于定位問題、解決問題 - 而不是工具本身的各種花花綠綠的特性
  2. 使用那些經(jīng)過市場驗證過的成熟技術(shù)方案 - 而不用被工具本身的問題所煩擾
  3. 用戶至上:專注于用戶所能看到的新特性,為用戶帶去價值
但是,即使使用 Python 語言有這么多好處,它還是很慢,不是嗎?
不過,這對于 Instagram 不是問題,因為他們認(rèn)為:『Instagram 的最大瓶頸在于開發(fā)效率,而不是代碼的執(zhí)行效率』。
At Instagram, our bottleneck is development velocity, not pure code execution.
所以,最終的結(jié)論是:你完全可以使用 Python 語言來實現(xiàn)一個超過幾十億用戶使用的產(chǎn)品,而根本不用擔(dān)心語言或框架本身的性能瓶頸。?

如何提升運行效率

但是,即使是選用了擁有諸多好處的 Python 和 Django。在 Instagram 的用戶數(shù)迅速增長的過程中,性能問題還是出現(xiàn)了:服務(wù)器數(shù)量的增長率已經(jīng)慢慢的超過了用戶增長率。Instagram 是怎么應(yīng)對這個問題的呢?
他們使用了這些手段來緩解性能問題:
  • 開發(fā)工具來幫助調(diào)優(yōu):Instagram 開發(fā)了很多涵蓋各個層面的工具,來幫助他們進(jìn)行性能調(diào)優(yōu)以及找到性能瓶頸。
  • 使用 C/C++ 來重寫部分組件:把那些穩(wěn)定而且對性能最敏感的組件,使用 C 或 C++ 來重寫,比如訪問 memcache 的 library。
  • 使用 Cython:Cython 也是他們用來提升 Python 效率的法寶之一。
除了上面這些手段,他們還在探索異步 IO 以及新的 Python Runtime 所能帶來的性能可能性。

為什么要升級到 Python 3

在相當(dāng)長的一段時間,Instagram 都跑在 Python 2.7 + Django 1.3 的組合之上。在這個已經(jīng)落后社區(qū)很多年的環(huán)境上,他們的工程師們還打了非常非常多的小 patch。難道他們要被永遠(yuǎn)卡在這個版本上嗎?
所以,在經(jīng)過一系列的討論后,他們最終做出一個重大的決定:升級到 Python 3??!
事實上,Instagram 目前已經(jīng)完成了將運行環(huán)境遷移到 Python 3 的工作 - 他們的整套服務(wù)已經(jīng)在 Python 3 上跑了好幾個月了。那么他們是怎么做到的呢?接下來便是由 Instagram 工程師 Lisa guo 帶來的 Instagram 如何遷移到 Python 3 的故事。
對于 Instagram 來說,下面這些因素是推動他們將運行環(huán)境遷移到 Python 3 的主要原因:
  1. 新特性:類型注解 Type Annotations
看看下面這段代碼:
def?compose_from_max_id(max_id):
'''@param str max_id'''
圖中函數(shù)的 max_id 參數(shù)究竟是什么類型呢?int?tuple?或是 list? 等等,函數(shù)文檔里面說它是 str 類型。
但隨著時間推移,萬一這個參數(shù)的類型發(fā)生變化了呢?如果某位粗心的工程師修改代碼的同時忘了更新文檔,那就會給函數(shù)的使用者帶來很大麻煩,最終還不如沒有注釋呢。

2、性能

Instagram 的整個 Django Stack 都跑在 uwsgi 之上,全部使用了同步的網(wǎng)絡(luò) IO。這意味著同一個 uwsgi 進(jìn)程在同一時間只能接收并處理一個請求。這讓如何調(diào)優(yōu)每臺機器上應(yīng)該運行的 uwsgi 進(jìn)程數(shù)成了一個麻煩事:
為了更好利用 CPU,使用更多的進(jìn)程數(shù)?但那樣會消耗大量的內(nèi)存。而過少的進(jìn)程數(shù)量又會導(dǎo)致 CPU 不能被充分利用。
為此,他們決定跳過 Python 2 中哪些蹩腳的異步 IO 實現(xiàn) (可憐的 gevent、tornado、twisted 眾),直接升級到 Python 3,去探索標(biāo)準(zhǔn)庫中的 asyncio 模塊所能帶來的可能性。
3、社區(qū)
因為 Python 社區(qū)已經(jīng)停止了對 Python 2 的支持。如果把整個運行環(huán)境升級到 Python 3,Instagram 的工程師們就能和 Python 社區(qū)走的更近,可以更好的把他們的工作回饋給社區(qū)。
遷移方案
在 Instagram,進(jìn)行 Python 3 的遷移需要必須滿足兩個前提條件:
  1. 不停機,不能有任何的服務(wù)因此不可用
  2. 不能影響產(chǎn)品新特性的開發(fā)
但是,在 Instagram 的開發(fā)環(huán)境中,要滿足上面這兩點來完成遷移到 Python 3.6 這種龐大的工程是非常困難的。
基于主分支的開發(fā)流程
即便使用了以多分支功能著稱的 git,Instagram 所有的開發(fā)工作都是主要在 master 分支上進(jìn)行的,Instagram 所奉行的開發(fā)哲學(xué)是:『不管是多大的新特性或代碼重構(gòu),都應(yīng)該拆解成較小的 Commit 來進(jìn)行。』
那些被合并進(jìn) master 分支的代碼,都將在一個小時內(nèi)被發(fā)布到線上環(huán)境。而這樣的發(fā)布過程每天將會發(fā)生上百次。在這么頻繁的發(fā)布頻率下,如何在滿足之前的那兩個前提下來完成遷移變得尤其困難。
被棄用的遷移方案
創(chuàng)建一個新分支
很多人在處理這類問題時,第一個蹦進(jìn)腦子的想法就是:『讓我們創(chuàng)建一個分支,當(dāng)我們開發(fā)完后,再把分支合并進(jìn)來』。但在 Instagram 這么高的迭代頻率上,使用一個獨立分支并不是好主意:
  • Instagram 的 Codebase 每天都在頻繁更新,在開發(fā) Python 3 分支的過程中,讓新分支與現(xiàn)有 master 分支保持同步開銷極大,同時極易出錯
  • 最終將 Python 3 分支這個改動非常多的分支合并回 Master 擁有非常高的風(fēng)險
  • 只有少數(shù)幾個工程師在 Python 3 分支上專職負(fù)責(zé)升級工作,其他想幫助遷移工作的工程師無法參與進(jìn)來
挨個替換接口
還有一個方案就是,挨個替換 Instagram 的 API 接口。但是 Instagram 的不同接口共享著很多通用模塊。這個方案要實施起來也非常困難。
微服務(wù)
還有一個方案就是將 Instagram 改造成微服務(wù)架構(gòu)。通過將那些通用模塊重寫成 Python 3 版本的微服務(wù)來一步步完成遷移工作。
但是這個方案需要重新組織海量的代碼。同時,當(dāng)發(fā)生在進(jìn)程內(nèi)的函數(shù)調(diào)用變成 RPC 后 ,整個站點的延遲會變大。此外,更多的微服務(wù)也會引入更高的部署復(fù)雜度。
所以,既然 Instagram 的開發(fā)哲學(xué)是:小步前進(jìn),快速迭代。他們最終決定的方案是:一步一步來,最終讓 master 分支上的代碼同時兼容 Python 2 和 Python 3 。

正式遷移到 Python 3

既然要讓整個 codebase 同時兼容 Python 2 和 Python 3,那么首先要符合這點的就是那些被大量使用的第三方 package。針對第三方 package,Instagram 做到了下面幾點:
  • 拒絕引入所有不兼容 Python 3 的新 package
  • 去掉所有不再使用的 package
  • 替換那些不兼容 Python 3 的 package
在代碼的遷移過程中,他們使用了工具 modernize 來幫助他們。
使用 modernize 時,有一個小技巧:每次修復(fù)多個文件的一個兼容問題,而不是一下修復(fù)一個文件中的多個兼容問題。這樣可以讓 Code Review 過程簡單很多,因為 Reviewer 每次只需要關(guān)注一個問題。
對于 Python 這種靈活性極強的動態(tài)語言來說,除了真正去執(zhí)行代碼外,幾乎沒有其他比較好的檢查代碼錯誤的手段。
前面提到,Instagram 所有被合并到 master 的代碼提交會在一個小時內(nèi)上線到線上環(huán)境,但這不是沒有前提條件的。在上線前,所有的提交都需要通過成千上萬個單元測試。
于是,他們開始加入 Python 3 來執(zhí)行所有的單元測試。一開始,只有極少數(shù)的單元測試能夠在 Python 3 環(huán)境下通過,但隨著 Instagram 的工程師們不斷的修復(fù)那些失敗的單元測試,最終所有的單元測試都可以在 Python 3 環(huán)境下成功執(zhí)行。
但是,單元測試也是有局限性的:
  • Instagram 的單元測試沒有做到 100% 的代碼覆蓋率
  • 很多第三方模塊都使用了 mock 技術(shù),而 mock 的行為與真實的線上服務(wù)可能會有所不同
所以,當(dāng)所有的單元測試都被修復(fù)后,他們開始在線上正式使用 Python 3 來運行服務(wù)。
這個過程并不是一蹴而就的。首先,所有的 Instagram 工程師開始訪問到這些使用 Python 3 來執(zhí)行的新服務(wù),然后是 Facebook 的所有雇員,隨后是 0.1%、20% 的用戶,最終 Python 3 覆蓋到了所有的 Instagram 用戶。

?

遷移過程的技術(shù)問題

Instagram 在遷移到 Python 3 時碰到很多問題,下面是最典型的幾個:
Unicode 相關(guān)的字符串問題
Python 3 相比 Python 2 最大的改動之一,就是在語言內(nèi)部對 unicode 的處理。
在 Python 2 中,文本類型 (也就是 unicode) 和二進(jìn)制類型 (也就是 str) 的邊界非常模糊。很多函數(shù)的參數(shù)既可以是文本,也可以是二進(jìn)制。但是在 Python 3 中,文本類型和二進(jìn)制類型的字符串被完全的區(qū)分開了。
于是,下面這段在 Python 2 下可以正常運行的代碼在 Python 3 下就會報錯:
mymac?= hmac.new('abc') TypeError: key: expected bytes or bytearray, but got?'str'
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tQT44Q0M-1570179360052)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
解決辦法其實很簡單,只要加上判斷:如果 value 是文本類型,就將其轉(zhuǎn)換為二進(jìn)制。如下所示:
value =?'abc'if?isinstance(value, six.text_type): value = value.encode(encoding='utf-8') mymac = hmac.new(value)
但是,在整個代碼庫中,像上面這樣的情況非常多。作為開發(fā)人員,如果需要在調(diào)用每個函數(shù)時都要想想:這里到底是應(yīng)該編碼成二進(jìn)制,或者是解碼成文本呢?將會是非常大的負(fù)擔(dān)。
于是 Instagram 封裝了一些名為 ensure_str()、ensure_binary()、ensure_text() 的幫助函數(shù),開發(fā)人員只需對那些不確定類型的字符串,使用這些幫助函數(shù)先做一次轉(zhuǎn)換就好。
mymac?= hmac.new(ensure_binary('abc'))
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Ls5jOGEl-1570179360053)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
不同 Python 版本的 pickle 差異
Instagram 的代碼中大量使用了 pickle。比如用它序列化某個對象,然后將其存儲在 memcache 中。如下面的代碼所示:
memcache_data?= pickle.dumps(data, pickle.HIGHEST_PROTOCOL)data = pickle.loads(memcache_data)
問題在于,Python 2 與 Python 3 的 pickle 模塊是有差別的。
如果上文的第一行代碼,剛好是由 Python 3 運行的服務(wù)進(jìn)行序列化后存入 memcache。而反序列化的過程卻是由 Python 2 進(jìn)行,那代碼運行時就會出現(xiàn)下面的錯誤:
ValueError: unsupported pickle protocol: 4
這是由于在 Python 3 中,pickle.HIGHEST_PROTOCOL 的值為 4,而 Python 2 中的的 pickle 最高支持的版本號卻是 2。那么如何解決這個問題呢?
Instagram 最終選擇讓 Python 2 和 Python 3 使用完全不同的 namespace 來訪問 memcache。通過將二者的數(shù)據(jù)讀寫完全隔開來解決這個問題。
迭代器
在 Python 3 中,很多內(nèi)置函數(shù)被修改成了只返成迭代器 Iterator:
map()?filter() dict.items()
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GLVPUDc0-1570179360059)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
迭代器有諸多好處,最大的好處就是,使用迭代器不需要一次性分配大量內(nèi)存,所以它的內(nèi)存效率比較高。
但是迭代器有一個天然的特點,當(dāng)你對某個迭代器做了一次迭代,訪問完它的內(nèi)容后,就沒法再次訪問那些內(nèi)容了。迭代器中的所有內(nèi)容都只能被訪問一次。
在 Instagram 的 Python 3 遷移過程中,就因為迭代器的這個特性被坑了一次,看看下面這段代碼:
CYTHON_SOURCES = [a.pyx, b.pyx, c.pyx] builds = map(BuildProcess, CYTHON_SOURCES)while?any(not?build.done()?for?build?in?builds): pending = [build?for?build?in?builds?if?not?build.started()]
這段代碼的用處是挨個編譯 Cython 源文件。當(dāng)他們把運行環(huán)境切換到 Python 3 后,一個奇怪的問題出現(xiàn)了:CYTHON_SOURCES 中的第一個文件永遠(yuǎn)都被跳過了編譯。為什么呢?
這都是迭代器的鍋。在 Python 3 中,map() 函數(shù)不再返回整個 list,而是返回一個迭代器。
于是,當(dāng)?shù)诙写a生成 builds 這個迭代器后,第三行代碼的 while 循環(huán)迭代了 builds,剛好取出了第一個元素。于是之后的 pending 對象便里面永遠(yuǎn)少了那第一個元素。
這個問題解決起來也挺簡單的,你只要手動的吧 builds 轉(zhuǎn)換成 list 就可以了:
builds?= list(map(BuildProcess, CYTHON_SOURCES))
但是這類 bug 非常難定位到。如果用戶的 feeds 里面永遠(yuǎn)少了那最新的第一條,用戶很少會注意到。
字典的順序
看看下面這段代碼:
>>> testdict = {'a': 1, 'b': 2, 'c': 3}>>> json.dumps(testdict)
它會輸出什么結(jié)果呢?
# Python2'{"a": 1, "c": 3, "b": 2}'# Python 3.5.1'{"c": 3, "b": 2, "a": 1}' # or'{"c": 3, "a": 1, "b": 2}'# Python 3.6'{"a": 1, "b": 2, "c": 3}'
在不同的 Python 版本下,這個 json dumps 的結(jié)果是完全不一樣的。甚至在 3.5.1 中,它會完全隨機的返回兩個不同的結(jié)果。Instagram 有一段判斷配置文件是否發(fā)生變動的模塊,就是因為這個原因出了問題。
這個問題的解決辦法是,在調(diào)用 json.dumps 傳入 sort_keys=True 參數(shù):
>>> json.dumps(testdict, sort_keys=True)'{"a": 1, "b": 2, "c": 3}'

?

遷移到 Python 3.6 后的性能提升

當(dāng) Instagram 解決了這些奇奇怪怪的版本差異問題后,還有一個巨大的謎題困擾著他們:性能問題。
在 Instagram,他們使用兩個主要指標(biāo)來衡量他們的服務(wù)性能:
  • 每次請求產(chǎn)生的 CPU 指令數(shù)(越低越好)
  • 每秒能夠處理的請求數(shù)(越高越好)
所以,當(dāng)所有的遷移工作完成后,他們非常驚喜的發(fā)現(xiàn):第一個性能指標(biāo),每次請求產(chǎn)生的 CPU 指令數(shù)居然足足下降了 12% !??!
但是,按理說第二個指標(biāo) - 每秒請求數(shù)也應(yīng)該獲得接近 12% 的提升。不過最后的變化卻是 0%。究竟是出了什么問題呢?
他們最終定位到,是由于不同 Python 版本下的內(nèi)存優(yōu)化配置不同,導(dǎo)致 CPU 指令數(shù)下降帶來的性能提升被抵消了。那為什么不同 Python 版本下的內(nèi)存優(yōu)化配置會不一樣呢?
這是他們用來檢查 uwsgi 配置的代碼:
if uwsgi.opt.get('optimize_mem', None) == 'True': optimize_mem()
注意到那段... ... == 'True'了嗎?在 Python 3 中,這個條件判斷總是不會被滿足。問題就在于 unicode。在將代碼中的'True'換成?b'True'(也就是將文本類型換成二進(jìn)制,這種判斷在 Python 2 中完全不區(qū)分的)后,問題解決了。
所以,最終因為加上了一個小小的字母?'b',程序的整體性能提升了 12%。

完美切換
?

在今年二月份,Instagram 的后端代碼的運行環(huán)境完全切換到了 Python 3 下:
當(dāng)所有的代碼都都遷移到 Python 3 運行環(huán)境后:
  • 節(jié)約了 12% 的整體 CPU 使用率(Django/uwsgi)
  • 節(jié)約了 30% 的內(nèi)存使用(celery)
同時,在整個遷移期間,Instagram 的月活用戶經(jīng)歷了從 4 億到 6 億 的巨大增長。產(chǎn)品也發(fā)布了評論過濾、直播等非常多新功能。
那么,那幾個最開始驅(qū)動他們遷移到 Python 3 的目的呢?
  • 類型注解:Instagram 的整個 codebase 里已經(jīng)有 2% 的代碼添加上了類型注解,同時他們還開發(fā)了一些工具來輔助開發(fā)者添加類型提示
  • asyncio:他們在單個接口中利用 asynio 平行的去做多件事情,最終降低了 20-30% 的請求延遲。
  • 社區(qū):他們與 Intel 的工程師聯(lián)合,幫助他們更好的對 CPU 利用率進(jìn)行調(diào)優(yōu)。同時還開發(fā)了很多新的工具,幫助他們進(jìn)行性能調(diào)優(yōu)

?

Instagram 帶給我們的啟示

Instagram 的演講視頻時間不長,但是內(nèi)容很豐富,在編寫此文前,我完全沒有想到最終的文章會這么長。
那么總結(jié)一下,Instagram 的視頻可以給我們哪些啟示呢?
  • Python + Django 的組合完全可以負(fù)載用戶數(shù)以 10 億記的服務(wù),如果你正準(zhǔn)備開始一個項目,放心使用 Python 吧!
  • 完善的單元測試對于復(fù)雜項目是非常有必要的。如果沒有那『成千上萬的單元測試』。很難想象 Instagram 的遷移項目可以成功進(jìn)行下去。
  • 開發(fā)者和同事也是你的產(chǎn)品用戶,利用好他們。用他們?yōu)槟愕男绿匦园l(fā)布前多一道測試。
  • 完全基于主分支的開發(fā)流程,可以給你更快的迭代速度。前提是擁有完善的單元測試和持續(xù)部署流程。
  • Python 3 是大勢所趨,如果你正準(zhǔn)備開始一個新項目,無需遲疑,擁抱 Python 3 吧!



猜您喜歡:

?戳我,查看GAN的系列專輯~!
一頓午飯外賣,成為CV視覺前沿弄潮兒!
CVPR 2022 | 25+方向、最新50篇GAN論文
?ICCV 2021 | 35個主題GAN論文匯總
超110篇!CVPR 2021最全GAN論文梳理
超100篇!CVPR 2020最全GAN論文梳理


拆解組新的GAN:解耦表征MixNMatch

StarGAN第2版:多域多樣性圖像生成


附下載 |?《可解釋的機器學(xué)習(xí)》中文版

附下載 |《TensorFlow 2.0 深度學(xué)習(xí)算法實戰(zhàn)》

附下載 |《計算機視覺中的數(shù)學(xué)方法》分享


《基于深度學(xué)習(xí)的表面缺陷檢測方法綜述》

《零樣本圖像分類綜述: 十年進(jìn)展》

《基于深度神經(jīng)網(wǎng)絡(luò)的少樣本學(xué)習(xí)綜述》


瀏覽 54
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 天堂а√在线中文在线新版| 91欧美精品| 青青久热| 亚洲精品久久久蜜桃| 人操人操人操| 天天色色色| 亚洲人妻在线观看| 婷婷丁香五月综合| 黄色片视频日韩| 亚洲中文婷婷| 在线观看av网站中文字幕| 成人A电影| 天天狠狠操| 欧美熟妇一区二区三区| 亚洲高清无码在线免费观看| 欧美精品在线播放| 成人AV电影在线观看| 欧美一级免费A片| 特级西西444WWW高清| 北条麻妃在线视频聊天| 亚洲av高清无码| 激情丁香五月| 日韩另类| 黄色免费视频网站| 东京热一区二区三区四区| 日本乱伦网| 亚州av| 欧美色图综合网| 99久久久国产精品免费蜜臀| 国产中文字幕在线免费观看 | 久操视频网| 欧美伊人网在线观看| 一级做a视频| 国产18禁网站| 影音先锋女人av噜噜色| 亚洲自拍无码| AV乱伦小说| 国产探花在线观看| 国产精品啪啪视频| 国精产品一区二区三区黑人和中国| 欧美淫乱视频| 91丨露脸丨熟女| 大香蕉AV电影| 亚洲中文欧美| 亚洲va国产天堂va久久en| 天天视频色版免费观看视频| 色94色.欧美.setu| 成人电影亚洲天堂| 国产乱色精品成人免费视频| 亚洲日韩欧美中在线| 九色国产| 高清免费无码视频| 学生妹一级J人片内射视频| 日韩三级AV在线观看| 青青久视频| 国产精品每日更新| 69视频免费观看| 99免费视频在线观看| 大香蕉在线免| 亚洲欧洲在线播放| 亚洲成人无码视频在线观看| 久草福利在线视频| 韩国色情中文字幕| h视频在线观看网站| 国产欧美日韩在线视频| 一级a一级a爰片免费| 免费看黃色AAAAAA片| 91精品国产人妻| 美女操逼图| 中文字幕成人A片| 亚洲视频播放| 91色色影院| 人人人人人人操| 亚洲v天堂| 国产熟女乱伦视频| 久草视频在线免费| 香蕉一区二区| 亚洲三级视频| 乱子伦一区二区三区视频在线观看| 日本精品视频在线| 人人上人人干| 亚洲无码在线精品| 国产一区二区三区视频在线| 国内自拍视频在线观看| xxxxxbbbbb| 免费看A片视频| 国产精品久久久久精| 国产精视频| 伊人中文字幕| 91蝌蚪91九色| 亚洲综合色婷婷| 亚洲国际中文字幕在线| 97人妻人人澡人| 美女自慰网站免费| 男女操逼视频网站免费观看| 18成人网站在线观看| 99re国产视频| 欧美综合精品| 久久精品人妻| 激情白浆| 日韩高清无码中文字幕| 久热在线资源福利站| 婷婷九月| 欧美爱爱免费看| 免费看日逼视频| 波多野吉衣毛片| 亚洲中文字幕av天堂| 亚洲精品秘一区二区三区影| 国产黄色片在线观看| 先锋成人电影| 久久99久久99久久99| 日韩美女视频19| 黄色视频网站在线播放| 国产精品午夜成人免费| 欧美日韩国产三级| 一级a看片在线观看| 在线天堂网| 亲子伦一区二区三区观看方式| 西西444www无码精品| 插逼免费视频| 无码精品成人观看A片| 欧美成人精品无码| 日本一级婬片免费放| 色色激情视频| 久色悠悠| 强奷伦奷片91| 国内自拍视频网| 伊人97| 一区二区三区四区在线看| 久久久久久av| 中文字幕国产在线观看| 久久久久99精品成人网站| 免费日本A片| 六月丁香网| 欧美性爱无码在线| 天堂一区二区18| 免费在线黄色电影| 精品国产一| 日韩毛片中文字幕| 婷婷五月999| 福利一区在线观看| 日韩成人中文字幕| 五月丁香激情在线| 日韩一区二区三区视频| 欧美性爱18| 久草资源在线| 久久伊人综合| 人人肏肏人人| 亚洲黄色免费观看| 欧美拍拍| 蜜桃视频网站在线观看| 高清无码在线观看免费| 精品无码免费视频| 国产成人免费在线观看| 在线观看亚州| 正在播放JUQ-878木下凛凛子| 国产欧美精品成人在线观看 | 91人妻人人澡人人爽人人精 | 性欧美XXXX| seseav| 国产一区二区不卡亚洲涩情| 亚洲精品一区二三区不卡| 影音先锋无码专区| 五月丁香久久| 大香蕉中文网| 一区二区三区四区视频| 色婷婷av在线| 精品久久免费| 亚洲综合视频在线观看| 超碰91人人操| 91热视频| 五月天一区二区| 欧美日韩一区二区三区四区五区六区 | 亚洲激情综合网| 黑人在线视频| 狠狠干亚洲视频| 爆操熟女| 少妇搡BBBB搡BBB搡打电话| 俺来也俺去了| 激情五月婷婷综合| 视频在线a| 黑人巨大精品欧美| 特猛特黄AAAAAA片| 97精品在线视频| 草久伊人| 2026无码视频| 亚洲精品国产AV| 少妇bbb搡bbbb搡bbbb| 中字幕视频在线永久在线观看免费| 影音先锋成人资源网| 国产91探花精品一区二区| a色视频| 国产精品一区二区毛片A片婊下载| 人人操人人网站| xxx综合网| 狠狠操在线观看| 欧美A视频在线观看| 免费黄色三级片| 日韩在线女优天天干| 欧美精产国品一二三区| 亚洲日韩精品成人无码专区AV| a天堂8在线资源| 草久伊人| 欧美日韩四区| 男女av在线| 欧美精品第一页| 午夜三级无码| 老女人操屄| 竹菊影视一区二区三区| 69人妻人人澡人人爽人人精品| 九九亚洲精品| 亚洲秘无码一区二区三区观看| 翔田千里无码播放| 91人妻中文字幕在线精品| av婷婷五月天| 黄色不卡视频| 国产不卡精品| 五月天中文字幕| 三级内射| 蜜桃AV在线观看| 欧美性猛交一区二区三区| 国产TS丝袜人妖系列视频| 小明看台湾成人永久免费视频网站 | 一级欧美| 免费日本黄色| 久久免费视频,久久免费视频| 黄色的视频网站| 婷婷五月在线| 免费人妻视频| 91人人人人| 国产18水真多18精品| 中文字幕视频在线观看| 五月丁香综合激情| 伊人福利导航| 免费无码又爽又黄又刺激网站| 手机AV免费| 激情婷婷 | 欧美男人天堂| 欧美成人黄色| 麻豆传媒在线播放| 99九九热| 亚洲黄色免费看| 欧美一级A片在免费看| 日韩无码中文字幕| 亚洲国产精品视频| 欧美男人天堂| 成人午夜无码视频| 毛片毛片毛片毛片毛片毛片| 91成人看片| 51妺嘿嘿午夜福利在线| 在线免费观看成人网站| 伊人久久久久久久久久久| 日韩高清精品在线| 亚洲欧美在线综合| 性爱无码| 婷婷综合五月天| 日韩永久免费| 亚洲毛片网站| 成人精品免费无码毛片| 毛片动态图| 久久久久久久伊人| 特级西西人体444www高清| 永久在线| 另类老妇奶性BBWBBwBBw| 另类老妇极品BBWBBw| 亚洲成人精品AV| 精品人妻一区二区三区蜜桃| 日韩无码高清免费| 国产亚洲精品成人a| 操屄在线观看| 又色又爽| 婷婷丁香五月亚洲| 免费在线观看黄片视频| 黄网在线观看视频| 欧美一级片免费看| 污污污污污www网站免费民国| 欧美第一页| 亚洲中文视频| 欧美色伊人| 操干视频| 人妻无码91| av国产精品| 青青草国产在线视频| 特级西西444www| 毛片av在线| 无码日韩成人| 伊人久久久久久久久久久| 婷婷五月亚洲精品AAA片在| 4388亚洲最大| 精品成人网| 欧美日韩视频一区二区| 国产高清激情| 亚洲无码高清视频| 成人123区| 大香蕉av在线| 国产一级A片| 手机看片福利一区二区| 亚洲精品视频在线| 国产中文字幕亚洲综合欧美| 777av| 97人妻精品黄网站| 综合网亚洲| 无码免费婬AV片在线观看| 爱搞逼综合网| 人人操人人爽| 91精品酒店视频| 午夜福利h| 456成人| 人妻人玩| 久久人妻无码| 欧美特黄AAAAAA| 一区二区三区四区不卡| 激情A| 香蕉在线播放| 一级欧美黑人大战白妞| 中文字幕无码人妻在线视频| 黄色无码电影| 青青艹在线视频| 在线视频第一页| 欧美日韩在线观看视频| 亚洲天堂在线观看网站| 男女免费av| 国产精品国产三级国产| 国产成人A∨| 日韩黄色电影网| 又色又爽| 黄色片一级| 六月色婷婷| 雾水情缘电影港片| 成人毛片一区二区三区| 插逼免费视频| 黑人亚洲娇小videos∞| 欧美日韩人妻| 骚逼综合| 白洁91视频| 在线视频三区| 国产精品秘ThePorn| 91精品丝袜久久久久久久久粉嫩| 日韩性做爰免费A片AA片| 伊人小视频| 精品人妻中文字幕| 夜夜嗨av无码一区二区三区 | 亚洲热在线| 亚洲中文字幕人妻。| 欧美AAAAAAAA| 色天使av| 国产高清在线视频| 免费一级片视频| 91视频美女| 色视频在线观看免费| 91干干| 中文字幕亚洲一区| 亚洲无码视频观看| 看90后操B| 国产精品系列视频| 麻豆精品传媒2021md| 水果派中文解说AⅤ| 国产乱视频| 日韩www| 成人性生交片无码免费看人| 中文资源在线a中文| 日韩美女视频19| 日本一区二区网站| 成年网站| 91足浴店按摩漂亮少妇| 国产免费av片| 操屄视频在线观看| 毛片二区| 俺去啦俺去也| 美日韩一区二区三区| 91人人妻人人澡人人爽| 1插菊花综合网| 日日干网| 国产一卡二卡在线| 午夜一级性爱片| 中韩日美免费看的电影| 影音先锋资源站| 91视频成人版一区二区| 久久精品久| 在线a视频| av资源播放| 日韩av免费在线| 一区二区三区网| 国产三四区久久| 91久久无码一区人妻A片蜜桃| 91超碰久久在线| 亚洲精品久| 18禁AV在线| 草b视频| 中文人妻av| 婷婷五月天大香蕉| 无码专区一区二区三区| 啪啪啪网址| 影音先锋av中文字幕| 蜜挑视频一区二区三区| 动漫一区二区| 三级片在线看| 欧美成人网站视频| 亚洲无码精品一区| 69精品视频| 三级影片在线观看性| 微拍福利一区| 操b免费| 3d动漫精品H区XXXXX区 | 国产精品久久久久久久久久久久久久久 | 国产成人中文字幕| 蜜臀999| 亚洲AV无码黑人专区| 在线免费观看一区| 激情五月综合网| 丁香六月久久| 搡BBBB搡BBB搡Bb| 久久AV无码| 五月婷婷网站| 狠狠干狠狠操| 婷婷五月天免费视频| 中文字幕区| 另类老妇奶性生BBwBB| 黄色在线不卡| 亚洲资源站| 欧美成人手机在线观看| 国产精品无码7777777| 操B网站| 国产成人精品777777| 91在线亚洲| 久久8| 无码在线免费| 老师搡BBBB搡BBB| 无码人妻一区二区一牛影视| 日韩不卡视频在线观看| 成年人观看视频| 东北A片| 五月天堂网| 黄色电影视频在线| 二区无码| 色婷婷小说| 操逼日爱| 日韩一级片在线播放| AV三级无码| 欧美性爱天天操| yy午夜福利| 探花AV| 大香蕉伊人电影| 亚洲精品人伦一区二区| 女人特级毛片18| 国产三级三级三级| 欧美特级黄片| av在线资源观看| 国产乱伦影片| 午夜在线观看视频18| 午夜ww| 日韩人妻精品无码久久边| 奇米色婷婷| 91人妻人人澡人人爽人人精吕| 视频一区18| 自拍偷拍福利视频网站| 肏屄在线视频| 黄色三级A片| 看操逼视频| 丰满人妻一区二区三区四区54 | 免费国产A片| 国产主播精品| AV免费在线播放| 国产在线欧美| 伊人网视频在线| 欧美黄色免费在线观看| 色婷婷丁香五月| 久久AV秘一区二区三区水生| 日本三级片中文字幕| 无码专区一区二区三区| 中文在线观看免费视频| 日韩AV电影网| 国产精品一级片| 麻豆传媒在线| 精品无码久久久久久久久app| 免费看操片| 午夜激情国产| 韩国高清无码60.70.80| 美女肏逼| 成人亚洲综合| 久久99高清视频| 五月丁香成人网| 国产91视频在线观看| 欧美日韩四区| 国产激情网站| 成人区人妻精品一| 亚洲中文字幕无码在线观看| 色逼视频| 午夜福利aaa| 91av在线电影| 91日韩在线| 一级片a片| 色99网站| 黄片免费大全| 99久久丫e6| 二区无码| 国产熟妇毛多久久久久一区 | 北条麻妃久久久| 国产毛片一照区| 免费的AV| 欧洲成人午夜精品无码区久久| 国产女人免费| 大香蕉伊人在线观看| 国产精品免费网站| youjizzcom日本| 亚洲精品一二三| 国产精品一区网站| 国产777777| 国产三级AV在线| 国产精品乱码一区二区三区| 日韩视频一区| 亚洲国产精品久久| 男人天堂大香蕉| 欧美成人综合一区| 男女网站在线观看| 五月婷婷影院| 亚洲日韩成人在线| 最新中文字幕AV| 久久黄色免费看| 视频二区中文字幕| 免费黄色av网址| 伊人成人网站| 中文字幕AV在线观看| 伊人网av| 中文字幕一级A片高清免| 久久久久久久久久久久久久久久久久免费精品分类视频 | 成人午夜毛片| 亚洲综合成人在线| 亚洲无码门| 黄片AAA| 欧美狂操| 成人免费视频国产在线观看| 任你爽在线视频| 西西444www无码精品| 国产视频1区| 色猫咪av| 婷婷成人综合网| 成人黄色毛片视频| 日逼大片| 男人资源网| 69精品免费视频| 日韩精品一区二区三区四区蜜桃视频 | 亚洲秘一区二区三区-精品亚洲二区- | 老司机精品视频在线观看| 91视频网站| 天堂中文在线视频| 伊人久久免费视频| 精品无码一区二区三区蜜桃李宗瑞 | 四季AV一区二区夜夜嗨| 亚洲免费观看高清完整版在va线观看 | 欧美国产综合| 亚洲国产另类无码| 88AV在线观看| 中字幕视频在线永久在线观看免费| 精品国产一区二区三区久久久蜜月 | re久久| 国产免费av在线观看| 国产有码| 国产精品色8| 亚洲色老板| 中文字幕人妻在线中文乱码怎么解决 | AV口爆| 中文字幕欧美日韩| 成人黄片视频| 国产精品无码成人AV在线播放| 美女扣逼网站| 黄色成年人视频在线观看| 91人妻人人澡人人爽| 一级黄色电影免费看| 天堂资源中文在线| 亚洲一区二区三区在线视频| 久久久国产精品在线| 少妇性受XXXX黑人XYX性爽| 亚洲激情黑人| 18岁毛片| 特級西西444WWw高清大膽| 精品码A片18| 天天操欧美| 老太老熟女城中层露脸60| 国产在线久久久| 又a又黄高清无码视频| 三级精品| 北条麻妃精品| 内射视频免费观看| 亚洲三级黄色| 青娱乐国产在线视频| 亚洲欧美国产视频| 五月天成人小说| 欧美综合第一页| 在桌下含她的花蒂和舌头H视频| 亚州一级成人片| 激情av在线观看| 中国女人如毛片| 黄片网站在线观看| 免费A片视频| 欧美mv日韩mv国产网站| 韩国无码视频| 九九九成人视频| www.黄片| 日韩精品第一页| 老女人日逼| 久青操| 操b视频免费看| 亚洲无码手机在线| 国产精品毛片VA一区二区三区| 大香蕉伊人影视| 日韩无码三级视频| av官网| 久久久久国产精品视频| www日本色| 韩国一区二区在线观看| 亚洲男女啪啪视频| 大鷄巴成人A片| 九九九九色| 伊人福利导航| 亚洲精品三级片| 亚洲色图一区二区三区| 日韩欧美分区视频| 亚洲精品中文字幕无码| 欧美日韩国产精品| ⅴA日本成人| 中文字幕播放| 欧美一级特黄A片免费观看| 亚洲色成人网站www永久四虎| 成人午夜视频精品一区| 日逼操| 影音先锋三区| 免费内射网站| 拍真实国产伦偷精品| 中文字幕麻豆| 精品操逼| 浮力影院久久| 四虎亚洲| 中文字幕无码成人| 18禁无码永久免费网站大全| 欧美性爱五月天| 一本色道久久综合熟妇| 欧美午夜网站| 日韩AV在线免费观看| 天堂网视频| 精品久久免费一区二区三区| 大香蕉综合网站| 精品欧美视频| 国产一级特黄A片| 夜夜骑婷婷91| 日韩在线国产| 丁香五月网站| 日韩色网站| 91在线看| 日韩一区二区免费看| 久久福利视频导航| 丁香五月六月婷婷| 国产在线a| 亚洲小视频| 婷婷中文| 91人妻无码精品一区二区三区| 欧美激情视频一区二区| 91乱子伦国产乱子伦!| 亚洲中文字幕在线观看视频网站| 中文无码日本高潮喷水| 国产探花自拍| 欧美视频a| 国产综合第一页| 欧美aaaaaa| 日逼黄色视频| 国产91精品看黄网站在线观看| 一区二区三区在线免费观看| 在线观看av网站中文字幕| 无码人妻一区二区三一区免费n狂飙 | 婷婷内射| 精品蜜桃一区二区三区| 超碰a片| aaa成人| 亚洲人妻无码在线| 无码国产精品一区二区| 自慰喷水在线观看| 午夜福利91| 成人午夜免费视频| 91宗合| 一级黄色小视频| 男人的天堂在线视频| 一级黄色av| 亚洲码成人| 肏屄免费视频| 91精品国产人妻| 国产又爽又黄免费网站在| 婷婷丁香五月激情| 婬乱欧美一二三区| 翔田千里91| 亚洲精品在线视频| 亚洲美女网站在线观看| 免费成人三级片| 成人网站免费在线| 亚洲无码一区二区三| 超碰久操| 婷婷色综合视频二区| 操逼逼片| 九九国产精品| 国产成人综合亚洲| 午夜九九九| 免费爱爱视频| 影音先锋成人在线视频| 蜜臀av一区二区| 午夜黄片| A级片网站| 国产无码激情| 亚洲精品乱码在线| a天堂8在线资源| 婷婷丁香五月激情一区综合网 | 久操B网| 国产真实乱婬A片三区高清蜜臀 | 69毛片| 亚洲黄色视频在线观看网站| 国产精品96久久久| 欧美色图狠狠操| 国产五月婷婷| 18禁片网站| 五月天婷婷导航| 超碰199| 久久综合操| 黄片免费大全| 爱搞视频| 乌克兰毛片| 国产日日日| 一区二区视频在线观看| 五月色婷婷综合| 国产一卡二卡在线观看| 久久久桃色| 操屄网站| 精品一区国产探花| 日本AⅤ电影| 日本不卡一区二区| 天天干天天日天天干天天日| 黄片免费看视频| 精品视频久久久久久| 中文字幕在线免费播放| 国产乱伦不卡| 欧美高清无码在线观看| 色婷婷激情五月天| 日本三级黄色| 久久人精品| 日韩精品一区二区三区中文在线| 国产欧美日韩| 亚洲激情无码视频| 一本大道香蕉av久久精东影业| 成人做爰黄A片免费| 天堂中文字幕在线观看| 亚洲中文AV在线| 成人无码免费| 免费伊人大香蕉| 中文字幕综合网| 久久精品在线播放| www.色999| 国产AA片| 黄片免费无码| 无码狠狠躁久久久久久久91| 91一级A片在线观看| 亚洲性爱av| 国产乱╳╳AⅤ毛片| 成人无码视频| 日韩无码内射| 日韩无码二级| 伊人999| 亚洲日本三级| 亚洲一级无码| 影音先锋色av| 动漫日逼| 在线观看的av| 操B电影| 精品中文字幕在线观看| 欧美婬乱片A片AAA毛片地址| 新狠狠干| 亚洲天堂综合网| 国产一级二级片| 国产香蕉视频| 黄色网址在线免费观看| 超碰C| 中文字幕av无码| 青娱乐免费视频| 婷婷开心色四房播播免费| 日韩肏逼| 在线视频久| 91熟女首页| 在线中文av| 国产久久久久久久久| 天天操嫩逼无套视频| 国产无码二区| 天天拍夜夜爽| 中文字幕在线观看av| chinese高潮老女人| 吴梦梦《女教师时间暂停》| 日韩AⅤ| 日本成人免费| 国产一级黄片| 国产91在线亚洲| 国产一区二区三区免费观看 | 欧美性生活| 中文字幕精品无码一区二区| 在线观看精品视频| 久久精品水多多www| 成人精品久久久| 国产探花| 毛片A片免费看| 男女嫩草视频| 色婷婷AV一区二区三区软件| 91欧美性爱| 激情A| 色老板在线观看| 亚洲欧洲成人在线| 国产精品无码激情| 国产AV高潮| 国产一级a毛一级a| 亚洲久久久久久| 西西4444大胆无码视频| 91香蕉国产成人App| 亚洲一区二区视频| 69视频国产| 日比视频网站| 日韩在线视频二区| 朝鲜性感AV在线| 巜人妻初尝按摩师BD中字| 中文无码日本一级A片人| 久久精品人人| 青青草手机视频在线| 成人自拍偷拍视频| 无码在线观看免费视频| 久久都是精品| 欧美日韩精品一区二区三区| 在线免费观看黄色电影| 91国产在线播放| 日韩在线观看免| 黄色大片AV在线| 婷婷精品视频| 亚洲黄色小视频| 日韩中文字幕精品| 青青草视频91| 大香焦草久| 丁香五月婷婷五月| 国产女人18毛片水真多18精品| H网站在线观看| 综合激情av| 四川少妇BBB凸凸凸BBB安慰我| 无码狠狠躁久久久久久久91| 免费成人黄色| aaa在线观看| 青娱乐国产精品一区二区| 99这里只有精品| 微拍福利一区| 99re超碰| 亚洲AV无码成人H动漫| 伊人日日| 国产成人一区二区| 色婷婷狠狠| 亚洲中文字幕影院| 亚洲中文字幕不卡| 强伦轩一区二区三区在线观看| 11孩岁女精品A片BBB| 91视频在线看| 成人网站免费在线| 日本成人精品| 黄色一级免费看| 欧美久久久久久| 亚洲日韩免费| 北条麻妃久久久| 黄色网址在线观看视频| 黑人av在线观看| 少妇BBBBBB| 四川妇BBB桑BBB桑BBB| 亚洲AV无码成人精品| 日韩黄色一级视频| 超碰在线人人| 强伦轩一区二区三区在线观看| 国产精品一级A片| 人人爽亚洲AV人人爽AV人人片| 在线二区| 九九色视频| 双飞少妇| 中韩无码| 无码视频一区| 日本中文字幕在线视频| 国产熟妇婬乱A片免费看牛牛| 久久久久一区| 国产成人自拍视频在线观看| 无码AV电影在线观看| 亚洲自拍天堂| 99re热在线视频| 欧美久久一区二区三区四区视频 | 国产伦子伦一级A片在线| 日韩精品无码一区二区三区| 午夜AV福利影院| 艹B视频| 国产精品麻豆视频| 三级无码AV| 毛片69| 亚洲高清无码免费在线观看| 中文字幕免费AV| 亚洲最新视频| 黄色成人视频网站在线观看| 自拍一区在线观看| 日韩一区二区三免费高清在线观看|