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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

支付宝架构真牛逼

發布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 支付宝架构真牛逼 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自 2008 年雙 11 以來,在每年雙 11 超大規模流量的沖擊上,螞蟻金服都會不斷突破現有技術的極限。

2010 年雙 11 的支付峰值為 2 萬筆/分鐘,到 2017 年雙 11 時這個數字變為了 25.6 萬筆/秒。

2018 年雙 11 的支付峰值為 48 萬筆/秒,2019 年雙 11 支付峰值為 54.4 萬筆/秒,創下新紀錄,是 2009 年第一次雙 11 的 1360?倍。

在如此之大的支付 TPS 背后除了削峰等錦上添花的應用級優化,最解渴最實質的招數當數基于分庫分表的單元化了,螞蟻技術稱之為 LDC(邏輯數據中心)。

本文不打算討論具體到代碼級的分析,而是嘗試用最簡單的描述來說明其中最大快人心的原理。

我想關心分布式系統設計的人都曾被下面這些問題所困擾過:

支付寶海量支付背后最解渴的設計是啥?換句話說,實現支付寶高 TPS 的最關鍵的設計是啥?

  • LDC 是啥?LDC 怎么實現異地多活和異地災備的?

  • CAP 魔咒到底是啥?P 到底怎么理解?

  • 什么是腦裂?跟 CAP 又是啥關系?

  • 什么是 PAXOS,它解決了啥問題?

  • PAXOS 和 CAP 啥關系?PAXOS 可以逃脫 CAP 魔咒么?

  • Oceanbase 能逃脫 CAP 魔咒么?

如果你對這些感興趣,不妨看一場赤裸裸的論述,拒絕使用晦澀難懂的詞匯,直面最本質的邏輯。

LDC?和單元化

LDC(logic data center)是相對于傳統的(Internet Data Center-IDC)提出的,邏輯數據中心所表達的中心思想是無論物理結構如何的分布,整個數據中心在邏輯上是協同和統一的。

這句話暗含的是強大的體系設計,分布式系統的挑戰就在于整體協同工作(可用性,分區容忍性)和統一(一致性)。

單元化是大型互聯網系統的必然選擇趨勢,舉個最最通俗的例子來說明單元化。
我們總是說 TPS 很難提升,確實任何一家互聯網公司(比如淘寶、攜程、新浪)它的交易 TPS 頂多以十萬計量(平均水平),很難往上串了。

因為數據庫存儲層瓶頸的存在再多水平擴展的服務器都無法繞開,而從整個互聯網的視角看,全世界電商的交易 TPS 可以輕松上億。

這個例子帶給我們一些思考:為啥幾家互聯網公司的 TPS 之和可以那么大,服務的用戶數規模也極為嚇人,而單個互聯網公司的 TPS 卻很難提升?

究其本質,每家互聯網公司都是一個獨立的大型單元,他們各自服務自己的用戶互不干擾。
這就是單元化的基本特性,任何一家互聯網公司,其想要成倍的擴大自己系統的服務能力,都必然會走向單元化之路。

它的本質是分治,我們把廣大的用戶分為若干部分,同時把系統復制多份,每一份都獨立部署,每一份系統都服務特定的一群用戶。

以淘寶舉例,這樣之后,就會有很多個淘寶系統分別為不同的用戶服務,每個淘寶系統都做到十萬 TPS 的話,N 個這樣的系統就可以輕松做到 N*十萬的 TPS 了。

LDC 實現的關鍵就在于單元化系統架構設計,所以在螞蟻內部,LDC 和單元化是不分家的,這也是很多同學比較困擾的地方,看似沒啥關系,實則是單元化體系設計成就了 LDC。

小結:分庫分表解決的最大痛點是數據庫單點瓶頸,這個瓶頸的產生是由現代二進制數據存儲體系決定的(即 I/O 速度)。

單元化只是分庫分表后系統部署的一種方式,這種部署模式在災備方面也發揮了極大的優勢。

系統架構演化史

幾乎任何規模的互聯網公司,都有自己的系統架構迭代和更新,大致的演化路徑都大同小異。

最早一般為了業務快速上線,所有功能都會放到一個應用里,系統架構如下圖所示:

這樣的架構顯然是有問題的,單機有著明顯的單點效應,單機的容量和性能都是很局限的,而使用中小型機會帶來大量的浪費。

隨著業務發展,這個矛盾逐漸轉變為主要矛盾,因此工程師們采用了以下架構:

這是整個公司第一次觸碰到分布式,也就是對某個應用進行了水平擴容,它將多個微機的計算能力團結了起來,可以完勝同等價格的中小型機器。

慢慢的,大家發現,應用服務器 CPU 都很正常了,但是還是有很多慢請求,究其原因,是因為單點數據庫帶來了性能瓶頸。

于是程序員們決定使用主從結構的數據庫集群,如下圖所示:

其中大部分讀操作可以直接訪問從庫,從而減輕主庫的壓力。然而這種方式還是無法解決寫瓶頸,寫依舊需要主庫來處理,當業務量量級再次增高時,寫已經變成刻不容緩的待處理瓶頸。

這時候,分庫分表方案出現了:

分庫分表不僅可以對相同的庫進行拆分,還可以對相同的表進行拆分,對表進行拆分的方式叫做水平拆分。

不同功能的表放到不同的庫里,一般對應的是垂直拆分(按照業務功能進行拆分),此時一般還對應了微服務化。

這種方法做到極致基本能支撐 TPS 在萬級甚至更高的訪問量了。然而隨著相同應用擴展的越多,每個數據庫的鏈接數也巨量增長,這讓數據庫本身的資源成為了瓶頸。

這個問題產生的本質是全量數據無差別的分享了所有的應用資源,比如 A 用戶的請求在負載均衡的分配下可能分配到任意一個應用服務器上,因而所有應用全部都要鏈接 A 用戶所在的分庫,數據庫連接數就變成笛卡爾乘積了。

在本質點說,這種模式的資源隔離性還不夠徹底。要解決這個問題,就需要把識別用戶分庫的邏輯往上層移動,從數據庫層移動到路由網關層。

這樣一來,從應用服務器 a 進來的來自 A 客戶的所有請求必然落庫到 DB-A,因此 a 也不用鏈接其他的數據庫實例了,這樣一個單元化的雛形就誕生了。

思考一下,應用間其實也存在交互(比如 A 轉賬給 B),也就意味著,應用不需要鏈接其他的數據庫了,但是還需要鏈接其他應用。

如果是常見的 RPC 框架如 Dubbo 等,使用的是 TCP/IP 協議,那么等同于把之前與數據庫建立的鏈接,換成與其他應用之間的鏈接了。

為啥這樣就消除瓶頸了呢?首先由于合理的設計,應用間的數據交互并不巨量,其次應用間的交互可以共享 TCP 鏈接,比如 A->B 之間的 Socket 鏈接可以被 A 中的多個線程復用。

而一般的數據庫如 MySQL 則不行,所以 MySQL 才需要數據庫鏈接池。

如上圖所示,但我們把整套系統打包為單元化時,每一類的數據從進單元開始就注定在這個單元被消化,由于這種徹底的隔離性,整個單元可以輕松的部署到任意機房而依然能保證邏輯上的統一。

下圖為一個三地五機房的部署方式:

螞蟻單元化架構實踐

螞蟻支付寶應該是國內最大的支付工具,其在雙 11 等活動日當日的支付 TPS 可達幾十萬級,未來這個數字可能會更大,這決定了螞蟻單元化架構從容量要求上看必然從單機房走向多機房。

另一方面,異地災備也決定了這些 IDC 機房必須是異地部署的。整體上支付寶也采用了三地五中心(IDC 機房)來保障系統的可用性。

