日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

分布式服务化系统一致性的“最佳实干”--转

發布時間:2025/4/5 windows 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式服务化系统一致性的“最佳实干”--转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://www.jianshu.com/p/1156151e20c8

1 背景

一致性是一個抽象的、具有多重含義的計算機術語,在不同應用場景下,有不同的定義和含義。在傳統的IT時代,一致性通常指強一致性,強一致性通常體現在你中有我、我中有你、渾然一體;而在互聯網時代,一致性的含義遠遠超出了它原有的含義,在我們討論互聯網時代的一致性之前,我們先了解一下互聯網時代的特點,互聯網時代信息量巨大、需要計算能力巨大,不但對用戶響應速度要求快,而且吞吐量指標也要向外擴展(既:水平伸縮),于是單節點的服務器無法滿足需求,服務節點開始池化,想想那個經典的故事,一只筷子一折就斷,一把筷子怎么都折不斷,可見人多力量大的思想是多么的重要,但是人多也不一定能解決所有事情,還得進行有序、合理的分配任務,進行有效的管理,于是互聯網時代談論最多的話題就是拆分,拆分一般分為“水平拆分”和“垂直拆分”(大家不要對應到數據庫或者緩存拆分,這里主要表達一種邏輯)。這里,“水平拆分”指的是同一個功能由于單機節點無法滿足性能需求,需要擴展成為多節點,多個節點具有一致的功能,組成一個服務池,一個節點服務一部分的請求量,團結起來共同處理大規模高并發的請求量?!按怪辈鸱帧敝傅氖前凑展δ懿鸱?#xff0c;秉著“專業的人干專業的事兒”的原則,把一個復雜的功能拆分到多個單一的簡單的元功能,不同的元功能組合在一起,和未拆分前完成的功能是一致的,由于每個元功能職責單一、功能簡單,讓維護和變更都變得更簡單、安全,更易于產品版本的迭代,在這樣的一個互聯網的時代和環境,一致性指分布式服務化系統之間的弱一致性,包括應用系統一致性和數據一致性。

無論是水平拆分還是垂直拆分,都解決了特定場景下的特定問題,凡事有好的一面,都會有壞的一面,拆分后的系統或者服務化的系統最大的問題就是一致性問題,這么多個具有元功能的模塊,或者同一個功能池中的多個節點之間,如何保證他們的信息是一致的、工作步伐是一致的、狀態是一致的、互相協調有序的工作呢?

本文根據作者在互聯網企業的實際項目經驗,對服務化系統中最難解決的一致性問題進行研究和探討,試圖從實踐經驗中找到規律,抽象出模式,分享給大家,希望對大家的項目實施有所幫助,在對實踐的總結中也會對相關的一致性術語做最樸實的解釋,希望能幫助大家徹底理解一致性的本質,并能將其應用到實踐,解決讀者現實中遇到的服務化系統的一致性問題,本文使用理論與實踐相結合的方法,突出在實踐中解決問題的模式,因此叫做《分布式服務化系統一致性的“最佳實干”》。

2 問題

本節列舉不一致會導致的種種問題,這也包括一例生活中的問題。

案例1:買房

假如你想要享受生活的隨意,只想買個兩居,不想讓房貸有太大壓力,而你媳婦卻想要買個三居,還得帶花園的,那么你們就不一致了,不一致導致生活不愉快、不協調,嚴重情況下還會吵架,可見生活中的不一致問題影響很大。

案例2:轉賬

轉賬是經典的不一致案例,設想一下銀行為你處理一筆轉賬,扣減你賬戶上的余額,然后增加別人賬戶的余額;如果扣減你的賬戶余額成功,增加別人賬戶余額失敗,那么你就會損失這筆資金。反過來,如果扣減你的賬戶余額失敗,增加別人賬戶余額成功,那么銀行就會損失這筆資金,銀行需要賠付。對于資金處理系統來說,上面任何一種場景都是不允許發生的,一旦發生就會有資金損失,后果是不堪設想的,嚴重情況會讓一個公司瞬間倒閉,可參考案例。

案例3:下訂單和扣庫存

電商系統中也有一個經典的案例,下訂單和扣庫存如何保持一致,如果先下訂單,扣庫存失敗,那么將會導致超賣;如果下訂單沒有成功,扣庫存成功,那么會導致少賣。兩種情況都會導致運營成本的增加,嚴重情況下需要賠付。

案例4:同步超時

服務化的系統間調用常常因為網絡問題導致系統間調用超時,即使是網絡很好的機房,在億次流量的基數下,同步調用超時也是家常便飯。系統A同步調用系統B超時,系統A可以明確得到超時反饋,但是無法確定系統B是否已經完成了預定的功能或者沒有完成預定的功能。于是,系統A就迷茫了,不知道應該繼續做什么,如何反饋給使用方。(曾經的一個B2B產品的客戶要求接口超時重新通知他們,這個在技術上是難以實現的,因為服務器本身可能并不知道自己超時,可能會繼續正常的返回數據,只是客戶端并沒有接受到結果罷了,因此這不是一個合理的解決方案)。

案例5:異步回調超時

此案例和上一個同步超時案例類似,不過這個場景使用了異步回調,系統A同步調用系統B發起指令,系統B采用受理模式,受理后則返回受理成功,然后系統B異步通知系統A。在這個過程中,如果系統A由于某種原因遲遲沒有收到回調結果,那么兩個系統間的狀態就不一致,互相認知不同會導致系統間發生錯誤,嚴重情況下會影響核心事務,甚至會導致資金損失。

案例6:掉單

分布式系統中,兩個系統協作處理一個流程,分別為對方的上下游,如果一個系統中存在一個請求,通常指訂單,另外一個系統不存在,則導致掉單,掉單的后果很嚴重,有時候也會導致資金損失。

案例7:系統間狀態不一致

這個案例與上面掉單案例類似,不同的是兩個系統間都存在請求,但是請求的狀態不一致。

案例8:緩存和數據庫不一致

交易相關系統基本離不開關系型數據庫,依賴關系型數據庫提供的ACID特性(后面介紹),但是在大規模高并發的互聯網系統里,一些特殊的場景對讀的性能要求極高,服務于交易的數據庫難以抗住大規模的讀流量,通常需要在數據庫前墊緩存,那么緩存和數據庫之間的數據如何保持一致性?是要保持強一致呢還是弱一致性呢?

案例9:本地緩存節點間不一致

一個服務池上的多個節點為了滿足較高的性能需求,需要使用本地緩存,使用了本地緩存,每個節點都會有一份緩存數據的拷貝,如果這些數據是靜態的、不變的,那永遠都不會有問題,但是如果這些數據是半靜態的或者常被更新的,當被更新的時候,各個節點更新是有先后順序的,在更新的瞬間,各個節點的數據是不一致的,如果這些數據是為某一個開關服務的,想象一下重復的請求走進了不同的節點(在failover或者補償導致的場景下,重復請求是一定會發生的,也是服務化系統必須處理的),一個請求走了開關打開的邏輯,同時另外一個請求走了開關關閉的邏輯,這導致請求被處理兩次,最壞的情況下會導致災難性的后果,就是資金損失。

案例10:緩存數據結構不一致

這個案例會時有發生,某系統需要種某一數據結構的緩存,這一數據結構有多個數據元素組成,其中,某個數據元素都需要從數據庫中或者服務中獲取,如果一部分數據元素獲取失敗,由于程序處理不正確,仍然將不完全的數據結構存入緩存,那么緩存的消費者消費的時候很有可能因為沒有合理處理異常情況而出錯。

3 模式

3.1 生活中不一致問題的解決

大家回顧一下上一節列舉的生活中的案例1-買房,如果置身事外來看,解決這種不一致的辦法有兩個,一個是避免不一致的發生,如果已經是媳婦了就不好辦了:),還有一種方法就是慢慢的補償,先買個兩居,然后慢慢的等資金充裕了再換三居,買比特幣賺了再換帶花園的房子,于是問題最終被解決了,最終大家處于一致的狀態,都開心了。這樣可以解決案例1的問題,很自然由于有了過渡的方法,問題在不經意間就消失了,可見“過渡”也是解決一致性問題的一個模式。

從案例1的解決方案來看,我們要解決一致性問題,一個最直接最簡單的方法就是保持強一致性,對于案例1的情況,盡量避免在結婚前兩個人能夠互相了解達成一致,避免不一致問題的發生;不過有些事情事已至此,發生了就是發生了,出現了不一致的問題,我們應該考慮去補償,盡最大的努力從不一致狀態修復到一致狀態,避免損失全部或者一部分,也不失為一個好方法。

