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

Python慢,為啥還有大公司用?

共 9442字,需瀏覽 19分鐘

 ·

2020-06-17 23:20




來自:簡書,作者:我愛學python ???鏈接:

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

前言

PyCon 是全世界最大的以 Python 編程語言 為主題的技術大會,大會由 Python 社區(qū)組織,每年舉辦一次。在 Python 2017 上,Instagram 的工程師們帶來了一個有關 Python 在 Instagram 的主題演講,同時還分享了 Instagram 如何將整個項目運行環(huán)境升級到 Python 3 的故事。本文為該次演講的內容摘要,由 Python 愛好者朱雷撰寫。
Instagram 是一款移動端的照片與視頻分享軟件,由 Kevin Systrom 和 Mike Krieger 在 2010 年創(chuàng)辦。Instagram 在發(fā)布后開始快速流行。于 2012 年被 Facebook 以 10 億美元的價格收購。而當時 Instagram 的員工僅有區(qū)區(qū) 13 名。如今,Instagram 的總注冊用戶達到 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)定和成熟的技術之一。時至今日,即使已經(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ù)庫分片技術)。
  • 手動關閉 GC(垃圾回收)來提升 Python 內存管理效率,他們同樣也寫過一篇博客來說明這件事情:Dismissing Python Garbage Collection at Instagram。
  • 在位于不同地理位置的多個數(shù)據(jù)中心部署整套系統(tǒng)。

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

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

如何提升運行效率

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

為什么要升級到 Python 3

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

正式遷移到 Python 3

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

遷移過程的技術問題

Instagram 在遷移到 Python 3 時碰到很多問題,下面是最典型的幾個:Unicode 相關的字符串問題Python 3 相比 Python 2 最大的改動之一,就是在語言內部對 unicode 的處理。在 Python 2 中,文本類型 (也就是 unicode) 和二進制類型 (也就是 str) 的邊界非常模糊。很多函數(shù)的參數(shù)既可以是文本,也可以是二進制。但是在 Python 3 中,文本類型和二進制類型的字符串被完全的區(qū)分開了。于是,下面這段在 Python 2 下可以正常運行的代碼在 Python 3 下就會報錯:
mymac?= hmac.new('abc') TypeError: key: expected bytes or bytearray, but got?'str'
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tQT44Q0M-1570179360052)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
解決辦法其實很簡單,只要加上判斷:如果 value 是文本類型,就將其轉換為二進制。如下所示:
'''
遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:尋找有志同道合的小伙伴,
互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''

value =?'abc'if?isinstance(value, six.text_type): value = value.encode(encoding='utf-8') mymac = hmac.new(value)
但是,在整個代碼庫中,像上面這樣的情況非常多。作為開發(fā)人員,如果需要在調用每個函數(shù)時都要想想:這里到底是應該編碼成二進制,或者是解碼成文本呢?將會是非常大的負擔。
于是 Instagram 封裝了一些名為 ensure_str()、ensure_binary()、ensure_text() 的幫助函數(shù),開發(fā)人員只需對那些不確定類型的字符串,使用這些幫助函數(shù)先做一次轉換就好。
mymac?= hmac.new(ensure_binary('abc'))
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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 運行的服務進行序列化后存入 memcache。而反序列化的過程卻是由 Python 2 進行,那代碼運行時就會出現(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 中,很多內置函數(shù)被修改成了只返成迭代器 Iterator:
map()?filter() dict.items()
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GLVPUDc0-1570179360059)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
迭代器有諸多好處,最大的好處就是,使用迭代器不需要一次性分配大量內存,所以它的內存效率比較高。但是迭代器有一個天然的特點,當你對某個迭代器做了一次迭代,訪問完它的內容后,就沒法再次訪問那些內容了。迭代器中的所有內容都只能被訪問一次。在 Instagram 的 Python 3 遷移過程中,就因為迭代器的這個特性被坑了一次,看看下面這段代碼:
'''
遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:尋找有志同道合的小伙伴,
互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''

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 源文件。當他們把運行環(huán)境切換到 Python 3 后,一個奇怪的問題出現(xiàn)了:CYTHON_SOURCES 中的第一個文件永遠都被跳過了編譯。為什么呢?
這都是迭代器的鍋。在 Python 3 中,map() 函數(shù)不再返回整個 list,而是返回一個迭代器。于是,當?shù)诙写a生成 builds 這個迭代器后,第三行代碼的 while 循環(huán)迭代了 builds,剛好取出了第一個元素。于是之后的 pending 對象便里面永遠少了那第一個元素。這個問題解決起來也挺簡單的,你只要手動的吧 builds 轉換成 list 就可以了:
builds?= list(map(BuildProcess, CYTHON_SOURCES))
但是這類 bug 非常難定位到。如果用戶的 feeds 里面永遠少了那最新的第一條,用戶很少會注意到。
字典的順序看看下面這段代碼:
>>> testdict = {'a': 1, 'b': 2, 'c': 3}>>> json.dumps(testdict)
它會輸出什么結果呢?
# 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 的結果是完全不一樣的。甚至在 3.5.1 中,它會完全隨機的返回兩個不同的結果。Instagram 有一段判斷配置文件是否發(fā)生變動的模塊,就是因為這個原因出了問題。這個問題的解決辦法是,在調用 json.dumps 傳入 sort_keys=True 參數(shù):
>>> json.dumps(testdict, sort_keys=True)'{"a": 1, "b": 2, "c": 3}'