跟上文中描述的有所不同的是,支付寶將單元分成了三類(也稱 CRG 架構):

  • RZone(Region Zone直譯可能有點反而不好理解。實際上就是所有可以分庫分表的業務系統整體部署的最小單元。每個 RZone 連上數據庫就可以撐起一片天空,把業務跑的溜溜的。

  • GZone(Global Zone):全局單元,意味著全局只有一份。部署了不可拆分的數據和服務,比如系統配置等。

  • 實際情況下,GZone 異地也會部署,不過僅是用于災備,同一時刻,只有一地 GZone 進行全局服務。GZone 一般被 RZone 依賴,提供的大部分是讀取服務。

  • CZone(City Zone):顧名思義,這是以城市為單位部署的單元。同樣部署了不可拆分的數據和服務,比如用戶賬號服務,客戶信息服務等。理論上 CZone 會被 RZone 以比訪問 GZone 高很多的頻率進行訪問。

CZone 是基于特定的 GZone 場景進行優化的一種單元,它把 GZone 中有些有著”寫讀時間差現象”的數據和服務進行了的單獨部署,這樣 RZone 只需要訪問本地的 CZone 即可,而不是訪問異地的 GZone。

“寫讀時間差現象”是螞蟻架構師們根據實踐統計總結的,他們發現大部分情況下,一個數據被寫入后,都會過足夠長的時間后才會被訪問。

生活中這種例子很常見,我們辦完銀行卡后可能很久才會存第一筆錢;我們創建微博賬號后,可能想半天才會發微博;我們下載創建淘寶賬號后,可能得瀏覽好幾分鐘才會下單買東西。

當然了這些例子中的時間差遠遠超過了系統同步時間。一般來說異地的延時在 100ms 以內,所以只要滿足某地 CZone 寫入數據后 100ms 以后才用這個數據,這樣的數據和服務就適合放到 CZone 中。

相信大家看到這都會問:為啥分這三種單元?其實其背后對應的是不同性質的數據,而服務不過是對數據的操作集。

下面我們來根據數據性質的不同來解釋支付寶的 CRG 架構。當下幾乎所有互聯網公司的分庫分表規則都是根據用戶 ID 來制定的。

而圍繞用戶來看整個系統的數據可以分為以下兩類:

用戶流水型數據:典型的有用戶的訂單、用戶發的評論、用戶的行為記錄等。

這些數據都是用戶行為產生的流水型數據,具備天然的用戶隔離性,比如 A 用戶的 App 上絕對看不到 B 用戶的訂單列表。所以此類數據非常適合分庫分表后獨立部署服務。

用戶間共享型數據:這種類型的數據又分兩類。一類共享型數據是像賬號、個人博客等可能會被所有用戶請求訪問的用戶數據。

比如 A 向 B 轉賬,A 給 B 發消息,這時候需要確認 B 賬號是否存在;又比如 A 想看 B 的個人博客之類的。

另外一類是用戶無關型數據,像商品、系統配置(匯率、優惠政策)、財務統計等這些非用戶緯度的數據,很難說跟具體的某一類用戶掛鉤,可能涉及到所有用戶。

比如商品,假設按商品所在地來存放商品數據(這需要雙維度分庫分表),那么上海的用戶仍然需要訪問杭州的商品。

這就又構成跨地跨 Zone 訪問了,還是達不到單元化的理想狀態,而且雙維度分庫分表會給整個 LDC 運維帶來復雜度提升。

注:網上和支付寶內部有另外一些分法,比如流水型和狀態性,有時候還會分為三類:流水型、狀態型和配置型。

個人覺得這些分法雖然嘗試去更高層次的抽象數據分類,但實際上邊界很模糊,適得其反。

直觀的類比,我們可以很輕易的將上述兩類數據對應的服務劃分為 RZone 和 GZone,RZone 包含的就是分庫分表后負責固定客戶群體的服務,GZone 則包含了用戶間共享的公共數據對應的服務。

到這里為止,一切都很完美,這也是主流的單元化話題了。對比支付寶的 CRG 架構,我們一眼就發現少了 C(City Zone),CZone 確實是螞蟻在單元化實踐領域的一個創新點。
再來分析下 GZone,GZone 之所以只能單地部署,是因為其數據要求被所有用戶共享,無法分庫分表,而多地部署會帶來由異地延時引起的不一致。

比如實時風控系統,如果多地部署,某個 RZone 直接讀取本地的話,很容易讀取到舊的風控狀態,這是很危險的。

這時螞蟻架構師們問了自己一個問題——難道所有數據受不了延時么?這個問題像是打開了新世界的大門,通過對 RZone 已有業務的分析,架構師們發現 80%?甚至更高的場景下,數據更新后都不要求立馬被讀取到。

也就是上文提到的”寫讀時間差現象”,那么這就好辦了,對于這類數據,我們允許每個地區的 RZone 服務直接訪問本地,為了給這些 RZone 提供這些數據的本地訪問能力,螞蟻架構師設計出了 CZone。

在 CZone 的場景下,寫請求一般從 GZone 寫入公共數據所在庫,然后同步到整個 OB 集群,然后由 CZone 提供讀取服務。比如支付寶的會員服務就是如此。

即便架構師們設計了完美的 CRG,但即便在螞蟻的實際應用中,各個系統仍然存在不合理的 CRG 分類,尤其是 CG 不分的現象很常見。

支付寶單元化的異地多活和災備

流量挑撥技術探秘簡介

單元化后,異地多活只是多地部署而已。比如上海的兩個單元為 ID 范圍為 [00~19],[40~59]?的用戶服務。

而杭州的兩個單元為 ID 為 [20~39]和[60,79]的用戶服務,這樣上海和杭州就是異地雙活的。

支付寶對單元化的基本要求是每個單元都具備服務所有用戶的能力,即——具體的那個單元服務哪些用戶是可以動態配置的。所以異地雙活的這些單元還充當了彼此的備份。

發現工作中冷備熱備已經被用的很亂了。最早冷備是指數據庫在備份數據時需要關閉后進行備份(也叫離線備份),防止數據備份過程中又修改了,不需要關閉即在運行過程中進行數據備份的方式叫做熱備(也叫在線備份)。

也不知道從哪一天開始,冷備在主備系統里代表了這臺備用機器是關閉狀態的,只有主服務器掛了之后,備服務器才會被啟動。

而相同的熱備變成了備服務器也是啟動的,只是沒有流量而已,一旦主服務器掛了之后,流量自動打到備服務器上。本文不打算用第二種理解,因為感覺有點野。

為了做到每個單元訪問哪些用戶變成可配置,支付寶要求單元化管理系統具備流量到單元的可配置以及單元到 DB 的可配置能力。

如下圖所示:

其中 Spanner 是螞蟻基于 Nginx 自研的反向代理網關,也很好理解,有些請求我們希望在反向代理層就被轉發至其他 IDC 的 Spanner 而無需進入后端服務,如圖箭頭 2 所示。

那么對于應該在本 IDC 處理的請求,就直接映射到對應的 RZ 即可,如圖箭頭 1。

進入后端服務后,理論上如果請求只是讀取用戶流水型數據,那么一般不會再進行路由了。
然而,對于有些場景來說,A 用戶的一個請求可能關聯了對 B 用戶數據的訪問,比如 A 轉賬給 B,A 扣完錢后要調用賬務系統去增加 B 的余額。

這時候就涉及到再次的路由,同樣有兩個結果:跳轉到其他 IDC(如圖箭頭 3)或是跳轉到本 IDC 的其他 RZone(如圖箭頭 4)。

RZone 到 DB 數據分區的訪問這是事先配置好的,上圖中 RZ 和 DB 數據分區的關系為:

RZ0*?-->?a RZ1*?-->?b RZ2*?-->?c RZ3*?-->?d

下面我們舉個例子來說明整個流量挑撥的過程,假設 C 用戶所屬的數據分區是 c,而 C 用戶在杭州訪問了 cashier.alipay.com(隨便編的)。

目前支付寶默認會按照地域來路由流量,具體的實現承載者是自研的 GLSB(Global Server Load Balancing):

https:

它會根據請求者的 IP,自動將 cashier.alipay.com 解析為杭州 IDC 的 IP 地址(或者跳轉到 IDC 所在的域名)。

大家自己搞過網站的化應該知道大部分 DNS 服務商的地址都是靠人去配置的,GLSB 屬于動態配置域名的系統,網上也有比較火的類似產品,比如花生殼之類(建過私站的同學應該很熟悉)的。

好了,到此為止,用戶的請求來到了 IDC-1 的 Spanner 集群服務器上,Spanner 從內存中讀取到了路由配置,知道了這個請求的主體用戶 C 所屬的 RZ3* 不再本 IDC,于是直接轉到了 IDC-2 進行處理。

進入 IDC-2 之后,根據流量配比規則,該請求被分配到了 RZ3B 進行處理。

RZ3B 得到請求后對數據分區 c 進行訪問。

處理完畢后原路返回。

大家應該發現問題所在了,如果再來一個這樣的請求,豈不是每次都要跨地域進行調用和返回體傳遞?

確實是存在這樣的問題的,對于這種問題,支付寶架構師們決定繼續把決策邏輯往用戶終端推移。

比如,每個 IDC 機房都會有自己的域名(真實情況可能不是這樣命名的):?

  • IDC-1?對應?cashieridc-1.alipay.com

  • IDC-2 對應?cashieridc-2.alipay.com

那么請求從 IDC-1 涮過一遍返回時會將前端請求跳轉到 cashieridc-2.alipay.com 去(如果是 App,只需要替換 rest 調用的接口域名),后面所有用戶的行為都會在這個域名上發生,就避免了走一遍 IDC-1 帶來的延時。

支付寶災備機制

流量挑撥是災備切換的基礎和前提條件,發生災難后的通用方法就是把陷入災難的單元的流量重新打到正常的單元上去,這個流量切換的過程俗稱切流。

支付寶 LDC 架構下的災備有三個層次:

  • 同機房單元間災備

  • 同城機房間災備

  • 異地機房間災備

同機房單元間災備:災難發生可能性相對最高(但其實也很小)。對 LDC 來說,最小的災難就是某個單元由于一些原因(局部插座斷開、線路老化、人為操作失誤)宕機了。
從上節里的圖中可以看到每組 RZ 都有 A,B 兩個單元,這就是用來做同機房災備的,并且 AB 之間也是雙活雙備的。

正常情況下 AB 兩個單元共同分擔所有的請求,一旦 A 單元掛了,B 單元將自動承擔 A 單元的流量份額。這個災備方案是默認的。

同城機房間災備:災難發生可能性相對更小。這種災難發生的原因一般是機房電線網線被挖斷,或者機房維護人員操作失誤導致的。

在這種情況下,就需要人工的制定流量挑撥(切流)方案了。下面我們舉例說明這個過程,如下圖所示為上海的兩個 IDC 機房。

整個切流配置過程分兩步,首先需要將陷入災難的機房中 RZone 對應的數據分區的訪問權配置進行修改。

假設我們的方案是由 IDC-2 機房的 RZ2 和 RZ3 分別接管 IDC-1 中的 RZ0 和 RZ1。
那么首先要做的是把數據分區 a,b 對應的訪問權從 RZ0 和 RZ1 收回,分配給 RZ2 和 RZ3。

即將(如上圖所示為初始映射):

RZ0*?-->?a RZ1*?-->?b RZ2*?-->?c RZ3*?-->?d

變為:

RZ0*?-->?/ RZ1*?-->?/ RZ2*?-->?a RZ2*?-->?c RZ3*?-->?b RZ3*?-->?d

然后再修改用戶 ID 和 RZ 之間的映射配置。假設之前為:

[00-24]?-->?RZ0A(50%),RZOB(50%) [25-49]?-->?RZ1A(50%),RZ1B(50%) [50-74]?-->?RZ2A(50%),RZ2B(50%) [75-99]?-->?RZ3A(50%),RZ3B(50%)

那么按照災備方案的要求,這個映射配置將變為:

[00-24]?-->?RZ2A(50%),RZ2B(50%) [25-49]?-->?RZ3A(50%),RZ3B(50%) [50-74]?-->?RZ2A(50%),RZ2B(50%) [75-99]?-->?RZ3A(50%),RZ3B(50%)

這樣之后,所有流量將會被打到 IDC-2 中,期間部分已經向 IDC-1 發起請求的用戶會收到失敗并重試的提示。

實際情況中,整個過程并不是災難發生后再去做的,整個切換的流程會以預案配置的形式事先準備好,推送給每個流量挑撥客戶端(集成到了所有的服務和 Spanner 中)。

這里可以思考下,為何先切數據庫映射,再切流量呢?這是因為如果先切流量,意味著大量注定失敗的請求會被打到新的正常單元上去,從而影響系統的穩定性(數據庫還沒準備好)。

異地機房間災備:這個基本上跟同城機房間災備一致(這也是單元化的優點),不再贅述。

螞蟻單元化架構的?CAP?分析

回顧 CAP

①CAP 的定義

CAP 原則是指任意一個分布式系統,同時最多只能滿足其中的兩項,而無法同時滿足三項。

所謂的分布式系統,說白了就是一件事一個人做的,現在分給好幾個人一起干。
我們先簡單回顧下 CAP 各個維度的含義:

Consistency(一致性),這個理解起來很簡單,就是每時每刻每個節點上的同一份數據都是一致的。

這就要求任何更新都是原子的,即要么全部成功,要么全部失敗。想象一下使用分布式事務來保證所有系統的原子性是多么低效的一個操作。

Availability(可用性),這個可用性看起來很容易理解,但真正說清楚的不多。我更愿意把可用性解釋為:任意時刻系統都可以提供讀寫服務。

舉個例子,當我們用事務將所有節點鎖住來進行某種寫操作時,如果某個節點發生不可用的情況,會讓整個系統不可用。

對于分片式的 NoSQL 中間件集群(Redis,Memcached)來說,一旦一個分片歇菜了,整個系統的數據也就不完整了,讀取宕機分片的數據就會沒響應,也就是不可用了。

需要說明一點,哪些選擇 CP 的分布式系統,并不是代表可用性就完全沒有了,只是可用性沒有保障了。

為了增加可用性保障,這類中間件往往都提供了”分片集群+復制集”的方案。

Partition tolerance(分區容忍性),這個可能也是很多文章都沒說清楚的。P 并不是像 CA 一樣是一個獨立的性質,它依托于 CA 來進行討論。

參考文獻中的解釋:”除非整個網絡癱瘓,否則任何時刻系統都能正常工作”,言下之意是小范圍的網絡癱瘓,節點宕機,都不會影響整個系統的 CA。

我感覺這個解釋聽著還是有點懵逼,所以個人更愿意解釋為當節點之間網絡不通時(出現網絡分區),可用性和一致性仍然能得到保障。

從個人角度理解,分區容忍性又分為“可用性分區容忍性”和“一致性分區容忍性”。

出現分區時會不會影響可用性的關鍵在于需不需要所有節點互相溝通協作來完成一次事務,不需要的話是鐵定不影響可用性的。

慶幸的是應該不太會有分布式系統會被設計成完成一次事務需要所有節點聯動,一定要舉個例子的話,全同步復制技術下的 MySQL 是一個典型案例。

出現分區時會不會影響一致性的關鍵則在于出現腦裂時有沒有保證一致性的方案,這對主從同步型數據庫(MySQL、SQL Server)是致命的。

一旦網絡出現分區,產生腦裂,系統會出現一份數據兩個值的狀態,誰都不覺得自己是錯的。

需要說明的是,正常來說同一局域網內,網絡分區的概率非常低,這也是為啥我們最熟悉的數據庫(MySQL、SQL Server 等)也是不考慮 P 的原因。

下圖為 CAP 之間的經典關系圖:

還有個需要說明的地方,其實分布式系統很難滿足 CAP 的前提條件是這個系統一定是有讀有寫的,如果只考慮讀,那么 CAP 很容易都滿足。

比如一個計算器服務,接受表達式請求,返回計算結果,搞成水平擴展的分布式,顯然這樣的系統沒有一致性問題,網絡分區也不怕,可用性也是很穩的,所以可以滿足 CAP。

②CAP 分析方法

先說下 CA 和 P 的關系,如果不考慮 P 的話,系統是可以輕松實現 CA 的。

而 P 并不是一個單獨的性質,它代表的是目標分布式系統有沒有對網絡分區的情況做容錯處理。

如果做了處理,就一定是帶有 P 的,接下來再考慮分區情況下到底選擇了 A 還是 C。所以分析 CAP,建議先確定有沒有對分區情況做容錯處理。

以下是個人總結的分析一個分布式系統 CAP 滿足情況的一般方法:

if( 不存在分區的可能性 ||?分區后不影響可用性或一致性 ||?有影響但考慮了分區情況-P){if(可用性分區容忍性-A under P))return?"AP";else?if(一致性分區容忍性-C under P)return?"CP"; } else{ //分區有影響但沒考慮分區情況下的容錯if(具備可用性-A && 具備一致性-C){return?AC;} }

這里說明下,如果考慮了分區容忍性,就不需要考慮不分區情況下的可用性和一致性了(大多是滿足的)。

水平擴展應用+單數據庫實例的 CAP?分析

讓我們再來回顧下分布式應用系統的來由,早年每個應用都是單體的,跑在一個服務器上,服務器一掛,服務就不可用了。

另外一方面,單體應用由于業務功能復雜,對機器的要求也逐漸變高,普通的微機無法滿足這種性能和容量的要求。

所以要拆!還在 IBM 大賣小型商用機的年代,阿里巴巴就提出要以分布式微機替代小型機。

所以我們發現,分布式系統解決的最大的痛點,就是單體單機系統的可用性問題。

要想高可用,必須分布式。一家互聯網公司的發展之路上,第一次與分布式相遇應該都是在單體應用的水平擴展上。

也就是同一個應用啟動了多個實例,連接著相同的數據庫(為了簡化問題,先不考慮數據庫是否單點),如下圖所示:

這樣的系統天然具有的就是 AP(可用性和分區容忍性):

一方面解決了單點導致的低可用性問題。

另一方面無論這些水平擴展的機器間網絡是否出現分區,這些服務器都可以各自提供服務,因為他們之間不需要進行溝通。

然而,這樣的系統是沒有一致性可言的,想象一下每個實例都可以往數據庫 insert 和 update(注意這里還沒討論到事務),那還不亂了套。

于是我們轉向了讓 DB 去做這個事,這時候”數據庫事務”就被用上了。用大部分公司會選擇的 MySQL 來舉例,用了事務之后會發現數據庫又變成了單點和瓶頸。
單點就像單機一樣(本例子中不考慮從庫模式),理論上就不叫分布式了,如果一定要分析其 CAP 的話,根據上面的步驟分析過程應該是這樣的:

  • 區容忍性:先看有沒有考慮分區容忍性,或者分區后是否會有影響。單臺 MySQL 無法構成分區,要么整個系統掛了,要么就活著。

  • 可用性分區容忍性:分區情況下,假設恰好是該節點掛了,系統也就不可用了,所以可用性分區容忍性不滿足。

  • 一致性分區容忍性:分區情況下,只要可用,單點單機的最大好處就是一致性可以得到保障。

因此這樣的一個系統,個人認為只是滿足了 CP。A 有但不出色,從這點可以看出,CAP 并不是非黑即白的。

包括常說的 BASE (最終一致性)方案,其實只是 C 不出色,但最終也是達到一致性的,BASE 在一致性上選擇了退讓。

關于分布式應用+單點數據庫的模式算不算純正的分布式系統,這個可能每個人看法有點差異,上述只是我個人的一種理解,是不是分布式系統不重要,重要的是分析過程。

其實我們討論分布式,就是希望系統的可用性是多個系統多活的,一個掛了另外的也能頂上,顯然單機單點的系統不具備這樣的高可用特性。

所以在我看來,廣義的說 CAP 也適用于單點單機系統,單機系統是 CP 的。

說到這里,大家似乎也發現了,水平擴展的服務應用+數據庫這樣的系統的 CAP 魔咒主要發生在數據庫層。

因為大部分這樣的服務應用都只是承擔了計算的任務(像計算器那樣),本身不需要互相協作,所有寫請求帶來的數據的一致性問題下沉到了數據庫層去解決。

想象一下,如果沒有數據庫層,而是應用自己來保障數據一致性,那么這樣的應用之間就涉及到狀態的同步和交互了,ZooKeeper 就是這么一個典型的例子。

水平擴展應用+主從數據庫集群的CAP分析

上一節我們討論了多應用實例+單數據庫實例的模式,這種模式是分布式系統也好,不是分布式系統也罷,整體是偏 CP 的。

現實中,技術人員們也會很快發現這種架構的不合理性——可用性太低了。于是如下圖所示的模式成為了當下大部分中小公司所使用的架構:

從上圖我可以看到三個數據庫實例中只有一個是主庫,其他是從庫。

一定程度上,這種架構極大的緩解了”讀可用性”問題,而這樣的架構一般會做讀寫分離來達到更高的”讀可用性”,幸運的是大部分互聯網場景中讀都占了 80% 以上,所以這樣的架構能得到較長時間的廣泛應用。

寫可用性可以通過 Keepalived 這種 HA(高可用)框架來保證主庫是活著的,但仔細一想就可以明白,這種方式并沒有帶來性能上的可用性提升。還好,至少系統不會因為某個實例掛了就都不可用了。

可用性勉強達標了,這時候的 CAP 分析如下:

分區容忍性:依舊先看分區容忍性,主從結構的數據庫存在節點之間的通信,他們之間需要通過心跳來保證只有一個 Master。

然而一旦發生分區,每個分區會自己選取一個新的 Master,這樣就出現了腦裂,常見的主從數據庫(MySQL,Oracle 等)并沒有自帶解決腦裂的方案。所以分區容忍性是沒考慮的。

一致性:不考慮分區,由于任意時刻只有一個主庫,所以一致性是滿足的。

可用性:不考慮分區,HA 機制的存在可以保證可用性,所以可用性顯然也是滿足的。

所以這樣的一個系統,我們認為它是 AC 的。我們再深入研究下,如果發生腦裂產生數據不一致后有一種方式可以仲裁一致性問題,是不是就可以滿足 P 了呢。

還真有嘗試通過預先設置規則來解決這種多主庫帶來的一致性問題的系統,比如 CouchDB,它通過版本管理來支持多庫寫入,在其仲裁階段會通過 DBA 配置的仲裁規則(也就是合并規則,比如誰的時間戳最晚誰的生效)進行自動仲裁(自動合并),從而保障最終一致性(BASE),自動規則無法合并的情況則只能依賴人工決策了。

螞蟻單元化 LDC 架構 CAP 分析

①戰勝分區容忍性

在討論螞蟻 LDC 架構的 CAP 之前,我們再來想想分區容忍性有啥值得一提的,為啥很多大名鼎鼎的 BASE(最終一致性)體系系統都選擇損失實時一致性,而不是丟棄分區容忍性呢?

分區的產生一般有兩種情況:

某臺機器宕機了,過一會兒又重啟了,看起來就像失聯了一段時間,像是網絡不可達一樣。

異地部署情況下,異地多活意味著每一地都可能會產生數據寫入,而異地之間偶爾的網絡延時尖刺(網絡延時曲線圖陡增)、網絡故障都會導致小范圍的網絡分區產生。

前文也提到過,如果一個分布式系統是部署在一個局域網內的(一個物理機房內),那么個人認為分區的概率極低,即便有復雜的拓撲,也很少會有在同一個機房里出現網絡分區的情況。

而異地這個概率會大大增高,所以螞蟻的三地五中心必須需要思考這樣的問題,分區容忍不能丟!

同樣的情況還會發生在不同 ISP 的機房之間(想象一下你和朋友組隊玩 DOTA,他在電信,你在聯通)。

為了應對某一時刻某個機房突發的網絡延時尖刺活著間歇性失聯,一個好的分布式系統一定能處理好這種情況下的一致性問題。

那么螞蟻是怎么解決這個問題的呢?我們在上文討論過,其實 LDC 機房的各個單元都由兩部分組成:負責業務邏輯計算的應用服務器和負責數據持久化的數據庫。

大部分應用服務器就像一個個計算器,自身是不對寫一致性負責的,這個任務被下沉到了數據庫。所以螞蟻解決分布式一致性問題的關鍵就在于數據庫!

想必螞蟻的讀者大概猜到下面的討論重點了——OceanBase(下文簡稱OB),中國第一款自主研發的分布式數據庫,一時間也確實獲得了很多光環。

在討論 OB 前,我們先來想想 Why not MySQL?

首先,就像 CAP 三角圖中指出的,MySQL 是一款滿足 AC 但不滿足 P 的分布式系統。
試想一下,一個 MySQL 主從結構的數據庫集群,當出現分區時,問題分區內的 Slave 會認為主已經掛了,所以自己成為本分區的 Master(腦裂)。

等分區問題恢復后,會產生 2 個主庫的數據,而無法確定誰是正確的,也就是分區導致了一致性被破壞。這樣的結果是嚴重的,這也是螞蟻寧愿自研 OceanBase 的原動力之一。

那么如何才能讓分布式系統具備分區容忍性呢?按照老慣例,我們從”可用性分區容忍”和”一致性分區容忍”兩個方面來討論:

可用性分區容忍性保障機制:可用性分區容忍的關鍵在于別讓一個事務一來所有節點來完成,這個很簡單,別要求所有節點共同同時參與某個事務即可。

一致性分區容忍性保障機制:老實說,都產生分區了,哪還可能獲得實時一致性。

但要保證最終一致性也不簡單,一旦產生分區,如何保證同一時刻只會產生一份提議呢?
換句話說,如何保障仍然只有一個腦呢?下面我們來看下 PAXOS 算法是如何解決腦裂問題的。

這里可以發散下,所謂的“腦”其實就是具備寫能力的系統,“非腦”就是只具備讀能力的系統,對應了 MySQL 集群中的從庫。

下面是一段摘自維基百科的 PAXOS 定義:

Paxos is a family of protocols for solving consensus in a network of unreliable processors (that is, processors that may fail).

大致意思就是說,PAXOS 是在一群不是特別可靠的節點組成的集群中的一種共識機制。
Paxos 要求任何一個提議,至少有 (N/2)+1 的系統節點認可,才被認為是可信的,這背后的一個基礎理論是少數服從多數。

想象一下,如果多數節點認可后,整個系統宕機了,重啟后,仍然可以通過一次投票知道哪個值是合法的(多數節點保留的那個值)。

這樣的設定也巧妙的解決了分區情況下的共識問題,因為一旦產生分區,勢必最多只有一個分區內的節點數量會大于等于 (N/2)+1。

通過這樣的設計就可以巧妙的避開腦裂,當然 MySQL 集群的腦裂問題也是可以通過其他方法來解決的,比如同時 Ping 一個公共的 IP,成功者繼續為腦,顯然這就又制造了另外一個單點。

如果你了解過比特幣或者區塊鏈,你就知道區塊鏈的基礎理論也是 PAXOS。區塊鏈借助 PAXOS 對最終一致性的貢獻來抵御惡意篡改。

而本文涉及的分布式應用系統則是通過 PAXOS 來解決分區容忍性。再說本質一點,一個是抵御部分節點變壞,一個是防范部分節點失聯。

大家一定聽說過這樣的描述:PAXOS 是唯一能解決分布式一致性問題的解法。

這句話越是理解越發覺得詭異,這會讓人以為 PAXOS 逃離于 CAP 約束了,所以個人更愿意理解為:PAXOS 是唯一一種保障分布式系統最終一致性的共識算法(所謂共識算法,就是大家都按照這個算法來操作,大家最后的結果一定相同)。

PAXOS 并沒有逃離 CAP 魔咒,畢竟達成共識是 (N/2)+1 的節點之間的事,剩下的 (N/2)-1 的節點上的數據還是舊的,這時候仍然是不一致的。

所以 PAXOS 對一致性的貢獻在于經過一次事務后,這個集群里已經有部分節點保有了本次事務正確的結果(共識的結果),這個結果隨后會被異步的同步到其他節點上,從而保證最終一致性。

以下摘自維基百科:

Paxos is a family of protocols for solving consensus in a network of unreliable processors (that is, processors that may fail).Quorums express the safety (or consistency) properties of Paxos by ensuring at least some surviving processor retains knowledge of the results.

另外 PAXOS 不要求對所有節點做實時同步,實質上是考慮到了分區情況下的可用性,通過減少完成一次事務需要的參與者個數,來保障系統的可用性。

②OceanBase 的 CAP 分析

上文提到過,單元化架構中的成千山萬的應用就像是計算器,本身無 CAP 限制,其 CAP 限制下沉到了其數據庫層,也就是螞蟻自研的分布式數據庫 OceanBase(本節簡稱 OB)。

在 OB 體系中,每個數據庫實例都具備讀寫能力,具體是讀是寫可以動態配置(參考第二部分)。

實際情況下大部分時候,對于某一類數據(固定用戶號段的數據)任意時刻只有一個單元會負責寫入某個節點,其他節點要么是實時庫間同步,要么是異步數據同步。

OB 也采用了 PAXOS 共識協議。實時庫間同步的節點(包含自己)個數至少需要 (N/2)+1 個,這樣就可以解決分區容忍性問題。

下面我們舉個馬老師改英文名的例子來說明 OB 設計的精妙之處:

假設數據庫按照用戶 ID 分庫分表,馬老師的用戶 ID 對應的數據段在 [0-9],開始由單元 A 負責數據寫入。

假如馬老師(用戶 ID 假設為 000)正在用支付寶 App 修改自己的英文名,馬老師一開始打錯了,打成了 Jason Ma,A 單元收到了這個請求。

這時候發生了分區(比如 A 網絡斷開了),我們將單元 A 對數據段 [0,9] 的寫入權限轉交給單元 B(更改映射),馬老師這次寫對了,為 Jack Ma。

而在網絡斷開前請求已經進入了 A,寫權限轉交給單元 B 生效后,A 和 B 同時對 [0,9] 數據段進行寫入馬老師的英文名。

假如這時候都允許寫入的話就會出現不一致,A 單元說我看到馬老師設置了 Jason Ma,B 單元說我看到馬老師設置了 Jack Ma。

然而這種情況不會發生的,A 提議說我建議把馬老師的英文名設置為 Jason Ma 時,發現沒人回應它。

因為出現了分區,其他節點對它來說都是不可達的,所以這個提議被自動丟棄,A 心里也明白是自己分區了,會有主分區替自己完成寫入任務的。

同樣的,B 提出了將馬老師的英文名改成 Jack Ma 后,大部分節點都響應了,所以 B 成功將 Jack Ma 寫入了馬老師的賬號記錄。

假如在寫權限轉交給單元 B 后 A 突然恢復了,也沒關系,兩筆寫請求同時要求獲得 (N/2)+1 個節點的事務鎖,通過 no-wait 設計,在 B 獲得了鎖之后,其他爭搶該鎖的事務都會因為失敗而回滾。

下面我們分析下 OB 的 CAP:

分區容忍性:OB 節點之間是有互相通信的(需要相互同步數據),所以存在分區問題,OB 通過僅同步到部分節點來保證可用性。這一點就說明 OB 做了分區容錯。

可用性分區容忍性:OB 事務只需要同步到?(N/2)+1 個節點,允許其余的一小半節點分區(宕機、斷網等),只要 (N/2)+1 個節點活著就是可用的。

極端情況下,比如 5 個節點分成 3 份(2:2:1),那就確實不可用了,只是這種情況概率比較低。

一致性分區容忍性:分區情況下意味著部分節點失聯了,一致性顯然是不滿足的。但通過共識算法可以保證當下只有一個值是合法的,并且最終會通過節點間的同步達到最終一致性。

所以 OB 仍然沒有逃脫 CAP 魔咒,產生分區的時候它變成 AP+最終一致性(C)。整體來說,它是 AP 的,即高可用和分區容忍。

結語

個人感覺本文涉及到的知識面確實不少,每個點單獨展開都可以討論半天。回到我們緊扣的主旨來看,雙十一海量支付背后技術上大快人心的設計到底是啥?

我想無非是以下幾點:

基于用戶分庫分表的 RZone 設計。每個用戶群獨占一個單元給整個系統的容量帶來了爆發式增長。

RZone 在網絡分區或災備切換時 OB 的防腦裂設計(PAXOS)。我們知道 RZone 是單腦的(讀寫都在一個單元對應的庫),而網絡分區或者災備時熱切換過程中可能會產生多個腦,OB 解決了腦裂情況下的共識問題(PAXOS 算法)。

基于 CZone 的本地讀設計。這一點保證了很大一部分有著“寫讀時間差”現象的公共數據能被高速本地訪問。

剩下的那一丟丟不能本地訪問只能實時訪問 GZone 的公共配置數據,也興不起什么風,作不了什么浪。

比如用戶創建這種 TPS,不會高到哪里去。再比如對于實時庫存數據,可以通過“頁面展示查詢走應用層緩存”+“實際下單時再校驗”的方式減少其 GZone 調用量。

而這就是螞蟻 LDC 的 CRG 架構,相信 54.4 萬筆/秒還遠沒到 LDC 的上限,這個數字可以做到更高。

當然雙 11 海量支付的成功不單單是這么一套設計所決定的,還有預熱削峰等運營+技術的手段,以及成百上千的兄弟姐妹共同奮戰,特此在這向各位雙 11 留守同學致敬。

感謝大家的閱讀,文中可能存在不足或遺漏之處,歡迎批評指正。

參考文獻:

Practice of Cloud System Administration, The: DevOps and SRE Practices for Web Services, Volume 2. Thomas A. Limoncelli, Strata R. Chalup, Christina J. Hogan.

MySQL 5.7 半同步復制技術:https://www.cnblogs.com/zero-gg/p/9057092.html

BASE 理論分析:https://www.jianshu.com/p/f6157118e54b

Keepalived:https://baike.baidu.com/item/Keepalived/10346758?fr=aladdin

PAXOS:https://en.wikipedia.org/wiki/Paxos_(computer_science)

OceanBase 支撐 2135 億成交額背后的技術原理

https://www.cnblogs.com/antfin/articles/10299396.html

Backup:https://en.wikipedia.org/wiki/Backup


往期推薦

使用 Stream API 高逼格 優化 Java 代碼!

Chrome App 將停用

為什么 128 KB 的魂斗羅可以實現那么長的劇情?

面試官問:select......for update會鎖表還是鎖行?

在 Spring Boot 中,如何干掉 if else

大文件上傳服務器、支持超大文件HTTP斷點續傳實踐總結

總結

以上是生活随笔為你收集整理的支付宝架构真牛逼的全部內容,希望文章能夠幫你解決所遇到的問題。

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

成人丁香花| 丁香激情综合久久伊人久久 | 超碰在线天天 | 亚洲三级在线播放 | 免费av大片 | 四虎永久视频 | 500部大龄熟乱视频 欧美日本三级 | 99国产在线视频 | 中文字幕在线看视频国产中文版 | 成人在线免费看视频 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 911香蕉视频 | 日日干美女| 亚洲女同videos | 日韩高清在线观看 | 五月天国产 | 色婷婷av在线| 亚洲综合色av | 精品国产亚洲在线 | 日韩乱色精品一区二区 | 精品福利在线 | av在线影视 | 在线一区观看 | 欧美一级专区免费大片 | av成人免费网站 | 国产亚洲视频中文字幕视频 | 日韩精品欧美一区 | 日韩精品在线免费观看 | 欧美色图狠狠干 | 国产精品麻豆一区二区三区 | 日韩一区二区三免费高清在线观看 | 亚洲另类久久 | 精品久久久久国产免费第一页 | 久久婷婷精品视频 | 欧美一级视频免费看 | 免费久久视频 | 精品国产精品国产偷麻豆 | 久久激情视频 久久 | 国产免费人成xvideos视频 | 色小说在线 | 久久久久久久久久久久亚洲 | 国产黄色免费观看 | 国产精久久久久久妇女av | 久久激情五月婷婷 | 成人在线视频观看 | 久久免费99精品久久久久久 | 久久久久久久国产精品影院 | 天天亚洲| 国产中文字幕一区二区 | 日日夜夜网 | 狠狠色丁婷婷日日 | 国产亚洲精品成人av久久ww | 99国产精品一区二区 | 成人丝袜| 91福利视频久久久久 | 黄污污网站| 五月香婷 | 最近日本中文字幕a | 在线小视频你懂的 | 亚洲欧洲一区二区在线观看 | 免费色网| 亚洲三级网| 日韩电影中文字幕在线 | 在线观看视频99 | av品善网| 激情网色| 精品视频 | 亚洲视频2 | 97在线观看免费视频 | 久久久久国产精品免费 | 亚洲黄色app | 久久呀| 国产亚洲精品久久久久久大师 | 91在线www| 久久综合色天天久久综合图片 | a级国产乱理论片在线观看 特级毛片在线观看 | 黄色av免费看 | 韩国av一区二区 | 欧美一级特黄aaaaaa大片在线观看 | 日韩精品视频免费专区在线播放 | 久久久久国产精品厨房 | 婷婷av色综合 | 少妇超碰在线 | 欧美日韩一区二区免费在线观看 | 91免费的视频在线播放 | 一级黄色片在线免费观看 | 又黄又爽又无遮挡免费的网站 | 中午字幕在线 | 97人人超| 男女激情免费网站 | 日韩高清 一区 | 99精品色| 波多野结衣电影一区二区 | 欧美黄网站| 久久免费国产精品 | 久久精品成人 | 午夜精品导航 | 久艹在线观看视频 | 97国产电影| 日本中文字幕系列 | 欧美日韩国产综合网 | 园产精品久久久久久久7电影 | 97电影在线 | 欧美乱淫视频 | 成人小视频在线观看免费 | 521色香蕉网站在线观看 | 免费视频久久久久久久 | 久久久一本精品99久久精品66 | 91精品在线观看视频 | 精品一区二区在线看 | 91免费观看 | 亚洲精品乱码久久久久v最新版 | 欧美一二三视频 | av免费电影网站 | 99精品视频在线观看播放 | a国产精品 | 一区二区三区在线视频111 | 亚洲精品欧洲精品 | 欧美成人黄色 | 韩国av三级| 亚洲精品视频在线 | 91精品国产综合久久久久久久 | 久久精品99国产精品酒店日本 | 久久伦理电影 | 日韩电影一区二区在线 | 国产精品久久久久aaaa九色 | 一区二区在线不卡 | 中文字幕在线观看播放 | 久久视频免费在线观看 | 在线观看亚洲精品 | 久久免费精品一区二区三区 | 在线观看av的网站 | 欧美最猛性xxxxx亚洲精品 | 国产97色| 久久美女免费视频 | 精品亚洲免费 | 尤物97国产精品久久精品国产 | 久久一区国产 | 五月婷婷综合激情网 | 99热最新精品 | 欧美日韩高清国产 | 欧美精品乱码久久久久 | 国产视频一 | 女人18毛片a级毛片一区二区 | 日韩在线视频免费播放 | 999视频在线观看 | 日日干天天爽 | 西西444www大胆无视频 | 日批视频在线观看免费 | 婷婷中文字幕 | 久久国产成人午夜av影院潦草 | 最近中文字幕国语免费高清6 | 亚州国产精品视频 | 亚洲在线国产 | 国产在线精品播放 | a级国产乱理论片在线观看 特级毛片在线观看 | 久国产在线播放 | 四虎精品成人免费网站 | 999男人的天堂 | 在线观看免费黄色 | 婷婷色综合网 | 久久久午夜视频 | 日韩a欧美 | 成年人国产精品 | 九九视频在线观看视频6 | 国产色黄网站 | 九九99视频 | 天干啦夜天干天干在线线 | 久久综合狠狠综合 | 九九九电影免费看 | 国产精品午夜久久久久久99热 | 国产四虎影院 | 91在线网站| 欧美一级电影在线观看 | 91丨九色丨国产丨porny精品 | 91九色精品国产 | 成人av电影免费在线播放 | www.com久久 | 亚洲高清资源 | 国产精品久久久久999 | 国产精品久久99综合免费观看尤物 | 免费观看性生交大片3 | 亚洲精品男人的天堂 | 午夜精品视频一区二区三区在线看 | 欧美成a人片在线观看久 | 免费看片网页 | 国产精品成人在线观看 | 国产精彩视频 | 日日干夜夜骑 | 制服丝袜在线91 | 天堂久色| 怡红院久久 | 在线观看理论 | 久久国内精品视频 | 一区二区三区精品在线 | 狠狠操天天操 | 97超碰人人 | 色播五月激情综合网 | 日日夜精品 | 四虎在线影视 | 久久伦理电影网 | 中文字幕在线观看免费高清电影 | 毛片视频网址 | 亚洲精品视频在线观看免费 | 欧美性生活大片 | www黄色大片 | 黄色精品在线看 | 成人在线免费看 | 日韩美女一级片 | 激情电影影院 | 91中文字幕永久在线 | 日韩av一区二区在线 | 黄色一级大片在线免费看国产一 | 日本女人b| 狠狠操狠狠干天天操 | 国产一在线精品一区在线观看 | 九草视频在线观看 | 欧美国产一区二区 | 欧美色噜噜 | 精品久久精品 | 精品uu| 99在线视频网站 | 99久久精| 久久高清精品 | 精品久久久免费 | 久久精品播放 | 久久久精品福利视频 | 国产成人精品免费在线观看 | 日韩女同一区二区三区在线观看 | 日韩精品一区二区三区在线视频 | 五月天com | 国产视频美女 | 天天色天天操综合网 | 天天综合色天天综合 | 欧美va天堂在线电影 | 一级c片 | 精品欧美一区二区在线观看 | 亚洲va在线va天堂 | 91探花系列在线播放 | 日韩欧美在线第一页 | 97精品久久人人爽人人爽 | 亚洲91av| 国产高清免费 | 九九免费在线观看视频 | 久在线观看视频 | 国产福利免费在线观看 | 中文字幕免费看 | 天天操,夜夜操 | 一区二区三区日韩精品 | 欧美日韩激情视频8区 | 91亚洲精品久久久蜜桃网站 | 免费观看一级 | 国产综合小视频 | 国产一区二区在线影院 | 又粗又长又大又爽又黄少妇毛片 | 亚洲国产欧美在线看片xxoo | 五月婷在线播放 | 精品免费久久久久 | 中文字幕一区二区三区在线播放 | 在线精品视频在线观看高清 | 国产精品网在线观看 | 久久国产精品一区二区三区 | 亚洲第一香蕉视频 | 天天射综合网站 | 国产不卡免费视频 | 国产又粗又硬又长又爽的视频 | 日韩另类在线 | 福利一区视频 | 亚洲美女在线国产 | 色婷婷www| 欧美日韩中文国产 | 日韩欧美视频免费在线观看 | h文在线观看免费 | 亚洲精品在线免费观看视频 | 最近中文字幕免费视频 | 国产成人一区二区三区在线观看 | 欧美成人黄色片 | 中文字幕免费 | 日韩电影久久久 | 国产色视频一区 | 国产一区视频导航 | 91免费日韩| 久久不射电影院 | 综合影视| www欧美色 | 夜夜躁狠狠躁日日躁视频黑人 | 91亚州| 日本丰满少妇免费一区 | 欧美国产日韩一区二区 | 色五丁香 | 国产色拍拍拍拍在线精品 | 99久久久久久国产精品 | www久久 | 亚洲日日射 | 日韩有码第一页 | 久久视频这里有久久精品视频11 | 国产高清视频在线 | 日韩欧美国产视频 | 亚洲精品视频网站在线观看 | 狠狠干狠狠插 | 国产亚洲欧美日韩高清 | 日本超碰在线 | 婷婷精品国产欧美精品亚洲人人爽 | 不卡电影一区二区三区 | 91精品国产电影 | 一区二区视频电影在线观看 | 国产精品久久久久久久久久妇女 | 天天操天天摸天天射 | 色爽网站| 天天狠狠干 | 精品国产理论片 | 欧美激情视频久久 | 人人爱人人射 | 久久亚洲免费视频 | 国产精品久久精品国产 | 全久久久久久久久久久电影 | 久久综合九色综合97_ 久久久 | 亚洲1级片 | 国产视频久 | 韩国av电影在线观看 | 激情欧美xxxx| 国产一区二区精品久久 | 国产视频91在线 | 丁香婷婷色 | 国产精品黄色影片导航在线观看 | 欧美黑人巨大xxxxx | 日韩网站免费观看 | 国产亚洲精品久久网站 | 欧美黑人性猛交 | 国产精品都在这里 | 色视频在线看 | 久久久久国产视频 | 精品一区二区日韩 | 国产黄色在线网站 | 人人干在线 | 久久乐九色婷婷综合色狠狠182 | 成人a级网站 | 亚洲欧美在线观看视频 | 久久在视频 | 国产r级在线观看 | 日韩一区二区三区在线看 | 日韩午夜剧场 | 五月天天天操 | 麻豆传媒视频在线免费观看 | 久久国产香蕉视频 | 九九热精品视频在线播放 | 五月婷婷操 | 黄色毛片大全 | 国产伦精品一区二区三区四区视频 | 亚洲欧美观看 | 一区二区三区高清不卡 | 麻豆视频在线免费 | 国产精品成人久久 | 激情欧美一区二区三区免费看 | 免费av影视 | 国产精久久久 | 91网站在线视频 | 久久xxxx | 欧美精品生活片 | 亚洲一区二区精品 | www.com久久| 日韩在线理论 | 日韩av影视在线 | 日日骑 | 日日操日日插 | 99c视频在线 | 午夜精品久久久久 | 日韩欧美一区二区三区视频 | 91麻豆精品国产91久久久更新时间 | 国产成人在线一区 | 麻豆视频观看 | 成年人免费在线观看 | 97av精品| 中文字幕一区二区三区乱码不卡 | 婷婷精品国产一区二区三区日韩 | 欧美午夜理伦三级在线观看 | 亚洲精品电影在线 | 激情欧美一区二区三区 | 国产一区二区高清视频 | 一级成人网 | 99c视频在线 | 天天综合网久久 | 欧美 高跟鞋交 xxxxhd | 国产精品综合久久久久久 | 欧美在线日韩在线 | 日日操日日 | 在线观看色网 | 日韩美女免费线视频 | 欧美一级片免费观看 | 久久精品爱爱视频 | 日本丰满少妇免费一区 | 黄色的视频网站 | 久久天天躁夜夜躁狠狠躁2022 | 成人av av在线 | 久久一区二区三区四区 | 97人人澡人人添人人爽超碰 | 波多野结衣视频一区 | 午夜视频久久久 | 一区三区视频 | 天天做天天干 | 久久精品视频在线免费观看 | 五月天综合色 | 久久免费的视频 | 蜜臀av性久久久久av蜜臀三区 | 九九免费精品视频 | 亚洲精品在线免费播放 | 一区二区三区www | 国产综合91 | 毛片美女网站 | 福利视频一区二区 | 久草精品在线播放 | 日韩免费在线观看视频 | 亚洲乱码国产乱码精品天美传媒 | 9999精品| 狠狠狠狠干 | 午夜精品福利一区二区三区蜜桃 | av大全在线观看 | 黄色的视频网站 | 久久久久网址 | av网站有哪些 | 国产精品视频永久免费播放 | 久久尤物电影视频在线观看 | 欧美怡红院视频 | 9在线观看免费高清完整版在线观看明 | 久久艹久久 | av网站播放 | 91在线你懂的 | 国产精品99久久久久久小说 | 久久久久高清毛片一级 | 日日夜夜精品免费视频 | 粉嫩av一区二区三区四区在线观看 | 久草在线高清视频 | 欧美日韩在线视频一区二区 | 欧美久草网 | 91精品一区国产高清在线gif | 亚洲做受高潮欧美裸体 | 精品欧美小视频在线观看 | 91在线看视频| 九九热免费视频在线观看 | 国产黄色美女 | 五月婷婷婷婷婷 | 天天操天天干天天摸 | 国产精品一区二区久久久久 | 久草在线国产 | 超碰97av在线| 96久久精品 | 亚洲在线黄色 | 婷婷亚洲综合五月天小说 | 国产亚洲欧美在线视频 | 国产在线一线 | 亚洲精品美女在线观看 | 四虎最新域名 | 亚洲影院天堂 | 国产精品久免费的黄网站 | 久草在线免费色站 | 91亚洲精品久久久蜜桃网站 | 日韩欧美在线播放 | 98涩涩国产露脸精品国产网 | 亚洲欧美日韩精品久久奇米一区 | 亚洲资源在线 | 欧美一二三区在线播放 | 99精品欧美一区二区三区黑人哦 | 91av视频在线播放 | 激情五月开心 | 综合精品久久久 | 国产日韩欧美在线观看视频 | 国产精品久久久一区二区三区网站 | 91在线看视频免费 | 国产亚洲成人网 | 日韩a级黄色 | 久久精品毛片 | 国产999免费视频 | 成人动漫精品一区二区 | 国产午夜三级一二三区 | 激情欧美一区二区免费视频 | 最近日本韩国中文字幕 | 久久五月激情 | 免费在线观看视频一区 | 欧美激情在线看 | 国产一区国产二区在线观看 | 欧美成人理伦片 | 久久影院中文字幕 | www.狠狠插.com | 久草免费看| 欧美日韩国产成人 | 97精品国产97久久久久久粉红 | 中文字幕在线第一页 | a级黄色片视频 | 国产精品久久一 | 国产在线色视频 | 草久在线视频 | 精品欧美乱码久久久久久 | 亚洲午夜久久久久久久久久久 | 欧美一区二区三区激情视频 | 毛片区| 天天曰夜夜爽 | 午夜影院一级片 | 国产日韩在线播放 | 国产精品久久久久久久久久白浆 | 天天干天天操天天入 | 四虎在线免费观看视频 | 国产精品久久99综合免费观看尤物 | 免费亚洲视频 | 手机av在线免费观看 | 国产a国产 | 久久久久久久久久福利 | 国产成人免费在线观看 | 亚洲v精品 | 美女视频免费一区二区 | 狠日日| av中文在线 | 97日日碰人人模人人澡分享吧 | 中文字幕日韩在线播放 | 自拍超碰在线 | 久久国产成人午夜av影院潦草 | 国产一级视屏 | 一区二区在线影院 | 日韩欧美国产激情在线播放 | 久久精品8 | 射九九 | 99精品视频在线观看 | 天堂av一区二区 | 在线观看中文字幕一区二区 | 中文字幕在线播放第一页 | 欧美激情va永久在线播放 | 深爱激情开心 | 欧美福利视频 | 日韩在线字幕 | 国产精品免费久久久久久久久久中文 | 精品一区电影国产 | 日本中文乱码卡一卡二新区 | 在线你懂的视频 | 成人av免费在线看 | 日韩在线视频免费看 | 91网址在线 | 五月开心婷婷网 | 在线观看黄网站 | 久久系列| 成人国产电影在线观看 | 精品久久久久久一区二区里番 | 96久久久 | 天天人人| 精品国产一区二区三区在线 | 国产精品精品久久久 | 乱男乱女www7788 | 黄色大片网 | 人人超碰免费 | 成人av午夜 | 97色综合| 99精品国自产在线 | 国产99久久久精品视频 | 91爱看片 | 日本xxxx裸体xxxx17 | 91精品在线播放 | 中文字幕你懂的 | 久久国产成人午夜av影院潦草 | 在线观看完整版免费 | 欧美日韩在线视频一区二区 | 精品国偷自产国产一区 | 又色又爽的网站 | 日韩av电影国产 | 亚洲第一成网站 | 国产99久久久国产精品免费二区 | 一本一本久久a久久精品综合 | 久热这里有精品 | 91视频88av | 日韩免费高清在线观看 | 久久试看| 日韩视频中文字幕 | 天天操天天干天天插 | 国产一区二区观看 | 久久免费观看少妇a级毛片 久久久久成人免费 | 成年人免费在线播放 | 成人动漫精品一区二区 | 日本久热 | 国产高清永久免费 | 黄色免费大全 | 天天色天天综合网 | 欧美日韩成人 | 欧美日韩一级久久久久久免费看 | 精品免费久久 | 国产在线一区二区 | 91视频啊啊啊 | 狠狠色丁香婷婷综合久小说久 | 日韩伦理一区二区三区av在线 | 91超碰免费在线 | 欧美日韩一区二区三区不卡 | 国产成人精品综合久久久久99 | 国产成人精品一区二区在线 | 日日夜夜精品网站 | 精品一区欧美 | 亚洲欧美国产视频 | 国产淫片 | 国产美女无遮挡永久免费 | 婷婷伊人综合亚洲综合网 | 免费观看成人 | 日日操夜夜操狠狠操 | 久久人人爽人人人人片 | 国产成人一区二区三区在线观看 | 成人午夜在线观看 | 又黄又爽又刺激视频 | 国产亚洲精品久久久久久无几年桃 | 亚洲精品国产日韩 | 国产精品久久在线观看 | 亚洲精品视频偷拍 | 91在线超碰 | 嫩草av影院 | 在线看国产视频 | 97精品国产91久久久久久 | 精品亚洲男同gayvideo网站 | 国产一区二区电影在线观看 | 久草在线看片 | 在线免费中文字幕 | 一级黄色片在线播放 | www.天天草 | 久久精品视 | 中文字幕在线观看完整版电影 | 最近2019年日本中文免费字幕 | 欧美日韩国产精品一区二区三区 | 中文字幕美女免费在线 | 蜜臀一区二区三区精品免费视频 | 国产成人免费在线 | 6080yy精品一区二区三区 | av在线中文| 天天鲁一鲁摸一摸爽一爽 | 久久公开免费视频 | 亚洲人成免费网站 | 欧美精品久久久久性色 | 在线观看视频精品 | 91系列在线观看 | 亚洲午夜精品久久久久久久久久久久 | 成人久久久久久久久 | 在线观看免费成人 | 三级av片| 8x成人免费视频 | 亚洲精品中文字幕视频 | 国产中文欧美日韩在线 | 国产一级性生活 | 成人久久久精品国产乱码一区二区 | 99热最新在线 | 91九色视频网站 | 久久久久国产精品一区 | 国产高清免费在线观看 | 中文字幕在线国产精品 | 成人免费一级片 | 欧美激情va永久在线播放 | 曰本免费av | 香蕉视频18 | 成人午夜av电影 | 久久久综合精品 | 日日操网 | 国产看片网站 | 中字幕视频在线永久在线观看免费 | 免费的成人av | 欧美一区二区视频97 | 亚洲三级在线免费观看 | 精品成人网 | 五月婷丁香 | 99视频在线免费 | 丁香花在线观看免费完整版视频 | 亚洲激情 在线 | av资源免费看 | 日本一区二区免费在线观看 | 中文字幕专区高清在线观看 | 国产成人一区二区三区免费看 | 亚洲视频免费在线 | 欧美性生活免费 | 一级特黄av | 午夜性盈盈 | 亚洲一片黄 | 麻豆国产在线播放 | 亚洲乱码精品久久久久 | 欧美激情精品久久久久久变态 | 国产九九热视频 | 国产一区 在线播放 | 日本中文字幕网站 | 日日日日干| 日韩一二区在线 | 中文伊人 | 国产精品入口麻豆 | 久久久国产精品人人片99精片欧美一 | av三级av| 69av视频在线观看 | 国产午夜麻豆影院在线观看 | 久久香蕉一区 | 亚洲激情在线观看 | 日韩中文字幕免费在线播放 | 一区二区三区免费在线观看 | 狠狠干天天色 | 国产高清视频免费在线观看 | 91在线视频在线 | 四虎影视欧美 | 亚洲一级国产 | 在线影视 一区 二区 三区 | 国产精品久久婷婷六月丁香 | 国产精品第一页在线观看 | 日本中文字幕网址 | 草久在线播放 | 99久久99久国产黄毛片 | 激情在线网站 | 中文一区二区三区在线观看 | 天天射天天爽 | 日韩免费中文 | 在线三级播放 | 五月激情久久 | 久久亚洲精品国产亚洲老地址 | 日韩免费三级 | 日韩免费三区 | 久久国产精品99久久久久 | 可以免费观看的av片 | 免费观看www7722午夜电影 | 国产精品乱码一区二三区 | 国产精品久久久久久久久大全 | 国产成人av网站 | 国产资源免费在线观看 | 午夜私人影院久久久久 | a黄在线观看| 国产精品一区二区精品视频免费看 | 成人av手机在线 | 久久九九影院 | 国产资源免费在线观看 | 美女黄视频免费 | 日韩电影在线观看中文字幕 | 超碰日韩在线 | 天天射色综合 | 99精品乱码国产在线观看 | 88av色| 手机看片国产 | 亚洲国产精品成人va在线观看 | 91在线免费播放 | a黄色片 | 欧美性生活久久 | 欧美视屏一区二区 | 国产精品www | 国产精品免费久久久久 | 亚洲综合色视频 | 国产黑丝一区二区三区 | 久久国产免费看 | 国产视频久久久 | 黄色国产大片 | 亚洲精品麻豆视频 | 在线你懂 | 婷婷色中文字幕 | 91激情在线视频 | 国产不卡一 | 国产精品嫩草在线 | 五月的婷婷 | 永久免费观看视频 | 国产 字幕 制服 中文 在线 | 亚洲综合激情小说 | 狠狠色伊人亚洲综合网站野外 | 在线免费观看麻豆视频 | 欧美韩日视频 | 一区二区三区四区五区在线 | 亚洲一区 av | 国语精品免费视频 | 国产精品igao视频网网址 | 国产精品高 | 在线视频免费观看 | 精品视频99 | 在线电影 你懂得 | 国产在线播放一区二区三区 | 永久免费精品视频 | 天天色天天搞 | 中文 一区二区 | 91视频亚洲 | 色综合久久精品 | 丝袜美腿一区 | 亚洲精品一区二区在线观看 | 91麻豆看国产在线紧急地址 | 国产手机在线视频 | 午夜三级在线 | 国产精品 9999 | 欧美日韩国产一区二区三区 | 91天堂素人约啪 | 18久久久| 日韩久久网站 | 一本一道久久a久久精品 | 2018亚洲男人天堂 | 五月天激情综合网 | 日韩免费 | 91超碰在线播放 | 91精品专区| av中文字幕网站 | 中文字幕丰满人伦在线 | av在线播放国产 | 国产免费观看高清完整版 | 国产精品99在线观看 | 97人人爽| 天天操天天玩 | 国产一区二区三区 在线 | 91丨九色丨高潮 | 久久综合视频网 | 久久久久国产精品午夜一区 | 久草在线资源免费 | avav99| 日本h在线播放 | 亚洲,国产成人av | 人人爽人人爱 | 久久婷婷色综合 | 日韩av男人的天堂 | 亚洲免费观看视频 | 怡红院av久久久久久久 | 成人久久久久久久久 | av不卡免费看 | 久久伊人八月婷婷综合激情 | 国产精品国产亚洲精品看不卡 | av观看在线观看 | 天天射天天舔天天干 | 国产精品3 | 欧美性色综合 | 日韩在线播放视频 | 午夜视频在线观看一区二区三区 | 视频一区二区免费 | www.av在线.com| 日韩欧美一区二区三区在线观看 | 欧美精品久久久久性色 | 91精品影视 | wwwwww色| 91在线精品播放 | 黄色av高清 | 国产一区二区高清 | 久草在线高清视频 | 69国产精品视频免费观看 | 91成人免费在线视频 | 国产精品久久网站 | 日韩在线视频不卡 | 日韩欧美在线国产 | 婷婷免费视频 | 国产精品 中文字幕 亚洲 欧美 | 亚洲在线精品视频 | 免费av在线网站 | 国产精品免费视频久久久 | 在线一区观看 | 欧美日韩视频在线观看一区二区 | 亚洲欧美国产精品 | av福利超碰网站 | 午夜精品久久 | 黄色在线观看www | 成人久久电影 | 国产精品a级 | 国产精品黑丝在线观看 | 亚洲婷婷网 | www.色在线| 狠狠色丁香 | 精品理论片 | 色丁香综合 | 99久久久久 | 国产精品激情偷乱一区二区∴ | 天天综合色天天综合 | 欧美日韩二三区 | www一起操 | 亚洲精品久久久蜜桃 | www.亚洲视频 | 九九在线精品视频 | 国产馆在线播放 | 激情婷婷久久 | 精品一区二区亚洲 | 精品欧美小视频在线观看 | 精品国产视频在线观看 | www九九热 | 久久久999免费视频 日韩网站在线 | 综合黄色网 | 黄色软件视频大全免费下载 | 精品成人在线 | 国产成人久久77777精品 | 亚洲电影一区二区 | 色婷婷视频网 | 在线观看黄色小视频 | 91精品国产入口 | 亚洲va欧美| 天天搞天天干 | 日韩精品一二三 | 日韩精品一区在线播放 | 国产无遮挡猛进猛出免费软件 | 亚洲精品乱码白浆高清久久久久久 | 九九热在线免费观看 | 一区二区欧美日韩 | 成人av.com | 国产精品ⅴa有声小说 | 狠狠干狠狠艹 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 国产传媒中文字幕 | 九九久久电影 | 日日弄天天弄美女bbbb | 在线免费观看视频一区 | 这里只有精品视频在线 | 热99久久精品 | 亚洲国产欧美一区二区三区丁香婷 | 91精品国产自产在线观看 | 最近中文字幕免费av | 狠狠色综合网站久久久久久久 | 四虎影视精品永久在线观看 | 九九在线精品视频 | 人人爽人人舔 | 最近中文字幕完整视频高清1 | 亚洲永久精品视频 | 久热电影 | 久久高视频| 国产精品嫩草影院123 | 狠狠色丁香久久婷婷综合_中 | 亚洲在线高清 | 日本一区二区三区免费观看 | 在线免费观看视频一区二区三区 | 精品中文字幕视频 | 久久电影国产免费久久电影 | 免费黄色小网站 | 91视频-88av| 欧美伦理电影一区二区 | 成人av影视观看 | 激情久久小说 | 伊人狠狠操 | 精品久久免费 | 五月婷婷综合激情网 | 精品国产一区二区三区蜜臀 | 中文日韩在线视频 | 成人在线免费观看视视频 | 在线观看91 | 亚洲欧美在线观看视频 | 国产精品 国产精品 | 国产免费中文字幕 | 四虎在线观看视频 | 91亚洲网| 欧美日韩在线免费观看 | 亚洲国产精品小视频 | 丁香激情综合久久伊人久久 | 国产精品久久久久久欧美 | 亚洲精品在线一区二区 | 中文字幕精| 日产av在线播放 | 免费网站看v片在线a | 麻花传媒mv免费观看 | 久久成人一区二区 | 国产精品va在线观看入 | 国产精品岛国久久久久久久久红粉 | 91精品国产电影 | 日韩一区二区三 | 一区二区三区精品在线视频 | 亚洲精品99久久久久中文字幕 | 在线中文字幕一区二区 | 精品国产伦一区二区三区观看说明 | 狠狠色丁香婷婷综合久小说久 | 久久久高清一区二区三区 | 久久综合五月 | 天天插狠狠干 | 久久精品4 | 欧美一级乱黄 | 久久热亚洲 | 国产中文在线播放 | 99九九热只有国产精品 | 日韩啪啪小视频 | 亚洲综合在线五月天 | 日韩a在线看 | 天天天天爽 | 国产成人在线观看免费 | 99电影456麻豆| 久久社区视频 | 偷拍精偷拍精品欧洲亚洲网站 | 综合激情婷婷 | www一起操| 国产黄色片免费 | 美女视频黄免费 | 在线中文字幕观看 | av电影av在线| 99爱这里只有精品 | 中文字幕人成一区 | 网站在线观看你们懂的 | 91精品播放| 涩涩网站在线观看 | 九色琪琪久久综合网天天 | 中文字幕在线观看完整版电影 | avv天堂| 夜夜骑日日 | a天堂一码二码专区 | 欧美一级片在线免费观看 | 97在线观看免费视频 | 亚洲激情在线视频 | 久久人人看 | 天天色天天综合网 | v片在线播放 | 91av中文字幕 | www.狠狠操| 中文字幕一区二区三 | 五月婷婷开心中文字幕 | 97在线观看免费视频 | 综合色在线 | 992tv人人网tv亚洲精品 | 成人黄色大片在线观看 | 亚洲国产免费网站 | 91在线精品视频 | 91精品国自产在线观看 | 国产视频一区在线 | 国产精品99爱 | 天天躁天天躁天天躁婷 | 久久久久免费精品视频 | 国产成年人av | 国产九九九视频 | 精品久久久久一区二区国产 |