因此,避免不一致是上策,出現了不一致及時發現及時修復是中策,有問題不積極解決留給他人解決是下策。

3.2 酸堿平衡理論

ACID在英文中的意思是“酸”,BASE的意識是“堿”,這一段講的是“酸堿平衡”的故事。

1. ACID(酸)

如何保證強一致性呢?計算機專業的童鞋在學習關系型數據庫的時候都學習了ACID原理,這里對ACID做個簡單的介紹。如果想全面的學習ACID原理,請參考ACID。

關系型數據庫天生就是解決具有復雜事務場景的問題,關系型數據庫完全滿足ACID的特性。

ACID指的是:

  • A: Atomicity,原子性

  • C: Consistency,一致性

  • I: Isolation,隔離性

  • D: Durability,持久性

具有ACID的特性的數據庫支持強一致性,強一致性代表數據庫本身不會出現不一致,每個事務是原子的,或者成功或者失敗,事物間是隔離的,互相完全不影響,而且最終狀態是持久落盤的,因此,數據庫會從一個明確的狀態到另外一個明確的狀態,中間的臨時狀態是不會出現的,如果出現也會及時的自動的修復,因此是強一致的。

3個典型的關系型數據庫Oracle、Mysql、Db2都能保證強一致性,Oracle和Mysql使用多版本控制協議實現,而DB2使用改進的兩階段提交協議來實現。

如果你在為交易相關系統做技術選型,交易的存儲應該只考慮關系型數據庫,對于核心系統,如果需要較好的性能,可以考慮使用更強悍的硬件,這種向上擴展(升級硬件)雖然成本較高,但是是最簡單粗暴有效的方式,另外,Nosql完全不適合交易場景,Nosql主要用來做數據分析、ETL、報表、數據挖掘、推薦、日志處理等非交易場景。

前面提到的案例2-轉賬和案例3-下訂單和扣庫存都可以利用關系型數據庫的強一致性解決。

然而,前面提到,互聯網項目多數具有大規模高并發的特性,必須應用拆分的理念,對高并發的壓力采取“大而化小、小而化了”的方法,否則難以滿足動輒億級流量的需求,即使使用關系型數據庫,單機也難以滿足存儲和TPS上的需求。為了保證案例2-轉賬可以利用關系型數據庫的強一致性,在拆分的時候盡量的把轉賬相關的賬戶放入一個數據庫分片,對于案例3,盡量的保證把訂單和庫存放入同一個數據庫分片,這樣通過關系型數據庫自然就解決了不一致的問題。

然而,有些時候事與愿違,由于業務規則的限制,無法將相關的數據分到同一個數據庫分片,這個時候我們就需要實現最終一致性。

對于案例2-轉賬場景,假設賬戶數量巨大,對賬戶存儲進行了拆分,關系型數據庫一共分了8個實例,每個實例8個庫,每個庫8個表,共512張表,假如要轉賬的兩個賬戶正好落在了一個庫里,那么可以依賴關系型數據庫的事務保持強一致性。

如果要轉賬的兩個賬戶正好落在了不同的庫里,轉賬操作是無法封裝在同一個數據庫事務中的,這個時候會發生一個庫的賬戶扣減余額成功,另外一個庫的賬戶增加余額失敗的情況。

對于這種情況,我們需要繼續探討解決之道,CAP原理和BASE原理,BASE原理通過記錄事務的中間的臨時狀態,實現最終一致性。

2. CAP(帽子理論)

如果想深入的學習CAP理論,請參考CAP。

由于對系統或者數據進行了拆分,我們的系統不再是單機系統,而是分布式系統,針對分布式系的帽子理論包含三個元素:

  • C:Consistency,一致性, 數據一致更新,所有數據變動都是同步的

  • A:Availability,可用性, 好的響應性能,完全的可用性指的是在任何故障模型下,服務都會在有限的時間處理響應

  • P:Partition tolerance,分區容錯性,可靠性

帽子理論證明,任何分布式系統只可同時滿足二點,沒法三者兼顧。關系型數據庫由于關系型數據庫是單節點的,因此,不具有分區容錯性,但是具有一致性和可用性,而分布式的服務化系統都需要滿足分區容錯性,那么我們必須在一致性和可用性中進行權衡,具體表現在服務化系統處理的異常請求在某一個時間段內可能是不完全的,但是經過自動的或者手工的補償后,達到了最終的一致性。

3. BASE(堿)

BASE理論解決CAP理論提出了分布式系統的一致性和可用性不能兼得的問題,如果想全面的學習BASE原理,請參考Eventual consistency。

BASE在英文中有“堿”的意思,對應本節開頭的ACID在英文中“酸”的意思,基于這兩個名詞提出了酸堿平衡的結論,簡單來說是在不同的場景下,可以分別利用ACID和BASE來解決分布式服務化系統的一致性問題。

BASE模型與ACID模型截然不同,滿足CAP理論,通過犧牲強一致性,獲得可用性,一般應用在服務化系統的應用層或者大數據處理系統,通過達到最終一致性來盡量滿足業務的絕大部分需求。

BASE模型包含個三個元素:

  • BA:Basically Available,基本可用

  • S:Soft State,軟狀態,狀態可以有一段時間不同步

  • E:Eventually Consistent,最終一致,最終數據是一致的就可以了,而不是時時保持強一致

BASE模型的軟狀態是實現BASE理論的方法,基本可用和最終一致是目標。按照BASE模型實現的系統,由于不保證強一致性,系統在處理請求的過程中,可以存在短暫的不一致,在短暫的不一致窗口請求處理處在臨時狀態中,系統在做每步操作的時候,通過記錄每一個臨時狀態,在系統出現故障的時候,可以從這些中間狀態繼續未完成的請求處理或者退回到原始狀態,最后達到一致的狀態。

以案例1-轉賬為例,我們把用戶A給用戶B轉賬分成四個階段,第一個階段用戶A準備轉賬,第二個階段從用戶A賬戶扣減余額,第三個階段對用戶B增加余額,第四個階段完成轉賬。系統需要記錄操作過程中每一步驟的狀態,一旦系統出現故障,系統能夠自動發現沒有完成的任務,然后,根據任務所處的狀態,繼續執行任務,最終完成任務,達到一致的最終狀態。

在實際應用中,上面這個過程通常是通過持久化執行任務的狀態和環境信息,一旦出現問題,定時任務會撈取未執行完的任務,繼續未執行完的任務,直到執行完成為止,或者取消已經完成的部分操作回到原始狀態。這種方法在任務完成每個階段的時候,都要更新數據庫中任務的狀態,這在大規模高并發系統中不會有太好的性能,一個更好的辦法是用Write-Ahead Log(寫前日志),這和數據庫的Bin Log(操作日志)相似,在做每一個操作步驟,都先寫入日志,如果操作遇到問題而停止的時候,可以讀取日志按照步驟進行恢復,并且繼續執行未完成的工作,最后達到一致。寫前日志可以利用機械硬盤的追加寫而達到較好性能,因此,這是一種專業化的實現方式,多數業務系系統還是使用數據庫記錄的字段來記錄任務的執行狀態,也就是記錄中間的“軟狀態”,一個任務的狀態流轉一般可以通過數據庫的行級鎖來實現,這比使用Write-Ahead Log實現更簡單、更快速。

有了BASE理論作為基礎,我們對復雜的分布式事務進行拆解,對其中的每一步驟都記錄其狀態,有問題的時候可以根據記錄的狀態來繼續執行任務,達到最終的一致,通過這個方法我們可以解決案例2-轉賬和案例3-下訂單和扣庫存中遇到的問題。

