3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分布式事务之底层原理揭秘

發布時間:2024/4/11 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式事务之底层原理揭秘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??


? hi 大家好,今天分享一這篇文章,讓大家徹底了解分布式原理,這個是后臺開發必須掌握技能。

  • 剛性事務

  • 柔性事務

  • 本地事務

  • 分布式事務

  • 單階段原子提交協議

  • 兩階段提交協議

    • 定義

    • 原理

    • 性能

    • 恢復

    • 缺陷

    • XA 標準接口

    • 三階段提交協議

  • Paxos

    • Basic Paxos

    • Multi-Paxos

  • Raft

  • 算法類型

  • 鎖并發控制

  • 時間戳并發控制

  • 樂觀并發控制

導言

分布式事務是分布式系統必不可少的組成部分,基本上只要實現一個分布式系統就逃不開對分布式事務的支持。本文從分布式事務這個概念切入,嘗試對分布式事務以及分布式系統最核心的底層原理逐一進行剖析,內容包括但不限于 BASE 原則兩階段原子提交協議三階段原子提交協議Paxos/Multi-Paxos 分布式共識算法的原理與證明Raft 分布式共識算法分布式事務的并發控制等內容。

事務

事務是訪問并可能更新各種數據項的一個程序執行單元(unit)。事務由一個或多個步驟組成,一般使用形如 begin transaction 和 end transaction 語句或者函數調用作為事務界限,事務內的所有步驟必須作為一個單一的、不可分割的單元去執行,因此事務的結果只有兩種:1. 全部步驟都執行完成,2. 任一步驟執行失敗則整個事務回滾。

事務最早由數據庫管理系統(database management systemDBMS)引入并實現,數據庫事務是數據庫管理系統執行過程中的一個邏輯單位,由一個有限的數據庫操作序列構成。數據庫事務嚴格遵循 ACID 原則,屬于剛性事務,一開始數據庫事務僅限于對單一數據庫資源對象的訪問控制,這一類事務稱之為本地事務 (Local Transaction),后來隨著分布式系統的出現,數據的存儲也不可避免地走向了分布式,分布式事務(Distributed Transaction)便應運而生。

剛性事務

剛性事務(如單一數據庫事務)完全遵循 ACID 規范,即數據庫事務的四大基本特性:

  • Atomicity(原子性):一個事務(transaction)中的所有操作,或者全部完成,或者全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。即,事務不可分割、不可約簡。

  • Consistency(一致性):在事務開始之前和事務結束以后,數據庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設約束、觸發器、級聯回滾等。

  • Isolation(隔離性):數據庫允許多個并發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行而導致數據的不一致。事務隔離分為不同級別,包括未提交讀(Read uncommitted)、提交讀(read committed)、可重復讀(repeatable read)和串行化(Serializable)。

  • Durability(持久性):事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。

剛性事務也能夠以分布式 CAP 理論中的 CP 事務來作為定義

柔性事務

在電商領域等互聯網場景下,傳統的事務在數據庫性能和處理能力上都遇到了瓶頸。因此,柔性事務被提了出來,柔性事務基于分布式 CAP 理論以及延伸出來的 BASE 理論,相較于數據庫事務這一類完全遵循 ACID 的剛性事務來說,柔性事務保證的是 “基本可用,最終一致”,CAP 原理相信大家都很熟悉了,這里我們講一下 BASE 原則:

  • 基本可用(Basically Available):系統能夠基本運行、一直提供服務。

  • 軟狀態(Soft-state):系統不要求一直保持強一致狀態。

  • 最終一致性(Eventual consistency):系統需要在某一時刻后達到一致性要求。

柔性事務(如分布式事務)為了滿足可用性、性能與降級服務的需要,降低一致性(Consistency)與隔離性(Isolation)的要求,遵循 BASE 理論,傳統的 ACID 事務對隔離性的要求非常高,在事務執行過程中,必須將所有的資源對象鎖定,因此對并發事務的執行極度不友好,柔性事務(比如分布式事務)的理念則是將鎖資源對象操作從本地資源對象層面上移至業務邏輯層面,再通過放寬對強一致性要求,以換取系統吞吐量的提升。

此外,雖然柔性事務遵循的是 BASE 理論,但是還需要遵循部分 ACID 規范:

  • 原子性:嚴格遵循。

  • 一致性:事務完成后的一致性嚴格遵循;事務中的一致性可適當放寬。

  • 隔離性:并行事務間不可影響;事務中間結果可見性允許安全放寬。

  • 持久性:嚴格遵循。

本地事務

本地事務(Local Transaction)指的是僅僅對單一節點/數據庫資源對象進行訪問/更新的事務,在這種事務模式下,BASE 理論派不上用場,事務完全遵循 ACID 規范,確保事務為剛性事務。

分布式事務

在分布式架構成為主流的當下,系統對資源對象的訪問不能還局限于單節點,多服務器、多節點的資源對象訪問成為剛需,因此,本地事務無法滿足分布式架構的系統的要求,分布式事務應運而生。

訪問/更新由多個服務器管理的資源對象的平面事務或者嵌套事務稱之為分布式事務(Distributed Transaction),分布式事務是相對于本地事務來說的。

平面事務:單一事務,訪問多個服務器節點的資源對象,一個平面事務完成一次請求之后才能發起下一個請求。

嵌套事務:多事務組成,頂層事務可以不斷創建子事務,子事務又可以進一步地以任意深度嵌套子事務。