遷移到 Python 3.6 后的性能提升

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

完美切換

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

Instagram 帶給我們的啟示

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

關注戀習Python,Python都好練


推薦閱讀:

Python問:年輕人,你渴望力量嗎?(附:Python詳細代碼)

手把手教:Pycharm如何打斷點?

霸榜 GitHub:去你丫的算法!


好文章,我在看??

瀏覽 80
點贊
評論
收藏
分享

手機掃一掃分享

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

手機掃一掃分享

分享
舉報

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 91你懂的| 久久婷婷五月丁香| 人人插人人澡| AV天堂影视在线观看| 欧美、日韩、中文、制服、人妻| 成人网站av| 青娱乐老视频| 日韩免费小视频| 精品色哟哟| 影音先锋91视频| 亚洲无人禁区| 亚洲Japanese办公室制服| 操逼欧美| 内射少妇18| 大香蕉精品视频| 91人人看| 黄色电影a片| 日韩无码少妇| 色撸撸在线视频| 欧美视频自拍| 国产a毛一级,a毛一级| 国产a一级a毛一级视频| 亚洲AⅤ欧美AⅤ| 一插菊花综合网| 国产精品秘久久久久久久久| 欧美黄色性爱视频| 永久免费视频| 黄片高清免费| A级毛片在线观看| 激情小说五月天| 日韩中文字幕无码中字字幕| 粉嫩小泬BBBBBB免费看| 欧美日韩久久久| www.午夜福利| 亚洲成人精品一区| 欧美成人午夜影院| 国产精品51麻豆cm传媒| 日本a一级片| 亚洲猛男操逼欧美国产视频| 日欧美美女逼| 精品一区二区三区四区| 伊人成人在线| 国产精品96久久久久久| 在线不卡视频| 伊人大香蕉在线视频| 天天干天天操天天干| www.国产精品| 老熟女-ThePorn| 成人三级片免费| 999国产精品| 国产无码一二三| 色老板在线免费观看| 抽插免费视频| 欧美亚洲日韩一区二区| 亚洲无码AV一区二区| 日本69AV| 日本黄色色情视频| 夜夜骚av.一区二区三区四区| 亚洲精品无码免费| 91爱搞在线| 成年网站| 中文字幕成| 动漫人物插画动漫人物的视频软件| 亚洲一道本在线| 国产亚洲综合无码| 久久久偷拍视频| 视频國产在线| 一区二区三区四区在线视频| 伊人偷拍视频| 不卡无码中文字幕| 99热精品2| 国产一区二区不卡视频| 九九re精品视频在线观看| 少妇搡BBBB搡BBB搡造水多,| 国产3p绿帽骚妻视频| 日逼高清无码| 中文字幕精品一级A片| 蜜臂AV| 一本道精品在线| 国产av二区| 91无码精品国产AⅤ| 人妻少妇偷人精品久久| 操人视频网站| 人妻天天爽夜夜爽| 狠狠狠狠狠操| 大地资源38页| 777视频在线观看| 不卡视频一区二区| 国产一区二区成人久久919色| 亚洲国产精品成人久久蜜臀| 欧美日韩99| 亚洲综合免费观看高清| 中文字幕+乱码+中文乱码www | 亚洲成人AV在线播放| 男人的天堂视频网站| 国产成人自拍在线| 艹逼视频网站| 人人操操| 无码-ThePorn| 精品无码产区一区二| 草久美女| 亚洲天堂2014| 人人澡人人爽欧一区| 加勒比一区二区| 18精品爽视频| 一本一道波多野结衣潮喷视频| 亚洲AV无码蜜桃| 婷婷伊人中文字幕| 超碰婷婷| 久久婷婷网| 一级全黄120分钟免费| 无码免费视频在线观看| 青青草成人在线| 久草福利在线| 青草伊人网| 男人的天堂视频| 婷婷五月天亚洲| 日韩毛片网站| 国产精品无码无套在线| 亚洲AV成人片无码网站| 无码三级视频| 全部视频午夜寂寞| 三级无码av| 伊人日日| 亚洲综合成人在线| 国产内射久久| 欧美老女人性| 色福利视频| 玖玖爱在线精品视频| 不卡的一区二区| 青草青在线视频| 国产亚洲日韩在线| 成人三级片在线播放| 免费精品99| 黄片入口| 网址你懂的| 欧洲黑人成人A版免费视频| 亚洲色777| 日韩操逼图| 亚洲无码一区二区三区妃光| 免费在线观看黄色网址| 五月激情六月婷婷| 黄色视频a| 伊人综合视频| 日韩操操操| 在线国产小视频| 3D动漫啪啪精品一区二| 国产熟女乱伦| 天堂亚洲精品| 婷婷在线影院| 波多野结衣天堂| 精品亚洲一区二区三区四区五区| 99热精品国产| 成人亚洲视频| 一区二区三区四区无码视频| www.99| 亚洲日色| 亚洲福利天堂| 国产精品久久7777777精品无码| 亚洲中出| 激情综合网站| 老女人日逼视频| 国模私拍视频| 大鸡巴在线视频| 午夜操逼| 国产毛片18水真多18精品| 国产黄色片在线免费观看| 骚逼久久| 想要xx在线观看| 99精品视频免费看| 西西特级无码444www| 国产成人高清| 精品无码久久久久久久久app| 国产精品视频久久久久| 国产性爱免费视频| 欧美黄色精品| 亚洲日韩视频在线| 亚洲一卡二卡| 欧美成人18| 影音先锋AV资源网站| 国产无遮挡又黄又爽又色视频软件| 日韩免费视频一区| 日本女人牲交视频| 国产一级a毛一级a做免费高清视频| 一区二区三区毛片| 午夜亚洲国产一区视频网站| 精品一区二| 俺去啦俺去啦| 欧美成人在线视频网站| 九九九在线| 69无码| 永久免费不卡在线观看黄网站| 在线视频观看一区| 91香蕉网| 色欲av伊人久久大香线蕉影院| 天天摸天天操| 四虎2025在线51| 在线日韩一区二区| 99久re热视频精品98| 成人无遮挡| 精品A片| 欧美日韩狠狠操在线观看视频| 一本免费视频| 国产一区一区| 日韩精品三级| 国产AV一级| 健身房被教练3p喷水了| www.91在线视频| 12—13女人毛片毛片| 国产91在线观看| 午夜视频福利| 欧美不卡在线视频| 美女av网站| 久久国产精品一区二区三区| 无码专区视频| 褒姒AV无玛| 午夜免费无码视频| 无码AV动漫| 精品区| 人人妻人人爱| 日本v片| 欧美老女人操逼视频| 亚洲AV无码成人精品区大猫| 亚洲三级片在线播放| 精品少妇3p| 大香蕉偷拍视频| 一级Aa视频免费看| 日韩黄色小说| 亚洲精品一区中文字幕乱码| 在线观看a片| 亚洲AV无码日韩AV无码导航| 欧美成人性爱在线| 91足浴店按摩漂亮少妇| 成人在线观看网站| 色老板在线精品免费观看| 嫩BBB槡BBBB槡BBBB百度| 午夜福利免费| 操B在线| 一级黄色av| A片国产| 91精品国产偷窥一区二区| 97精品人妻| 91久久精品一区二区三区| 欧一美一婬一伦一区二区三区黑人-亚 | 亚洲久爱| 免费黄色一级电影| 无码视频一区| 蜜桃av秘无码一区二区三| 成人精品福利| 思思热在线观看视频| 搡BBBB搡BBB搡Bb| 色五月视频在线| 黄片大全在线免费观看| 久久嫩草精品久久久久| 美女大吊,网站视频| 中文人妻无码| 99综合视频| 欧美日韩在线免费观看| 狠狠搞狠狠操| 99亚洲视频| 大鸡巴在线视频| 成人黄色在线观看视频| 日韩久久人妻| 国产电影一区二区三区| 鸡巴在线观看| 日日操网| 一区二区三区电影高清电影免费观看 | 91色在线视频| 日韩欧美视频一区| 黄色操逼视频| 先锋影音资源一区| 欧美性综合| a在线观看| 91福利院| 黄色视频在线观看免费网站| 欧美精品99| 久草三级片| 亚洲人妻在线播放| 婷婷色在线| 91精品国产亚洲| 91AV成人| 欧美中文字幕在线| 日韩精品无码人妻| x88AV吊钟奶熟女| 影音先锋资源| 欧洲性爱视频在线观看| 蜜桃精品在线观看| 国产做受精品网站在线观看| 日韩人妻无码电影| 亚洲免费高清视频| 91人妻一区二区三区无不码超满 | 超碰77| 六月婷婷综合| 日韩无码中文字| 人人插人人爽| 五月婷婷激情| 欧美一级三级| 国产成人精品免高潮在线人与禽一| 超碰自拍私拍二区三区区| 免费日韩黄色电影| 色色9999| 中国毛片网站| 深爱激情网五月天| 18禁黄网站| 国产精品理论片| 91小仙女jK白丝袜呻吟| 精品人妻系列| 一区二区无码高清| 超碰69| 四房五月婷婷| 岛国无码在线观看| 国产又黄又大又粗的视频| 狠狠色婷婷777| 国产中文| 日本AⅤ电影| 五月丁香综合激情| 在线观看免费人成视频| 欧美午夜精品成人片在线播放 | 中文字幕第27页| 无码狠狠躁久久久久久久91| WWW.豆花视频精品| av无码免费| 国产福利视频在线观看| 蜜桃视频app| 久热精品在线观看| 亚洲成人77777| AV中文在线观看| 欧美午夜精品一区二区蜜桃| 色噜噜人妻丝袜无码影院| www.骚逼| 国产精品久久久久久久久久久久久久久久 | 青青草婷婷| 日本高清不卡视频| 免费AV成人| 亚洲一级性爱| 北条麻妃在线无码| 日韩成人大片| 色人人| 操操操综合| 欧美大香蕉在线| 婷婷另类小说| 青青AV| 亚洲五月六月| 91探花视频在线观看| 日韩老熟妇| 中日韩在线| 久久人妻无码中文字幕系列| av777777| 日本成人视频在线免费播放| 韩国三级HD中文字幕的背景音乐 | 亚洲欧美在线免费观看| 无码免费视频| 欧美人人爱| 日韩无码网| 人妻天天爽夜夜爽| 亚洲成人AV| 亚洲少妇免费| 欧美成人毛片AAAAAA| 刘玥精品国产一区二区三区| 久草人妻| 亚洲a电影| 国内久久| 不卡成人| 欧美伊人| 少妇无码在线观看| 国产一级美女操逼视频免费播放| 久久中文字幕视频| 天天干夜夜操| 无码内射在线播放| 国产AV无码区亚洲| 午夜福利1000| av三级片在线播放| 搡中国东北老女人视频| 久久国产精| 一本色道久久综合亚洲精品小说| 苍井空在线播放| 中文字幕在线观看高清| 久久艹骚逼| 91aaa在线观看| 欧美一区二区三区在线播放| 淫揉BBB揉揉揉BBBBB| 一区四区视频| 天天天操| 日韩欧美一区二区在线观看| 日韩性爱在线| Av黄色| 日韩人妻无码一区二区三区中文| 91人妻综合| 四川搡BBBBB搡BBB| 一级a一级a爱片免费免免高潮| 在线观看中文字幕视频| 国产理论电影在线观看| 啪啪啪AV| 日本成人视频| www.97av| 国产三四区久久| 欧美VA视频| 求毛片网址| 影音先锋日韩精品| 大色鬼在线天堂精品| 91中文在线| 久久福利视频导航| wwwA片| 日韩无码不卡视频| 草逼美女| 欧美a√| 大陆搡BBBBB搡BBBBBB| 亚洲日韩中文字幕在线| 欧美插菊花综合网| 亚洲中文在线观看| XXXXⅩHD亚洲人HD| 国产乱国产乱老熟300视频| 无码精品视频在线观看| 婷婷久久久久久| 狠狠色婷婷7777| 三级内射| 不卡一二三区| 国产资源在线观看| 久久久久久久久毛片| 日韩国产AV| 男人天堂大香蕉| 乱伦99| 亚洲无码视频在线看| 午夜福利123| 国产黄色免费| 欧美午夜精品久久久久久3D| 欧美成人不卡| 激情国产在线| 日日夜夜精选视频| 久草福利视频| 久久久久久久久久8888| 精品国产久久久久| 91在线无码| 成人无码免费视频| 欧美日韩不卡在线| 久久视频免费| 成人小说亚洲一区二区三区| 一本色道久久综合亚洲精东小说| 亚洲无码视频免费| 在线不卡无码| 91色欲| 日韩在线视频免费播放| 亚洲高清视频无码| 日韩A片无码ⅩXXXX| 亚洲无码AV一区二区| 色天使色天堂| 亚洲人在线| 日韩免费视频一区| 亚洲影院中文字幕| 骚逼综合| 国产在线色| 青青草免费在线视| 午夜成人免费视频| 免费无码毛片一区二区A片| 中文字幕在线观看1| 亚洲视频中文字幕在线观看| 综合AV在线| 亚洲小说图片AV在线| 亚洲午夜福利一区二区三区| 久久国产精品免费视频| 天天日天天草天天干| 久久久无码精品亚洲日韩男男| 少妇厨房愉情理伦BD在线观看 | 久久久黄色| 欧美另类综合| 91大熟女91大腚女人| 国产精品一级片| 日韩一级片免费看| 天天综合网久久| 五月天堂网| 国产口爆在线观看| 色婷婷激情在线| 日韩视频在线免费观看| 91丨九色丨熟女丰满| 91日韩高清| 日本一级按摩片免费观看| 中文字幕AⅤ在线| 日欧内射| 人妻丝袜蕾丝高跟双飞| 91亚洲视频在线观看| 国产精品99视频| 大鸡巴日小逼| 日本在线观看| 操逼电影网| 亚洲五月丁香婷婷| 91香蕉在线观看视频在线播放| 亚洲日韩第一页| 日韩无码高清一区| 成人做爰黄级A片免费看土方| 亚洲第一伊人| 91在线免费视频观看| 美女一级A片| 親子亂子倫XXXX| 在线观看的av| 又大又粗又爽| 中文字幕日韩美| 婷婷爱要操| 一级a片在线观看| 最新中文字幕在线观看视频| 在线观看亚洲无码视频| 亚洲秘无码一区二区三区欧美| 成人亚洲视频| 3D动漫精品啪啪一区二区竹笋| 亚洲久久色| 麻豆国产91在线播放| 色色色热热热| 国产一级a毛一级a毛观看视频网站www.jn | 91视频在线| 国产丝袜视频| 欧美午夜伦理| 激情综合网五月婷婷| 法国《少女日记》电影| 大香蕉精品视频| 天天操天天射天天日| 三级黄,色| 鸭子AV| 国产AV一级| 亚洲人妻一区二区| 免费看的操逼视频| 国产欧美一| 久久久久久国产精品| 一级A片免费视频| 18禁污网站| 中国操逼电影| 人妻少妇偷人精品无码免费| 亚洲一区中文字幕| 一道本视频| 毛片网站视频| 99伊人在线| 操碰在线视频| 日日夜夜av| 精品少妇一区| 国产亚洲99久久精品熟女| 一級免費网站| 日韩成人无码毛片| 99在线精品视频免费观看软件| 欧洲精品视频在线观看| 欧美三级欧美三级三级| 99久久久国产精品免费蜜臀| 日韩操比| 一区二区三区在线免费观看| 久久99久久99| 亚洲91成人| 国产精品无码成人AV电影| 人人爱人人操| 日韩中文字幕无码| 日本高清无码视频| 天堂a√在线8| 99天堂网| 在线操B视频| 中文字幕无码在线| 国产在线a| 亚洲AV小说| 青久久久| 人人射人人干| 精品国产精品国产精品国产网站| 免费观看黄色视频| 亚洲免费成人| 六月丁香网| 亚洲乱码中文字幕| 亚洲第一成人网址| 无码高清18| 高清操逼| 伊人大香蕉网| 青青草免费公开视频| 黃色级A片一級片| 91AV电影网| 粉嫩99精品99久久久久久特污| 蜜柚Av| 麻豆91免费看| 国产三级片视频| 夜夜草视频| 可以在线观看的av| ww毛片| 狼色视频| 国产精品2025| 成人123区| 成人黄色免费视频| 久热无码| 一本色道久久88加勒比| 微熟女导航| 亚洲精品秘一区二区三区在线观看| 在线观看日韩精品| 日韩最新高清无码| 国产精品无码永久免费A片| 亚洲黄色电影在线观看| 91玖玖| 欧一美一婬一伦一区二区三区黑人 | 免费在线黄色视频| 一个人看的www日本高清视频 | AV高清无码在线观看| 中文字幕一区二区三区人妻在线视频| 人妻无码| 欧美成人网站在线观看| av免费在线播放| 中文字幕第12页| 亚洲精品色| 精东影业AV无码精品| 日本免费黄| 亚洲一区二区免费视频| 嫩BBB槡BBBB槡BBBB| 久久精品v| 欧美精品A级片| 亚洲AⅤ| 亚洲日韩成人| 狠狠狠狠狠狠| 婷婷久久久久| 美女91视频网站| 欧美性爱一级| 色吧| jizz日韩| AV第一福利大全导航| 精品一区二区三区无码| 91.射| 成人无码高清在线观看| 久久黄色免费看| 欧美一区| 国产日韩欧美| 国产一级18片视频| 亚洲无码在| 人人干人人摸人人操| 91丨国产丨精品丨丝袜| 高清无码自拍| 欧美精品18| 群交无码| 中文字幕高清无码视频| 亚洲AV无码永久精品| 狼人一区二区| 黄色三级av| 亚洲天堂网在线观看视频| 成人影视在线免费观看| 99久久久精品久久久久久| 国产精品乱码一区二区三区| 艹逼逼视频| 国产成人精品亚洲男人的天堂 | 手机看片福利一区二区| 91国黄色毛片在线观看| 91大香蕉| 国产精品乱伦| 亚洲欧美在线视频| 内射在线播放| 欧美性爱在线观看| 成人超碰在线| 欧美一区二区三区视频| 久久一本| 大香蕉综合在线| 五月天激情婷婷| 久久久1| 3D动漫啪啪精品一区二| 西西人体WW大胆无码| 久久久久久| 人人干人人干| 99在线视频免费观看| 国产怡红院| 一区二区三区电影高清电影免费观看 | 有码在线播放| 成人视频123| 最新人妻| 久久久精品电影91| 青吴乐大香蕉| 性做久久久久久| 免费的黄色A片| 午夜午夜福利理论片在线播放| AV影院在线| 天天日天天日天天日| 国产色婷婷一区二区| 99大香蕉视频| 日本亚洲欧洲免费| 日本无码视频在线观看毒| 欧美熟妇性爱视频| 久99在线视频| 亚洲日本一区二区三区| 免费观看黄色一级片| www.操B| 看免费操逼视频| 精品一区二区三区无码| h视频免费看| av不卡在线观看| 亚洲一级黄色大片| 亚洲无码色色| 日产电影一区二区三区| 亚洲人妻在线播放| 中日韩在线| 夜夜夜撸| 青春草在线视频观看| 西西444www无码精品| 天堂网av在线| 日韩成人无码视频| 大香蕉一区二区三区| 啪啪啪啪网站| 狠狠干| 欧美色色色网| 操b免费| 91在线无码精品秘软件| 午夜福利AV电影| av天堂中文| 午夜视频网站| 欧美日韩亚洲一区二区| 91九色网| 特级西西444www精品视频 | 无码aa| 性爱无码| 女人的天堂AV在线观看| 怍爱视频| 日本在线不卡一区| 黄片WWW| 97人妻精品一区二区三区软件| 人人看人人艹| 久久婷婷国产麻豆91天堂| 日本少妇做爱| 91成人在线免费视频| 东京热一区二区三区| 水蜜桃一曲二区| 熟女无码| 一级黄色蜜芽视频| 丁香五月天婷婷久久| 国产成人电影一区二区| 九一成人网| 亚洲精品国产精品国自产| 青娱乐精品在线| 丁香五月婷婷五月天| 欧美精品日韩在线观看| 色色免费视频| 激情小说区| 中文字幕巨乱亚洲高清A片28| gogogo高清在线完整免费播放韩国 | 自慰喷水流白浆中文字幕| 国产真人一级a爱做片| 成人网站视频| 日韩一区二区无码视频| 青草一区| 国产一级片网站| 在线免费观看黄色网址| 国产精品国产三级国产专区52| 99爱在线| 国产亲子乱XXXXimim/| 亚洲美女操| 中文日韩字幕| 日韩美女视频19| 久久精品一区| 国产AV日韩AⅤ亚洲AV中文| 熟妇操逼视频| 成人午夜天堂| 日韩AV无码专区亚洲AV| 欧美性性生交XXXXX无码| 久久AV影院| 五月综合色| 国产A级毛片| 亚洲人妻免费视频| 亚洲精品美女视频| 黄色a片视频| 一级黄色网| 豆花AV| 尤物视频在线播放| 无码精品一区二区三区在线播放| 在线A片免费观看| 黄色录像毛片| 91AV免费观看| 欧美日韩在线一区| 亚洲综合在线视频| 国产精品国产自产拍高清AV| h在线| 在线观看中文字幕无码| 日韩啪啪啪网站| 人妻天天干| 亚洲性爱av| 高清无码免费视频| 国产一区免费观看| 亚洲高清无码视频大全| 免费无码婬片AAAA片老婦| 久久停停| 成人三级在线| 一区二区三区视屏| 91成人电影院| 欧美成年人视频| 无码av中文字幕| 国产视频中文字幕| 亚洲综合免费观看高清完整版在线 | 欧美在线一级片| 国产成人无码AⅤ片免费播放| 爱爱黄色视频| 成人久久久| 黄色免费高清视频| 精品素人在线| 欧美日韩成人片| 国产成人精品一区二区三区| 99精品视频免费观看| 夏目あきら被续侵犯7天| 欧美亚洲操逼视频| 天天摸天天日| 日韩无码性爱| 久久久久久久久久国产精品免费观看-百度| 2020人妻中文字幕| 性爱视频网页| 成年人免费视频网站| 北条麻妃无码在线播放| 免费成人黄视频| 精品无人区无码乱码毛片国产 | 手机AV网站| 嫩草在线播放| 成人欧美在线观看| 91色噜噜狠狠色婷婷| 18禁网址| 日欧一级片| 牛牛AV在线| 美女被操91| 操逼逼视频| 欧美va视频| 天天干妹子| 成人做爰黄AAA片免费直播岛国| AV毛片| 欧美日韩中文在线观看| 欧美日韩无码视频| 成人亚洲电影| 91白浆| 东北女人毛多又黑A片| 黄片免费高清| 婷婷久久久久| 97日韩天堂| 一级aa免费视频| 日韩精品在线免费| 激情色播| 北条麻妃无码一区三区| 97干在线| 亚洲日韩成人电影| 亚洲福利电影| 人妻丰满熟妇| 一本大道东京热AV| а√最新版天堂中文在线| 精品无码一| 三级片无码在线| 亚州av| 四虎久久| 亚洲欧美另类图片| 夜夜撸天天干| www欧美| 日韩成人激情| 好男人WWW社区在线视频夜恋| 五月天开心网| 亚洲精品无码在线观看| 梁祝艳谭A级毛片| 亚洲最大福利视频| 日韩电影免费在线观看中文字幕| 综合玖玖| 中文字幕一区二区三区在线观看 | 青青草原国产视频| 精品国产精品| 青青草免费在线视频| 免费观看一级黄片| 久久综合五月天| 好叼操| 欧美成人午夜影院| 日韩在线视频中文字幕码无| www.sese| 在线观看一区二区视频| 国产三级黄| 人人妻人人爽人人操| 国产在线成人视频| 无码爆操| 亚洲免费黄色| 老湿机91| 欧美日韩在线视频一区| 人人操大香蕉| 色婷婷视频一区二区| 精品无码视频在线| 成人午夜无码视频| 午夜免费播放观看在线视频| 免费在线观看AV网站| 老女人毛片| 羽月希在线播放| 免费伊人大香蕉| 五月天社区| 黄色免费a级片一级片| 99久久伊人| 成人视频一区二区三区| 在线观看免费欧美操逼视频| 日韩一区二区三区精品| 日本中文字幕电影| 亚洲AV综合色区无码国产播放| 青青青青青操| 六月婷婷综合| 天天操天天射天天爽| 欧美a片在线观看| 日韩视频在线免费观看| 久久久久亚洲AV无码成人片| 国产91精品在线观看| 日本爱爱视频| 99免费小视频| 波多野结衣视频在线| 丰满少妇一级片| 蜜桃AV无码一区二区三区| 影音先锋麻豆| 骚BBBB槡BBB槡BBB| 国产嫩BBwBBw高潮| 久热99| 暖暖av| 成人视频一区二区| 亚洲一级婬片A片AAAA网址| 一级A片亲子乱中文| 69久久|