4. 酸堿平衡的總結

  • 使用向上擴展(強悍的硬件)運行專業的關系型數據庫(例如:Oracle或者DB2)能夠保證強一致性,錢能解決的問題就不是問題

  • 如果錢是問題,可以對廉價硬件運行的開源關系型數據庫(例如:Mysql)進行分片,將相關的數據分到數據庫的同一個片,仍然能夠使用關系型數據庫保證事務

  • 如果業務規則限制,無法將相關的數據分到同一個片,就需要實現最終一致性,通過記錄事務的軟狀態(中間狀態、臨時狀態),一旦處于不一致,可以通過系統自動化或者人工干預來修復不一致的情況

  • 3.3 分布式一致性協議

    國際開放標準組織Open Group定義了DTS(分布式事務處理模型),模型中包含4個角色:應用程序、事務管理器、資源管理器、通信資源管理器四部分。事務處理器是統管全局的管理者,資源處理器和通信資源處理器是事務的參與者。

    J2EE規范也包含此分布式事務處理模型的規范,并在所有的AppServer中進行實現,J2EE規范中定義了TX協議和XA協議,TX協議定義應用程序與事務管理器之間的接口,而XA協議定義了事務管理器與資源處理器之間的接口,在過去,大家使用AppServer,例如:Websphere、Weblogic、Jboss等配置數據源的時候會看見類似XADatasource的數據源,這就是實現了DTS的關系型數據庫的數據源。企業級開發JEE中,關系型數據庫、JMS服務扮演資源管理器的角色,而EJB容器則扮演事務管理器的角色。

    下面我們就介紹兩階段提交協議、三階段提交協議以及阿里巴巴提出的TCC,它們都是根據DTS這一思想演變出來的。

    1. 兩階段提交協議

    上面描述的JEE的XA協議就是根據兩階段提交來保證事務的完整性,并實現分布式服務化的強一致性。

    兩階段提交協議把分布式事務分成兩個過程,一個是準備階段,一個是提交階段,準備階段和提交階段都是由事務管理器發起的,為了接下來講解方便,我們把事務管理器稱為協調者,把資管管理器稱為參與者。

    兩階段如下:

  • 準備階段:協調者向參與者發起指令,參與者評估自己的狀態,如果參與者評估指令可以完成,參與者會寫redo或者undo日志(這也是前面提起的Write-Ahead Log的一種),然后鎖定資源,執行操作,但是并不提交

  • 提交階段:如果每個參與者明確返回準備成功,也就是預留資源和執行操作成功,協調者向參與者發起提交指令,參與者提交資源變更的事務,釋放鎖定的資源;如果任何一個參與者明確返回準備失敗,也就是預留資源或者執行操作失敗,協調者向參與者發起中止指令,參與者取消已經變更的事務,執行undo日志,釋放鎖定的資源

  • 兩階段提交協議成功場景示意圖如下:

    ?

    兩階段提交協議

    ?

    我們看到兩階段提交協議在準備階段鎖定資源,是一個重量級的操作,并能保證強一致性,但是實現起來復雜、成本較高,不夠靈活,更重要的是它有如下致命的問題:

  • 阻塞:從上面的描述來看,對于任何一次指令必須收到明確的響應,才會繼續做下一步,否則處于阻塞狀態,占用的資源被一直鎖定,不會被釋放

  • 單點故障:如果協調者宕機,參與者沒有了協調者指揮,會一直阻塞,盡管可以通過選舉新的協調者替代原有協調者,但是如果之前協調者在發送一個提交指令后宕機,而提交指令僅僅被一個參與者接受,并且參與者接收后也宕機,新上任的協調者無法處理這種情況

  • 腦裂:協調者發送提交指令,有的參與者接收到執行了事務,有的參與者沒有接收到事務,就沒有執行事務,多個參與者之間是不一致的

  • 上面所有的這些問題,都是需要人工干預處理,沒有自動化的解決方案,因此兩階段提交協議在正常情況下能保證系統的強一致性,但是在出現異常情況下,當前處理的操作處于錯誤狀態,需要管理員人工干預解決,因此可用性不夠好,這也符合CAP協議的一致性和可用性不能兼得的原理。

    2. 三階段提交協議

    三階段提交協議是兩階段提交協議的改進版本。它通過超時機制解決了阻塞的問題,并且把兩個階段增加為三個階段:

  • 詢問階段:協調者詢問參與者是否可以完成指令,協調者只需要回答是還是不是,而不需要做真正的操作,這個階段超時導致中止

  • 準備階段:如果在詢問階段所有的參與者都返回可以執行操作,協調者向參與者發送預執行請求,然后參與者寫redo和undo日志,執行操作,但是不提交操作;如果在詢問階段任何參與者返回不能執行操作的結果,則協調者向參與者發送中止請求,這里的邏輯與兩階段提交協議的的準備階段是相似的,這個階段超時導致成功

  • 提交階段:如果每個參與者在準備階段返回準備成功,也就是預留資源和執行操作成功,協調者向參與者發起提交指令,參與者提交資源變更的事務,釋放鎖定的資源;如果任何一個參與者返回準備失敗,也就是預留資源或者執行操作失敗,協調者向參與者發起中止指令,參與者取消已經變更的事務,執行undo日志,釋放鎖定的資源,這里的邏輯與兩階段提交協議的提交階段一致

  • 三階段提交協議成功場景示意圖如下:

    三階段提交協議

    ?

    然而,這里與兩階段提交協議有兩個主要的不同:

  • 增加了一個詢問階段,詢問階段可以確保盡可能早的發現無法執行操作而需要中止的行為,但是它并不能發現所有的這種行為,只會減少這種情況的發生

  • 在準備階段以后,協調者和參與者執行的任務中都增加了超時,一旦超時,協調者和參與者都繼續提交事務,默認為成功,這也是根據概率統計上超時后默認成功的正確性最大

  • 三階段提交協議與兩階段提交協議相比,具有如上的優點,但是一旦發生超時,系統仍然會發生不一致,只不過這種情況很少見罷了,好處就是至少不會阻塞和永遠鎖定資源。

    3. TCC

    上面兩節講解了兩階段提交協議和三階段提交協議,實際上他們能解決案例2-轉賬和案例3-下訂單和扣庫存中的分布式事務的問題,但是遇到極端情況,系統會發生阻塞或者不一致的問題,需要運營或者技術人工解決。無論兩階段還是三階段方案中都包含多個參與者、多個階段實現一個事務,實現復雜,性能也是一個很大的問題,因此,在互聯網高并發系統中,鮮有使用兩階段提交和三階段提交協議的場景。

    阿里巴巴提出了新的TCC協議,TCC協議將一個任務拆分成Try、Confirm、Cancel,正常的流程會先執行Try,如果執行沒有問題,再執行Confirm,如果執行過程中出了問題,則執行操作的逆操Cancel,從正常的流程上講,這仍然是一個兩階段的提交協議,但是,在執行出現問題的時候,有一定的自我修復能力,如果任何一個參與者出現了問題,協調者通過執行操作的逆操作來取消之前的操作,達到最終的一致狀態。

    可以看出,從時序上,如果遇到極端情況下TCC會有很多問題的,例如,如果在Cancel的時候一些參與者收到指令,而一些參與者沒有收到指令,整個系統仍然是不一致的,這種復雜的情況,系統首先會通過補償的方式,嘗試自動修復的,如果系統無法修復,必須由人工參與解決。

    從TCC的邏輯上看,可以說TCC是簡化版的三階段提交協議,解決了兩階段提交協議的阻塞問題,但是沒有解決極端情況下會出現不一致和腦裂的問題。然而,TCC通過自動化補償手段,會把需要人工處理的不一致情況降到到最少,也是一種非常有用的解決方案,根據線人,阿里在內部的一些中間件上實現了TCC模式。

    我們給出一個使用TCC的實際案例,在秒殺的場景,用戶發起下單請求,應用層先查詢庫存,確認商品庫存還有余量,則鎖定庫存,此時訂單狀態為待支付,然后指引用戶去支付,由于某種原因用戶支付失敗,或者支付超時,系統會自動將鎖定的庫存解鎖供其他用戶秒殺。

    TCC協議使用場景示意圖如下:

    TCC

    ?

    總結一下,兩階段提交協議、三階段提交協議、TCC協議都能保證分布式事務的一致性,他們保證的分布式系統的一致性從強到弱,TCC達到的目標是最終一致性,其中任何一種方法都可以不同程度的解決案例2:轉賬、案例3:下訂單和扣庫存的問題,只是實現的一致性的級別不一樣而已,對于案例4:同步超時可以通過TCC的理念解決,如果同步調用超時,調用方可以使用fastfail策略,返回調用方的使用方失敗的結果,同時調用服務的逆向cancel操作,保證服務的最終一致性。

    3.4 保證最終一致性的模式

    在大規模高并發服務化系統中,一個功能被拆分成多個具有單一功能的元功能,一個流程會有多個系統的多個元功能組合實現,如果使用兩階段提交協議和三階段提交協議,確實能解決系統間一致性問題,除了這兩個協議帶來的自身的問題,這些協議的實現比較復雜、成本比較高,最重要的是性能并不好,相比來看,TCC協議更簡單、容易實現,但是TCC協議由于每個事務都需要執行Try,再執行Confirm,略微顯得臃腫,因此,在現實的系統中,底線要求僅僅需要能達到最終一致性,而不需要實現專業的、復雜的一致性協議,實現最終一致性有一些非常有效的、簡單粗暴的模式,下面就介紹這些模式及其應用場景。

    1. 查詢模式

    任何一個服務操作都需要提供一個查詢接口,用來向外部輸出操作執行的狀態。服務操作的使用方可以通過查詢接口,得知服務操作執行的狀態,然后根據不同狀態來做不同的處理操作。

    為了能夠實現查詢,每個服務操作都需要有唯一的流水號標識,也可使用此次服務操作對應的資源ID來標志,例如:請求流水號、訂單號等。

    首先,單筆查詢操作是必須提供的,我們也鼓勵使用單筆訂單查詢,這是因為每次調用需要占用的負載是可控的,批量查詢則根據需要來提供,如果使用了批量查詢,需要有合理的分頁機制,并且必須限制分頁的大小,以及對批量查詢的QPS需要有容量評估和流控等。

    查詢模式的示意圖如下:

    查詢模式

    ?

    對于案例4:同步超時、案例5:異步回調超時、案例6:掉單、案例7:系統間狀態不一致,我們都需要使用查詢模式來了解被調用服務的處理情況,來決定下一步做什么:補償未完成的操作還是回滾已經完成的操作。

    2. 補償模式

    有了上面的查詢模式,在任何情況下,我們都能得知具體的操作所處的狀態,如果整個操作處于不正常的狀態,我們需要修正操作中有問題的子操作,這可能需要重新執行未完成的子操作,后者取消已經完成的子操作,通過修復使整個分布式系統達到一致,為了讓系統最終一致而做的努力都叫做補償。

    對于服務化系統中同步調用的操作,業務操作發起的主動方在還沒有得到業務操作執行方的明確返回或者調用超時,場景可參考案例4:同步超時,這個時候業務發起的主動方需要及時的調用業務執行方獲得操作執行的狀態,這里使用查詢模式,獲得業務操作的執行方的狀態后,如果業務執行方已經完預設的工作,則業務發起方給業務的使用方返回成功,如果業務操作的執行方的狀態為失敗或者未知,則會立即告訴業務的使用方失敗,然后調用業務操作的逆向操作,保證操作不被執行或者回滾已經執行的操作,讓業務的使用方、業務發起的主動方、業務的操作方最終達成一致的狀態。

    補償模式的示意圖如下:

    補償模式

    ?

    補償操作根據發起形式分為:

  • 自動恢復:程序根據發生不一致的環境,通過繼續未完成的操作,或者回滾已經完成的操作,自動來達到一致

  • 通知運營:如果程序無法自動恢復,并且設計時考慮到了不一致的場景,可以提供運營功能,通過運營手工進行補償

  • 通知技術:如果很不巧,系統無法自動回復,又沒有運營功能,那必須通過技術手段來解決,技術手段包括走數據庫變更或者代碼變更來解決,這是最糟的一種場景

  • 3. 異步確保模式

    異步確保模式是補償模式的一個典型案例,經常應用到使用方對響應時間要求并不太高,我們通常把這類操作從主流程中摘除,通過異步的方式進行處理,處理后把結果通過通知系統通知給使用方,這個方案最大的好處能夠對高并發流量進行消峰,例如:電商系統中的物流、配送,以及支付系統中的計費、入賬等。

    實踐中,將要執行的異步操作封裝后持久入庫,然后通過定時撈取未完成的任務進行補償操作來實現異步確保模式,只要定時系統足夠健壯,任何一個任務最終會被成功執行。

    異步確保模式的示意圖如下:

    異步確保模式

    ?

    對于案例5:異步回調超時,使用的就是異步確保模式,這種情況下對于某個操作,如果遲遲沒有收到響應,我們通過查詢模式和補償模式來繼續未完成的操作。

    4. 定期校對模式

    既然我們在系統中實現最終一致性,系統在沒有達到一致之前,系統間的狀態是不一致的,甚至是混亂的,需要補償操作來達到一致的目的,但是我們如何來發現需要補償的操作呢?

    在操作的主流程中的系統間執行校對操作,我們可以事后異步的批量校對操作的狀態,如果發現不一致的操作,則進行補償,補償操作與補償模式中的補償操作是一致的。

    另外,實現定期校對的一個關鍵就是分布式系統中需要有一個自始至終唯一的ID,ID的生成請參考SnowFlake。

    在分布式系統中,全局唯一ID的示意圖如下:

    唯一ID

    ?

    一般情況下,生成全局唯一ID有兩種方法:

  • 持久型:使用數據庫表自增字段或者Sequence生成,為了提高效率,每個應用節點可以緩存一批次的ID,如果機器重啟可能會損失一部分ID,但是這并不會產生任何問題

  • 時間型:一般由機器號、業務號、時間、單節點內自增ID組成,由于時間一般精確到秒或者毫秒,因此不需要持久就能保證在分布式系統中全局唯一、粗略遞增能特點

  • 實踐中,為了能在分布式系統中迅速的定位問題,一般的分布式系統都有技術支持系統,它能夠跟蹤一個請求的調用鏈,調用鏈是在二維的維度跟蹤一個調用請求,最后形成一個調用樹,原理可參考谷歌的論文Dapper, a Large-Scale Distributed Systems Tracing Infrastructure,一個開源的參考實現為pinpoint。

    在分布式系統中,調用鏈的示意圖如下:

    調用鏈


    全局的唯一流水ID可以把一個請求在分布式系統中的流轉的路徑聚合,而調用鏈中的spanid可以把聚合的請求路徑通過樹形結構進行展示,讓技術支持人員輕松的發現系統出現的問題,能夠快速定位出現問題的服務節點,提高應急效率。

    關于訂單跟蹤、調用鏈跟蹤、業務鏈跟蹤,我們會在后續文章中詳細介紹。

    在分布式系統中構建了唯一ID,調用鏈等基礎設施,我們很容易對系統間的不一致進行核對,通常我們需要構建第三方的定期核對系統,以第三方的角度來監控服務執行的健康程度。

    定期核對系統示意圖如下:

    定期核對模式

    ?

    對于案例6:掉單、案例7:系統間狀態不一致通常通過定期校對模式發現問題,并通過補償模式來修復,最后完成系統間的最終一致性。

    定期校對模式多應用在金融系統,金融系統由于涉及到資金安全,需要保證百分之百的準確性,所以,需要多重的一致性保證機制,包括:系統間的一致性對賬、現金對賬、賬務對賬、手續費對賬等等,這些都屬于定期校對模式,順便說一下,金融系統與社交應用在技術上本質的區別在于社交應用在于量大,而金融系統在于數據的準確性。

    到現在為止,我們看到通過查詢模式、補償模式、定期核對模式可以解決案例4到案例7的所有問題,對于案例4:同步超時,如果同步超時,我們需要查詢狀態進行補償,對于案例5:異步回調超時,如果遲遲沒有收到回調響應,我們也會通過查詢狀態進行補償,對于案例6:掉單、案例7:系統間狀態不一致,我們通過定期核對模式可以保證系統間操作的一致性,避免掉單和狀態不一致導致問題。

    5. 可靠消息模式

    在分布式系統中,對于主流程中優先級比較低的操作,大多采用異步的方式執行,也就是前面提到的異步確保型,為了讓異步操作的調用方和被調用方充分的解耦,也由于專業的消息隊列本身具有可伸縮、可分片、可持久等功能,我們通常通過消息隊列實現異步化,對于消息隊列,我們需要建立特殊的設施保證可靠的消息發送以及處理機的冪等等。

    消息的可靠發送

    消息的可靠發送可以認為是盡最大努力發送消息通知,有兩種實現方法:

    第一種,發送消息之前,把消息持久到數據庫,狀態標記為待發送,然后發送消息,如果發送成功,將消息改為發送成功。定時任務定時從數據庫撈取一定時間內未發送的消息,將消息發送。

    消息發送模式1

    ?

    第二種,實現方式與第一種類似,不同的是持久消息的數據庫是獨立的,并不耦合在業務系統中。發送消息之前,先發送一個預消息給某一個第三方的消息管理器,消息管理器將其持久到數據庫,并標記狀態為待發送,發送成功后,標記消息為發送成功。定時任務定時從數據庫撈取一定時間內未發送的消息,回查業務系統是否要繼續發送,根據查詢結果來確定消息的狀態。

    消息發送模式2

    ?

    一些公司把消息的可靠發送實現在了中間件里,通過Spring的注入,在消息發送的時候自動持久消息記錄,如果有消息記錄沒有發送成功,定時會補償發送。

    消息處理器的冪等性

    如果我們要保證消息可靠的發送,簡單來說,要保證消息一定要發送出去,那么就需要有重試機制,有了重試機制,消息一定會重復,那么我們需要對重復做處理。

    處理重復的最佳方式為保證操作的冪等性,冪等性的數學公式為:

    f(f(x)) = f(x)

    保證操作的冪等性常用的幾個方法:

  • 使用數據庫表的唯一鍵進行濾重,拒絕重復的請求

  • 使用分布式表對請求進行濾重

  • 使用狀態流轉的方向性來濾重,通常使用行級鎖來實現(后續在鎖相關的文章中詳細說明)

  • 根據業務的特點,操作本身就是冪等的,例如:刪除一個資源、增加一個資源、獲得一個資源等

  • 6. 緩存一致性模型

    大規模高并發系統中一個常見的核心需求就是億級的讀需求,顯然,關系型數據庫并不是解決高并發讀需求的最佳方案,互聯網的經典做法就是使用緩存抗讀需求,下面有一些使用緩存的保證一致性的最佳實踐:

  • 如果性能要求不是非常的高,盡量使用分布式緩存,而不要使用本地緩存

  • 種緩存的時候一定種完全,如果緩存數據的一部分有效,一部分無效,寧可放棄種緩存,也不要把部分數據種入緩存

  • 數據庫與緩存只需要保持弱一致性,而不需要強一致性,讀的順序要先緩存,后數據庫,寫的順序要先數據庫,后緩存

  • 這里的最佳實踐能夠解決案例8:緩存和數據庫不一致、案例9:本地緩存節點間不一致、案例10:緩存數據結構不一致的問題,對于數據存儲層、緩存與數據庫、Nosql等的一致性是更深入的存儲一致性技術,將會在后續文章單獨介紹,這里的數據一致性主要是處理應用層與緩存、應用層與數據庫、一部分的緩存與數據庫的一致性。

    3.5 專題模式

    這一節介紹特殊場景下的一致性問題和解決方案。

    遷移開關的設計

    在大多數企業里,新項目和老項目一般會共存,大家都在努力的下掉老項目,但是由于種種原因總是下不掉,如果要徹底的下掉老項目,就必須要有非常完善的遷移方案,遷移是一項非常復雜而艱巨的任務,我會在將來的文章中詳細探討遷移方案、流程和技術,這里我們只對遷移中使用的開關進行描述。

    遷移過程必須使用開關,開關一般都會基于多個維度來設計,例如:全局的、用戶的、角色的、商戶的、產品的等等,如果遷移過程中遇到問題,我們需要關閉開關,遷移回老的系統,這需要我們的新系統兼容老的數據,老的系統也兼容新的數據,從某種意義上來講,遷移比實現新系統更加困難。

    曾經看過很多簡單的開關設計,有的開關設計在應用層次,通過一個curl語句調用,沒有權限控制,這樣的開關在服務池的每個節點都是不同步的、不一致的;還有的系統把開關配置放在中心化的配置系統、數據庫或者緩存等,處理的每個請求都通過統一的開關來判斷是否遷移等等,這樣的開關有一個致命的缺點,服務請求在處理過程中,開關可能會變化,各個節點之間開關可能不同步、不一致,導致重復的請求可能走到新的邏輯又走了老的邏輯,如果新的邏輯和老的邏輯沒有保證冪等性,這個請求就被重復處理了,如果是金融行業的應用,可能會導致資金損失,電商系統可能會導致發貨并退款等問題。

    這里面我們推薦使用訂單開關,不管我們在什么維度上設計了開關,接收到服務請求后,我們在請求創建的關聯實體(例如:訂單)上標記開關,以后的任何處理流程,包括同步的和異步的處理流程,都通過訂單上的開關來判斷,而不是通過全局的或者基于配置的開關,這樣在訂單創建的時候,開關已經確定,不再變更,一旦一份數據不再發生變化,那么它永遠是線程安全的,并且不會有不一致的問題。

    這個模式在生產中使用比較頻繁,建議每個企業都把這個模式作為設計評審的一項,如果不檢查這一項,很多開發童鞋都會偷懶,直接在配置中或者數據庫中做個開關就上線了。

    4 總結

    本文從一致性問題的實踐出發,從大規模高并發服務化系統的實踐經驗中進行總結,列舉導致不一致的具體問題,圍繞著具體問題,總結出解決不一致的方法,并且抽象成模式,供大家在開發服務化系統的過程中參考。

    另外,由于篇幅有限,還有一些關于分布式一致性的技術無法在一篇文章中與大家分享,包括:paxos算法、raft算法、zab算法、nwr算法、一致性哈希等,我會在后續文章中詳細介紹。

    5 反饋與建議

      • 作者:李艷鵬

      • 主頁:簡書博客,云時代網,開源主頁,CSDN博客

    轉載于:https://www.cnblogs.com/davidwang456/p/6761548.html

    總結

    以上是生活随笔為你收集整理的分布式服务化系统一致性的“最佳实干”--转的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    天天色天天操天天爽 | 亚洲国产视频a | 亚洲一区欧美激情 | 久久嗨| 天天在线视频色 | 欧美日韩国产伦理 | 亚洲精品在线观看av | 婷婷色婷婷| 中文字幕在线视频一区二区 | 丁香婷婷激情网 | 99久久综合狠狠综合久久 | 在线观看av不卡 | 在线免费观看黄色小说 | 国产91综合一区在线观看 | 97福利在线观看 | 国产精品国产三级国产不产一地 | 色网站免费在线观看 | 92国产精品久久久久首页 | 精品爱爱 | 一区二区三区动漫 | av免费看在线 | 精品国产成人av在线免 | 97在线观看免费视频 | 国产99久久久国产精品成人免费 | 91免费版在线 | 日本在线观看中文字幕 | 久久综合国产伦精品免费 | 亚洲精品乱码久久久久久久久久 | 亚洲日本中文字幕在线观看 | 免费又黄又爽视频 | 狠狠色噜噜狠狠狠狠2022 | 最近中文字幕在线播放 | 999国内精品永久免费视频 | 久久免费在线观看 | 久久久国产一区 | 免费黄色激情视频 | 外国av网 | 久久国语露脸国产精品电影 | 婷婷www | 亚洲激情 欧美激情 | 成人免费观看网站 | 亚洲国产三级在线 | 亚洲国产成人精品电影在线观看 | 亚洲免费在线播放视频 | 久久国产精品小视频 | 中文字幕在线网 | 91成人短视频在线观看 | 99色在线视频 | 国产亚洲一区二区三区 | 欧美国产高清 | 天天射天天射天天 | 亚洲最新视频在线 | 精品伊人久久久 | 天天操天天插 | 国产日本在线观看 | 公开超碰在线 | 精品婷婷| 在线午夜av| 伊人影院得得 | 欧美色888 | 欧美激情第十页 | 精品国产乱码久久久久 | 麻豆传媒在线视频 | 欧美极品在线播放 | 天天爽天天爽 | 2021国产精品视频 | 欧美日韩网站 | 天天射天 | 久久av高清 | 免费看v片 | 狠狠色香婷婷久久亚洲精品 | 亚洲成年片 | www毛片com| 成在线播放 | 在线观看91 | 国产xx在线 | 国产一级免费观看视频 | 麻花豆传媒mv在线观看 | 色综合久久久久综合体 | 在线国产一区 | 欧美a级成人淫片免费看 | 国产中文字幕在线播放 | 黄色软件网站在线观看 | 国产一线在线 | 91资源在线视频 | 亚洲国产成人精品在线观看 | 最近中文字幕国语免费高清6 | 亚洲成人黄色av | 午夜精品福利影院 | 国产粉嫩在线 | 91av手机在线观看 | 992tv在线观看 | 精品字幕 | 欧美日韩免费视频 | 激情视频免费在线观看 | 国产精品18毛片一区二区 | 久久国产色| 欧美色久 | 奇米网在线观看 | 丁香影院在线 | 久久久美女 | 亚洲国产一区av | 天天色天天射天天干 | 人人澡超碰碰 | 91丨九色丨国产在线观看 | 四虎国产永久在线精品 | 视频99爱 | 天天操天天操天天 | 97超碰人人澡人人爱 | 九九在线高清精品视频 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 99久久99 | 欧美日韩69 | 天天干天天做天天爱 | 69精品人人人人 | 久久成人免费视频 | 摸bbb搡bbb搡bbbb | 国产 视频 高清 免费 | 免费观看版 | 国产亚洲成人网 | 在线观看v片 | 欧洲激情在线 | 国产精品麻豆三级一区视频 | 亚洲成人av电影 | 玖玖视频精品 | 91视频啊啊啊 | 亚洲aⅴ在线 | 国内外成人在线视频 | 亚洲精品免费观看视频 | 欧美成a人片在线观看久 | 久久久久久福利 | 免费看麻豆 | 国产高清久久久久 | 国产在线美女 | 麻豆视频免费入口 | 亚洲国内在线 | 国产毛片久久久 | 免费看91的网站 | 日日摸日日碰 | 黄色日本免费 | 日本黄色免费电影网站 | 成人毛片a | 欧美电影黄色 | 93久久精品日日躁夜夜躁欧美 | 国际av在线 | 亚洲黄网站 | 日日婷婷夜日日天干 | 精品一区二区三区在线播放 | av电影免费在线看 | 三上悠亚一区二区在线观看 | 亚洲乱码中文字幕综合 | 亚洲国产黄色 | 日韩在线视频一区二区三区 | www.天天综合 | 久久久综合九色合综国产精品 | 国产福利精品一区二区 | 欧洲精品在线视频 | 亚洲国产一区二区精品专区 | 色婷婷电影网 | 夜夜婷婷 | 色噜噜日韩精品欧美一区二区 | 狠狠操天天操 | 在线v片| 欧美a在线免费观看 | 久久精品激情 | 日日夜夜天天久久 | 国产精品亚洲视频 | 久久久免费看视频 | 国产精品乱码久久久久 | 欧美日韩天堂 | 中文字幕在线色 | 日韩高清在线不卡 | 天天干夜夜夜操天 | 99精品视频在线播放免费 | 色视频网站在线 | 日本 在线 视频 中文 有码 | 91在线超碰 | 蜜臀av免费一区二区三区 | 国产成人免费av电影 | 成年人电影免费看 | 涩涩爱夜夜爱 | 91九色自拍 | 国产精品一区二区精品视频免费看 | 久久国产精品视频观看 | 久久99久久99精品免观看粉嫩 | 中文av日韩| 看片网站黄 | 国产精品久久久久久久久久久免费看 | 人人干天天射 | 丁香花在线观看免费完整版视频 | 国产成人在线观看 | 色多多视频在线 | 亚洲免费不卡 | 激情综合网在线观看 | 六月婷色 | 一区 二区 精品 | 91色视频 | 大型av综合网站 | 91探花国产综合在线精品 | 成人在线播放免费观看 | 久久永久免费视频 | 国产福利在线 | 午夜精品久久久久久久99无限制 | 午夜av电影 | 中文字幕一区二区三区四区在线视频 | 91av社区| av日韩在线网站 | 日韩高清一 | 欧美 亚洲 另类 激情 另类 | 免费久久精品视频 | 日本精品一区二区三区在线播放视频 | 久久一区二区三区国产精品 | 精品在线观看视频 | 日韩大片在线观看 | 国产精品69av| 美国三级黄色大片 | 久久久国产精品麻豆 | 日韩成人精品一区二区 | 午夜av一区 | 96亚洲精品久久 | av电影在线观看完整版一区二区 | 亚洲国产午夜精品 | 操操操人人| 美女网站色免费 | 亚洲人成精品久久久久 | 久久婷婷五月综合色丁香 | 黄色小说免费观看 | www.五月婷婷 | 深爱婷婷久久综合 | 日产av在线播放 | 狠色狠色综合久久 | 婷婷久久综合网 | 天天天天天天干 | 国产精品18久久久久久久网站 | 欧美三级高清 | 91在线观看视频网站 | 久久综合久色欧美综合狠狠 | 99热这里精品 | 婷婷在线免费观看 | 狠狠色狠狠色综合日日小说 | 精品久久久久久久久久久久 | 在线观看亚洲国产 | 色狠狠综合天天综合综合 | 免费看高清毛片 | 丁香六月婷婷激情 | 国产手机av在线 | 中文字幕在线播出 | a一片一级 | 国产精品久久久久久久av大片 | 免费在线激情视频 | 国产精品久久久久av | 国产精品久99 | 亚洲美女视频网 | 中文字幕一区二 | 国产手机在线精品 | 日韩电影一区二区三区在线观看 | 国产91精品一区二区绿帽 | 欧美精品久久久久久久 | 欧美精品三级 | 成人免费视频网站 | 国产精品人成电影在线观看 | 精品毛片一区二区免费看 | 日韩精品欧美视频 | 国产网红在线观看 | 99色| 在线免费观看视频 | 亚洲日日射 | 久草在线视频精品 | 92精品国产成人观看免费 | 欧美日韩在线视频免费 | 在线看黄色的网站 | 成年人看片 | 九九热视频在线播放 | 又爽又黄又刺激的视频 | 少妇bbb好爽 | 青草视频网| 国产精品国产三级在线专区 | 91精品国产三级a在线观看 | 久久超级碰 | 国产精品不卡在线观看 | 中文字幕有码在线 | 激情综合国产 | 国产成人在线播放 | 中文字幕在线日亚洲9 | 五月婷亚洲 | 一区二区精品在线 | 天天综合网 天天 | 日韩精品久久久久久中文字幕8 | 亚洲精品99久久久久久 | 日韩欧美视频在线免费观看 | 欧美性脚交 | 成人免费在线视频观看 | 欧美性极品xxxx娇小 | 午夜私人影院久久久久 | 96久久| 六月丁香婷婷网 | 精品亚洲成人 | 免费污片| 国产精品一区二区电影 | 日韩高清一 | 亚洲一区尤物 | 久久激情视频 | 经典三级一区 | 麻豆视传媒官网免费观看 | 亚洲精品一区二区三区四区高清 | 日韩中文字幕视频在线 | 插综合网| 午夜精品视频一区二区三区在线看 | 日韩三级av | 黄色av免费看 | 国产精品资源在线 | 欧美日性视频 | 久久精品人人做人人综合老师 | 色婷婷av一区| 中文字幕的 | 国产精品久久久777 成人手机在线视频 | 久热久草在线 | 国内小视频在线观看 | 91在线免费观看网站 | 粉嫩av一区二区三区四区在线观看 | 亚洲精品午夜久久久 | 日韩在线观看视频中文字幕 | 深爱开心激情网 | 97夜夜澡人人双人人人喊 | 欧美日韩调教 | 天堂中文在线视频 | 成人av手机在线 | 日韩动漫免费观看高清完整版在线观看 | 激情丁香月 | 国产1区2区3区精品美女 | 亚洲午夜久久久久久久久电影网 | 国产午夜免费视频 | 456免费视频 | 中文字幕在线观看1 | 国产精品毛片一区视频播不卡 | 婷婷亚洲最大 | 91精品在线免费观看 | 中文在线字幕免 | 92国产精品久久久久首页 | 999成人国产 | 中文字幕黄色网址 | 久久99精品波多结衣一区 | 国产亚洲欧美精品久久久久久 | 欧美激情精品久久久久久免费印度 | 国产日产高清dvd碟片 | 婷婷深爱网 | 精品国产一区二区三区久久久蜜臀 | 色狠狠婷婷 | 日韩有码网站 | 日日摸日日添夜夜爽97 | 国产精品精品视频 | 97在线观看视频免费 | 午夜久久久久久久 | 国产一线在线 | 最新av免费在线 | 亚洲精品视频第一页 | 亚洲一区二区三区在线看 | 久久99国产精品久久99 | 久久视屏网 | 精品字幕在线 | 天天操网址 | 在线色资源 | 亚洲黄色免费 | 四虎8848免费高清在线观看 | 中文在线a√在线 | 精品久久一区二区三区 | 中文在线a∨在线 | 激情在线网址 | 四虎免费在线观看 | 91在线观看黄 | 深爱婷婷 | 色老板在线 | 色婷婷在线视频 | 蜜桃av人人夜夜澡人人爽 | 波多野结衣电影一区二区三区 | 欧美性色xo影院 | 精品欧美一区二区在线观看 | 成人久久18免费网站麻豆 | 日韩在线观看视频在线 | 一区二区三区 中文字幕 | 日韩成人在线一区二区 | 91精品视频免费在线观看 | 高清有码中文字幕 | 久久99精品国产麻豆宅宅 | 国内精品美女在线观看 | 人人看人人做人人澡 | 天天操夜夜爱 | 亚洲精品福利在线观看 | 国产免费视频一区二区裸体 | 激情欧美丁香 | 欧美国产日韩激情 | 国产精选在线 | 国内精品久久久久影院男同志 | 天天综合亚洲 | 中文字幕在线不卡国产视频 | 在线看毛片网站 | 丁香婷五月 | 亚洲日本激情 | 丁香九月婷婷综合 | 手机成人免费视频 | 国产一级性生活视频 | 天天色天天搞 | 日韩黄色中文字幕 | 久久久三级视频 | 亚洲一区久久 | 日韩欧美精品在线 | 在线v片 | 成人综合日日夜夜 | 欧美国产日韩在线视频 | 美女国产 | 亚洲精品动漫久久久久 | 久久综合九色综合久久久精品综合 | 国产成人免费av电影 | 伊人久久影视 | 91桃色国产在线播放 | 日韩电影中文字幕在线观看 | 欧美日韩一区二区在线观看 | 免费看的毛片 | 亚洲一级二级三级 | 成人小视频在线观看免费 | 欧美日韩高清不卡 | 在线黄色av | 麻豆影视网站 | 久久免费视频3 | 亚洲国产中文字幕在线观看 | 欧美一区二区在线免费观看 | 8090yy亚洲精品久久 | 99色| 波多野结衣网址 | 国产中文字幕视频在线 | 国产精品 999 | 国产精品观看在线亚洲人成网 | 婷婷六月综合亚洲 | 久草在线视频在线观看 | 日批视频国产 | 成人免费一级 | 日韩美av在线 | 你操综合| 国产婷婷一区二区 | 日韩精品首页 | 免费av小说 | 91精品黄色| 久久色中文字幕 | 国产成人精品一区二区 | 一区二区三区在线电影 | 亚洲国产成人精品久久 | 日韩免费网址 | 国产一区在线视频播放 | 日本美女xx| 五月天婷婷在线播放 | av免费线看 | 日韩美女久久 | 欧美在线观看视频 | 天堂va欧美va亚洲va老司机 | 欧美,日韩 | 久久99国产精品视频 | 日韩高清www | 色偷偷网站视频 | 亚洲波多野结衣 | 一级a毛片高清视频 | 99热国产精品 | 亚洲香蕉在线观看 | 九九热在线视频 | 欧美精品亚洲精品日韩精品 | 91精品国产九九九久久久亚洲 | 日日爽夜夜爽 | 久久免费av电影 | 手机成人在线 | 免费av福利| 免费视频黄 | av片在线看 | 中文字幕在线看视频国产中文版 | 国产精品手机在线 | 成人av高清在线观看 | 国产成人久久精品一区二区三区 | 天天操综| 免费视频黄色 | 亚洲在线精品视频 | av在线免费不卡 | 在线播放一区二区三区 | 国产精品视频999 | 奇米影音四色 | 国产高清成人 | 婷婷丁香色| 精品亚洲一区二区三区 | 亚洲毛片久久 | 久久视频6 | 一区二区三区电影在线播 | 天天操夜夜看 | 亚洲综合在线观看视频 | 毛片一二区 | 成年人国产视频 | 免费黄色在线网站 | 欧美va日韩va| 久草视频2 | 在线观看岛国 | 91在线视频免费观看 | 色在线视频 | 狠狠操电影网 | 免费av观看| 字幕网在线观看 | 日韩免费av网址 | 91成人观看| 激情婷婷在线观看 | 亚洲成人午夜av | 成人午夜电影在线观看 | 色欧美88888久久久久久影院 | 天堂在线v| 精品国产一区二区三区久久影院 | 91免费观看视频网站 | 91av中文字幕 | 2020天天干夜夜爽 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 精品欧美日韩 | 日本性xxxxx| 久久久精品国产一区二区三区 | 国产一级片播放 | 久久综合久久久 | 天天搞夜夜骑 | 久久久在线免费观看 | 免费看片网页 | av在线电影网站 | 久久99国产精品自在自在app | 色播五月激情五月 | 精品国产伦一区二区三区观看方式 | 国产麻豆视频网站 | 激情视频在线高清看 | 国产3p视频| 伊人狠狠操 | 欧美久久综合 | av片一区 | 天天草夜夜 | 国产免费久久精品 | 99精品热视频只有精品10 | 亚洲精品视频免费在线观看 | 亚洲成人资源网 | 国产a国产 | 日韩精品一区二区三区高清免费 | 久久人人爽人人爽人人片 | 色网免费观看 | 在线观看黄色的网站 | 婷婷激情影院 | 色噜噜狠狠色综合中国 | 国产精品日韩精品 | 在线视频 你懂得 | 午夜av在线播放 | 色网站在线免费观看 | 视频1区2区 | 国产在线a免费观看 | 豆豆色资源网xfplay | 久爱综合 | 欧美va日韩va | 热久久免费视频精品 | 亚洲精品午夜久久久久久久久久久 | 国产综合激情 | 成人动漫视频在线 | 97小视频 | 久99视频| 久久婷婷五月综合色丁香 | 中文一区在线 | 中文字幕日本特黄aa毛片 | 综合在线观看色 | 亚洲欧美成人 | www.伊人网 | 欧美精品你懂的 | 男女免费av| av大片免费在线观看 | 久草视频在 | 国色综合 | 欧美精品乱码久久久久久 | 亚洲在线观看av | 日韩手机在线观看 | 天天色天天上天天操 | 久久综合加勒比 | 国产亚洲精品久久久网站好莱 | 深爱激情综合 | 91九色性视频 | 国产高清亚洲 | 精品一区av | 四虎国产精品免费 | 天天色天天上天天操 | 日韩亚洲在线观看 | 午夜av片 | 日韩一二区在线 | 亚洲精品1234区 | 91夫妻视频 | 国产黄色精品在线观看 | 一区二区伦理电影 | 制服丝袜欧美 | 黄色成品视频 | 免费人人干 | 在线观看日韩国产 | 97超级碰| 欧美一区二区三区激情视频 | 日韩亚洲在线 | 亚洲欧洲精品在线 | 久久久久久黄色 | 日韩久久久久久久 | 成人电影毛片 | 国产精品久久99 | 精品亚洲成人 | www国产亚洲精品久久网站 | 99这里只有精品视频 | 九九色视频 | 特级毛片在线免费观看 | 免费视频久久久 | 天堂成人在线 | 精品国产乱码一区二 | 玖玖在线播放 | 久免费视频| 香蕉视频最新网址 | 午夜视频在线观看一区二区三区 | 国产免费黄视频在线观看 | 日韩精品视频免费在线观看 | 成人av片免费观看app下载 | 在线视频99| 日韩高清三区 | 免费电影播放 | 97av在线视频免费播放 | 久久久不卡影院 | 国产小视频免费观看 | 成人黄色影片在线 | 中文字幕第一页av | av三级av | 国产又粗又硬又长又爽的视频 | 亚洲电影网站 | 久久精品一区二区三区视频 | 日韩欧美一区二区三区黑寡妇 | 免费亚洲成人 | 国产99久久九九精品 | 欧美日韩高清在线 | 国产精品破处视频 | 91av视频观看 | 开心综合网 | 天天夜操 | 国产美女被啪进深处喷白浆视频 | 亚洲国产精品成人综合 | 精品一区二区视频 | 国产精品久久久久久久久久久不卡 | 免费中文字幕视频 | 久久一区二区免费视频 | 在线观看免费观看在线91 | 日日爱影视 | www.色婷婷.com | 久久精品视频99 | 国产精品99久久久久的智能播放 | 亚洲传媒在线 | 福利视频网址 | 99久久婷婷国产一区二区三区 | 国产精品免费视频一区二区 | 免费黄色看片 | av黄色免费看 | 手机av观看 | www.99热精品 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 综合久久久久 | 高清av免费看 | 在线免费观看黄色 | 亚洲码国产日韩欧美高潮在线播放 | 五月天色婷婷丁香 | 91精品伦理 | 69夜色精品国产69乱 | av+在线播放在线播放 | 97超碰在线资源 | 国产精品久久久久久五月尺 | 91精品国产入口 | 99精品一区 | 92中文资源在线 | 日日夜夜精品视频天天综合网 | 麻豆一二三精选视频 | 日韩女同av | www.天天射.com | 欧美最爽乱淫视频播放 | 日韩在线欧美在线 | 在线观看中文字幕dvd播放 | 超碰在线人人艹 | 久草在线观 | 久久精品99国产精品亚洲最刺激 | 97偷拍在线视频 | 亚洲2019精品 | 亚洲高清激情 | 中文字幕字幕中文 | 久热免费在线观看 | 黄色一级大片在线观看 | 二区三区av | a久久久久久 | 国产99久久精品一区二区永久免费 | 国产人成精品一区二区三 | 超碰97成人| 99精品网站 | 免费三级av | 欧美日韩在线网站 | 日日夜夜操操操操 | 中文字幕av在线电影 | 天天干天天摸天天操 | 碰超在线97人人 | 99性视频| 久久久国产在线视频 | 天堂在线一区二区 | 国产一二三四在线观看视频 | 国产精品乱码一区二三区 | 天天操天操| 久久久久久国产一区二区三区 | 久草在线久 | 亚洲成人网在线 | 五月天久久婷婷 | 久久手机精品视频 | 国产视频二区三区 | 在线亚洲午夜片av大片 | 日韩免费一级电影 | 天天鲁天天干天天射 | 国产精品第三页 | 久久精品视频观看 | 亚洲精品在线免费看 | 国产亚洲成av片在线观看 | 久久热亚洲 | 91丨九色丨国产丨porny精品 | 人人插人人艹 | 国产精品一区二区三区视频免费 | 五月天久久狠狠 | 亚洲影音先锋 | 天天色成人 | 91精品国自产在线偷拍蜜桃 | 激情婷婷在线 | 色婷婷播放 | 99久久久成人国产精品 | 99在线免费视频 | 黄色h在线观看 | 麻豆影视在线观看 | 黄污视频网站大全 | 天天操天天能 | 日韩视频在线播放 | 国产小视频精品 | 午夜精品一区二区三区四区 | 91在线91拍拍在线91 | 91精品国产高清自在线观看 | 亚洲激情视频在线观看 | 91丨九色丨91啦蝌蚪老版 | 久久精品精品电影网 | 久久综合五月天婷婷伊人 | 国产91精品久久久久久 | 久久精品99北条麻妃 | 99免费在线视频 | 欧美日韩a视频 | 久热色超碰 | 91成人欧美| 欧美孕交vivoestv另类 | 国产精品福利在线 | 亚洲欧美日韩在线看 | 免费进去里的视频 | 免费成人黄色片 | 91大神免费视频 | 日韩欧美精品在线观看 | 国产免费三级在线观看 | 99热超碰| 九九综合久久 | 免费在线一区二区三区 | 中文字幕一区二区三区四区 | a色视频 | 国产视频在线免费 | 亚洲欧美国产精品18p | 黄色免费网战 | 日韩精品一区电影 | 久久久网址 | 在线视频欧美精品 | 欧美日韩裸体免费视频 | 美女在线免费观看视频 | 久久久久亚洲国产精品 | 国产在线va | 在线观看国产一区二区 | 国产在线污 | 欧美一级免费高清 | 天天综合人人 | 911久久香蕉国产线看观看 | 亚洲午夜精品电影 | 国产亚洲永久域名 | 亚洲 欧美 精品 | av色综合| 天天干,夜夜爽 | 99久久精品国产免费看不卡 | 国产福利精品在线观看 | 国产亚洲在线观看 | 亚洲精品大全 | 久久亚洲综合国产精品99麻豆的功能介绍 | 欧美成人久久 | 91麻豆网 | 久久婷婷一区二区三区 | 日本精品xxxx | 国产成人精品久久 | 国产一区在线视频播放 | www在线免费观看 | 最近高清中文在线字幕在线观看 | 精品亚洲免费视频 | 麻豆国产精品一区二区三区 | 欧美日韩在线观看一区 | 天天干天天操人体 | 在线观看久草 | a黄色片在线观看 | av 一区 二区 久久 | 亚洲成人在线免费 | 欧美精品一二三 | 国产3p视频 | 久久免费美女视频 | 日本久久久久久久久久久 | 99热精品在线观看 | 韩日精品中文字幕 | 国产精品1000 | 中文字幕 国产精品 | 91av播放 | 国产精品露脸在线 | 国产精品自产拍在线观看桃花 | 免费国产ww | 五月婷婷丁香激情 | 97操碰 | www.激情五月.com| 一区二区精品在线 | 天天操夜夜曰 | 在线天堂中文www视软件 | 亚洲欧美日韩在线看 | 欧美性色xo影院 | 日韩av免费在线电影 | 国产伦理一区二区三区 | 五月婷婷综合网 | 国产色小视频 | 久久黄色片子 | 国产精品久久久久久久久久久久午 | 日韩动漫免费观看高清完整版在线观看 | 九九久久久久久久久激情 | 亚洲精品一区二区三区高潮 | 中文字幕日本在线 | 欧美另类激情 | 欧美亚洲免费在线一区 | 亚洲欧美婷婷六月色综合 | 在线观看国产亚洲 | 国产精品久久久久久久久久三级 | 色婷婷电影 | 国产精品一区二区免费 | 成人动图 | 九九一级片 | 国产精品毛片一区二区在线 | 欧美乱熟臀69xxxxxx | av一级片| 一区二区三区久久 | 精品国产乱子伦一区二区 | 97av视频 | 99热这里精品 | 国产中文字幕一区二区 | 久久久999精品视频 国产美女免费观看 | 欧美激情精品久久 | 中国一 片免费观看 | 91免费试看 | 人人爽人人爽人人片av | 国产二区av| 又黄又爽又色无遮挡免费 | 麻豆精品在线视频 | 中文字幕第一页在线视频 | 韩国av电影网 | 97视频入口免费观看 | 在线一区电影 | 97超碰中文 | 日韩在线观看视频一区二区三区 | 在线播放一区 | 日韩欧美视频在线观看免费 | aa一级片| 国产精品精品久久久久久 | 亚洲午夜在线视频 | 久热av | 97看片网 | 夜夜摸夜夜爽 | 免费观看一级特黄欧美大片 | 91麻豆精品国产自产在线游戏 | 在线午夜电影神马影院 | 一级黄色片在线播放 | 免费日韩三级 | 视频三区| 射综合网 | 亚洲精品在线视频播放 | 久久久免费观看完整版 | 日本黄色大片免费 | 久久久久亚洲精品中文字幕 | 五月天狠狠操 | 亚洲精品www久久久 www国产精品com | 91精选在线观看 | 国产97在线看| 99色 | 91精品一区国产高清在线gif | 亚洲人成人99网站 | 精品欧美一区二区精品久久 | 国产精品人成电影在线观看 | av在线免费不卡 | 在线看av的网址 | 超碰在线个人 | 亚洲精品美女久久久久网站 | 欧美成人手机版 | 香蕉视频4aa | av不卡在线看 | 最新色站 | 午夜美女视频 | 欧美日韩中文字幕视频 | 国产黄色免费观看 | 91片黄在线观 | www.色五月.com | 国产午夜一级毛片 | 国产91在线看 | 日本黄区免费视频观看 | 国产精品专区在线观看 | 91福利影院在线观看 | www.国产视频 | 国产精品久久婷婷六月丁香 | 日日激情 | 美女很黄免费网站 | 狠狠狠狠狠狠天天爱 | 免费在线看成人av | 一本一本久久a久久精品综合小说 | 国产欧美综合视频 | 久久综合久久久 | 午夜婷婷综合 | 久久夜av | 久热超碰 | 色综合在 | 午夜骚影 | 久久不射电影院 | 精品自拍网 | 黄色大片中国 | 国产成人专区 | 亚州免费视频 | 97国产视频| 一区二区欧美在线观看 | 婷婷五天天在线视频 | 日韩视频中文字幕在线观看 | 久久国产精品影片 | 视频国产在线观看18 | 久久99国产视频 | 中文字幕一区av | 特黄色大片 | 午夜精品久久久久久99热明星 | 操操操天天操 | 成人av一级片 | 狠狠地日 | 夜夜夜草 | 亚洲一区视频免费观看 | 精品久久网站 | 国产成人精品在线观看 | 久久电影国产免费久久电影 | 日韩在线视频免费播放 | .国产精品成人自产拍在线观看6 | 99久久99久久精品免费 | 婷婷综合电影 | 天天草天天操 | 日韩中文字幕第一页 | 天天干 天天摸 天天操 | 国产精品va | 亚洲欧美乱综合图片区小说区 | 日日夜夜91 | 激情视频一区 | 免费色av| 伊人影院在线观看 | 天天天天天干 | 欧美成a人片在线观看久 | 久久精品激情 | 一区二区视频电影在线观看 | 涩涩在线| 欧美日本啪啪无遮挡网站 | 久久天天躁狠狠躁夜夜不卡公司 | 91麻豆精品国产91久久久久久 | 亚洲激情p | 日日夜夜骑 | 香蕉视频免费在线播放 | 五月天国产 | 中文在线免费一区三区 | 免费在线观看一级片 | 高清免费在线视频 | 久草免费资源 | 亚洲日日日 | 亚洲精品在线观看中文字幕 | av在线播放观看 | 亚洲激情六月 | 草在线视频 | 午夜av在线播放 | 日女人免费视频 | 国产经典 欧美精品 | 国产在线理论片 | 黄色字幕网 | 欧美一级久久久 | 久久婷婷久久 | 国产亚洲永久域名 | 国产福利久久 | 免费日韩视 | 操操操av | 依人成人综合网 | 77国产精品 | 日韩欧美一级二级 | 麻花豆传媒mv在线观看 | 中文字幕av影院 | 久久综合久久88 | 日本一区二区高清不卡 | 日日摸日日添夜夜爽97 | 菠萝菠萝蜜在线播放 |