對于分布式事務來說,有兩個最核心的問題:

  • 如何管理分布式事務的提交/放棄決定?如果事務中的一個節點在執行自己的本地事務過程中遇到錯誤,希望放棄整個分布式事務,與此同時其他節點則在事務執行過程中一切順利,希望提交這個分布式事務,此時我們應該如何做決策?

  • 如何保證并發事務在涉及多個節點上資源對象訪問的可串行性(規避分布式死鎖)?如果事務 T 對某一個服務器節點上的資源對象 S 的并發訪問在事務 U 之前,那么我們需要保證在所有服務器節點上對 S 和其他資源對象的沖突訪問,T 始終在 U 之前。

  • 問題 1 的解決需要引入一類分布式原子提交協議的算法如兩階段提交協議等,來對分布式事務過程中的提交或放棄決策進行管理,并確保分布式提交的原子性。而問題 2 則由分布式事務的并發控制機制來處理。

    原子提交協議

    原子性是分布式事務的前置性約束,沒有原子性則分布式事務毫無意義。

    原子性約束要求在分布式事務結束之時,它的所有操作要么全部執行,要么全部不執行。以分布式事務的原子性來分析,客戶端請求訪問/更新多個服務器節點上的資源對象,在客戶端提交或放棄該事務從而結束事務之后,多個服務器節點的最終狀態要么是該事務里的所有步驟都執行成功之后的狀態,要么恢復到事務開始前的狀態,不存在中間狀態。滿足這種約束的分布式事務協議則稱之為原子提交協議。

    當一個分布式事務結束時,事務的原子特性要求所有參與該事務的服務器節點必須全部提交或者全部放棄該事務,為了實現這一點,必須引入一個協調者(Coordinator)的角色,從參與事務的所有服務器節點中挑選一個作為協調者,由它來保證在所有服務器節點上最終獲得同樣的結果。協調者的工作原理取決于分布式事務選用的協議。

    一般來說,分布式事務中包含的兩個最基礎的角色就是:

    • Coordinator -- 協調者

    • Participants -- 參與者

    單階段原子提交協議

    單階段原子提交協議(one-phase atomic commit protocol, 1APC)是最簡單的一種原子提交協議,它通過設置一個協調者并讓它不斷地向所有參與者發送提交(commit)或放棄(abort)事務的請求,直到所有參與者確認已執行完相應的操作。

    1APC 協議的優點是簡單易用,對一些事務不復雜的場景比較合適,但在復雜事務場景則顯得捉襟見肘,因為該協議不允許任何服務器節點單方面放棄事務,事務的放棄必須由協調者來發起,這個設計會導致很多問題:首先因為只有一次通信,協調者并不會收集所有參與者的本地事務執行的情況,所以協調者決定提交還是放棄事務只基于自己的判斷,在參與者執行事務期間可能會遇到錯誤從而導致最終事務未能真正提交,錯誤一般與事務的并發控制有關,比如事務執行期間對資源對象加鎖,遇到死鎖,需要放棄事務從而解開死鎖,而協調者并不知道,因此在發起下一個請求之前,客戶端完全不知道事務已被放棄。另一種情況就是利用樂觀并發控制機制訪問資源對象,某一個服務器節點的驗證失敗將導致事務被放棄,而協調者完全不知情。

    兩階段提交協議

    定義

    兩階段提交協議(two-phase commit protocol, 2PC)的設計初衷是為了解決 1APC 不允許任意一個服務器節點自行放棄它自己的那部分本地事務的痛點,2PC 允許任何一個參與者自行決定要不要放棄它的本地事務,而由于原子提交協議的約束,任意一個本地事務被放棄將導致整個分布式事務也必須放棄掉。

    兩階段提交協議基于以下幾個假設:

    • 存在一個節點作為協調者(Coordinator),分布式事務通常由協調者發起(當然也可以由參與者發起),其余節點作為參與者(Participants),且節點之間可以自由地進行網絡通信,協調者負責啟動兩階段提交流程以及決定事務最終是被提交還是放棄。

    • 每個節點會記錄該節點上的本地操作日志(op logs),日志必須持久化在可靠的存儲設備上(比如磁盤),以便在節點重啟之后需要恢復操作日志。另外,不記錄全局操作日志。

    • 所有節點不能發生永久性損壞,也就是說節點就算是損壞了也必須能通過可靠性存儲恢復如初,不允許出現數據永久丟失的情況。

    • 參與者對協調者的回復必須要去除掉那些受損和重復的消息。

    • 整個集群不會出現拜占庭故障(Byzantine Fault)-- 服務器要么崩潰,要么服從其發送的消息。

    原理

    兩階段提交協議,顧名思義整個過程需要分為兩個階段:

  • 準備階段(Prepare Phase)

  • 提交階段(Commit Phase)

  • 在進行兩階段提交的過程中,協調者會在以下四種狀態間流轉:

  • init

  • preparing

  • committed

  • aborted

  • 而參與者則會在以下三種狀態間流轉:

  • working

  • prepared

  • committed

  • 階段 I(投票表決階段)

  • 任意一個參與者發起分布式事務 T 并執行本地事務成功,接著將一條 <ready T> 記錄追加到本地日志 buffer 中并 flush 到可靠性存儲設備如磁盤上,從 working 狀態進入 prepared 狀態,然后向協調者發送 prepare T 消息;

  • 收到參與者發來的 prepare T 消息后,協調者將一條 <prepare T> 記錄追加到日志中,然后從 init 狀態進入 preparing 狀態,緊接著向分布式事務的其他參與者發出 canCommit? 消息,發起事務表決過程;

  • 當參與者收到 canCommit? 請求后,除了發起事務的那一個之外,其他還在 working 狀態的參與者會先嘗試執行本地事務,如果本地事務執行成功,則會往本地日志 buffer 寫入一條 <ready T> 記錄并 flush 到可靠性存儲中,但不提交事務,進入 prepared 狀態,然后回復一條 ready T 消息對此事務投 YES 票;如果本地事務執行失敗,則參與者會往本地日志 buffer 寫入一條 <don't commit T> 記錄并 flush 到可靠性存儲中,然后回復一條 don't commit T 消息投 NO 票。

  • 階段 II(收集投票結果完成事務)

  • 協調者收集所有的投票(包括它自己的投票);

    (a) 如果所有的投票都是 ready T,則表示沒有故障發生,那么協調者決定提交該事務,首先它會在其本地日志中追加一條 <commit T> 記錄,從 preparing 狀態進入 committed 狀態,然后向所有的參與者發送 doCommit 請求消息,要求參與者提交它們的本地事務;

    (b) 如果有任一個投票是 No,則協調者決定放棄掉該事務,首先它會往本地日志中追加一條記錄,從 preparing 狀態進入 aborted 狀態,然后發送 doAbort 請求消息給所有的參與者,通知它們回滾各自的本地事務。

  • 投了 YES 票的參與者阻塞等待協調者給它發來 doCommit 或 doAbort 消息,如果接收到的是 doCommit 消息則提交本地事務并在此過程中記錄日志 <commit T>,然后進入 committed 狀態,最后回復一個 haveCommitted 的消息通知協調者本地事務已經成功提交;反之,如果收到的是 doAbort 消息則回滾本地事務并寫入日志 <abort T>,然后進入 aborted狀態。

  • 上面的過程是一種更通用的流程,即由任意的參與者發起一個分布式事務,而在實踐中一般把分布式事務的發起交給協調者來做,減少事務發起者確認該事務已被提交所需等待的網絡消息延遲:

    性能

    網絡 I/O 開銷

    假設兩階段提交過程一切運行正常,即協調者和參與者都不出現崩潰和重啟,網絡通信也都正常。那么假設有一個協調者和 N 個參與者,兩階段提交過程中將會發送如下的消息:

    • 任意一個參與者從 working 狀態進入 prepared 狀態并發送 Prepared 消息給協調者,1 條消息。

    • 協調者收到消息后,向其他參與者發送 canCommit? 請求消息,N - 1 條消息。

    • 收到 canCommit? 消息的參與者各自回復協調者投票消息,N - 1 條消息。

    • 協調者統計投票情況之后,發送 doCommit 消息給其他參與者,N 條消息。

    所以,事務發起者在經過 4 條網絡消息延遲之后確認該分布式事務已被提交,而整個過程共計發送 3N - 1 條網絡消息(因為 haveCommitted 在 2PC 僅僅是用于最后通知協調者而已,屬于可有可無的一次網絡消息,2PC 在該消息缺省的情況下也能正常運行,因此 haveCommitted 一般不計入網絡延遲成本中)。

    前面我們提到,在實踐中一般是由協調者來發起事務,如果考慮這種情況的話,事務發起者 -- 協調者在經過 3 條網絡消息延遲之后確認該分布式事務已經被提交,而整個過程實際發送的網絡消息則變成 3N 條。

    總而言之,兩階段提交協議的網絡通信開銷和集群節點的數量成 3 倍正比。

    本地存儲設備 I/O 開銷

    基于前文中敘述的兩階段提交協議的基本假設之一:每個節點會通過日志來記錄在本地執行的操作,以便在節點發生故障并重啟節點之后能利用日志恢復到故障前的狀態,因此兩階段提交過程中除了網絡 I/O 的開銷之外,還有本地存儲設備 I/O 的開銷:

    • 發起事務的參與者執行本地事務,1 次寫操作。

    • 其余參與者執行各自的本地事務,N - 1 次寫操作。

    • 協調者統計投票結果并決定提交事務,1 次寫操作。

    所以事務發起者在經過 3 次本地存儲設備 I/O 延遲之后確認該事務已被提交,整個過程總計有 N + 1 次本地存儲設備 I/O,而如果由協調者來發起事務的話,則還是需要 N + 1 次本地存儲設備 I/O,但是只需要經過 2 次本地存儲設備 I/O 延遲即可確認事務已被提交。

    恢復

    在分布式事務中,所有的參與者節點都可能發生故障,所以我們需要保證在該故障節點恢復時發生的一切都和分布式事務 T 的全局決策保持一致。節點在恢復的時候會讀取 T 的最后一個本地日志記錄并作出相應的操作:

  • 如果 T 的最后一條日志記錄是 <commit T>,那么說明協調者在節點發生故障時的全局決策是提交 T,根據本地事務所使用的日志方式,在該節點上可能需要執行 redo T。

  • 如果 T 的最后一條日志記錄是 <abort T>,那么說明協調者在節點發生故障時的全局決策是中止 T,根據本地事務所使用的日志方式,在該節點上可能需要執行 undo T。

  • 如果 T 的最后一條日志記錄是 <don't commit T>,則和第 2 中情況類似,執行 undo T。

  • 如果 T 的最后一條日志記錄是 <ready T>,這種情況比較麻煩,因為恢復節點無法確認在它故障之后協調者發出的最終全局決策是什么,因此它必須要和集群中其余至少一個節點取得聯系,詢問 T 的最終結果是什么:恢復節點先嘗試詢問協調者,如果此時協調者正在工作,則告知恢復節點 T 的最終結果,如果是提交就執行 redo T,中止就執行 undo T;如果協調者因故不在工作,則恢復節點可以要求其他某一個參與者節點去查看本地日志以找出 T 的最終結果并告知恢復節點。在最壞的情況下,恢復節點無法和集群中其他所有節點取得聯系,這時恢復節點只能阻塞等待,直至得知 T 的最終結果是提交還是中止。

  • 如果本地日志中沒有記錄任何關于 T 在兩階段提交過程中的操作,那么根據前面的兩階段提交流程可知恢復節點還沒來得及回復協調者的 canCommit? 請求消息就發生了故障,因此根據兩階段算法,恢復節點只能執行 undo T。

  • 缺陷

  • 同步阻塞:兩階段提交協議是一個阻塞的協議,在第二階段期間,參與者在事務未提交之前會一直鎖定其占有的本地資源對象,直到接收到來自協調者的 doCommit 或 doAbort 消息。

  • 單點故障:兩階段提交協議中只有一個協調者,而由于在第二階段中參與者在收到協調者的進一步指示之前會一直鎖住本地資源對象,如果唯一的協調者此時出現故障而崩潰掉之后,那么所有參與者都將無限期地阻塞下去,也就是一直鎖住本地資源對象而導致其他進程無法使用。

  • 數據不一致:如果在兩階段提交協議的第二階段中,協調者向所有參與者發送 doCommit 消息之后,發生了局部網絡抖動或者異常,抑或是協調者在只發送了部分消息之后就崩潰了,那么就只會有部分參與者接收到了 doCommit 消息并提交了本地事務;其他未收到 doCommit 消息的參與者則不會提交本地事務,因而導致了數據不一致問題。

  • XA 標準接口

    2PC 兩階段提交協議本身只是一個通用協議,不提供具體的工程實現的規范和標準,在工程實踐中為了統一標準,減少行業內不必要的對接成本,需要制定標準化的處理模型及接口標準,國際開放標準組織 Open Group 定義了分布式事務處理模型 DTP(Distributed Transaction Processing)Model,現在 XA 已經成為 2PC 分布式事務提交的事實標準,很多主流數據庫如 Oracle、MySQL 等都已經實現 XA。

    兩階段事務提交采用的是 X/OPEN 組織所定義的 DTP Model 所抽象的 AP(應用程序), TM(事務管理器)和 RM(資源管理器) 概念來保證分布式事務的強一致性。其中 TM 與 RM 間采用 XA 的協議進行雙向通信。與傳統的本地事務相比,XA 事務增加了準備階段,數據庫除了被動接受提交指令外,還可以反向通知調用方事務是否可以被提交。TM 可以收集所有分支事務的準備結果,并于最后進行原子提交,以保證事務的強一致性。

    Java 通過定義 JTA 接口實現了 XA 模型,JTA 接口中的 ResourceManager 需要數據庫廠商提供 XA 驅動實現, TransactionManager 則需要事務管理器的廠商實現,傳統的事務管理器需要同應用服務器綁定,因此使用的成本很高。而嵌入式的事務管器可以以 jar 包的形式提供服務,同 Apache ShardingSphere 集成后,可保證分片后跨庫事務強一致性。

    通常,只有使用了事務管理器廠商所提供的 XA 事務連接池,才能支持 XA 的事務。Apache ShardingSphere 在整合 XA 事務時,采用分離 XA 事務管理和連接池管理的方式,做到對應用程序的零侵入。

    三階段提交協議

    由于前文提到的兩階段提交協議的種種弊端,研究者們后來又提出了一種新的分布式原子提交協議:三階段提交協議(three-phase commit protocol, 3PC)。

    三階段提交協議是對兩階段提交協議的擴展,它在特定假設下避免了同步阻塞的問題。該協議基于以下兩個假設:

  • 集群不發生網絡分區;

  • 故障節點數不超過 K 個(K 是預先設定的一個數值)。

  • 基于這兩個假設,三階段提交協議通過引入超時機制和一個額外的階段來解決阻塞問題,三階段提交協議把兩階段提交協議的第一個階段拆分成了兩步:1) 評估,2) 資源對象加鎖,最后才真正提交:

  • CanCommit 階段:協調者發送 CanCommit 請求消息,詢問各個參與者節點,參與者節點各自評估本地事務是否可以執行并回復消息(可以執行則回復 YES,否則回復 NO),此階段不執行事務,只做判斷;

  • PreCommit 階段:協調者根據上一階段收集的反饋決定通知各個參與者節點執行(但不提交)或中止本地事務;有兩種可能:1) 所有回復都是 YES,則發送 PreCommit 請求消息,要求所有參與者執行事務并追加記錄到 undo 和 redo 日志,如果事務執行成功則參與者回復 ACK 響應消息,并等待下一階段的指令;2) 反饋消息中只要有一個 NO,或者等待超時之后協調者都沒有收到參與者的回復,那么協調者會中止事務,發送 Abort 請求消息給所有參與者,參與者收到該請求后中止本地事務,或者參與者超時等待仍未收到協調者的消息,同樣也中止當前本地事務。

  • DoCommit 階段:協調者根據上一階段收集到的反饋決定通知各個參與者節點提交或回滾本地事務,分三種情況:1) 協調者收到全部參與者回復的 ACK,則向所有參與者節點廣播 DoCommit 請求消息,各個參與者節點收到協調者的消息之后決定提交事務,然后釋放資源對象上的鎖,成功之后向協調者回復 ACK,協調者接收到所有參與者的 ACK 之后,將該分布式事務標記為 committed;2) 協調者沒有收到全部參與者回復的 ACK(可能參與者回復的不是 ACK,也可能是消息丟失導致超時),那么協調者就會中止事務,首先向所有參與者節點廣播 Abort 請求消息,各個參與者收到該消息后利用上一階段的 undo 日志進行事務的回滾,釋放占用的資源對象,然后回復協調者 ACK 消息,協調者收到參與者的 ACK 消息后將該分布式事務標記為 aborted;3) 參與者一直沒有收到協調者的消息,等待超時之后會直接提交事務。

  • 事實上,在最后階段,協調者不是通過追加本地日志的方式記錄提交決定的,而是首先保證讓至少 K 個參與者節點知道它決定提交該分布式事務。如果協調者發生故障了,那么剩下的參與者節點會重新選舉一個新的協調者,這個新的協調者就可以在集群中不超過 K 個參與者節點故障的情況下學習到舊協調者之前是否已經決定要提交分布式事務,若是,則重新開始協議的第三階段,否則就中止該事務,重新發起分布式事務。

    在最后的 DoCommit 階段,如果參與者一直沒有收到協調者的 DoCommit 或者 Abort 請求消息時,會在等待超時之后,直接提交事務。這個決策機制是基于概率學的:當已經進入第三階段之后,說明參與者在第二階段已經收到了 PreCommit 請求消息,而協調者發出 PreCommit 請求的前提條件是它在第二階段開頭收集到的第一階段向所有參與者發出的 CanCommit 請求消息的反饋消息都是 YES。所以參與者可以根據自己收到了 PreCommit 請求消息這一既定事實得出這樣的一個結論:其他所有參與者都同意了進行這次的事務執行,因此當前的參與者節點有理由相信,進入第三階段后,其他參與者節點的本地事務最后成功提交的概率很大,而自己遲遲沒有收到 DoCommit 或 Abort 消息可能僅僅是因為網絡抖動或異常,因此直接提交自己的本地事務是一個比較合理的選擇

    三階段提交協議主要著重于解決兩階段提交協議中因為協調者單點故障而引發的同步阻塞問題,雖然相較于兩階段提交協議有所優化,但還是沒解決可能發生的數據不一致問題,比如由于網絡異常導致部分參與者節點沒有收到協調者的 Abort 請求消息,超時之后這部分參與者會直接提交事務,從而導致集群中的數據不一致,另外三階段提交協議也無法解決腦裂問題,同時也因為這個協議的網絡開銷問題,導致它并沒有被廣泛地使用,有關該協議的具體細節可以參閱本文最后的延伸閱讀一節中的文獻進一步了解,這里不再深入。

    共識算法

    共識(Consensus),很多時候會見到與一致性(Consistency)術語放在一起討論。嚴謹地講,兩者的含義并不完全相同。

    一致性的含義比共識寬泛,在不同場景(基于事務的數據庫、分布式系統等)下意義不同。具體到分布式系統場景下,一致性指的是多個副本對外呈現的狀態。如前面提到的順序一致性、線性一致性,描述了多節點對數據狀態的共同維護能力。而共識,則特指在分布式系統中多個節點之間對某個事情(例如多個事務請求,先執行誰?)達成一致意見的過程。因此,達成某種共識并不意味著就保障了一致性。

    實踐中,要保證系統滿足不同程度的一致性,往往需要通過共識算法來達成。

    共識算法解決的是分布式系統對某個提案(Proposal),大部分節點達成一致意見的過程。提案的含義在分布式系統中十分寬泛,如多個事件發生的順序、某個鍵對應的值、誰是主節點……等等。可以認為任何可以達成一致的信息都是一個提案。

    對于分布式系統來講,各個節點通常都是相同的確定性狀態機模型(又稱為狀態機復制問題,State-Machine Replication),從相同初始狀態開始接收相同順序的指令,則可以保證相同的結果狀態。因此,系統中多個節點最關鍵的是對多個事件的順序進行共識,即排序。

    算法共識/一致性算法有兩個最核心的約束:1) 安全性(Safety),2) 存活性(Liveness):

    • Safety:保證決議(Value)結果是對的,無歧義的,不會出現錯誤情況。

      • 只有是被提案者提出的提案才可能被最終批準;

      • 在一次執行中,只批準(chosen)一個最終決議。被多數接受(accept)的結果成為決議;

    • Liveness:保證決議過程能在有限時間內完成。

      • 決議總會產生,并且學習者最終能獲得被批準的決議。

    Paxos

    Google Chubby 的作者 Mike Burrows 說過, there is only one consensus protocol, and that’s Paxos” – all other approaches are just broken versions of Paxos.

    意即世上只有一種共識算法,那就是 Paxos,其他所有的共識算法都只是 Paxos 算法的殘缺版本。雖然有點武斷,但是自從 Paxos 問世以來,它便幾乎成為了分布式共識算法的代名詞,后來的許多應用廣泛的分布式共識算法如 Raft、Zab 等的原理和思想都可以溯源至 Paxos 算法。

    Paxos 是由 Leslie Lamport (LaTeX 發明者,圖靈獎得主,分布式領域的世界級大師) 在 1990 年的論文《The PartTime Parliament》里提出的,Lamport 在論文中以一個古希臘的 Paxos 小島上的議會制訂法律的故事切入,引出了 Paxos 分布式共識算法。

    Basic Paxos

    業界一般將 Lamport 論文里最初提出分布式算法稱之為 Basic Paxos,這是 Paxos 最基礎的算法思想。

    Basic Paxos 算法的最終目標是通過嚴謹和可靠的流程來使得集群基于某個提案(Proposal)達到最終的共識

    基礎概念

    • Value:提案值,是一個抽象的概念,在工程實踐中可以是任何操作,如『更新數據庫某一行的某一列』、『選擇 xxx 服務器節點作為集群中的主節點』。

    • Number:提案編號,全局唯一,單調遞增。

    • Proposal:集群需要達成共識的提案,提案 = 編號 + 值。

    Proposal 中的 Value 就是在 Paxos 算法完成之后需要達成共識的值。

    Paxos 算法中有三個核心角色:

    • Proposer:生成提案編號 n 和值 v,然后向 Acceptors 廣播該提案,接收 Acceptors 的回復,如果有超過半數的 Acceptors 同意該提案,則選定該提案,否則放棄此次提案并生成更新的提案重新發起流程,提案被選定之后則通知所有 Learners 學習該最終選定的提案值(也可以由 Acceptor 來通知,看具體實現)。Basic Paxos 中允許有多個 Proposers。

    • Acceptor:接收 Proposer 的提案并參與提案決策過程,把各自的決定回復給 Proposer 進行統計。Acceptor 可以接受來自多個 proposers 的多個提案。

    • Learner:不參與決策過程,只學習最終選定的提案值。

    在具體的工程實踐中,一個節點往往會充當多種角色,比如一個節點可以既是 Proposer 又是 Acceptor,甚至還是 Learner。

    算法流程

    相較于直接給出 Paxos 算法的流程,我想沿襲 Lamport 大師的經典 Paxos 論文《Paxos Made Simple》中的思路:通過循序漸進的方式推導出 Paxos 算法。

    首先需要了解 Paxos 算法中的兩個重要的約束:

    C1. 一個 Acceptor 必須接受它收到的第一個提案。

    C2. 只有當超過半數的 Acceptors 接受某一個提案,才能最終選定該提案。

    C2 其實有一個隱含的推論:一個 Acceptor 可以接受多個提案,這也是為什么我們需要給每一個提案生成一個編號的原因,用來給提案排序。

    我們前面提到過 Paxos 的最終目標是通過嚴謹和可靠的流程來使得集群基于某個提案(Proposal)達到最終的共識,也就是說基于某一個提案發起的一次 Paxos 流程,最終目的是希望集群對該提案達成一致的意見,而為了實現并維持集群中的這種一致性,前提是 Paxos 算法必須具有冪等性:一旦提案(Proposal)中的值(Value)被選定(Chosen),那么只要還在此次 Paxos 流程中,就算不斷按照 Paxos 的規則重復步驟,未來被 Chosen 的 Value 都會是同一個。如果不滿足這種冪等性,將可能導致不一致的問題。

    因此,我們可以把 Paxos 的基本命題提煉出來:

    P1. 在一次 Paxos 流程中,如果一個值(Value)為 v 的提案(Proposal)被選定(Chosen)了,那么后續任何被最終選定的帶有更大編號(Number)的提案中的 Value 也必須是 v。

    提案在被最終選定之前必須先被 Acceptor 接受,于是我們可以再進一步總結一個具有更強約束的命題:

    P2. 在一次 Paxos 流程中,如果一個值(Value)為 v 的提案(Proposal)被選定(Chosen)了,那么后續任何被 Acceptor 接受的帶有更大編號(Number)的提案中的 Value 也必須是 v。

    這還不是具備最強約束的命題,因為提案在被 Acceptor 接受之前必須先由 Proposer 提出,因此還可以繼續強化命題:

    P3. 在一次 Paxos 流程中,如果一個值(Value)為 v 的提案(Proposal)被選定(Chosen)了,那么后續任何 Proposer 提議的帶有更大編號(Number)的提案中的 Value 也必須是 v。

    從上述的三個命題,我們可以很容易地看出來,P3 可以推導出 P2,進而推導出 P1,也就是說這是一個歸約的過程,因此只要 P3 成立則 P1 成立,也就是 Paxos 算法的正確性得到保證。

    那么要如何實現呢 P3 呢?只需滿足如下約束:

    C3. 對于一個被 Proposer 提議的提案中任意的 v 和 n,存在一個數量超過半數 Acceptors 的集合 S,滿足以下兩個條件中的任意一個:

    • S 中的任何一個 Acceptor 都沒有接受過編號小于 n 的提案。

    • S 中所有的 Acceptors 接受過的最大編號的提案的 Value 為 v。

    為了滿足 C3 從而實現 P3,需要引入一條約束:Proposer 每次生成自己的 n 之后,發起提案之前,必須要先去『學習』那個已經被選定或者將要被選定的小于 n 的提案,如果有這個提案的話則把那個提案的 v 作為自己的此次提案的 Value,沒有的話才可以自己指定一個 Value,這樣的話 Proposer 側就可以保證更高編號的提案的值只會是已選定的 v 了,但是 Acceptor 側還無法保證,因為 Acceptor 有可能還會接受其他的 Proposers 的提案值,于是我們需要對 Acceptor 也加一條約束,讓它承諾在收到編號為 n 的 v 之后,不會再接受新的編號小于 n 的提案值。

    所以我們可以得到一個 Paxos 在 Proposer 側的算法流程:

  • Proposer 生成一個新的提案編號 n 然后發送一個 prepare 請求給超過半數的 Acceptors 集合,要求集合中的每一個 Acceptor 做出如下響應:

    (a) 向 Proposer 承諾在收到該消息之后就不再接受編號小于 n 的提案。

    (b) 如果 Acceptor 在收到該消息之前已經接受過其他提案,則把當前接受的編號最大的提案回復給 Proposer。

  • 如果 Proposer 收到了超過半數的 Acceptors 的回復,那么就可以生成 (n, v) 的提案,這里 v 是所有 Acceptors 回復中編號最大的那個提案里的值,如果所有 Acceptors 回復中都沒有附帶上提案的話,則可以由 Proposer 自己選擇一個 v。

  • Proposer 將上面生成的提案通過一個 accept 請求發送給一個超過半數的 Acceptors 集合。(需要注意的是這個集合不一定和第二步中的那個集合是同一個。)

  • Paxos 在 Proposer 側的算法流程已經確定了,接下來我們需要從 Acceptor 的視角來完成剩下的算法推導。前面我們提到過,Acceptor 是可以接受多個 Proposers 的多個提案的,但是在收到一個 Proposer 的 prepare 消息后會承諾不再接受編號小于 n 的新提案,也就是說 Acceptor 也是可以忽略掉其他 Proposers 消息(包括 prepareaccept)而不會破壞算法的安全性,當然了,在工程實踐中也可以直接回復一個錯誤,讓 Proposer 更早知道提案被拒絕然后生成提案重新開始流程。這里我們應該重點思考的場景是一個 Acceptor 接受一個提案請求的時候,根據前面 Proposer 要求 Acceptor 的承諾,我們可以給 Acceptor 設置一個這樣的約束:

    C4. 如果一個 Proposer 發出了帶 n 的 prepare 請求,只要 Acceptor 還沒有回復過任何其他編號大于 n 的prepare 請求,則該 Acceptor 可以接受這個提案。

    因為 Acceptor 需要對 Proposer 做出不接受編號小于 n 的提案的承諾,因此它需要做持久化記錄,那么它就必須是有狀態的,也因此每個 Acceptor 都需要利用可靠性存儲(日志)來保存兩個對象:

  • Acceptor 接受過的編號最大的提案;

  • Acceptor 回復過的最大的 prepare 請求提案編號。

  • 以上這就是 Acceptor 側的約束。接下來我們就可以得到 Paxos 的整個算法流程了。

    Paxos 算法可以歸納為兩大基本過程:

  • 選擇過程;

  • 學習過程。

  • 選擇過程

    選擇過程分為兩個階段:

    • 階段一(Phase 1):

      (a) Proposer 生成一個全局唯一且單調遞增的提案編號 n,然后發送編號為 n 的 prepare 請求(P1a msg)給超過半數的 Acceptors 集合。

      (b) 當一個 Acceptor 收到一個編號為 n 的 prepare 請求,如果 n 比它此前接受過其他的提案編號(如果有)都要大的話,那么將這個提案編號 n 寫入本地日志,這里記為 max_n,然后作出『兩個承諾,一個回復』:

      否則就忽略該 prepare 消息或者回復一個錯誤。

      • 在不違背以前作出的承諾下,回復消息(P1b msg),附帶上自己已經接受過的提案中編號最大的那個提案的 v 和 n,沒有則返回空值。

      • 不再接受編號小于等于 n 的 prepare 請求

      • 不再接受編號小于等于 n 的 accept 請求

      • 兩個承諾:

      • 一個回復:

    • 階段二(Phase 2):

      (a) 當 Proposer 收到超過半數的 Acceptors 回復它的編號為 n 的 prepare 請求的響應,此時有兩種可能:

      (b) 當 Acceptor 收到一個編號為 n 的提案的 accept 請求消息,需要分兩種情況處理:

      • 如果 n >= max_n(通常情況下這兩個值是相等的),則接受該提案并回復消息(P2b msg)。

      • 如果 n < max_n,則忽略該 accept 消息或者回復一個錯誤(P2b error)。

      • Free:沒有任何一個 Acceptor 的回復消息中附帶已被接受的提案,意味著當前流程中還沒有提案值被最終接受,此時 Proposer 可以自由地選擇提案值 Value,最后發送一個包含 (n, v) 提案的 accept 請求消息(P2a msg)給 Acceptors 集合。

      • Forced:某些 Acceptors 的回復消息中附帶已被接受的提案,那么 Proposer 必須強制使用這些回復消息中編號最大的提案 Value 作為自己的提案值,最后發送一個包含 (n, v) 提案的 accept 請求消息(P2a msg)給 Acceptors 集合。

    學習過程

    選擇過程結束之后,我們得到了一個提案值,接下來就是要讓集群中的所有 Learner 『學習』到這個值了,以求達到集群的共識。

    Learner 學習提案值的方式可以分成三種:

  • 任意一個 Acceptor 接受了一個提案后就立刻將該提案發送給所有 Learner。優點:Learner 能實時學習到被 Paxos 流程選定的 Value;缺點:網絡通信次數太多,如果有 N 個 Acceptors 和 M 個 Learner,則需要的網絡通信是 N*M 次。

  • 設置一個主 Learner,Acceptor 接受了一個提案后只將該提案發送給主 Learner,主 Learner 再轉發給剩下的 Learners。優點:網絡通信次數只需 N+M-1 次;缺點:主 Learner 有單點故障的風險。

  • Acceptor 接受了一個提案后將該提案發送給一個 Learner 集合,由這個集合去通知剩下的 Learners。優點:用集合替代單點,可靠性更高;缺點:增加系統復雜度,需要維護一個 Learner 小集群。

  • 至此,我們就推導出了整個 Paxos 算法的流程:

    算法證明

    這一節我們來證明 Paxos 算法的正確性。

    上一節我們已經提煉出來了 Paxos 的基本命題 P1,并通過歸約 P1 得到了約束性更強的另外兩個命題 P2 和 P3,根據歸約的原理,我們知道 P3 可以最終推導出 P1,也就是說如果要證明 Paxos 的基本命題 P1,只需要證明 P3 即可。為什么之前我們要不斷強化 Paxos 的命題呢?因為從數學的層面來講,一個具有更強約束(更多假設)的命題一般會更容易證明。

    現在我們把 P1, P2 和 P3 用更嚴格的數學語言來描述:

    P1. 在一次 Paxos 流程中,如果一個包含 (n, v) 的提案被選定(Chosen),那么存在未來被選定的提案 (k, v1),必然滿足 k > n,v1 = v。

    P2. 在一次 Paxos 流程中,如果一個包含 (n, v) 的提案被選定(Chosen),那么存在未來被超過半數的 Acceptors 接受的提案 (k, v1),必然滿足 k > n,v1 = v。

    P3. 在一次 Paxos 流程中,如果一個包含 (n, v) 的提案被選定(Chosen),那么存在未來由 Proposer 提議的提案 (k, v1),必然滿足 k > n,v1 = v。

    現在我們利用數學歸納法來證明 P3:

    假設 k = m 時 P3 成立,由于 (n, v) 已經是被選定的提案,因此 Proposer 發起的從 n 到 k 的提案中的 Value 都會是 v,其中 m >= n,那么根據歸約的原理可證 k = m 時 P1 也成立

    現在令 k = m+1,Proposer 發送帶編號 k 的 prepare 請求消息到 Acceptors 集合。

    由于此前已經有了選定的提案,那么根據 Paxos 的約束 C2 可知參與這一個提案投票的 Acceptors 集合必定和上一個集合有重合。

    根據 Acceptors 集合重疊和 Paxos 的 P1b 階段可知,回復的消息中必定附帶有已被大多數 Acceptors 接受的提案 (i, v0)。

    然后根據 P2a 階段,Proposer 提案 (k, v1),其中 v1 = v0。

    還是根據 P1b,可知 i 是所有回復消息里編號最大的,可得 i >= m,又根據 P1a 可知 i < k,因此可以得出提案 (i, v0) 中有 v0 = v。

    可知當 k = m+1 時,提案 (k, v1) 中的 v1 = v。

    根據數學歸納法的原理,我們還需要找到一個特例來使得命題成立,然后由特例推廣到普遍,我們這里選擇 k = 1 作為特例,證明 k = 1 時 P3 成立:根據 Paxos 的約束 C1 易知在 n = 0,k = 1 的場景下,P3 成立。

    因此可根據數學歸納法基于 k = 1 進行推廣至 k = m(m 代表任意自然數),最后 P3 命題得證。

    再由歸約的原理可知,P3 可推導出 P2,最后 P2 推導出 P1。至此, Paxos 算法原理正確性的證明完成。

    上述的證明只是一種比較簡單且粗淺的證明方法,但是對于工程師理解 Paxos 原理來說已經足夠了,如果希望進一步學習 Paxos 原理的嚴格數學證明,可以參閱 Leslie Lamport 的原始論文《The PartTime Parliament》,里面給出了 Paxos 算法的嚴格數學證明。

    Multi-Paxos

    自 Lamport 于 1990 年在論文《The PartTime Parliament》中提出 Paxos 算法之后,這個算法一直被評價為難以理解和實現,這篇論文中運用了大量的數學對 Paxos 的原理進行證明,而又由于 Lamport 在論文里用講故事的形式解釋 Paxos,進一步增大了人們徹底理解 Paxos 的難度,事實上 Lamport 的這篇論文也因此在發表過程中一波三折,這里不展開,有興趣的讀者可以自行去了解這段這段背景故事。

    因為業界在理解 Paxos 算法上持續的怨聲載道,Lamport 在 2001 年發表了論文《Paxos Made Simple》,對原論文進行精簡,以更通俗易懂的語言和形式闡述 Paxos 算法,并在其中提出了更加具備工程實踐性的 Multi-Paxos 的思想。

    關于 Paxos 難以理解的問題上,我個人的一點愚見是:Paxos 算法的思想其實并不難理解,真正難的地方是:

  • Paxos 背后那一套完整的數學原理和證明

  • 在復雜分布式環境將 Paxos 進行工程落地

  • 我個人建議的 Paxos 學習資料是:《Paxos Made Simple》,《Paxos Made Live - An Engineering Perspective》以及 Paxos lecture (Raft user study)。第一篇論文可以說是 Lamport ?1990 年那篇最初的論文的精簡版,可讀性提高了很多,論文里也沒有使用任何數學公式,只需一點英文基礎就可以通讀,第二篇論文講的則是 Google 內部基于 Multi-Paxos 實現的分布式鎖機制和小文件存儲系統,這是業界較早的實現了 Multi-Paxos 的大規模線上系統,十分具有參考性,最后的 Youtube 視頻則是 Raft 的作者 Diego Ongaro 為了對比 Raft 和 Multi-Paxos 的學習的難易程度而做的,非常適合作為學習 Paxos 和 Raft 的入門資料。

    從上一節可知 Basic Paxos 算法有幾個天然缺陷:

    • 只能就單個值(Value)達成共識,不支持多值共識。在實際的工程實踐中往往是需要對一系列的操作達成共識,比如分布式事務,由很多執行命令組成。

    • 至少需要 2 輪往返 4 次 prepareaccept 網絡通信才能基于一項提案達成共識。對于一個分布式系統來說,網絡通信是最影響性能的因素之一,過多的網絡通信往往會導致系統的性能瓶頸。

    • 不限制 Proposer 數量導致非常容易發生提案沖突。極端情況下,多 Proposer 會導致系統出現『活鎖』,破壞分布式共識算法的兩大約束之一的活性(liveness)。

    關于第三點,前文提到分布式共識算法必須滿足兩個最核心的約束:安全性(safety)和活性(liveness),從上一節我們可以看出 Basic Paxos 主要著重于 safety,而對 liveness 并沒有進行強約束,讓我們設想一種場景:兩個 Proposers (記為 P1 和 P2) 輪替著發起提案,導致兩個 Paxos 流程重疊了:

  • 首先,P1 發送編號 N1 的 prepare 請求到 Acceptors 集合,收到了過半的回復,完成階段一。

  • 緊接著 P2 也進入階段一,發送編號 N2 的 prepare 請求到過半的 Acceptors 集合,也收到了過半的回復,Acceptors 集合承諾不再接受編號小于 N2 的提案。

  • 然后 P1 進入階段二,發送編號 N1 的 accept 請求被 Acceptors 忽略,于是 P1 重新進入階段一發送編號 N3 的 prepare 請求到 Acceptors 集合,Acceptors 又承諾不再接受編號小于 N3 的提案。

  • 緊接著 P2 進入階段二,發送編號 N2 的 accept 請求,又被 Acceptors 忽略。

  • 不斷重復上面的過程......

  • 在極端情況下,這個過程會永遠持續,導致所謂的『活鎖』,永遠無法選定一個提案,也就是 liveness 約束無法滿足。

    為了解決這些問題,Lamport 在《Paxos Made Simple》論文中提出了一種基于 Basic Paxos 的 Multi-Paxos 算法思想,并基于該算法引出了一個分布式銀行系統狀態機的實現方案,感興趣的讀者不妨看一下。

    Multi-Paxos 算法在 Basic Paxos 的基礎上做了兩點改進:

  • 多 Paxos 實例:針對每一個需要達成共識的單值都運行一次 Basic Paxos 算法的實例,并使用 Instance ID 做標識,最后匯總完成多值共識。

  • 選舉單一的 Leader Proposer:選舉出一個 Leader Proposer,所有提案只能由 Leader Proposer 來發起并決策,Leader Proposer 作為 Paxos 算法流程中唯一的提案發起者,『活鎖』將不復存在。此外,由于單一 Proposer 不存在提案競爭的問題,Paxos 算法流程中的階段一中的 prepare 步驟也可以省略掉,從而將兩階段流程變成一階段,大大減少網絡通信次數。

  • 關于多值共識的優化,如果每一個 Basic Paxos 算法實例都設置一個 Leader Proposer 來工作,還是會產生大量的網絡通信開銷,因此,多個 Paxos 實例可以共享同一個 Leader Proposer,這要求該 Leader Proposer 必須是穩定的,也即 Leader 不應該在 Paxos 流程中崩潰或改變。

    由于 Lamport 在論文中提出的 Multi-Paxos 只是一種思想而非一個具體算法,因此關于 Multi-Paxos 的很多細節他并沒有給出具體的實現方案,有些即便給出了方案也描述得不是很清楚,比如他在論文中最后一節提出的基于銀行系統的狀態機中的多 Paxos 實例處理,雖然給了具體的論述,但是在很多關鍵地方還是沒有指明,這也導致了后續業界里的 Multi-Paxos 實現各不相同。

    我們這里用 Google Chubby 的 Multi-Paxos 實現來分析這個算法。

    首先,Chubby 通過引入 Master 節點,實現了 Lamport 在論文中提到的 single distinguished proposer,也就是 Leader Proposer,Leader Proposer 作為 Paxos 算法流程中唯一的提案發起者,規避了多 Proposers 同時發起提案的場景,也就不存在提案沖突的情況了,從而解決了『活鎖』的問題,保證了算法的活性(liveness)。

    Lamport 在論文中指出,選擇 Leader Proposer 的過程必須是可靠的,那么具體如何選擇一個 Leader Proposer 呢?在 Chubby 中,集群利用 Basic Paxos 算法的共識功能來完成對 Leader Proposer 的選舉,這個實現是具有天然合理性的,因為 Basic Paxos 本身就是一個非常可靠而且經過嚴格數學證明的共識算法,用來作為選舉算法再合適不過了,在 Multi-Paxos 流程期間,Master 會通過不斷續租的方式來延長租期(Lease)。比如在實際場景中,一般在長達幾天的時期內都是同一個服務器節點作為 Master。萬一 Master 故障了,那么剩下的 Slaves 節點會重新發起 Paxos 流程票選出新的 Master,也就是說主節點是一直存在的,而且是唯一的。

    此外,Lamport 在論文中提到的過一種優化網絡通信的方法:“當 Leader Proposer 處于穩定狀態時,可以跳過階段一,直接進入階段二”,在 Chubby 中也實現了這個優化機制,Leader ?Proposer 在為多個 Paxos 算法實例服務的時候直接跳過階段一進入階段二,只發送 accept 請求消息給 Acceptors 集合,將算法從兩階段優化成了一階段,大大節省網絡帶寬和提升系統性能。

    最后,Multi-Paxos 是一個"腦裂"容錯的算法思想,就是說當 Multi-Paxos 流程中因為網絡問題而出現多 Leaders 的情況下,該算法的安全性(safety )約束依然能得到保證,因為在這種情況下,Multi-Paxos 實際上是退化成了 Basic Paxos,而 Basic Paxos 天然就支持多 Proposers。

    在分布式事務中,Paxos 算法能夠提供比兩階段提交協議更加可靠的一致性提交:通過將提交/放棄事務的決定從原來兩階段協議中單一的協調者轉移到一個由 Proposer + Acceptors 組成的集群中。Lamport 曾經發表過一篇《Consensus on Transaction Commit》的論文,通過將兩階段提交協議和基于 Paxos 實現的分布式提交協議做對比,對基于 Paxos 實現的提交協議有非常精彩的論述,感興趣的讀者不妨一讀

    Raft

    Raft 算法實際上是 Multi-Paxos 的一個變種,通過新增兩個約束:

  • 追加日志約束:Raft 中追加節點的日志必須是串行連續的,而 Multi-Paxos 中則可以并發追加日志(實際上 Multi-Paxos 的并發也只是針對日志追加,最后應用到內部 State Machine 的時候還是必須保證順序)。

  • 選主限制:Raft 中只有那些擁有最新、最全日志的節點才能當選 Leader 節點,而 Multi-Paxos 由于允許并發寫日志,因此無法確定一個擁有最新、最全日志的節點,因此可以選擇任意一個節點作為 Leader,但是選主之后必須要把 Leader 節點的日志補全。

  • 基于這兩個限制,Raft 算法的實現比 Multi-Paxos 更加簡單易懂,不過由于 Multi-Paxos 的并發度更高,因此從理論上來說 Multi-Paxos 的性能會更好一些,但是到現在為止業界也沒有一份權威的測試報告來支撐這一觀點。

    對比一下 Multi-Paxos 和 Raft 下集群中可能存在的日志順序:

    可以看出,Raft 中永遠滿足這樣一個約束:follower log 一定會是 leader log 的子集并且順序一定是連續的,而 Multi-Paxos 則不一定滿足這個約束,日志記錄通常是亂序的。

    由于 Raft 的核心思想源自 Multi-Paxos,在實現過程中做了很多改進優化,然而萬變不離其宗,我相信理解了 Multi-Paxos 之后再去學習 Raft 會事半功倍(Raft 在誕生之初也是打著"容易理解"的旗號來對標 Paxos 的),由于前面已經深度剖析過 Paxos 算法的流程和原理了,礙于本文的篇幅所限,這里就不再對 Raft 算法的細節進行深入探討了,如果有意深入學習 Raft,可以從 The Raft Consensus Algorithm 處找到相關的論文、源碼等資料進行全面的學習。

    最后有一些概念要澄清一下,Basic Paxos 是一個經過了嚴格數學證明的分布式共識算法,但是由于前文提到的 Basic Paxos 算法應用在實際工程落地中的種種問題,現實中幾乎沒有直接基于 Basic Paxos 算法實現的分布式系統,絕大多數都是基于 Multi-Paxos,然而 Multi-Basic 僅僅是一種對 Basic Paxos 的延伸思想而非一個具體算法,問題在于目前業界并沒有一個統一的 Multi-Paxos 實現標準,因此 Multi-Paxos 的工程實現是建立在一個未經嚴格證明的前提之上的,工程實現最終的正確性只能靠實現方自己去驗證,而 Raft 則是一個具有統一標準實現的、正確性已經過嚴格證明的具體算法,因此在分布式系統的工程實踐中大多數人往往還是會選擇 Raft 作為底層的共識算法。

    算法類型

    需要特別指出的一點是,根據解決的場景是否允許拜占庭(Byzantine)錯誤,共識算法可以分為 Crash Fault Tolerance (CFT) 和 Byzantine Fault Tolerance(BFT)兩類。

    對于非拜占庭錯誤的情況,已經存在不少經典的算法,包括 Paxos(1990 年)、Raft(2014 年)及其變種等。這類容錯算法往往性能比較好,處理較快,容忍不超過一半的故障節點。

    對于要能容忍拜占庭錯誤的情況,包括 PBFT(Practical Byzantine Fault Tolerance,1999 年)為代表的確定性系列算法、PoW(1997 年)為代表的概率算法等。確定性算法一旦達成共識就不可逆轉,即共識是最終結果;而概率類算法的共識結果則是臨時的,隨著時間推移或某種強化,共識結果被推翻的概率越來越小,最終成為事實上結果。拜占庭類容錯算法往往性能較差,容忍不超過 1/3 的故障節點。

    本文主要討論的分布式共識算法是 CFT 類算法,畢竟對于大多數分布式系統來說,集群節點和網絡消息一般都是可控的,系統只會出現節點故障而不會出現像拜占庭錯誤那樣偽造的、欺騙性的網絡消息,在這種場景下,CFT 類算法更具有現實意義;BFT/PBFT 類算法更多是用在系統被惡意入侵,故意偽造網絡消息的場景里。

    并發控制

    在分布式事務中,集群中的每個服務器節點要管理很多資源對象,每個節點必須保證在并發事務訪問這些資源對象時,它們能夠始終保持一致性。因此,每個服務器節點需要對自己的管理的資源對象應用一定的并發控制機制。分布式事務中需要所有服務器節點共同保證事務以串行等價的的方式執行。

    也就是說,如果事務 T 對某一個服務器節點上的資源對象 S 的并發訪問在事務 U 之前,那么我們需要保證在所有服務器節點上對 S 和其他資源對象的沖突訪問,T 始終在 U 之前。

    鎖并發控制

    在分布式事務中,某個對象的鎖總是本地持有的(在同一個服務器節點上)。是否加鎖是由本地鎖管理器(Local Lock Manager,LLM)決定的。LLM 決定是滿足客戶端持鎖的請求,還是阻塞客戶端發起的分布式事務。但是,事務在所有服務器節點上被提交或者放棄之前,LLM 不能釋放任何鎖。在使用加鎖機制的并發控制中,原子提交協議在進行的過程中資源對象始終被鎖住,并且是排他鎖,其他事務無法染指這些資源對象。但如果事務在兩階段提交協議的階段一就被放棄,則互斥鎖可以提前釋放。

    由于不同服務器節點上的 LLM 獨立設置資源對象鎖,因此,對于不同的事務,它們加鎖的順序也可能出現不一致。考慮一個場景:事務 T 和 U在服務器 X 和 Y 之間的交錯執行:

  • 事務 T 鎖住了服務器節點 X 上的資源對象 A,做寫入操作;

  • 事務 U 鎖住了服務器節點 Y 上的資源對象 B,做寫入操作;

  • 事務 T 試圖讀取服務器節點 Y 上的資源對象 B,此時 B 被事務 U 鎖住,因此 T 等待鎖釋放;

  • 事務 U 試圖讀取服務器節點 X 上的資源對象 A,此時 A 被事務 T 鎖住,因此 U 等待鎖釋放。

  • 在服務器節點 X 上,事務 T 在事務 U 之前;而在服務器節點 Y 上,事務 U 在事務 T 之前。這種不一致的事務次序導致了事務之間的循環依賴,從而引起分布式死鎖。分布式死鎖需要通過特定的方法/算法來檢測并解除,一旦檢測到死鎖,則必須放棄其中的某個事務來解除死鎖,然后通知事務協調者,它將會放棄該事務所涉及的所有參與者上的事務。

    時間戳并發控制

    對于單一服務器節點的事務來說,協調者在每個事務啟動時會為其分配一個全局唯一的時間戳。通過按照訪問資源對象的事務時間戳順序提交資源對象的版本來強制保證以事務執行的串行等價性。在分布式事務中,協調者必須保證每個事務都會附帶全局唯一的時間戳。全局唯一的時間戳由事務訪問的第一個協調者發給客戶端。如果任意一個服務器節點上的資源對象執行了事務中的一個操作,那么事務時間戳會被發送給該服務器節點上的協調者。

    分布式事務中的所有服務器節點共同保證事務以串行等價的方式執行。例如,如果在某服務器節點上,由事務 U 訪問的資源對象版本在事務 T 訪問之后提交;而在另一個服務器節點上,事務 T 和事務 U 又訪問了同一個資源對象,那么它們也必須按照相同的次序提交資源對象。為了保證所有服務器節點上的事務執行的相同順序,協調者必須就時間戳排序達成一致。時間戳是一個二元組 < 本地時間戳,服務器 ID > 對。在時間戳的比較排序過程中,首先比較本地時間戳,然后再比較服務器 ID。

    一個可靠的時間戳并發控制應該保證即使各個服務器節點之間的本地時間不同步,也能保證事務之間的相同順序。但是考慮到效率,各個協調者之間的時間戳還是最好還是要求大致同步。這樣的話,事務之間的順序通常與它們實際開始的時間順序相一致。可以利用一些本地物理時鐘同步方法來保證時間戳的大致同步。

    如果決定利用時間戳機制進行分布式事務的并發控制,那么還需要通過某些方法來解決事務沖突問題。如果為了解決沖突需要放棄某個事務時,相應的協調者會收到通知,并且它將在所有的參與者上放棄該事務。這樣,如果事務能夠堅持到客戶端發起提交請求命令的那個時候,那么這個事務就總能被提交。因此在兩階段提交協議中,正常情況下參與者都會同意提交,唯一一種不同意提交的情況是參與者在事務執行過程中曾經崩潰過。

    樂觀并發控制

    加鎖機制這一類悲觀并發控制有許多明顯的缺陷:

    • 鎖的維護帶來了很多新的開銷。這些開銷在不支持對共享數據并發訪問的系統中是不存在的。即使是只讀事務(如查詢),就算這一類事務不會改變數據的完整性,卻仍然需要利用鎖來保證數據在讀取過程中不會被其他事務修改,然而鎖卻只在最極端的情況下才會發揮作用。

    • 鎖機制非常容易引發死鎖。預防死鎖會嚴重降低并發度,因此必須利用超時或者死鎖檢測來解除死鎖,但這些死鎖解除方案對于交互式的程序來說并不是很理想。

    • 鎖周期過長。為了避免事務的連鎖(雪崩)放棄,鎖必須保留到事務結束之時才能釋放,這再一次嚴重降低了系統的并發度。

    由于鎖這一類的悲觀并發控制有上述的種種弊端,因此研究者們提出了另一種樂觀并發控制的機制,以求規避鎖機制的天然缺陷,研究者們發現這樣的一個現象:在大多數應用中兩個客戶端事務訪問同一個資源對象的可能性其實很低,事務總是能夠成功執行,就好像事務之間不存在沖突一樣。

    所以事務的樂觀并發控制的基本思路就是:各個并發事務只有在執行完成之后并且發出 closeTransaction 請求時,再去檢測是否有沖突,如果確實存在沖突,那么就放棄一些事務,然后讓客戶端重新啟動這些事務進行重試。

    在樂觀并發控制中,每個事務在提交之前都必須進行驗證。事務在驗證開始時首先要附加一個事務號,事務的串行化就是根據這些事務號的順序實現的。分布式事務的驗證由一組獨立的服務器節點共同完成,每個服務器節點驗證訪問自己資源對象的事務。這些驗證在兩階段提交協議的第一個階段進行。

    關于分布式事務的并發控制就暫時介紹到這里,如果想要繼續深入學習更多并發控制的細節,可以深入閱讀《分布式系統:概念與設計》、《數據庫系統實現》和《數據庫系統概念》等書籍或者其他資料。

    總結

    本文通過講解 BASE 原則兩階段原子提交協議三階段原子提交協議Paxos/Multi-Paxos 分布式共識算法的原理與證明Raft 分布式共識算法分布式事務的并發控制等內容,為讀者全面而又深入地講解分析了分布式事務/系統的底層核心原理,特別是通過對原子提交協議中的 2PC/3PC 的闡述和分析,以及對分布式共識算法 Paxos 的原理剖析和正確性的證明,最后還有對分布式事務中幾種并發控制的介紹,相信能夠讓讀者對分布式事務/系統底層的一致性和并發控制原理有一個深刻的認知,對以后學習和理解分布式系統大有裨益。

    本文不僅僅是簡單地介紹分布式事務和分布式系統的底層原理,更是在介紹原理的同時,通過層層遞進的方式引導讀者去真正地理解分布式系統的底層原理和設計思路,而非讓讀者死記硬背一些概念,所以希望通過這篇拋磚引玉的文章,能夠對本文讀者在以后學習、操作甚至是設計分布式系統以及分布式事務時的思路有所開拓。

    參考&延伸

    • ACID

    • Eventual consistency

    • Atomic commit

    • A Two-Phase Commit Protocol and its Performance

    • The PartTime Parliament

    • Paxos Made Simple

    • Fast Paxos

    • The Performance of Paxos and Fast Paxos

    • Paxos Made Live - An Engineering Perspective

    • Paxos (computer science)

    • The Chubby lock service for loosely-coupled distributed systems

    • Consensus on Transaction Commit

    • Life beyond Distributed Transactions: an Apostate’s Opinion

    • In Search of an Understandable Consensus Algorithm

    • Paxos lecture (Raft user study)

    • Distributed Systems: Concepts and Design

    • How to Build a Highly Available System Using Consensus

    • 數學歸納法

    • 共識算法

    • Distributed Transaction Processing: The XA Specification

    References

    [1]?DTP Model:?http://pubs.opengroup.org/onlinepubs/009680699/toc.pdf
    [2]?《The PartTime Parliament》:?https://lamport.azurewebsites.net/pubs/lamport-paxos.pdf
    [3]?《Paxos Made Simple》:?https://lamport.azurewebsites.net/pubs/paxos-simple.pdf
    [4]?歸約:?https://zh.wikipedia.org/wiki/%E6%AD%B8%E7%B4%84
    [5]?《The PartTime Parliament》:?https://lamport.azurewebsites.net/pubs/lamport-paxos.pdf
    [6]?《The PartTime Parliament》:?https://lamport.azurewebsites.net/pubs/lamport-paxos.pdf
    [7]?《Paxos Made Simple》:?https://lamport.azurewebsites.net/pubs/paxos-simple.pdf
    [8]?《Paxos Made Simple》:?https://lamport.azurewebsites.net/pubs/paxos-simple.pdf
    [9]?《Paxos Made Live - An Engineering Perspective》:?https://read.seas.harvard.edu/~kohler/class/08w-dsi/chandra07paxos.pdf
    [10]?Paxos lecture (Raft user study):?https://www.youtube.com/watch?v=JEpsBg0AO6o
    [11]?《Paxos Made Simple》:?https://lamport.azurewebsites.net/pubs/paxos-simple.pdf
    [12]?《Consensus on Transaction Commit》:?https://lamport.azurewebsites.net/video/consensus-on-transaction-commit.pdf
    [13]?The Raft Consensus Algorithm:?https://raft.github.io
    [14]?ACID:?https://en.wikipedia.org/wiki/ACID
    [15]?Eventual consistency:?https://en.wikipedia.org/wiki/Eventual_consistency
    [16]?Atomic commit:?https://en.wikipedia.org/wiki/Atomic_commit
    [17]?A Two-Phase Commit Protocol and its Performance :?https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=558282
    [18]?The PartTime Parliament:?https://lamport.azurewebsites.net/pubs/lamport-paxos.pdf
    [19]?Paxos Made Simple:?https://lamport.azurewebsites.net/pubs/paxos-simple.pdf
    [20]?Fast Paxos:?https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-2005-112.pdf
    [21]?The Performance of Paxos and Fast Paxos:?https://arxiv.org/pdf/1308.1358.pdf
    [22]?Paxos Made Live - An Engineering Perspective:?https://read.seas.harvard.edu/~kohler/class/08w-dsi/chandra07paxos.pdf
    [23]?Paxos (computer science):?https://en.wikipedia.org/wiki/Paxos_(computer_science)
    [24]?The Chubby lock service for loosely-coupled distributed systems:?https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/chubby-osdi06.pdf
    [25]?Consensus on Transaction Commit:?https://lamport.azurewebsites.net/video/consensus-on-transaction-commit.pdf
    [26]?Life beyond Distributed Transactions: an Apostate’s Opinion:?https://www.ics.uci.edu/~cs223/papers/cidr07p15.pdf
    [27]?In Search of an Understandable Consensus Algorithm:?https://raft.github.io/raft.pdf
    [28]?Paxos lecture (Raft user study):?https://www.youtube.com/watch?v=JEpsBg0AO6o
    [29]?Distributed Systems: Concepts and Design:?https://ce.guilan.ac.ir/images/other/soft/distribdystems.pdf
    [30]?How to Build a Highly Available System Using Consensus:?https://www.microsoft.com/en-us/research/uploads/prod/1996/10/Acrobat-58-Copy.pdf
    [31]?數學歸納法:?https://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6%E5%BD%92%E7%BA%B3%E6%B3%95
    [32]?共識算法:?https://yeasy.gitbook.io/blockchain_guide/04_distributed_system/algorithms
    [33]?Distributed Transaction Processing: The XA Specification:?https://pubs.opengroup.org/onlinepubs/009680699/toc.pdf

    - END -


    看完一鍵三連在看轉發,點贊

    是對文章最大的贊賞,極客重生感謝你

    推薦閱讀

    C語言登頂!|2021年7月編程語言排行榜

    深入理解 MySQL 索引底層原理

    JVM底層原理解析

    覺得內容還不錯的話,給我點個?“在看”?唄!

    總結

    以上是生活随笔為你收集整理的分布式事务之底层原理揭秘的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产精品亚洲lv粉色 | 亚洲精品美女久久久久久久 | 国产av无码专区亚洲a∨毛片 | 午夜精品久久久内射近拍高清 | 无码av免费一区二区三区试看 | 妺妺窝人体色www在线小说 | 国产av无码专区亚洲a∨毛片 | 综合网日日天干夜夜久久 | 特级做a爰片毛片免费69 | 99国产精品白浆在线观看免费 | 一本久久a久久精品亚洲 | 欧美午夜特黄aaaaaa片 | 欧美老妇与禽交 | 4hu四虎永久在线观看 | 亚洲春色在线视频 | 风流少妇按摩来高潮 | 精品aⅴ一区二区三区 | 少妇性l交大片欧洲热妇乱xxx | 国内精品人妻无码久久久影院 | 永久免费观看国产裸体美女 | 人妻插b视频一区二区三区 | 国产精品第一区揄拍无码 | 国产精品亚洲一区二区三区喷水 | 激情爆乳一区二区三区 | 露脸叫床粗话东北少妇 | 国产香蕉尹人视频在线 | 久久久久亚洲精品男人的天堂 | 亚洲精品一区国产 | 又大又黄又粗又爽的免费视频 | 又黄又爽又色的视频 | 国产精品无码一区二区桃花视频 | 国产精品爱久久久久久久 | 欧美国产亚洲日韩在线二区 | 精品无码av一区二区三区 | 中文字幕日韩精品一区二区三区 | 亚洲 a v无 码免 费 成 人 a v | 夜夜躁日日躁狠狠久久av | 欧美成人免费全部网站 | 国产乱码精品一品二品 | 国产莉萝无码av在线播放 | 欧美国产日韩亚洲中文 | 日日噜噜噜噜夜夜爽亚洲精品 | 久久99精品久久久久久动态图 | 欧美人与物videos另类 | 国産精品久久久久久久 | 欧美 亚洲 国产 另类 | a片免费视频在线观看 | 300部国产真实乱 | 亚洲色在线无码国产精品不卡 | 日本乱人伦片中文三区 | 国产成人无码区免费内射一片色欲 | 精品久久久中文字幕人妻 | 成 人 免费观看网站 | 久久天天躁狠狠躁夜夜免费观看 | 丰满岳乱妇在线观看中字无码 | 久久这里只有精品视频9 | 久久伊人色av天堂九九小黄鸭 | 乱人伦人妻中文字幕无码久久网 | 无码人妻黑人中文字幕 | 一本色道婷婷久久欧美 | 任你躁在线精品免费 | а√天堂www在线天堂小说 | 性色av无码免费一区二区三区 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 女人高潮内射99精品 | 女人被爽到呻吟gif动态图视看 | 粉嫩少妇内射浓精videos | 伊人久久婷婷五月综合97色 | 亚洲日韩av片在线观看 | 国产午夜无码精品免费看 | 亚洲性无码av中文字幕 | 丰满诱人的人妻3 | 日韩av无码中文无码电影 | 国产亚洲精品久久久久久 | 少妇无码一区二区二三区 | 亚洲欧美中文字幕5发布 | 免费播放一区二区三区 | 性欧美videos高清精品 | 76少妇精品导航 | 蜜桃视频韩日免费播放 | 欧美日韩久久久精品a片 | 亚洲欧洲日本综合aⅴ在线 | 亚洲精品国产a久久久久久 | 亚洲一区av无码专区在线观看 | 一本无码人妻在中文字幕免费 | 亚洲成熟女人毛毛耸耸多 | 欧美精品在线观看 | 日本精品人妻无码77777 天堂一区人妻无码 | 亚洲欧美国产精品久久 | 99精品国产综合久久久久五月天 | 性做久久久久久久免费看 | 天天av天天av天天透 | 色婷婷久久一区二区三区麻豆 | 国产片av国语在线观看 | 日产国产精品亚洲系列 | 国产尤物精品视频 | 欧美老妇与禽交 | 无码av免费一区二区三区试看 | 欧美一区二区三区视频在线观看 | 无码一区二区三区在线观看 | 免费男性肉肉影院 | 国产免费久久久久久无码 | 女高中生第一次破苞av | 欧美亚洲国产一区二区三区 | 综合网日日天干夜夜久久 | 欧美人与牲动交xxxx | 麻豆av传媒蜜桃天美传媒 | 欧美激情内射喷水高潮 | 伊人久久婷婷五月综合97色 | 国产精品亚洲lv粉色 | 小sao货水好多真紧h无码视频 | 国产激情艳情在线看视频 | 色欲综合久久中文字幕网 | 99国产精品白浆在线观看免费 | 国内精品人妻无码久久久影院 | 波多野结衣一区二区三区av免费 | 荡女精品导航 | 黑人玩弄人妻中文在线 | 国产亚洲精品久久久久久久久动漫 | 午夜性刺激在线视频免费 | 成人免费视频一区二区 | 77777熟女视频在线观看 а天堂中文在线官网 | 亚洲欧美国产精品专区久久 | 日本xxxx色视频在线观看免费 | 久久午夜无码鲁丝片秋霞 | 免费看男女做好爽好硬视频 | 台湾无码一区二区 | 日韩 欧美 动漫 国产 制服 | 欧美 日韩 亚洲 在线 | 人妻天天爽夜夜爽一区二区 | 无套内谢的新婚少妇国语播放 | 国语精品一区二区三区 | 成人性做爰aaa片免费看 | 国产成人无码av片在线观看不卡 | 波多野结衣aⅴ在线 | 中文字幕精品av一区二区五区 | 国产精品人人妻人人爽 | 国产精品久久久久久亚洲毛片 | 中文无码精品a∨在线观看不卡 | 性啪啪chinese东北女人 | 在线观看免费人成视频 | 99er热精品视频 | 性欧美牲交xxxxx视频 | 99久久婷婷国产综合精品青草免费 | 亚洲熟妇色xxxxx亚洲 | 国语自产偷拍精品视频偷 | 欧美 日韩 人妻 高清 中文 | 久久国产精品精品国产色婷婷 | 中文字幕无线码 | v一区无码内射国产 | 午夜免费福利小电影 | 国产内射老熟女aaaa | 中文字幕人妻无码一区二区三区 | 欧美日韩精品 | 久久精品无码一区二区三区 | 国产成人无码区免费内射一片色欲 | 亚洲精品久久久久中文第一幕 | 日本欧美一区二区三区乱码 | 任你躁在线精品免费 | 久久久久久亚洲精品a片成人 | 国产97在线 | 亚洲 | 天堂а√在线地址中文在线 | www国产精品内射老师 | 少妇无码av无码专区在线观看 | 亚洲欧洲无卡二区视頻 | 色偷偷人人澡人人爽人人模 | 亚洲高清偷拍一区二区三区 | 国产欧美精品一区二区三区 | 欧美日韩亚洲国产精品 | 无码人妻少妇伦在线电影 | 欧美野外疯狂做受xxxx高潮 | 国产无套粉嫩白浆在线 | 国产乱码精品一品二品 | 一二三四在线观看免费视频 | 少妇人妻av毛片在线看 | 亚洲啪av永久无码精品放毛片 | 日欧一片内射va在线影院 | 色老头在线一区二区三区 | 国产内射爽爽大片视频社区在线 | 欧洲熟妇精品视频 | 激情综合激情五月俺也去 | 久久www免费人成人片 | 久久久精品欧美一区二区免费 | 人人爽人人爽人人片av亚洲 | 在线播放免费人成毛片乱码 | 露脸叫床粗话东北少妇 | 亚洲一区二区三区国产精华液 | 免费视频欧美无人区码 | 欧美大屁股xxxxhd黑色 | 国产精品99爱免费视频 | 狠狠色噜噜狠狠狠狠7777米奇 | 免费无码av一区二区 | 蜜臀av在线播放 久久综合激激的五月天 | 无码一区二区三区在线 | 伦伦影院午夜理论片 | 久久综合九色综合欧美狠狠 | 欧美成人家庭影院 | 亚洲国产精品一区二区第一页 | 国产一区二区三区影院 | 色婷婷av一区二区三区之红樱桃 | 亚洲日韩一区二区三区 | 丰满护士巨好爽好大乳 | 久久久婷婷五月亚洲97号色 | 国产在线精品一区二区三区直播 | 亚洲人成无码网www | 亚洲欧美日韩国产精品一区二区 | 高潮毛片无遮挡高清免费 | 蜜臀av无码人妻精品 | 亚洲成a人片在线观看无码3d | 中文字幕av伊人av无码av | 国产av久久久久精东av | 人妻插b视频一区二区三区 | 大色综合色综合网站 | 人人爽人人澡人人高潮 | 久久精品国产99久久6动漫 | 狠狠cao日日穞夜夜穞av | 日本xxxx色视频在线观看免费 | 久久99国产综合精品 | 亚洲小说图区综合在线 | 狠狠噜狠狠狠狠丁香五月 | 好男人社区资源 | 国产性生大片免费观看性 | 乱中年女人伦av三区 | 国产精品-区区久久久狼 | 亚洲成a人一区二区三区 | 欧美35页视频在线观看 | 人人妻人人藻人人爽欧美一区 | 亚洲 欧美 激情 小说 另类 | 日本熟妇人妻xxxxx人hd | 人妻体内射精一区二区三四 | 欧美性色19p | 狂野欧美性猛交免费视频 | 人人妻在人人 | 性色欲网站人妻丰满中文久久不卡 | 国产亚洲精品久久久久久久久动漫 | 一二三四社区在线中文视频 | 国产精品人妻一区二区三区四 | 人人澡人人妻人人爽人人蜜桃 | 18禁黄网站男男禁片免费观看 | 国产激情无码一区二区 | 欧美阿v高清资源不卡在线播放 | 欧美兽交xxxx×视频 | 中文字幕av无码一区二区三区电影 | 最近中文2019字幕第二页 | 国产小呦泬泬99精品 | 亚洲中文无码av永久不收费 | 亚洲午夜福利在线观看 | 无码午夜成人1000部免费视频 | 国产av无码专区亚洲awww | 四虎影视成人永久免费观看视频 | 国内揄拍国内精品人妻 | 激情五月综合色婷婷一区二区 | 中文字幕久久久久人妻 | 久久久久国色av免费观看性色 | 国产精品多人p群无码 | 亚洲阿v天堂在线 | 日韩av激情在线观看 | 伊人久久大香线焦av综合影院 | 无码帝国www无码专区色综合 | 大地资源网第二页免费观看 | 中文字幕av无码一区二区三区电影 | 一本久道久久综合狠狠爱 | 任你躁国产自任一区二区三区 | 少妇被粗大的猛进出69影院 | 免费无码av一区二区 | 成人无码精品1区2区3区免费看 | 丰满少妇熟乱xxxxx视频 | 久久99精品国产.久久久久 | 亚洲精品国产品国语在线观看 | 国产舌乚八伦偷品w中 | 欧美阿v高清资源不卡在线播放 | 亚洲娇小与黑人巨大交 | 无码国内精品人妻少妇 | 成人免费视频视频在线观看 免费 | 精品乱码久久久久久久 | 国产在线精品一区二区三区直播 | 国产精品久久久久9999小说 | 亚洲欧洲日本综合aⅴ在线 | 欧美变态另类xxxx | 成在人线av无码免观看麻豆 | 中文字幕无码av波多野吉衣 | 国产精品二区一区二区aⅴ污介绍 | 亚洲国产精品美女久久久久 | 少妇人妻大乳在线视频 | 亚洲狠狠色丁香婷婷综合 | 国产精品福利视频导航 | 久久久久久久女国产乱让韩 | 一本久久伊人热热精品中文字幕 | 大地资源中文第3页 | 国产suv精品一区二区五 | 波多野42部无码喷潮在线 | 亚洲精品国产精品乱码视色 | 国产艳妇av在线观看果冻传媒 | 鲁一鲁av2019在线 | 波多野42部无码喷潮在线 | 丰满护士巨好爽好大乳 | 国内精品一区二区三区不卡 | 亚洲区小说区激情区图片区 | 丁香啪啪综合成人亚洲 | 亚洲中文字幕无码一久久区 | 人人妻人人澡人人爽欧美精品 | 无码av免费一区二区三区试看 | 久久精品中文字幕一区 | 亚洲人成人无码网www国产 | 红桃av一区二区三区在线无码av | 丁香啪啪综合成人亚洲 | 国产av久久久久精东av | 午夜性刺激在线视频免费 | 精品国产一区二区三区av 性色 | 午夜性刺激在线视频免费 | 国产乱人偷精品人妻a片 | 久久国产精品二国产精品 | 亚洲熟妇色xxxxx欧美老妇y | 久久久久久久女国产乱让韩 | 精品国产青草久久久久福利 | 日韩av激情在线观看 | 曰本女人与公拘交酡免费视频 | 久久人人爽人人爽人人片av高清 | 人人妻人人澡人人爽人人精品 | 午夜精品久久久久久久 | 国产激情综合五月久久 | 大色综合色综合网站 | 无码av最新清无码专区吞精 | 小泽玛莉亚一区二区视频在线 | 亚洲综合无码一区二区三区 | 在线欧美精品一区二区三区 | 亚洲а∨天堂久久精品2021 | 日本www一道久久久免费榴莲 | 亚洲成a人一区二区三区 | 国产口爆吞精在线视频 | 未满成年国产在线观看 | 极品尤物被啪到呻吟喷水 | а√资源新版在线天堂 | 未满成年国产在线观看 | av无码久久久久不卡免费网站 | 久久熟妇人妻午夜寂寞影院 | 九九在线中文字幕无码 | 人人爽人人爽人人片av亚洲 | 国产偷国产偷精品高清尤物 | 国内精品久久久久久中文字幕 | 一二三四社区在线中文视频 | 成人女人看片免费视频放人 | 国产人成高清在线视频99最全资源 | 人妻熟女一区 | 日韩av无码一区二区三区 | 国产乱码精品一品二品 | 四虎国产精品一区二区 | 亚洲s码欧洲m码国产av | 色一情一乱一伦一视频免费看 | 亚洲国产精品无码久久久久高潮 | 激情内射亚州一区二区三区爱妻 | 成人精品一区二区三区中文字幕 | 亚洲色在线无码国产精品不卡 | 300部国产真实乱 | 精品国产av色一区二区深夜久久 | 亚洲精品综合五月久久小说 | 亚洲日本va午夜在线电影 | 大肉大捧一进一出好爽视频 | 88国产精品欧美一区二区三区 | 国产美女极度色诱视频www | 精品成在人线av无码免费看 | 久久久久久久人妻无码中文字幕爆 | 久久亚洲日韩精品一区二区三区 | 国产亚洲精品久久久久久 | 日本一本二本三区免费 | 国产黄在线观看免费观看不卡 | 日本丰满熟妇videos | 在线播放免费人成毛片乱码 | 国产精品手机免费 | 国产成人无码av在线影院 | 日韩精品久久久肉伦网站 | 国产精品人人爽人人做我的可爱 | 九九在线中文字幕无码 | 精品夜夜澡人妻无码av蜜桃 | 全球成人中文在线 | 国产无遮挡吃胸膜奶免费看 | 亚无码乱人伦一区二区 | 久久国产自偷自偷免费一区调 | 日韩欧美群交p片內射中文 | 欧美精品在线观看 | 天天爽夜夜爽夜夜爽 | 曰韩无码二三区中文字幕 | 久在线观看福利视频 | 图片小说视频一区二区 | 亚洲精品国偷拍自产在线观看蜜桃 | 婷婷色婷婷开心五月四房播播 | 中文字幕av无码一区二区三区电影 | 午夜性刺激在线视频免费 | 国产一区二区三区日韩精品 | 好屌草这里只有精品 | 亚欧洲精品在线视频免费观看 | 亚洲理论电影在线观看 | 国产情侣作爱视频免费观看 | 精品国产av色一区二区深夜久久 | 国产精品免费大片 | 亚洲小说春色综合另类 | 最新国产麻豆aⅴ精品无码 | 内射欧美老妇wbb | 国产精品丝袜黑色高跟鞋 | 国产香蕉尹人综合在线观看 | 99精品无人区乱码1区2区3区 | а√天堂www在线天堂小说 | 欧美成人免费全部网站 | 国内精品久久久久久中文字幕 | 亚洲人亚洲人成电影网站色 | 精品厕所偷拍各类美女tp嘘嘘 | 男女作爱免费网站 | 婷婷丁香六月激情综合啪 | 嫩b人妻精品一区二区三区 | 亚洲欧洲日本无在线码 | 国产精品人人妻人人爽 | 欧洲vodafone精品性 | 国产日产欧产精品精品app | 成 人 免费观看网站 | a国产一区二区免费入口 | 亚洲色大成网站www国产 | 亚洲欧美色中文字幕在线 | 丰满岳乱妇在线观看中字无码 | 强开小婷嫩苞又嫩又紧视频 | 国产欧美精品一区二区三区 | 久久午夜无码鲁丝片 | 色 综合 欧美 亚洲 国产 | 男女下面进入的视频免费午夜 | 麻豆国产丝袜白领秘书在线观看 | 亚洲国产精品一区二区第一页 | 一本久久a久久精品亚洲 | 欧美第一黄网免费网站 | 一本色道久久综合亚洲精品不卡 | 欧洲vodafone精品性 | 色综合久久久久综合一本到桃花网 | 一个人看的视频www在线 | 国产精品久久国产三级国 | 国产精品无码一区二区桃花视频 | 久久久久久国产精品无码下载 | 一本久道久久综合狠狠爱 | 久久99精品久久久久久 | 麻豆国产人妻欲求不满谁演的 | 亚洲阿v天堂在线 | 国产激情艳情在线看视频 | 午夜成人1000部免费视频 | 青青草原综合久久大伊人精品 | 久久精品99久久香蕉国产色戒 | 一本久道久久综合婷婷五月 | 人人爽人人澡人人人妻 | 理论片87福利理论电影 | 一二三四社区在线中文视频 | 一本大道伊人av久久综合 | 大肉大捧一进一出视频出来呀 | 少妇高潮喷潮久久久影院 | 大屁股大乳丰满人妻 | a国产一区二区免费入口 | 国产无av码在线观看 | 成人欧美一区二区三区黑人免费 | 国产 浪潮av性色四虎 | 99久久精品无码一区二区毛片 | 内射白嫩少妇超碰 | yw尤物av无码国产在线观看 | 国产免费久久精品国产传媒 | 亚洲精品久久久久avwww潮水 | www成人国产高清内射 | 沈阳熟女露脸对白视频 | 无码av最新清无码专区吞精 | 小鲜肉自慰网站xnxx | 一本久久a久久精品vr综合 | 色狠狠av一区二区三区 | 大屁股大乳丰满人妻 | 无码人妻精品一区二区三区下载 | 久久99精品国产.久久久久 | 欧洲精品码一区二区三区免费看 | 黑森林福利视频导航 | 暴力强奷在线播放无码 | 在线播放无码字幕亚洲 | 国产精品二区一区二区aⅴ污介绍 | 日日摸夜夜摸狠狠摸婷婷 | 老太婆性杂交欧美肥老太 | 亚洲gv猛男gv无码男同 | 动漫av网站免费观看 | 国产97在线 | 亚洲 | 亚洲欧美精品aaaaaa片 | 伊人久久婷婷五月综合97色 | 高中生自慰www网站 | 少妇无码一区二区二三区 | 曰韩无码二三区中文字幕 | 99麻豆久久久国产精品免费 | 亚洲一区二区三区播放 | 中文字幕久久久久人妻 | 亚洲综合另类小说色区 | 国产精品沙发午睡系列 | 免费无码午夜福利片69 | 国产无av码在线观看 | 蜜臀av无码人妻精品 | 亚洲乱码日产精品bd | 夜夜高潮次次欢爽av女 | 荫蒂被男人添的好舒服爽免费视频 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | www国产亚洲精品久久久日本 | 亚洲日本一区二区三区在线 | 2019nv天堂香蕉在线观看 | 国产精品二区一区二区aⅴ污介绍 | 国产精品亚洲五月天高清 | 国产亚洲精品久久久久久 | 蜜桃视频韩日免费播放 | 久久精品人人做人人综合试看 | 久久国产精品二国产精品 | 亚洲大尺度无码无码专区 | 亚洲精品一区二区三区在线观看 | 丰满少妇熟乱xxxxx视频 | 国产亚洲精品久久久ai换 | 特黄特色大片免费播放器图片 | 国产精品久免费的黄网站 | 亚洲人成影院在线无码按摩店 | 成熟妇人a片免费看网站 | 国产精品久久久久7777 | 精品国精品国产自在久国产87 | 强奷人妻日本中文字幕 | 亚洲国产午夜精品理论片 | 性欧美videos高清精品 | 国产舌乚八伦偷品w中 | 亚洲熟妇自偷自拍另类 | 亚洲 欧美 激情 小说 另类 | 2019nv天堂香蕉在线观看 | 中文字幕无码日韩欧毛 | 成人综合网亚洲伊人 | 亚洲 日韩 欧美 成人 在线观看 | 国产偷国产偷精品高清尤物 | 国产亚洲视频中文字幕97精品 | 精品水蜜桃久久久久久久 | 秋霞成人午夜鲁丝一区二区三区 | 欧美xxxx黑人又粗又长 | 久久亚洲精品成人无码 | 真人与拘做受免费视频一 | 欧美性猛交内射兽交老熟妇 | 亚洲乱码国产乱码精品精 | 99久久人妻精品免费一区 | 中文字幕无码热在线视频 | 国产午夜亚洲精品不卡 | 男女猛烈xx00免费视频试看 | 欧洲精品码一区二区三区免费看 | 亚洲国产精品久久久天堂 | 日本va欧美va欧美va精品 | 人妻天天爽夜夜爽一区二区 | 久久综合九色综合欧美狠狠 | 久久久久久久人妻无码中文字幕爆 | 亚洲小说春色综合另类 | 东京一本一道一二三区 | 少妇太爽了在线观看 | 少妇一晚三次一区二区三区 | 国产精品va在线观看无码 | 欧美日本精品一区二区三区 | 99久久无码一区人妻 | 在线观看欧美一区二区三区 | av无码电影一区二区三区 | 狠狠色噜噜狠狠狠7777奇米 | 国产精品久久久久久亚洲毛片 | 四虎国产精品一区二区 | 亚洲精品鲁一鲁一区二区三区 | 精品国产乱码久久久久乱码 | 日本大乳高潮视频在线观看 | 在线亚洲高清揄拍自拍一品区 | 无码帝国www无码专区色综合 | 一区二区三区乱码在线 | 欧洲 | 色一情一乱一伦一区二区三欧美 | 久久久久久久人妻无码中文字幕爆 | 中文无码成人免费视频在线观看 | 免费国产成人高清在线观看网站 | 白嫩日本少妇做爰 | 久久人人爽人人爽人人片av高清 | 亚洲自偷自偷在线制服 | 欧美怡红院免费全部视频 | 精品国产一区二区三区四区在线看 | www国产亚洲精品久久久日本 | 久久精品一区二区三区四区 | 久久伊人色av天堂九九小黄鸭 | 性生交大片免费看女人按摩摩 | 国产九九九九九九九a片 | 狠狠cao日日穞夜夜穞av | 国产成人精品一区二区在线小狼 | 久久97精品久久久久久久不卡 | 激情综合激情五月俺也去 | 中文字幕无码av波多野吉衣 | 国产激情无码一区二区app | 无码人妻av免费一区二区三区 | 一本无码人妻在中文字幕免费 | 日本一本二本三区免费 | 成人免费无码大片a毛片 | 成人一在线视频日韩国产 | 欧美老妇交乱视频在线观看 | 久久久亚洲欧洲日产国码αv | 狠狠色色综合网站 | 久久综合香蕉国产蜜臀av | 狠狠色丁香久久婷婷综合五月 | 午夜精品久久久内射近拍高清 | 国产成人人人97超碰超爽8 | 超碰97人人射妻 | 亚洲一区二区三区播放 | 国产在线精品一区二区三区直播 | 国精品人妻无码一区二区三区蜜柚 | 国产精品久久国产精品99 | 一本色道婷婷久久欧美 | 98国产精品综合一区二区三区 | 3d动漫精品啪啪一区二区中 | 丰满妇女强制高潮18xxxx | 人人妻在人人 | 综合网日日天干夜夜久久 | 午夜免费福利小电影 | 日韩av无码一区二区三区不卡 | 亚洲一区av无码专区在线观看 | 久久精品人妻少妇一区二区三区 | 欧美人与禽zoz0性伦交 | 亚洲区欧美区综合区自拍区 | 一二三四在线观看免费视频 | 中文字幕人妻无码一区二区三区 | 久久精品国产大片免费观看 | 国产乱人无码伦av在线a | 高清无码午夜福利视频 | а√资源新版在线天堂 | 亚洲人成网站免费播放 | 久久综合九色综合97网 | 综合激情五月综合激情五月激情1 | 人妻互换免费中文字幕 | 乱人伦中文视频在线观看 | 日韩视频 中文字幕 视频一区 | 亚洲va中文字幕无码久久不卡 | 成人欧美一区二区三区 | 亚洲精品一区二区三区在线 | 亚洲欧洲日本综合aⅴ在线 | 亚洲男人av天堂午夜在 | 国产又爽又猛又粗的视频a片 | 欧美人与牲动交xxxx | 欧美喷潮久久久xxxxx | 亚洲爆乳大丰满无码专区 | 中文精品久久久久人妻不卡 | 亚洲综合精品香蕉久久网 | 亚洲乱码中文字幕在线 | 国产麻豆精品一区二区三区v视界 | 亚洲精品无码国产 | 国产成人综合美国十次 | а天堂中文在线官网 | 亚洲日韩一区二区三区 | 在线观看国产一区二区三区 | 日日橹狠狠爱欧美视频 | 亚洲欧美中文字幕5发布 | 日日麻批免费40分钟无码 | 久久精品视频在线看15 | 日产精品99久久久久久 | 亚洲国产成人a精品不卡在线 | 国产成人综合美国十次 | 性欧美疯狂xxxxbbbb | 人妻少妇被猛烈进入中文字幕 | 99麻豆久久久国产精品免费 | 亚洲日本在线电影 | 亚洲国产av精品一区二区蜜芽 | 狂野欧美性猛交免费视频 | 又色又爽又黄的美女裸体网站 | 免费网站看v片在线18禁无码 | 日本饥渴人妻欲求不满 | 狠狠色噜噜狠狠狠狠7777米奇 | 又大又硬又爽免费视频 | 亚洲成av人影院在线观看 | 亚欧洲精品在线视频免费观看 | 亚无码乱人伦一区二区 | 久久久久亚洲精品男人的天堂 | 少妇高潮一区二区三区99 | 国产av无码专区亚洲a∨毛片 | 97夜夜澡人人双人人人喊 | 亚洲成a人片在线观看无码 | 国产免费无码一区二区视频 | 日韩人妻无码一区二区三区久久99 | 装睡被陌生人摸出水好爽 | 国产成人久久精品流白浆 | 色婷婷av一区二区三区之红樱桃 | 欧美国产日韩亚洲中文 | 国产av人人夜夜澡人人爽麻豆 | 亚洲色欲久久久综合网东京热 | 欧美国产日韩久久mv | 免费视频欧美无人区码 | 99精品视频在线观看免费 | 中文字幕人妻无码一区二区三区 | 少妇的肉体aa片免费 | 无套内射视频囯产 | 国产真实乱对白精彩久久 | 亚洲精品久久久久久一区二区 | 国产麻豆精品一区二区三区v视界 | 亚洲成av人影院在线观看 | 国产xxx69麻豆国语对白 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 丝袜人妻一区二区三区 | 国产一区二区三区日韩精品 | 国产成人无码区免费内射一片色欲 | 国产人妖乱国产精品人妖 | 成人精品视频一区二区三区尤物 | 国产精品亚洲一区二区三区喷水 | 色欲综合久久中文字幕网 | 午夜理论片yy44880影院 | 国产精品人妻一区二区三区四 | 久久久婷婷五月亚洲97号色 | 永久免费观看国产裸体美女 | 国产午夜亚洲精品不卡 | 国产精品久久久一区二区三区 | 无码人妻精品一区二区三区下载 | 亚洲国产成人a精品不卡在线 | 色欲av亚洲一区无码少妇 | 中文字幕乱码人妻二区三区 | 狂野欧美性猛xxxx乱大交 | аⅴ资源天堂资源库在线 | 老熟女乱子伦 | 国产精品毛多多水多 | 国产人妻人伦精品1国产丝袜 | 精品一区二区三区波多野结衣 | 久久www免费人成人片 | 美女极度色诱视频国产 | 亚洲成a人一区二区三区 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产精品亚洲一区二区三区喷水 | 亚洲精品成人av在线 | 亚洲色偷偷偷综合网 | 一本一道久久综合久久 | 免费无码av一区二区 | 性欧美牲交xxxxx视频 | 色窝窝无码一区二区三区色欲 | 无码人妻丰满熟妇区五十路百度 | 久久久久se色偷偷亚洲精品av | 97精品人妻一区二区三区香蕉 | 亚洲の无码国产の无码步美 | 天天爽夜夜爽夜夜爽 | 亚洲无人区午夜福利码高清完整版 | 色婷婷综合激情综在线播放 | 精品久久久无码中文字幕 | 国产日产欧产精品精品app | 两性色午夜视频免费播放 | 久久久精品成人免费观看 | 国产精品理论片在线观看 | 日日躁夜夜躁狠狠躁 | 人妻aⅴ无码一区二区三区 | 亚洲日本一区二区三区在线 | 色欲久久久天天天综合网精品 | 樱花草在线社区www | 人妻无码久久精品人妻 | 国产人妖乱国产精品人妖 | 无码人妻出轨黑人中文字幕 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 狠狠色欧美亚洲狠狠色www | 国产舌乚八伦偷品w中 | 在线a亚洲视频播放在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 精品国偷自产在线视频 | 伊人久久婷婷五月综合97色 | 亚洲精品欧美二区三区中文字幕 | 1000部啪啪未满十八勿入下载 | 国产黄在线观看免费观看不卡 | 在教室伦流澡到高潮hnp视频 | 日本xxxx色视频在线观看免费 | 影音先锋中文字幕无码 | 亚洲午夜无码久久 | 亚洲中文字幕乱码av波多ji | 亚洲成av人影院在线观看 | 亚洲人成网站色7799 | 成人免费视频一区二区 | 久久国产精品二国产精品 | 国产一区二区三区影院 | 黑人玩弄人妻中文在线 | 2019午夜福利不卡片在线 | 亚洲国产精品毛片av不卡在线 | 久久99热只有频精品8 | 一本久久伊人热热精品中文字幕 | 久久国产36精品色熟妇 | 撕开奶罩揉吮奶头视频 | 无套内谢的新婚少妇国语播放 | 精品无人区无码乱码毛片国产 | 亚洲精品成人福利网站 | 东京一本一道一二三区 | 在线看片无码永久免费视频 | 少妇被粗大的猛进出69影院 | 中文字幕 亚洲精品 第1页 | 亚洲欧美日韩综合久久久 | 一本一道久久综合久久 | 风流少妇按摩来高潮 | 国精产品一品二品国精品69xx | 天天摸天天透天天添 | 青青青手机频在线观看 | 最近免费中文字幕中文高清百度 | 久久zyz资源站无码中文动漫 | 中文毛片无遮挡高清免费 | 亚洲日本在线电影 | 欧美性生交活xxxxxdddd | 亚洲精品中文字幕 | 内射后入在线观看一区 | 国产精品第一区揄拍无码 | 中文字幕av伊人av无码av | 午夜肉伦伦影院 | 在线精品亚洲一区二区 | 亚洲欧洲无卡二区视頻 | 又大又硬又爽免费视频 | 亚洲性无码av中文字幕 | 精品成人av一区二区三区 | 俄罗斯老熟妇色xxxx | 亚洲精品欧美二区三区中文字幕 | 色情久久久av熟女人妻网站 | 一本色道久久综合亚洲精品不卡 | 国精品人妻无码一区二区三区蜜柚 | 99久久婷婷国产综合精品青草免费 | 无码av免费一区二区三区试看 | 国产亚洲tv在线观看 | 午夜丰满少妇性开放视频 | 国产成人无码一二三区视频 | 成人女人看片免费视频放人 | 女人被爽到呻吟gif动态图视看 | 欧美35页视频在线观看 | 欧美freesex黑人又粗又大 | 午夜丰满少妇性开放视频 | 中文字幕乱码人妻二区三区 | 日本精品人妻无码免费大全 | 久久午夜夜伦鲁鲁片无码免费 | 人妻人人添人妻人人爱 | 亚洲爆乳大丰满无码专区 | 亚洲综合无码久久精品综合 | 无码帝国www无码专区色综合 | 西西人体www44rt大胆高清 | 国产激情无码一区二区app | 东京无码熟妇人妻av在线网址 | 无码精品国产va在线观看dvd | аⅴ资源天堂资源库在线 | 日本精品人妻无码免费大全 | 最新版天堂资源中文官网 | 粗大的内捧猛烈进出视频 | 日本护士xxxxhd少妇 | 18禁黄网站男男禁片免费观看 | 精品人妻人人做人人爽夜夜爽 | 毛片内射-百度 | 日韩精品乱码av一区二区 | 亚洲精品国产第一综合99久久 | 无码av岛国片在线播放 | аⅴ资源天堂资源库在线 | 国产综合在线观看 | 国内揄拍国内精品少妇国语 | 久久精品人妻少妇一区二区三区 | 国产精品无码久久av | 无码av中文字幕免费放 | 丰满少妇女裸体bbw | 久久精品中文字幕大胸 | 97资源共享在线视频 | 国产精品国产三级国产专播 | 麻豆果冻传媒2021精品传媒一区下载 | 又大又硬又黄的免费视频 | 98国产精品综合一区二区三区 | 天天拍夜夜添久久精品 | 欧美日韩一区二区三区自拍 | 两性色午夜视频免费播放 | 国产尤物精品视频 | 国产精品久久久久久久9999 | 九九综合va免费看 | 亚洲精品综合五月久久小说 | 久久99精品国产麻豆 | 日韩人妻系列无码专区 | 亚洲va欧美va天堂v国产综合 | 爽爽影院免费观看 | 牲交欧美兽交欧美 | 天堂无码人妻精品一区二区三区 | 久久久久久久久888 | 高潮毛片无遮挡高清免费视频 | 日韩精品a片一区二区三区妖精 | 中国女人内谢69xxxxxa片 | 在线精品亚洲一区二区 | 亚洲一区二区三区香蕉 | 色综合久久久无码网中文 | 精品日本一区二区三区在线观看 | 在线观看国产午夜福利片 | 亚洲区小说区激情区图片区 | 国内精品久久毛片一区二区 | 日日天干夜夜狠狠爱 | 精品人人妻人人澡人人爽人人 | 国产精品资源一区二区 | 欧美精品无码一区二区三区 | 夜精品a片一区二区三区无码白浆 | 色妞www精品免费视频 | 草草网站影院白丝内射 | 国产无套内射久久久国产 | 国精产品一区二区三区 | 国产精品亚洲综合色区韩国 | 精品久久8x国产免费观看 | 综合激情五月综合激情五月激情1 | 久久久久99精品国产片 | 网友自拍区视频精品 | 在线精品亚洲一区二区 | 18禁止看的免费污网站 | 精品久久久久久人妻无码中文字幕 | 亚洲精品久久久久久一区二区 | 精品久久综合1区2区3区激情 | 两性色午夜视频免费播放 | 亚洲精品久久久久中文第一幕 | 天堂久久天堂av色综合 | 麻豆蜜桃av蜜臀av色欲av | 午夜精品一区二区三区在线观看 | 亚洲成av人片在线观看无码不卡 | 狠狠躁日日躁夜夜躁2020 | 国产一区二区三区影院 | 99精品国产综合久久久久五月天 | 天堂一区人妻无码 | 国产在热线精品视频 | 最近免费中文字幕中文高清百度 | 成人一在线视频日韩国产 | 亚洲乱码日产精品bd | 无码人妻久久一区二区三区不卡 | 欧美精品无码一区二区三区 | 日本精品少妇一区二区三区 | 色综合视频一区二区三区 | 亚洲精品国产精品乱码不卡 | 精品无码av一区二区三区 | 国産精品久久久久久久 | 国产精品久久精品三级 | 正在播放东北夫妻内射 | 午夜肉伦伦影院 | 97精品国产97久久久久久免费 | 国产精华av午夜在线观看 | 久久精品国产日本波多野结衣 | 久久久亚洲欧洲日产国码αv | 成人欧美一区二区三区黑人免费 | 免费乱码人妻系列无码专区 | 人人妻人人藻人人爽欧美一区 | 一本久道久久综合狠狠爱 | 天堂а√在线地址中文在线 | 国产人妻精品午夜福利免费 | 亚洲国产一区二区三区在线观看 | 欧美日韩色另类综合 | 2019午夜福利不卡片在线 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 人妻体内射精一区二区三四 | 亚洲欧美精品伊人久久 | 亚洲第一网站男人都懂 | 亚洲男人av香蕉爽爽爽爽 | 精品亚洲成av人在线观看 | 1000部夫妻午夜免费 | 国产亚洲精品久久久久久大师 | 欧美人与牲动交xxxx | 99久久人妻精品免费一区 | 欧美日韩一区二区三区自拍 | 国产av一区二区三区最新精品 | 精品亚洲成av人在线观看 | 动漫av网站免费观看 | 日本一本二本三区免费 | 国产亚洲人成在线播放 | 荡女精品导航 | 思思久久99热只有频精品66 | 亚洲精品一区二区三区在线 | 老熟妇乱子伦牲交视频 | 久精品国产欧美亚洲色aⅴ大片 | 国产精品久久国产精品99 | 久久人人爽人人人人片 | 日本一区二区三区免费播放 | 中文精品久久久久人妻不卡 | 亚洲一区二区三区 | 欧美肥老太牲交大战 | 亚洲伊人久久精品影院 | 国产av人人夜夜澡人人爽麻豆 | 无套内谢的新婚少妇国语播放 | 女人和拘做爰正片视频 | 97资源共享在线视频 | 亚洲综合无码久久精品综合 | 免费中文字幕日韩欧美 | 又色又爽又黄的美女裸体网站 | 欧美性生交活xxxxxdddd | 波多野结衣aⅴ在线 | 曰本女人与公拘交酡免费视频 | 国产精品久久国产三级国 | 日本饥渴人妻欲求不满 | 日韩人妻无码中文字幕视频 | 久久99精品国产麻豆 | 久久国产自偷自偷免费一区调 | 欧美国产亚洲日韩在线二区 | 国产精品亚洲а∨无码播放麻豆 | 亚洲人成影院在线观看 | 欧美人与禽zoz0性伦交 | 无码一区二区三区在线观看 | 精品一区二区三区波多野结衣 | 日本护士xxxxhd少妇 | 国产午夜福利100集发布 | 日韩精品无码一区二区中文字幕 | 妺妺窝人体色www在线小说 | 国产又爽又黄又刺激的视频 | 男女猛烈xx00免费视频试看 | 久久亚洲中文字幕精品一区 | 又湿又紧又大又爽a视频国产 | 国产精品对白交换视频 | 成人女人看片免费视频放人 | 日韩在线不卡免费视频一区 | 国内老熟妇对白xxxxhd | 国产成人亚洲综合无码 | 国产精品无码mv在线观看 | 亚洲区欧美区综合区自拍区 | 人人澡人人妻人人爽人人蜜桃 | 精品人人妻人人澡人人爽人人 | 国产人成高清在线视频99最全资源 | 国产午夜亚洲精品不卡 | 久久熟妇人妻午夜寂寞影院 | 久久人人爽人人爽人人片av高清 | 国产成人精品一区二区在线小狼 | 亚洲人成网站在线播放942 | 性生交大片免费看l | 狠狠综合久久久久综合网 | 日日鲁鲁鲁夜夜爽爽狠狠 | 熟妇女人妻丰满少妇中文字幕 | av无码电影一区二区三区 | а√天堂www在线天堂小说 | 精品无码av一区二区三区 | 在线视频网站www色 | 色 综合 欧美 亚洲 国产 | 中文字幕乱码人妻无码久久 | 日本爽爽爽爽爽爽在线观看免 | 日产精品99久久久久久 | 久久综合给合久久狠狠狠97色 | 无码av中文字幕免费放 | 精品国偷自产在线视频 | 成人无码视频免费播放 | 天堂一区人妻无码 | 樱花草在线播放免费中文 | 国产一区二区三区影院 | 国产成人无码午夜视频在线观看 | 中文亚洲成a人片在线观看 | 亚洲成av人综合在线观看 | 日本精品高清一区二区 | 波多野结衣av一区二区全免费观看 | 国产精品无码久久av | 成人一区二区免费视频 | 久久婷婷五月综合色国产香蕉 | 鲁大师影院在线观看 | 午夜不卡av免费 一本久久a久久精品vr综合 | 亚洲va欧美va天堂v国产综合 | 久久久久久a亚洲欧洲av冫 | 欧美丰满熟妇xxxx性ppx人交 | 暴力强奷在线播放无码 | 成熟妇人a片免费看网站 | 日产精品高潮呻吟av久久 | 强开小婷嫩苞又嫩又紧视频 | 久久无码中文字幕免费影院蜜桃 | 亚洲精品一区二区三区四区五区 | 久久久无码中文字幕久... | 国语自产偷拍精品视频偷 | 久久人人爽人人爽人人片av高清 | 国产人妻精品一区二区三区不卡 | 国产无遮挡又黄又爽免费视频 | 老头边吃奶边弄进去呻吟 | аⅴ资源天堂资源库在线 | 性欧美牲交xxxxx视频 | 一本大道久久东京热无码av | 国产手机在线αⅴ片无码观看 | 精品国产一区av天美传媒 | 国产欧美精品一区二区三区 | 狠狠综合久久久久综合网 | 久9re热视频这里只有精品 | 国产乡下妇女做爰 | 亚洲精品国偷拍自产在线观看蜜桃 | 人妻体内射精一区二区三四 | 麻豆国产97在线 | 欧洲 | 乌克兰少妇性做爰 | 九九综合va免费看 | 男人扒开女人内裤强吻桶进去 | 少妇性l交大片欧洲热妇乱xxx | 国产又爽又猛又粗的视频a片 | 99久久精品午夜一区二区 | 成人精品一区二区三区中文字幕 | 超碰97人人射妻 | 未满成年国产在线观看 | 国产精品久久久久久久影院 | 曰本女人与公拘交酡免费视频 | 精品日本一区二区三区在线观看 | 自拍偷自拍亚洲精品被多人伦好爽 | 久久久久亚洲精品中文字幕 | 正在播放东北夫妻内射 | 老熟女重囗味hdxx69 | 国产精品无码久久av | 国产极品美女高潮无套在线观看 | 国产激情一区二区三区 | 亚洲无人区午夜福利码高清完整版 | 动漫av网站免费观看 | 久久伊人色av天堂九九小黄鸭 | 丰满少妇人妻久久久久久 | 狂野欧美激情性xxxx | 亚洲精品国偷拍自产在线麻豆 | 18黄暴禁片在线观看 | 一本大道伊人av久久综合 | 纯爱无遮挡h肉动漫在线播放 | 精品人妻人人做人人爽 | 午夜福利试看120秒体验区 | 亚洲 a v无 码免 费 成 人 a v | 成人片黄网站色大片免费观看 | 黑人巨大精品欧美黑寡妇 | 在线欧美精品一区二区三区 | 精品偷自拍另类在线观看 | 国产xxx69麻豆国语对白 | 亚洲第一网站男人都懂 | 国产精品沙发午睡系列 | 人人爽人人澡人人人妻 | 99re在线播放 | 爱做久久久久久 | 国产香蕉97碰碰久久人人 | 精品国产一区av天美传媒 | 久久综合狠狠综合久久综合88 | 少妇性l交大片 | 无码av免费一区二区三区试看 | 日本在线高清不卡免费播放 | 在线观看欧美一区二区三区 | 一本精品99久久精品77 | 成年美女黄网站色大免费全看 | 国产午夜亚洲精品不卡下载 | 人妻与老人中文字幕 | 午夜性刺激在线视频免费 | 欧美真人作爱免费视频 | 午夜精品久久久内射近拍高清 | 伊人色综合久久天天小片 | 欧美 日韩 人妻 高清 中文 | 日韩 欧美 动漫 国产 制服 | 在线视频网站www色 | 色综合久久网 | 国产精品久久久久久久9999 | 无码av最新清无码专区吞精 | 无码精品国产va在线观看dvd | 乱码av麻豆丝袜熟女系列 | 日日摸日日碰夜夜爽av | 国产激情精品一区二区三区 | 久久熟妇人妻午夜寂寞影院 | 九九综合va免费看 | 无码午夜成人1000部免费视频 | 色妞www精品免费视频 | 熟妇人妻无乱码中文字幕 | 九九热爱视频精品 | 久久人人爽人人爽人人片ⅴ | 欧洲极品少妇 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产免费久久精品国产传媒 | 男女性色大片免费网站 | 少妇人妻大乳在线视频 | 水蜜桃色314在线观看 | 乌克兰少妇性做爰 | ass日本丰满熟妇pics | 精品人人妻人人澡人人爽人人 | 欧美野外疯狂做受xxxx高潮 | 欧美日韩一区二区三区自拍 | 一本色道婷婷久久欧美 | 国产美女极度色诱视频www | 国产另类ts人妖一区二区 | 久久人人97超碰a片精品 | 人妻无码久久精品人妻 | 中文字幕无码日韩专区 | 久久久无码中文字幕久... | 午夜福利一区二区三区在线观看 | 中文字幕乱码人妻无码久久 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产精品手机免费 | 国产又爽又猛又粗的视频a片 | www国产精品内射老师 | 天堂久久天堂av色综合 | 亚洲欧美国产精品久久 | 国产艳妇av在线观看果冻传媒 | 日本精品高清一区二区 | 欧美日韩综合一区二区三区 | 国产成人无码av片在线观看不卡 | 国产综合久久久久鬼色 | 亚洲乱码国产乱码精品精 | 久久精品中文闷骚内射 | 欧美人与禽zoz0性伦交 | 18禁止看的免费污网站 | 国产精品办公室沙发 | 中文精品久久久久人妻不卡 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产国语老龄妇女a片 | 性欧美牲交xxxxx视频 | 国产精品美女久久久 | 国产午夜亚洲精品不卡 | 伊人久久大香线蕉午夜 | 中国女人内谢69xxxx | 久久精品无码一区二区三区 | 高潮喷水的毛片 | 中文字幕+乱码+中文字幕一区 | 一本色道久久综合亚洲精品不卡 | 午夜福利试看120秒体验区 | 少妇人妻偷人精品无码视频 | 国产亚洲精品久久久ai换 | 性欧美大战久久久久久久 | 白嫩日本少妇做爰 | 一本加勒比波多野结衣 | 色欲综合久久中文字幕网 | 亚洲一区二区三区播放 | 中文字幕日韩精品一区二区三区 | 免费看少妇作爱视频 | 久久精品国产大片免费观看 | 精品国产aⅴ无码一区二区 | 亚洲自偷自拍另类第1页 | 乱人伦人妻中文字幕无码久久网 | 欧美日本免费一区二区三区 | 久久99精品国产.久久久久 | 无码午夜成人1000部免费视频 | 国产精品视频免费播放 | 精品久久综合1区2区3区激情 | 少妇人妻大乳在线视频 | 中文字幕亚洲情99在线 | 欧美喷潮久久久xxxxx | 激情综合激情五月俺也去 | 国产一区二区三区四区五区加勒比 | 国产精品无码成人午夜电影 | 精品成在人线av无码免费看 | 亚洲国产一区二区三区在线观看 | 国产色在线 | 国产 | 日产精品99久久久久久 | 人妻少妇精品无码专区动漫 | 久久99精品国产麻豆 | 高潮毛片无遮挡高清免费视频 | 无码纯肉视频在线观看 | 少女韩国电视剧在线观看完整 | 男人的天堂2018无码 | 欧美人与禽猛交狂配 | 无码成人精品区在线观看 | 免费观看的无遮挡av | 欧美日韩久久久精品a片 | 久久成人a毛片免费观看网站 | 欧美第一黄网免费网站 | 国产区女主播在线观看 | 熟妇人妻激情偷爽文 | 国产精品久久久久久久影院 | 国产成人无码一二三区视频 | 国产成人精品视频ⅴa片软件竹菊 | 国产精品亚洲五月天高清 | 人妻少妇精品无码专区动漫 | 成人欧美一区二区三区黑人 | 成在人线av无码免观看麻豆 | 精品久久久无码人妻字幂 | 国产精品高潮呻吟av久久4虎 | а√资源新版在线天堂 | 内射巨臀欧美在线视频 | 国语自产偷拍精品视频偷 | 毛片内射-百度 | 天天躁日日躁狠狠躁免费麻豆 | 国产午夜视频在线观看 | 欧美丰满少妇xxxx性 | 久久综合九色综合97网 | 人妻少妇精品无码专区二区 | 亚洲精品鲁一鲁一区二区三区 | 妺妺窝人体色www婷婷 | 天堂亚洲免费视频 | 国产午夜精品一区二区三区嫩草 | 成人欧美一区二区三区黑人免费 | 日韩精品无码免费一区二区三区 | 久久久久99精品国产片 | 免费男性肉肉影院 | 免费观看的无遮挡av | 又色又爽又黄的美女裸体网站 | 亚洲中文字幕无码中字 | 日本一区二区三区免费高清 | 国产精品无码一区二区三区不卡 | 最近中文2019字幕第二页 | 国产香蕉尹人视频在线 | 欧美老妇与禽交 | 少妇高潮一区二区三区99 | 自拍偷自拍亚洲精品10p | 黑人玩弄人妻中文在线 | 免费无码的av片在线观看 | 久久精品中文字幕大胸 | 成人免费视频一区二区 | 免费无码av一区二区 | 国精产品一品二品国精品69xx | 久久精品国产99精品亚洲 | 成人欧美一区二区三区 | 国内丰满熟女出轨videos | 久久99精品国产.久久久久 | 亚洲精品中文字幕乱码 | 男人的天堂2018无码 | 无码国产色欲xxxxx视频 | 久久久久av无码免费网 | 少妇无码吹潮 | 日韩欧美中文字幕在线三区 | 日韩人妻无码一区二区三区久久99 | 精品国产一区二区三区四区在线看 | 久久久久99精品国产片 | 国产精品亚洲综合色区韩国 | 日本欧美一区二区三区乱码 | 人人妻人人澡人人爽欧美一区九九 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 亚洲人成影院在线无码按摩店 | 欧美黑人巨大xxxxx | 亚洲 激情 小说 另类 欧美 | 国产偷自视频区视频 | 国产sm调教视频在线观看 | 撕开奶罩揉吮奶头视频 | av无码不卡在线观看免费 | 欧美三级a做爰在线观看 | 久久久婷婷五月亚洲97号色 | 久久久国产精品无码免费专区 | 国产精品igao视频网 | 中文字幕乱码中文乱码51精品 | 精品熟女少妇av免费观看 | 内射欧美老妇wbb | 领导边摸边吃奶边做爽在线观看 | 国产成人人人97超碰超爽8 | 国产乱人伦av在线无码 | 野狼第一精品社区 | 在线亚洲高清揄拍自拍一品区 | 国产成人亚洲综合无码 | 人妻无码αv中文字幕久久琪琪布 | 99久久精品国产一区二区蜜芽 | 欧美xxxxx精品 | 强伦人妻一区二区三区视频18 | 99久久久国产精品无码免费 | 无码人妻少妇伦在线电影 | 国产办公室秘书无码精品99 | 久久精品中文字幕一区 | 人人澡人人妻人人爽人人蜜桃 | 丰满少妇女裸体bbw | 日韩欧美中文字幕在线三区 | 蜜臀av在线播放 久久综合激激的五月天 | 国产精品人人妻人人爽 | 国产午夜福利100集发布 | 国产欧美亚洲精品a | 国产精品亚洲а∨无码播放麻豆 | 欧美人妻一区二区三区 | 水蜜桃色314在线观看 | 永久免费观看国产裸体美女 | 亚洲日本一区二区三区在线 | 婷婷六月久久综合丁香 | 无码国产激情在线观看 | 精品亚洲韩国一区二区三区 | 国产精品第一区揄拍无码 | 日本一区二区三区免费高清 | 又紧又大又爽精品一区二区 | 精品成在人线av无码免费看 | 国产精品高潮呻吟av久久 | 国产电影无码午夜在线播放 | 特黄特色大片免费播放器图片 | 一区二区三区乱码在线 | 欧洲 | 中文精品无码中文字幕无码专区 | 天海翼激烈高潮到腰振不止 | 99国产精品白浆在线观看免费 | 奇米影视888欧美在线观看 | 最近的中文字幕在线看视频 | 亚洲精品一区二区三区在线观看 | 丝袜 中出 制服 人妻 美腿 | 少妇被黑人到高潮喷出白浆 | 狠狠躁日日躁夜夜躁2020 | 九九久久精品国产免费看小说 | 国产麻豆精品一区二区三区v视界 | 国产精品久久久久久亚洲影视内衣 | 精品厕所偷拍各类美女tp嘘嘘 | 99精品久久毛片a片 | 亚洲日韩中文字幕在线播放 | 熟妇人妻无码xxx视频 | 永久黄网站色视频免费直播 | 亚洲国产欧美国产综合一区 | 国产热a欧美热a在线视频 | 女人被爽到呻吟gif动态图视看 | 国产精品a成v人在线播放 | 久久久久久亚洲精品a片成人 | 精品久久综合1区2区3区激情 | 国产卡一卡二卡三 | 天堂亚洲2017在线观看 | 国产一区二区三区四区五区加勒比 | 一本精品99久久精品77 | 亚洲 激情 小说 另类 欧美 | 欧美精品国产综合久久 | 草草网站影院白丝内射 | 男女爱爱好爽视频免费看 | а√资源新版在线天堂 | 无码国模国产在线观看 | 国产精品久久久一区二区三区 | 福利一区二区三区视频在线观看 | 国产乱子伦视频在线播放 | 婷婷综合久久中文字幕蜜桃三电影 | 国产精品久久久一区二区三区 | 亚洲成a人片在线观看无码3d | 亚洲精品国产第一综合99久久 | 精品国产乱码久久久久乱码 | 成人精品视频一区二区三区尤物 | 亚洲欧美日韩成人高清在线一区 | 欧美日本日韩 | 国产无套内射久久久国产 | 荫蒂添的好舒服视频囗交 | 撕开奶罩揉吮奶头视频 | 国产精品久久福利网站 | 国内精品九九久久久精品 | 丰满人妻被黑人猛烈进入 | 美女毛片一区二区三区四区 | 久久久久久亚洲精品a片成人 | 在线播放无码字幕亚洲 | 国产偷国产偷精品高清尤物 | 领导边摸边吃奶边做爽在线观看 | 狠狠综合久久久久综合网 | 四十如虎的丰满熟妇啪啪 | 捆绑白丝粉色jk震动捧喷白浆 | 欧美大屁股xxxxhd黑色 | 久久久久亚洲精品男人的天堂 | 亚洲综合另类小说色区 | 99久久精品国产一区二区蜜芽 | 色综合久久久无码网中文 | 亚洲 高清 成人 动漫 | 在线a亚洲视频播放在线观看 | 久久久久成人精品免费播放动漫 | 亚洲中文字幕无码一久久区 | 国产精品亚洲а∨无码播放麻豆 | 131美女爱做视频 | 国产极品美女高潮无套在线观看 | 色婷婷久久一区二区三区麻豆 | 午夜精品久久久久久久 | 日本xxxx色视频在线观看免费 | 人妻中文无码久热丝袜 | 激情综合激情五月俺也去 | 久久精品中文字幕一区 | 在线观看国产一区二区三区 | 国产精品人妻一区二区三区四 | 国内揄拍国内精品人妻 | 亚洲区小说区激情区图片区 | 性做久久久久久久免费看 | 无码av岛国片在线播放 | 老司机亚洲精品影院无码 | 在线播放免费人成毛片乱码 | 国产亚洲精品久久久闺蜜 | 久久综合九色综合欧美狠狠 | 在线天堂新版最新版在线8 | 在线播放无码字幕亚洲 | 国产精品亚洲综合色区韩国 | 久久亚洲中文字幕精品一区 | 国内老熟妇对白xxxxhd | 一本久久a久久精品亚洲 | 日本xxxx色视频在线观看免费 | 日本丰满护士爆乳xxxx | 97夜夜澡人人爽人人喊中国片 | 女人被男人躁得好爽免费视频 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲色大成网站www | 色 综合 欧美 亚洲 国产 | 久久久亚洲欧洲日产国码αv | 国产日产欧产精品精品app | 国产成人无码一二三区视频 | 国产人妻久久精品二区三区老狼 | 国产一区二区三区影院 | 永久免费观看美女裸体的网站 | 小鲜肉自慰网站xnxx | 西西人体www44rt大胆高清 | 中文字幕久久久久人妻 | 免费观看激色视频网站 | 激情五月综合色婷婷一区二区 | √8天堂资源地址中文在线 | 久久精品丝袜高跟鞋 | 亚洲毛片av日韩av无码 | 97精品人妻一区二区三区香蕉 | 免费男性肉肉影院 | 青春草在线视频免费观看 | 2019午夜福利不卡片在线 | 亚洲成熟女人毛毛耸耸多 | 日产精品99久久久久久 | 牲交欧美兽交欧美 | 午夜理论片yy44880影院 | 理论片87福利理论电影 | 一本色道婷婷久久欧美 | 精品偷拍一区二区三区在线看 | 欧美zoozzooz性欧美 | 在线播放无码字幕亚洲 | 亚洲国产高清在线观看视频 | 娇妻被黑人粗大高潮白浆 | 牲欲强的熟妇农村老妇女 | 亚洲成av人综合在线观看 | 丰满诱人的人妻3 | 亚洲综合另类小说色区 | 国产电影无码午夜在线播放 | 秋霞特色aa大片 | 亚洲 另类 在线 欧美 制服 | 亚洲一区二区三区播放 | 5858s亚洲色大成网站www | 亚洲国产精品成人久久蜜臀 | 国产成人精品一区二区在线小狼 | 一本色道久久综合亚洲精品不卡 | 疯狂三人交性欧美 | 一本大道伊人av久久综合 | 亚洲毛片av日韩av无码 | 色综合久久88色综合天天 | 高潮毛片无遮挡高清免费 | 国产人妻大战黑人第1集 | 成年美女黄网站色大免费视频 | 成人毛片一区二区 | 国产精品人人妻人人爽 | 国产免费久久久久久无码 | 国产无套粉嫩白浆在线 | 一区二区三区高清视频一 | 99久久无码一区人妻 | 十八禁视频网站在线观看 | 久久久精品人妻久久影视 | 国产无套内射久久久国产 | 亚洲va中文字幕无码久久不卡 | 欧美日韩亚洲国产精品 | 亚洲一区二区三区香蕉 | 超碰97人人做人人爱少妇 | 亚洲精品一区二区三区婷婷月 | 成熟妇人a片免费看网站 | 亚洲经典千人经典日产 | 99精品无人区乱码1区2区3区 | 精品 日韩 国产 欧美 视频 | 又大又硬又爽免费视频 | 97夜夜澡人人爽人人喊中国片 | 国产超级va在线观看视频 | 久久久久av无码免费网 | 蜜桃臀无码内射一区二区三区 | 中文字幕无码人妻少妇免费 | 动漫av网站免费观看 | 天天做天天爱天天爽综合网 | 欧美精品免费观看二区 | 欧美国产亚洲日韩在线二区 | 欧美老熟妇乱xxxxx | 亚洲人交乣女bbw | 国内揄拍国内精品少妇国语 | 人人澡人摸人人添 | 国产亚洲视频中文字幕97精品 | 久久精品中文闷骚内射 | 色婷婷综合中文久久一本 | 精品久久久久久亚洲精品 | 又大又硬又黄的免费视频 | 久久熟妇人妻午夜寂寞影院 | 欧美精品免费观看二区 | yw尤物av无码国产在线观看 | 国产真实夫妇视频 | 又大又硬又黄的免费视频 | 中文字幕 人妻熟女 | 精品无码av一区二区三区 | 欧美放荡的少妇 | 99久久亚洲精品无码毛片 | 亚洲精品综合五月久久小说 | 亚洲一区二区三区偷拍女厕 | 中文字幕精品av一区二区五区 | 亚洲a无码综合a国产av中文 | 老头边吃奶边弄进去呻吟 | 亚洲成熟女人毛毛耸耸多 | 久久国产精品_国产精品 | 99国产精品白浆在线观看免费 | 人妻天天爽夜夜爽一区二区 | 红桃av一区二区三区在线无码av | 永久免费精品精品永久-夜色 | 亚洲中文字幕乱码av波多ji | 十八禁真人啪啪免费网站 | 一个人看的视频www在线 | 无码播放一区二区三区 | 图片小说视频一区二区 | 国产精品人妻一区二区三区四 | 久久久久成人精品免费播放动漫 | 麻豆国产人妻欲求不满谁演的 | 乱人伦人妻中文字幕无码 | 啦啦啦www在线观看免费视频 | 熟妇人妻中文av无码 | 日本va欧美va欧美va精品 | 狠狠色丁香久久婷婷综合五月 | 亚洲综合伊人久久大杳蕉 | 丝袜足控一区二区三区 | 丰满人妻翻云覆雨呻吟视频 | 日韩人妻少妇一区二区三区 | 99国产精品白浆在线观看免费 | 未满成年国产在线观看 | 超碰97人人做人人爱少妇 | 国产成人无码av一区二区 | 中文字幕乱码人妻无码久久 | 天干天干啦夜天干天2017 | 女高中生第一次破苞av | 樱花草在线播放免费中文 | 国内精品九九久久久精品 | 国产精品亚洲五月天高清 | 欧美丰满熟妇xxxx | 欧美真人作爱免费视频 | 久久精品国产大片免费观看 | 又大又紧又粉嫩18p少妇 | 国产偷抇久久精品a片69 | 蜜桃视频插满18在线观看 | 午夜福利不卡在线视频 | 日韩人妻无码一区二区三区久久99 | 漂亮人妻洗澡被公强 日日躁 | 国产综合在线观看 | 亚洲精品午夜国产va久久成人 | 无码午夜成人1000部免费视频 | 东北女人啪啪对白 | 色欲人妻aaaaaaa无码 | 麻豆精品国产精华精华液好用吗 | 色情久久久av熟女人妻网站 | 性生交大片免费看l | 国产内射老熟女aaaa | 精品久久综合1区2区3区激情 | 最近的中文字幕在线看视频 | 99国产欧美久久久精品 | 亚洲熟妇色xxxxx亚洲 | 无人区乱码一区二区三区 | 免费观看黄网站 | 亚洲国产成人av在线观看 | 国产特级毛片aaaaaa高潮流水 | 蜜臀av在线播放 久久综合激激的五月天 | av无码不卡在线观看免费 | 动漫av网站免费观看 | 欧美高清在线精品一区 | 成熟妇人a片免费看网站 | 亚洲人成网站免费播放 | 日本丰满护士爆乳xxxx | 99久久婷婷国产综合精品青草免费 | 亚洲第一网站男人都懂 | 欧美日韩人成综合在线播放 | 亚洲男人av香蕉爽爽爽爽 | 免费无码一区二区三区蜜桃大 | 久久99精品久久久久婷婷 | 国产香蕉尹人综合在线观看 | 无遮挡国产高潮视频免费观看 | 亚洲精品中文字幕乱码 | 久久久中文字幕日本无吗 | 福利一区二区三区视频在线观看 | 中文字幕无码乱人伦 | 一本精品99久久精品77 | 久久久亚洲欧洲日产国码αv | 久久精品国产大片免费观看 | 三上悠亚人妻中文字幕在线 | 国产精品久久久一区二区三区 | 无码人妻丰满熟妇区五十路百度 | 天堂亚洲免费视频 | 网友自拍区视频精品 | 亚洲区欧美区综合区自拍区 | 一本大道久久东京热无码av | 亚洲一区二区三区偷拍女厕 | 亚洲中文字幕乱码av波多ji | 成人一在线视频日韩国产 | 国内精品一区二区三区不卡 | 精品国产一区二区三区四区在线看 | 成人无码视频免费播放 | 久久 国产 尿 小便 嘘嘘 | 97人妻精品一区二区三区 | 日韩视频 中文字幕 视频一区 | 少妇人妻av毛片在线看 | 国产免费无码一区二区视频 | 亚洲中文字幕av在天堂 | 精品亚洲韩国一区二区三区 | 97人妻精品一区二区三区 | 成人精品视频一区二区三区尤物 | 欧美三级a做爰在线观看 | 久久久久久国产精品无码下载 | 色窝窝无码一区二区三区色欲 | 久久99精品国产.久久久久 | 亚洲色欲久久久综合网东京热 | 国精品人妻无码一区二区三区蜜柚 | 亚洲成熟女人毛毛耸耸多 | 亚洲色偷偷男人的天堂 | 国产午夜福利亚洲第一 | 成年美女黄网站色大免费视频 | 无码国产激情在线观看 | 高潮毛片无遮挡高清免费 | 香港三级日本三级妇三级 | 大地资源中文第3页 | 国内丰满熟女出轨videos | 少妇性l交大片欧洲热妇乱xxx | 丰满少妇女裸体bbw | 人人爽人人澡人人人妻 | 大肉大捧一进一出视频出来呀 | 亚洲精品国偷拍自产在线麻豆 | 人人妻人人藻人人爽欧美一区 | 99精品国产综合久久久久五月天 | 国产亚洲欧美在线专区 | 精品乱码久久久久久久 | 亚洲中文无码av永久不收费 | 国产三级精品三级男人的天堂 | 亚洲码国产精品高潮在线 | 亚洲综合久久一区二区 | 性色av无码免费一区二区三区 | 欧美日韩人成综合在线播放 | 免费无码的av片在线观看 | 国产精品国产自线拍免费软件 | 人妻体内射精一区二区三四 | 人妻少妇精品无码专区动漫 | 水蜜桃色314在线观看 | 国产三级久久久精品麻豆三级 | 亲嘴扒胸摸屁股激烈网站 | 久久99热只有频精品8 | 亚洲国产欧美日韩精品一区二区三区 | 在线亚洲高清揄拍自拍一品区 | 内射老妇bbwx0c0ck | 网友自拍区视频精品 | 中文无码精品a∨在线观看不卡 | 国产凸凹视频一区二区 | 麻豆蜜桃av蜜臀av色欲av | 国产熟妇高潮叫床视频播放 | 日本大乳高潮视频在线观看 | 天天摸天天碰天天添 |