• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Go與PostgreSQL的分布式鎖的設(shè)計(jì)

    2022-09-09 03:16:26齊洋原變青劉穎楊婷
    電子技術(shù)與軟件工程 2022年13期
    關(guān)鍵詞:開源進(jìn)程實(shí)例

    齊洋 原變青 劉穎 楊婷

    (北京經(jīng)濟(jì)管理職業(yè)學(xué)院 北京市 100102)

    1 引言

    互聯(lián)網(wǎng)的興起特別是大數(shù)據(jù)與云計(jì)算技術(shù)的發(fā)展,對傳統(tǒng)的軟件應(yīng)用也產(chǎn)生了極大的影響。在互聯(lián)網(wǎng)環(huán)境下,海量的數(shù)據(jù)和極大的并發(fā)訪問量若仍然以傳統(tǒng)的單機(jī)應(yīng)用的存儲處理模式,則其處理速度、訪問速度將變得極其緩慢,造成用戶體驗(yàn)極差。為了提高性能,有兩條路線,一種是提高單個(gè)服務(wù)器的性能,增加CPU、內(nèi)存等資源,另一種就是利用廉價(jià)的普通機(jī)器構(gòu)建分布式系統(tǒng)。第一種方式操作簡單,但是配置高的服務(wù)器價(jià)格昂貴,并且當(dāng)數(shù)據(jù)量和并發(fā)量到達(dá)一定程度,即使現(xiàn)有的最強(qiáng)勁單個(gè)服務(wù)器也難以承載這些壓力。所以,分布式系統(tǒng)成為了絕大多數(shù)互聯(lián)網(wǎng)公司的首選。由多個(gè)分布式應(yīng)用組成的分布式系統(tǒng)能夠承載互聯(lián)網(wǎng)級別的數(shù)據(jù)量和并發(fā)訪問,但是也帶來了資源管理上復(fù)雜性。如何讓多個(gè)分布式應(yīng)用能夠并發(fā)正確的訪問共享資源就是分布式系統(tǒng)中的一個(gè)問題。而解決這個(gè)問題就需要用到分布式鎖。

    2 分布式鎖的概念和應(yīng)用場景

    2.1 分布式鎖的概念與場景

    分布式鎖,就是分布式系統(tǒng)中的鎖。在一般的單體應(yīng)用本地部署的情況下,為解決共享資源被并發(fā)訪問的問題,引入了本地鎖。主流的編程語言都會支持本地鎖或同步,如Java 中的synchronized 關(guān)鍵字和ReentrantLock,Go 中的sync.Mutex 等。當(dāng)代碼塊或者變量由本地鎖控制時(shí),同時(shí)只能由一個(gè)線程訪問更改被控制的代碼塊或者變量。在分布式系統(tǒng)中,各個(gè)應(yīng)用是分布在不同的進(jìn)程中的并且部署在不同的機(jī)器上,此時(shí)再采用本地鎖來做并發(fā)訪問控制將無法滿足需求。而在分布式鎖是為了解決分布式系統(tǒng)中的共享資源被并發(fā)訪問的問題,所以它必然有分布式的特點(diǎn),而為了協(xié)調(diào)多個(gè)進(jìn)程能夠正確并發(fā)訪問資源,協(xié)調(diào)部分又需要是集中的。在本地鎖的應(yīng)用場景中,爭奪鎖的最小實(shí)體是線程,而分布式鎖的最小爭奪實(shí)體是進(jìn)程。

    在分布式系統(tǒng)的場景中,云計(jì)算平臺是一個(gè)當(dāng)前流行的應(yīng)用場景。前文提到,分布式系統(tǒng)是運(yùn)行在廉價(jià)的普通機(jī)器上,長時(shí)間的高負(fù)載的運(yùn)行,這些普通服務(wù)器將不可避免的出現(xiàn)一部分機(jī)器宕機(jī)的情況,同時(shí),應(yīng)用也會因?yàn)殚L時(shí)間的運(yùn)行而因?yàn)橄到y(tǒng)缺陷和內(nèi)存泄漏等原因出現(xiàn)崩潰然后重啟的問題。在出現(xiàn)以上問題期間,為提高用戶體驗(yàn),構(gòu)建云計(jì)算平臺的各個(gè)組件的功能和云平臺上運(yùn)行的各個(gè)應(yīng)用的訪問都不應(yīng)該出現(xiàn)問題,即這一類的錯(cuò)誤對于用戶來看應(yīng)該是不可見的。在用戶來看,系統(tǒng)是一直可用的,這就是系統(tǒng)的高可用性。系統(tǒng)的高可用性主要可以分為兩種模式,即activeactive 和active-standby。active-active 即一個(gè)應(yīng)用的多個(gè)實(shí)例都是處于運(yùn)行狀態(tài),多個(gè)實(shí)例共同處理用戶對于此應(yīng)用的所有請求。active-standby 則是一個(gè)應(yīng)用的多個(gè)實(shí)例只有一個(gè)處于真正的運(yùn)行狀態(tài)并由其處理所有的用戶請求,其他的實(shí)例則一直作為備選,當(dāng)運(yùn)行實(shí)例出現(xiàn)問題時(shí),備選實(shí)例中將有一個(gè)成為新的運(yùn)行實(shí)例。在active-standby 模式中,一般便是使用分布式鎖來實(shí)現(xiàn)一個(gè)運(yùn)行多個(gè)備選的狀態(tài)。多個(gè)實(shí)例通過爭奪分布式鎖,爭到的便是實(shí)際運(yùn)行實(shí)例,其他的為備選實(shí)例,以此實(shí)現(xiàn)高可用性。

    2.2 現(xiàn)有的分布式鎖的實(shí)現(xiàn)方式

    基于Zookeeper 的分布式鎖:

    Zookeeper 是一個(gè)開源的分布式應(yīng)用程序協(xié)調(diào)組件,是Google 的Chubby 的開源實(shí)現(xiàn),在著名的大數(shù)據(jù)軟件Hadoop 中為集群提供一致性服務(wù)?;赯ookeeper 的臨時(shí)有序節(jié)點(diǎn)可以實(shí)現(xiàn)分布式鎖。當(dāng)有客戶端進(jìn)程嘗試加鎖時(shí),Zookeeper 集群中與該鎖對應(yīng)的節(jié)點(diǎn)目錄下,將會生成一個(gè)唯一的瞬時(shí)有序節(jié)點(diǎn)。判斷進(jìn)程是否獲取到鎖的方式就是判斷當(dāng)前進(jìn)程是否是這些有序節(jié)點(diǎn)序號最小的那個(gè)。釋放鎖的時(shí)候,將這個(gè)瞬時(shí)節(jié)點(diǎn)刪除即可。Zookeeper 分布式鎖可以避免服務(wù)宕機(jī)而產(chǎn)生的鎖無法釋放,從而產(chǎn)生的死鎖問題。

    基于Redis 的分布式鎖:

    Redis 是Remote Dictionary Server 的簡寫,即遠(yuǎn)程字典服務(wù)器,是一個(gè)以C 語言開發(fā)的開源的支持網(wǎng)絡(luò),可以基于內(nèi)存也可持久化的日志型的Key-Value 數(shù)據(jù)庫,其提供了多種語言的開發(fā)接口。在很多的大型系統(tǒng)中作為緩存數(shù)據(jù)庫使用,其輕量、快速的特點(diǎn)深受開發(fā)者的歡迎。

    Redis 的分布式鎖主要使用其setnx、get 和getset 三個(gè)函數(shù)來實(shí)現(xiàn)。setnx(key)即Set if not exists,此函數(shù)具備原子性,如果key 不存在則可以設(shè)置value 并返回1;如果key 存在則設(shè)置失敗返回0。get(key)獲取對應(yīng)value 的過期時(shí)間;getset(key,newValue)也具備原子性,設(shè)置newValue 成功后會返回key 對應(yīng)的舊值。獲取鎖時(shí),調(diào)用setnx(key),返回1 表示成功獲取鎖,流程結(jié)束。返回0 表示沒有獲取鎖,則調(diào)用get(key)獲取值得過期時(shí)間oldExpireTime,與當(dāng)前時(shí)間比較,如果小于當(dāng)前時(shí)間表示鎖已超時(shí),可以獲取。然后算出新的過期時(shí)間newExpireTime,執(zhí)行g(shù)etset(key, newExpireTime),會返回key 值當(dāng)前的過期時(shí)間currentExipreTime。比較oldExipreTime 和currentExpireTime,如果相等,表示getset設(shè)置成功,成功獲取到鎖。如果不相等,表示鎖被別的進(jìn)程獲取到。獲取鎖流程失敗,過一段時(shí)間重試。當(dāng)鎖持有進(jìn)程釋放鎖時(shí),執(zhí)行delete(key)即可。

    3 相關(guān)實(shí)現(xiàn)技術(shù)

    3.1 PostgreSQL

    PostgreSQL 是一個(gè)強(qiáng)大的功能齊全的開源關(guān)系型數(shù)據(jù)庫系統(tǒng)。他誕生于1986年的美國加州大學(xué)計(jì)算機(jī)學(xué)院,初始是作為POSTGRES 項(xiàng)目的一部分。經(jīng)過三十多年的開發(fā)和應(yīng)用,它支持標(biāo)準(zhǔn)的SQL 語言并加入了很多其他的功能以確保數(shù)據(jù)能夠安全存儲,根據(jù)數(shù)據(jù)負(fù)載能夠靈活擴(kuò)展。它兼容所有的主流操作系統(tǒng),除SQL 的基本類型外還支持JSON、Key-value 等數(shù)據(jù)類型,在數(shù)據(jù)一致性、高并發(fā)、高可用、數(shù)據(jù)恢復(fù)、數(shù)據(jù)安全等方面都有極為出色的表現(xiàn),并且還有很多類似PostGIS 這樣的強(qiáng)大插件。PostgreSQL 的上述強(qiáng)大特性為其在世界范圍內(nèi)贏得了很高的贊譽(yù),也成為了很多開發(fā)者和機(jī)構(gòu)首選的開源關(guān)系數(shù)據(jù)庫系統(tǒng)。

    3.2 PostgreSQL顯式鎖(Explicit Locking)

    PostgreSQL 顯式鎖提供了一系列鎖定模式來控制應(yīng)用訪問數(shù)據(jù)表中的數(shù)據(jù),這在一些應(yīng)用需要細(xì)粒度的鎖定而使用標(biāo)準(zhǔn)的SQL 語句并不能達(dá)到目的的場景十分有用。其實(shí),執(zhí)行標(biāo)準(zhǔn)的SQL語句進(jìn)行操作也是調(diào)用了一系列的顯示鎖,只是調(diào)用的細(xì)節(jié)由PostgreSQL 隱藏,用戶不能進(jìn)行控制。本系統(tǒng)中主要使用了表級別的鎖(Table-level Locks)。這里只簡單介紹ACCESS EXCLUSIVE 模式。此模式將確保操作當(dāng)前數(shù)據(jù)庫事務(wù)的進(jìn)程是當(dāng)前唯一能訪問目標(biāo)表的進(jìn)程,其他所有的事務(wù)對目標(biāo)表的一切操作都將被阻塞。這樣,在分布式進(jìn)程獲取鎖的時(shí)候,多個(gè)進(jìn)程將不會因?yàn)椴l(fā)訪問得到不一致的結(jié)果。并且,當(dāng)一個(gè)事務(wù)獲取到顯示鎖后,隨著事務(wù)的結(jié)束,此顯示鎖也會自動釋放,因此應(yīng)用層面只需獲取鎖,而不必顯示地釋放鎖。

    3.3 Golang

    Golang(Go)是由谷歌公司與2009年開發(fā)的靜態(tài)編譯型編程語言。它兼容所有的主流操作系統(tǒng),語法簡單,只有25 個(gè)關(guān)鍵字,能直接編譯成可執(zhí)行文件。由于其在設(shè)計(jì)之初就考慮了高效的并發(fā)機(jī)制,不像很多其他的編程語言還需要開發(fā)者自己實(shí)現(xiàn)或者引入第三方的庫來支持并發(fā),Go語言在很多高并發(fā)、多線程的應(yīng)用場景都得到了廣泛的應(yīng)用,從一般的Web 開發(fā)到分布式系統(tǒng)、云計(jì)算、容器等。當(dāng)今開源軟件界炙手可熱的容器與容器編排軟件docker、kubernetes、knative 等都是由Go 語言開發(fā)的。而隨著容器技術(shù)目前已成為當(dāng)今各業(yè)界公司的標(biāo)配技術(shù),Go 語言也變得越來越流行,在編程語言的排行榜上也不斷上升。

    4 功能分析

    一個(gè)合格的分布式鎖應(yīng)具有以下功能與性能要求:

    (1)在分布式系統(tǒng)環(huán)境下,多個(gè)分布式進(jìn)程同時(shí)嘗試獲取鎖,最終只能有一個(gè)進(jìn)程成功地獲取鎖,成為鎖的持有進(jìn)程。

    (2)分布式鎖必須具備鎖失效機(jī)制。即鎖的持有進(jìn)程必須定時(shí)的刷新自己的持有記錄,以防止鎖持有進(jìn)程崩潰帶來的死鎖后果。當(dāng)一個(gè)鎖持有進(jìn)程超過規(guī)定時(shí)間仍未刷新持有記錄,則其他的嘗試進(jìn)程將有一個(gè)進(jìn)程成功獲取鎖,成為新的持有進(jìn)程。當(dāng)舊的持有進(jìn)程從崩潰狀態(tài)恢復(fù)之后,其將加入到嘗試獲取鎖的進(jìn)程中,以待當(dāng)前持有進(jìn)程釋放鎖或者超時(shí)未刷新持有記錄,嘗試獲取的各個(gè)進(jìn)程將有一個(gè)成功獲取,以此循環(huán)往復(fù)。

    (3)鎖的獲取過程是非阻塞的。即所有嘗試獲取鎖的進(jìn)程在調(diào)用獲取方法時(shí),將直接返回結(jié)果獲取到或者未獲取到,這些嘗試進(jìn)程不能被長時(shí)間阻塞在獲取過程。

    (4)當(dāng)鎖持有者正常退出時(shí),必須保證其成功釋放鎖。

    (5)獲取鎖和釋放鎖的過程要具有較高的性能,不能耗費(fèi)過多的資源和時(shí)間。

    5 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    5.1 數(shù)據(jù)庫設(shè)計(jì)

    本文分布式鎖所用的僅一張數(shù)據(jù)庫表lock,lock 表的設(shè)計(jì)如下:

    鎖的持有者名稱(owner),持有者持有鎖的時(shí)間戳(lock_timestamp),持有鎖的最長時(shí)間(ttl),其中持有者為表主鍵。

    owner 需要唯一標(biāo)識嘗試獲取鎖的應(yīng)用實(shí)例,這里一般應(yīng)用名稱加UUID 的方式來組成持有者名稱。UUID(universal unique Identifier)即通用唯一標(biāo)識符被定義為一個(gè)128 位的二級制數(shù),分為五段,一般用十六進(jìn)制標(biāo)識,段與段之間用減號進(jìn)行連接。UUID 是一個(gè)無規(guī)律的符號,每次調(diào)用生成方法均能生成一個(gè)與之前完全不重復(fù)的值,由此,在分布式系統(tǒng)中,其很適合用來作為標(biāo)識。

    5.2 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)

    分布式鎖系統(tǒng)需要一些配置項(xiàng)來定義數(shù)據(jù)庫連接,鎖獲取、持有和釋放的選項(xiàng)。

    yaml 形式的配置項(xiàng)示例如下所示:

    配置項(xiàng)中,TTL 為鎖的最大持有時(shí)間,RetryInterval 為嘗試獲取鎖的間隔時(shí)間。

    數(shù)據(jù)庫連接配置中,URL 為數(shù)據(jù)庫連接地址,MaxOpen Connections 為數(shù)據(jù)庫最大連接接數(shù)量;MaxIdleConnections為數(shù)據(jù)庫最大閑置連接數(shù)量;ConnectionMaxLifetime 為每個(gè)數(shù)據(jù)庫連接最長使用時(shí)間;ConnectionMaxIdleTime 為每個(gè)數(shù)據(jù)庫連接最大空閑時(shí)間。

    獲取鎖的詳細(xì)流程:

    (1)開啟PostgreSQL 數(shù)據(jù)庫事務(wù)。

    (2)獲取當(dāng)前鎖的狀態(tài):調(diào)用PostgreSQL 顯示鎖并使用Access Exclusive 模 式,LOCK TABLE lock IN ACCESS EXCLUSIVE MODE。查詢鎖狀態(tài),SELECT owner,lock_timestamp,ttl FROM lock LIMIT 1 FOR UPDATE NOWAIT。查詢的時(shí)候使用FOR UPDATE NOWAIT 鎖定查到的數(shù)據(jù)以防止其他進(jìn)程更改。使用NOWAIT 能確保當(dāng)有其他進(jìn)程鎖定數(shù)據(jù)集的時(shí)候此查詢不會阻塞等待鎖釋放,而是直接返回錯(cuò)誤標(biāo)識加鎖失敗。查詢鎖狀態(tài)需要注意的是如果lock 表中沒有數(shù)據(jù),PostgreSQL 的Go 庫會返回空結(jié)果錯(cuò)誤sql.ErrNoRows,所以此處應(yīng)判斷返回的錯(cuò)誤是否是sql.ErrNoRows。如果是此錯(cuò)誤,則查詢函數(shù)返回nil 值的鎖結(jié)果和nil 的錯(cuò)誤結(jié)果。如果是其他錯(cuò)誤,則返回nil 鎖結(jié)果和對應(yīng)的錯(cuò)誤。如果查詢成功,返回查到的鎖內(nèi)容和nil 錯(cuò)誤。關(guān)鍵代碼如下:

    (3)檢查查詢結(jié)果:如果錯(cuò)誤和鎖返回值都是nil,說明當(dāng)前沒有進(jìn)程持有鎖,表示此次獲取的是全新的鎖。如果錯(cuò)誤返回值不為nil,則表示此次獲取過程失敗,退出此次獲取過程,等待下一次獲取周期的到來。

    (4)正式獲取或刷新鎖:如果返回鎖的持有進(jìn)程owner和當(dāng)前進(jìn)程的owner 值不同,進(jìn)一步檢查返回的鎖是否已經(jīng)超時(shí),即檢查lock_timestamp 加上ttl 是否已經(jīng)超過現(xiàn)在時(shí)間,如果已經(jīng)超過,說明當(dāng)前持有進(jìn)程已經(jīng)超時(shí),此嘗試進(jìn)程將成為下一任鎖持有進(jìn)程,此過程將刪除當(dāng)前返貨鎖的記錄,然后確定嘗試進(jìn)程為下一任owner。這里檢查時(shí)間時(shí)需要注意一點(diǎn),就是PostgreSQL 數(shù)據(jù)庫服務(wù)器和Go 程序運(yùn)行的服務(wù)器很有可能不是同一臺,因此不同的服務(wù)器的時(shí)間可能出現(xiàn)差異,所以所有的時(shí)間均PostgreSQL 的時(shí)間為準(zhǔn),獲取時(shí)間使用PostgreSQL 的SELECT NOW() AT TIME ZONE‘utc’來實(shí)現(xiàn)。然后構(gòu)建新鎖的內(nèi)容,owner 為當(dāng)前嘗試進(jìn)程owner,獲取時(shí)間戳為PostgreSQL 當(dāng)前時(shí)間,ttl 為配置的TTL。將新鎖插入到lock 表中,插入成功之后表示獲取鎖成功,結(jié)束此次事務(wù),同時(shí)Access Exclusive 顯示鎖自動釋放。

    如果返回鎖的持有進(jìn)程owner 和當(dāng)前進(jìn)程的owner 值相同,表示嘗試進(jìn)程本身就是鎖持有進(jìn)程,直接進(jìn)入鎖刷新流程,更新鎖的lock_timestamp 字段為當(dāng)前時(shí)間,刷新流程結(jié)束,結(jié)束此次事務(wù),同時(shí)Access Exclusive 顯示鎖自動釋放。

    步驟(3)、(4)關(guān)鍵代碼如下:

    檢查鎖的狀態(tài):

    獲取鎖代碼:

    釋放鎖的流程:

    刪除lock 表中owner 為當(dāng)前進(jìn)程的記錄。

    應(yīng)用進(jìn)程引入鎖的方式:

    嘗試獲取鎖的各個(gè)進(jìn)程無論是否成功獲取到鎖,都要每隔配置項(xiàng)中的間隔時(shí)間RetryInterval 重復(fù)獲取/刷新鎖流程,以確保鎖的有效性。并且每個(gè)進(jìn)程在正常退出時(shí),都要嘗試釋放鎖。

    在獲取鎖的所有進(jìn)程中,獲取的過程須在其他所有功能模塊之前啟動,如果獲取鎖成功,則后續(xù)功能模塊依次啟動,此進(jìn)程開始正常工作。如果獲取失敗,此進(jìn)程將一直重復(fù)嘗試獲取鎖流程,后續(xù)模塊在獲取成功之前將不啟動。這樣,就實(shí)現(xiàn)了云計(jì)算平臺上多個(gè)應(yīng)用實(shí)例都是running 狀態(tài),但是只有一個(gè)實(shí)例真正工作,即active 狀態(tài);并且當(dāng)工作實(shí)例出現(xiàn)問題,如崩潰,假死等問題之后,其將失去鎖,然后會有新的應(yīng)用實(shí)例得到鎖,然后啟動后續(xù)模塊開始工作,令整個(gè)分布式系統(tǒng)始終有工作的實(shí)例,實(shí)現(xiàn)了分布式應(yīng)用的高可用性。

    6 結(jié)束語

    本文介紹了分布式鎖的概念與應(yīng)用場景,提出了分布式鎖的需求并基于Go 語言和PostgreSQL 數(shù)據(jù)庫設(shè)計(jì)并實(shí)現(xiàn)了分布式鎖。在當(dāng)前最流行的云計(jì)算容器編排平臺kubernetes中,因kubernetes 是基于Go 實(shí)現(xiàn)并提供了基于Go 的clientgo 開發(fā)庫,因此本分布式鎖的實(shí)現(xiàn)很適合運(yùn)行在kubernetes平臺上的Go 語言開發(fā)的應(yīng)用。開發(fā)完成后,筆者在kubernetes 平臺上開發(fā)應(yīng)用測試此鎖實(shí)現(xiàn),經(jīng)歷了kubernetes節(jié)點(diǎn)失效,某應(yīng)用實(shí)例內(nèi)存泄漏等多種錯(cuò)誤,此分布式鎖在上述情況下都能正常的工作,始終有應(yīng)用實(shí)例搶占到鎖并開始工作,有效的保證了應(yīng)用的高可用性。

    猜你喜歡
    開源進(jìn)程實(shí)例
    債券市場對外開放的進(jìn)程與展望
    中國外匯(2019年20期)2019-11-25 09:54:58
    五毛錢能買多少頭牛
    大家說:開源、人工智能及創(chuàng)新
    開源中國開源世界高峰論壇圓桌會議縱論開源與互聯(lián)網(wǎng)+創(chuàng)新2.0
    開源計(jì)算機(jī)輔助翻譯工具研究
    完形填空Ⅱ
    完形填空Ⅰ
    社會進(jìn)程中的新聞學(xué)探尋
    我國高等教育改革進(jìn)程與反思
    Linux僵死進(jìn)程的產(chǎn)生與避免
    日韩有码中文字幕| 高清毛片免费观看视频网站 | 狠狠狠狠99中文字幕| 亚洲视频免费观看视频| 国产精品1区2区在线观看. | 黄色毛片三级朝国网站| 国产精品一区二区免费欧美| 欧美激情久久久久久爽电影 | 久久久久视频综合| 在线观看舔阴道视频| 久热爱精品视频在线9| av中文乱码字幕在线| 欧美老熟妇乱子伦牲交| 亚洲七黄色美女视频| 在线观看日韩欧美| 精品一区二区三区av网在线观看| 亚洲午夜精品一区,二区,三区| 国产欧美日韩一区二区三区在线| 国产精品国产av在线观看| 人人妻人人澡人人爽人人夜夜| 视频在线观看一区二区三区| 丰满人妻熟妇乱又伦精品不卡| 欧美日韩瑟瑟在线播放| 美女午夜性视频免费| 丝袜美腿诱惑在线| 国产97色在线日韩免费| 久久人妻av系列| 中文字幕高清在线视频| 免费在线观看黄色视频的| 成人手机av| 宅男免费午夜| 国产aⅴ精品一区二区三区波| 男人操女人黄网站| 无限看片的www在线观看| 久久香蕉国产精品| 久久久久久久国产电影| 国产精品永久免费网站| 91成年电影在线观看| 国产高清视频在线播放一区| 精品无人区乱码1区二区| 午夜精品国产一区二区电影| 老鸭窝网址在线观看| 亚洲成人免费电影在线观看| 女警被强在线播放| 在线观看一区二区三区激情| 午夜免费鲁丝| 亚洲国产精品一区二区三区在线| 久久人人97超碰香蕉20202| 丝瓜视频免费看黄片| 亚洲熟妇中文字幕五十中出 | aaaaa片日本免费| 亚洲欧美日韩高清在线视频| 精品一区二区三区视频在线观看免费 | 黄色片一级片一级黄色片| 亚洲国产中文字幕在线视频| 国产在视频线精品| 国产精品久久久av美女十八| 高清黄色对白视频在线免费看| 免费在线观看亚洲国产| 亚洲欧美色中文字幕在线| 久久久水蜜桃国产精品网| 一边摸一边抽搐一进一小说 | 99热只有精品国产| 香蕉国产在线看| 成人影院久久| 精品国产亚洲在线| 国产欧美日韩精品亚洲av| 麻豆av在线久日| 成年女人毛片免费观看观看9 | 十八禁网站免费在线| 午夜福利在线观看吧| 欧美成人免费av一区二区三区 | 国产午夜精品久久久久久| 最近最新免费中文字幕在线| 制服人妻中文乱码| 亚洲精品在线美女| 国产午夜精品久久久久久| 亚洲熟女精品中文字幕| 久久热在线av| 久久久久久人人人人人| 大香蕉久久网| 亚洲人成伊人成综合网2020| 欧美人与性动交α欧美软件| av电影中文网址| 亚洲aⅴ乱码一区二区在线播放 | 亚洲国产欧美网| 久久久久视频综合| 久久中文字幕人妻熟女| 日韩精品免费视频一区二区三区| 国精品久久久久久国模美| x7x7x7水蜜桃| 国产黄色免费在线视频| 久久香蕉国产精品| 久久狼人影院| 亚洲精品成人av观看孕妇| 最新美女视频免费是黄的| 久久亚洲真实| 丁香欧美五月| 在线十欧美十亚洲十日本专区| 99riav亚洲国产免费| 久久中文字幕一级| 国产有黄有色有爽视频| 欧美日韩中文字幕国产精品一区二区三区 | 十八禁人妻一区二区| 精品福利永久在线观看| 日本黄色日本黄色录像| 美女国产高潮福利片在线看| 麻豆国产av国片精品| 天天影视国产精品| 欧美亚洲日本最大视频资源| 国产成人精品久久二区二区免费| 91精品国产国语对白视频| 一级毛片高清免费大全| 黑人操中国人逼视频| 搡老熟女国产l中国老女人| 精品久久久精品久久久| 无限看片的www在线观看| 又黄又粗又硬又大视频| 一本综合久久免费| 亚洲国产精品合色在线| 老熟妇乱子伦视频在线观看| 老司机在亚洲福利影院| 女同久久另类99精品国产91| 久久精品亚洲精品国产色婷小说| 亚洲中文日韩欧美视频| 黄色a级毛片大全视频| 国内久久婷婷六月综合欲色啪| 午夜久久久在线观看| 国内久久婷婷六月综合欲色啪| 操美女的视频在线观看| 一区在线观看完整版| 大香蕉久久成人网| 久久香蕉激情| 欧美人与性动交α欧美精品济南到| 成年人黄色毛片网站| 俄罗斯特黄特色一大片| 一边摸一边做爽爽视频免费| 欧美日韩一级在线毛片| 久99久视频精品免费| 亚洲avbb在线观看| 欧美乱码精品一区二区三区| 国产高清视频在线播放一区| 亚洲,欧美精品.| 夜夜爽天天搞| 成年女人毛片免费观看观看9 | 91大片在线观看| netflix在线观看网站| 麻豆乱淫一区二区| 久久久精品免费免费高清| 亚洲精品中文字幕一二三四区| 成人国语在线视频| 亚洲 欧美一区二区三区| 国产视频一区二区在线看| 人妻 亚洲 视频| videosex国产| 又大又爽又粗| 欧美成人免费av一区二区三区 | 少妇 在线观看| 久久国产精品影院| 不卡av一区二区三区| 精品久久久精品久久久| 在线观看66精品国产| 国产深夜福利视频在线观看| 亚洲精品久久成人aⅴ小说| 国产精品自产拍在线观看55亚洲 | av电影中文网址| 12—13女人毛片做爰片一| 午夜影院日韩av| 人人妻人人爽人人添夜夜欢视频| 午夜亚洲福利在线播放| 女警被强在线播放| 人人澡人人妻人| 下体分泌物呈黄色| 中文字幕制服av| 久久久水蜜桃国产精品网| 国产精品偷伦视频观看了| 最新美女视频免费是黄的| 女同久久另类99精品国产91| 在线视频色国产色| 久久精品aⅴ一区二区三区四区| 香蕉丝袜av| 在线观看免费午夜福利视频| 国内久久婷婷六月综合欲色啪| 在线十欧美十亚洲十日本专区| 午夜免费成人在线视频| av视频免费观看在线观看| 欧美日韩亚洲综合一区二区三区_| 久久香蕉激情| 成人国语在线视频| 搡老熟女国产l中国老女人| 99国产极品粉嫩在线观看| 啦啦啦 在线观看视频| 久久精品91无色码中文字幕| 成人三级做爰电影| 免费日韩欧美在线观看| 悠悠久久av| 大型黄色视频在线免费观看| 天天躁夜夜躁狠狠躁躁| 巨乳人妻的诱惑在线观看| 极品教师在线免费播放| 一级作爱视频免费观看| 在线av久久热| 国产高清videossex| 免费观看精品视频网站| 悠悠久久av| 丰满的人妻完整版| 天堂中文最新版在线下载| 中文字幕人妻熟女乱码| 丰满人妻熟妇乱又伦精品不卡| 日韩免费高清中文字幕av| 又紧又爽又黄一区二区| 国产不卡一卡二| 天天操日日干夜夜撸| 久久久久国产一级毛片高清牌| 久久青草综合色| 国产精品乱码一区二三区的特点 | 日本黄色日本黄色录像| 国产精品.久久久| 少妇裸体淫交视频免费看高清 | e午夜精品久久久久久久| 中文字幕最新亚洲高清| 又黄又爽又免费观看的视频| 国产亚洲精品第一综合不卡| 天天添夜夜摸| 热99re8久久精品国产| 99精品在免费线老司机午夜| 久久久久久免费高清国产稀缺| 热99久久久久精品小说推荐| 亚洲av欧美aⅴ国产| 国产成人啪精品午夜网站| 成年人午夜在线观看视频| 欧美精品高潮呻吟av久久| 90打野战视频偷拍视频| 69av精品久久久久久| 欧美丝袜亚洲另类 | 女警被强在线播放| 成人国语在线视频| 99精品在免费线老司机午夜| 9191精品国产免费久久| 女人被躁到高潮嗷嗷叫费观| 亚洲美女黄片视频| 国产精品二区激情视频| 免费人成视频x8x8入口观看| 国产欧美日韩综合在线一区二区| 成人18禁在线播放| 99国产精品99久久久久| 精品国产超薄肉色丝袜足j| 国产免费av片在线观看野外av| 电影成人av| 丝袜美足系列| 国产欧美日韩精品亚洲av| 久久久国产一区二区| 黄网站色视频无遮挡免费观看| 热99久久久久精品小说推荐| 亚洲国产精品一区二区三区在线| 亚洲国产看品久久| 最近最新中文字幕大全免费视频| 欧美日韩视频精品一区| 正在播放国产对白刺激| 亚洲精品中文字幕在线视频| 国产午夜精品久久久久久| 老司机午夜十八禁免费视频| 国产成人免费无遮挡视频| 黑人巨大精品欧美一区二区mp4| 一区福利在线观看| 成年版毛片免费区| 变态另类成人亚洲欧美熟女 | 性色av乱码一区二区三区2| bbb黄色大片| 99精品在免费线老司机午夜| 亚洲国产欧美日韩在线播放| 日韩人妻精品一区2区三区| 咕卡用的链子| 国产三级黄色录像| 黄片播放在线免费| 国产91精品成人一区二区三区| 中文字幕色久视频| 村上凉子中文字幕在线| 99久久精品国产亚洲精品| 老汉色∧v一级毛片| 亚洲国产欧美一区二区综合| 热99国产精品久久久久久7| 久久久国产精品麻豆| xxx96com| 欧美老熟妇乱子伦牲交| 成人18禁在线播放| 久热这里只有精品99| 亚洲免费av在线视频| 少妇粗大呻吟视频| 一区在线观看完整版| 久久国产精品影院| 最近最新免费中文字幕在线| 美女国产高潮福利片在线看| а√天堂www在线а√下载 | 最新的欧美精品一区二区| 两性午夜刺激爽爽歪歪视频在线观看 | 黄色视频不卡| 夜夜躁狠狠躁天天躁| 国产av一区二区精品久久| 老司机午夜福利在线观看视频| 日韩免费av在线播放| 国产精品成人在线| 国产视频一区二区在线看| 大型av网站在线播放| 亚洲中文日韩欧美视频| 十八禁高潮呻吟视频| 国产成人精品在线电影| 成熟少妇高潮喷水视频| 久久精品国产a三级三级三级| 国产精华一区二区三区| 天堂俺去俺来也www色官网| 亚洲av熟女| 欧美日韩国产mv在线观看视频| 捣出白浆h1v1| 黄色怎么调成土黄色| 80岁老熟妇乱子伦牲交| 校园春色视频在线观看| 国产不卡一卡二| 首页视频小说图片口味搜索| 亚洲少妇的诱惑av| 两人在一起打扑克的视频| 女人被躁到高潮嗷嗷叫费观| av福利片在线| 18禁观看日本| 免费在线观看黄色视频的| 亚洲色图av天堂| 国产欧美日韩一区二区三| 欧美日韩一级在线毛片| 一进一出抽搐gif免费好疼 | 两个人看的免费小视频| 亚洲男人天堂网一区| 夫妻午夜视频| avwww免费| 99久久综合精品五月天人人| 国产又爽黄色视频| 一级片'在线观看视频| 新久久久久国产一级毛片| 欧美日韩一级在线毛片| 成人国产一区最新在线观看| 精品无人区乱码1区二区| 999久久久国产精品视频| 天天添夜夜摸| 9色porny在线观看| 十八禁网站免费在线| 两个人看的免费小视频| 天堂动漫精品| 99精品在免费线老司机午夜| 久久久水蜜桃国产精品网| 淫妇啪啪啪对白视频| 在线永久观看黄色视频| 久久久久精品国产欧美久久久| 国产真人三级小视频在线观看| 首页视频小说图片口味搜索| 免费少妇av软件| 两人在一起打扑克的视频| 婷婷精品国产亚洲av在线 | 啦啦啦免费观看视频1| 国产成人欧美在线观看 | 婷婷丁香在线五月| 乱人伦中国视频| 国产麻豆69| 18禁观看日本| 国产成人一区二区三区免费视频网站| 精品人妻1区二区| 热99re8久久精品国产| 自线自在国产av| 99精品久久久久人妻精品| 成人av一区二区三区在线看| 精品熟女少妇八av免费久了| 亚洲av成人不卡在线观看播放网| 日本wwww免费看| 伊人久久大香线蕉亚洲五| 后天国语完整版免费观看| 日本黄色视频三级网站网址 | 韩国精品一区二区三区| 很黄的视频免费| 日韩欧美国产一区二区入口| 成人国语在线视频| 久久狼人影院| 成人影院久久| 国产91精品成人一区二区三区| 91大片在线观看| 久久中文看片网| 欧美久久黑人一区二区| 十八禁网站免费在线| 国产激情欧美一区二区| 日韩熟女老妇一区二区性免费视频| 在线观看免费高清a一片| 国产成人精品在线电影| 国产免费男女视频| av网站免费在线观看视频| 国产精品1区2区在线观看. | 亚洲色图av天堂| 电影成人av| 在线观看66精品国产| a在线观看视频网站| 国产精品亚洲一级av第二区| 国产欧美日韩一区二区精品| av线在线观看网站| 久久精品国产99精品国产亚洲性色 | 人妻久久中文字幕网| 久久亚洲精品不卡| av天堂久久9| 人妻一区二区av| 脱女人内裤的视频| 天天添夜夜摸| 亚洲va日本ⅴa欧美va伊人久久| 亚洲一码二码三码区别大吗| 一级a爱视频在线免费观看| 国产精品久久视频播放| 超碰97精品在线观看| 亚洲色图 男人天堂 中文字幕| 久久久久久人人人人人| 国产区一区二久久| 亚洲国产看品久久| 最新美女视频免费是黄的| 国产精品二区激情视频| 色综合婷婷激情| 中文字幕另类日韩欧美亚洲嫩草| 国产精品国产高清国产av | 少妇粗大呻吟视频| 国产亚洲欧美98| 天天躁狠狠躁夜夜躁狠狠躁| 欧美国产精品一级二级三级| 国产精品二区激情视频| 午夜日韩欧美国产| 免费女性裸体啪啪无遮挡网站| www日本在线高清视频| 精品福利永久在线观看| 丰满饥渴人妻一区二区三| 欧美日韩一级在线毛片| 午夜福利视频在线观看免费| 欧美国产精品一级二级三级| 十八禁网站免费在线| 热re99久久国产66热| 精品国产一区二区三区久久久樱花| 国产高清国产精品国产三级| 99re6热这里在线精品视频| 一级毛片高清免费大全| 日本a在线网址| 曰老女人黄片| 中文欧美无线码| 飞空精品影院首页| 日韩一卡2卡3卡4卡2021年| tube8黄色片| svipshipincom国产片| 午夜福利,免费看| 看免费av毛片| 欧美日韩乱码在线| 国产精品98久久久久久宅男小说| 亚洲熟女精品中文字幕| 国产精品影院久久| 国产精品久久电影中文字幕 | 老司机福利观看| 亚洲精品一二三| 国产激情欧美一区二区| 国产伦人伦偷精品视频| 一级a爱视频在线免费观看| 午夜福利视频在线观看免费| 很黄的视频免费| 久久国产精品男人的天堂亚洲| 亚洲国产中文字幕在线视频| 1024香蕉在线观看| 中文字幕av电影在线播放| 日韩欧美免费精品| av免费在线观看网站| 亚洲熟女精品中文字幕| 91成人精品电影| 欧美国产精品一级二级三级| 99在线人妻在线中文字幕 | 又大又爽又粗| 男人舔女人的私密视频| 精品欧美一区二区三区在线| 午夜福利,免费看| 看黄色毛片网站| 国产成人精品久久二区二区91| 亚洲专区国产一区二区| tocl精华| 三上悠亚av全集在线观看| 久久久久久亚洲精品国产蜜桃av| 国产精品久久久av美女十八| 国产aⅴ精品一区二区三区波| 国产欧美亚洲国产| 不卡av一区二区三区| 欧美日韩成人在线一区二区| 亚洲精品在线观看二区| 国产亚洲欧美精品永久| 精品人妻熟女毛片av久久网站| 香蕉久久夜色| 中亚洲国语对白在线视频| 天堂俺去俺来也www色官网| 日本wwww免费看| 午夜福利乱码中文字幕| 日日爽夜夜爽网站| 中文字幕另类日韩欧美亚洲嫩草| 又紧又爽又黄一区二区| 国产熟女午夜一区二区三区| 精品久久久久久,| 久久午夜综合久久蜜桃| 色94色欧美一区二区| 色婷婷久久久亚洲欧美| 国产欧美日韩一区二区精品| 丁香欧美五月| 黄片播放在线免费| 欧美激情高清一区二区三区| 亚洲成人免费电影在线观看| 夜夜夜夜夜久久久久| 精品人妻在线不人妻| 丁香六月欧美| 一夜夜www| 国产亚洲精品久久久久久毛片 | 人妻 亚洲 视频| 中文字幕av电影在线播放| 亚洲av熟女| 国产成人欧美| 色综合欧美亚洲国产小说| 一二三四社区在线视频社区8| av电影中文网址| 又大又爽又粗| 极品少妇高潮喷水抽搐| 黄色丝袜av网址大全| 午夜福利免费观看在线| 老司机在亚洲福利影院| 视频区图区小说| 久久国产精品男人的天堂亚洲| 国产成人av激情在线播放| 国产av精品麻豆| 欧美成人午夜精品| 国产区一区二久久| 免费在线观看完整版高清| 亚洲国产欧美网| 国产精品 国内视频| 好男人电影高清在线观看| 亚洲国产中文字幕在线视频| 1024香蕉在线观看| 淫妇啪啪啪对白视频| 国产亚洲欧美在线一区二区| 黄色毛片三级朝国网站| 亚洲熟妇熟女久久| 50天的宝宝边吃奶边哭怎么回事| 亚洲精品美女久久久久99蜜臀| 在线免费观看的www视频| 精品一区二区三区av网在线观看| 久久精品人人爽人人爽视色| 亚洲国产欧美网| 亚洲人成77777在线视频| 日韩免费高清中文字幕av| 男女下面插进去视频免费观看| 老司机在亚洲福利影院| 成人手机av| 韩国精品一区二区三区| 777米奇影视久久| 热99久久久久精品小说推荐| 高潮久久久久久久久久久不卡| 在线免费观看的www视频| 精品一区二区三区av网在线观看| 亚洲精品粉嫩美女一区| 人妻丰满熟妇av一区二区三区 | 色婷婷av一区二区三区视频| 村上凉子中文字幕在线| 亚洲综合色网址| 一a级毛片在线观看| 老司机午夜福利在线观看视频| 国产一区在线观看成人免费| 黄色丝袜av网址大全| 男女床上黄色一级片免费看| 免费观看精品视频网站| 人人妻人人澡人人爽人人夜夜| 黑人操中国人逼视频| 亚洲国产精品一区二区三区在线| 97人妻天天添夜夜摸| 欧美成狂野欧美在线观看| 日韩制服丝袜自拍偷拍| 免费不卡黄色视频| 欧美av亚洲av综合av国产av| 大片电影免费在线观看免费| 日韩欧美一区视频在线观看| 免费av中文字幕在线| 国产91精品成人一区二区三区| 精品国内亚洲2022精品成人 | 精品无人区乱码1区二区| 欧美av亚洲av综合av国产av| 夫妻午夜视频| 中文字幕人妻丝袜一区二区| 99国产精品99久久久久| 少妇裸体淫交视频免费看高清 | 两人在一起打扑克的视频| 美女午夜性视频免费| 两个人看的免费小视频| 91成年电影在线观看| www日本在线高清视频| 国产精华一区二区三区| 成人国产一区最新在线观看| 婷婷丁香在线五月| 黄片小视频在线播放| xxxhd国产人妻xxx| 丝袜美腿诱惑在线| 成年版毛片免费区| 十八禁人妻一区二区| 亚洲全国av大片| 中文字幕色久视频| 精品国产美女av久久久久小说| 亚洲色图综合在线观看| 99国产综合亚洲精品| 成年版毛片免费区| 国产色视频综合| 99国产极品粉嫩在线观看| 国产男女内射视频| 国产欧美日韩一区二区三| 免费在线观看日本一区| 老司机影院毛片| 9热在线视频观看99| 亚洲人成电影观看| 精品电影一区二区在线| 女人被狂操c到高潮|