在這篇題為《 PaxosStore: High-availability Storage Made Practical in WeChat 》的論文中,微信團隊介紹了微信中高可用性的存儲系統——PaxosStore。該系統在存儲層采用了組合式設計,針對不同存儲模型開發不同的存儲引擎。(編輯注:在AI科技打本營微信公眾號后臺回復:微信,下載完整論文)
PaxosStore 的特點在于,它將基于 Paxos 的分布式一致性協議(consensus protocol)提取出來作為一個中間件,底層的多模型存儲引擎在各種情況下都可以訪問這個中間件。這使得存儲引擎的調整、維護、縮放和擴展更加容易。
微信團隊表示,在工程實踐方面的經驗,實現一個實用的一致性讀寫協議要比理論復雜得多。為了解決這樣復雜的工程難題,他們提出了一種層級式的基于 Paxos 的存儲協議堆棧。協議中使用的基本數據結構 PaxosLog 的作用是,將以編程為導向的一致性讀寫橋接到以存儲為導向的 Paxos 程序。另外,文章還介紹了基于 Paxos 的優化方法,這種方法可以使容錯(fault-tolerance)更加有效。圍繞如何構建實用的分布式存儲系統,這篇論文還對幾種切實可行的解決方案進行了討論。
以下是論文簡介:
微信是受歡迎的手機應用程序之一,其月活躍用戶人數接近10 億人(編輯注:據騰訊2017第二季度財報,截止6月30日,微信月活躍用戶9.63億,逼近10億大關)。微信為用戶提供即時通訊、網絡社交、移動支付和第三方授權等服務。支持這些綜合業務的后端由很多功能組件構成,這些組件是由不同的團隊開發的。盡管這些業務的商業邏輯不同,但是大部分后端組件的應用都需要可靠的存儲支持。
起初,各開發團隊隨機選用現有的存儲系統作為獨立組件的原型。但是各種各樣的零散存儲系統不僅需要花費巨大的精力來維護,而且還難以擴展。因此需要開發一種通用的存儲系統,為微信多種多樣的業務提供支持,PaxosStore 正是基于此開發的第二代存儲系統(代微信存儲系統是基于 quorum protocol 開發的)。
在微信的業務單元中,以下關于存儲服務的要求均屬常規要求。
,大數據具備的三 V 特性: volume、 velocity、 variety(大量、高速、多樣)。微信每天平均生成約 1.5TB 的數據,這些數據包含各種各樣的內容,如文本信息、圖像、音頻、視頻、金融交易以及朋友圈文章等。在白天,每秒發出的應用請求就有成千上萬次,而且系統使用以單記錄訪問(single-record accesses)為主。
第二,高可用性是存儲服務的首要特性。大多數應用的實現都要依賴 PaxosStore,例如點對點訊息傳遞、群聊、瀏覽朋友圈文章等。高可用性對用戶體驗至關重要。微信的大多數應用需要PaxosStore 的 latency overhead 控制在 20 ms 以內。而且,還必須按 urban scale 的需求來滿足這樣的延遲要求。
除了借助 PaxosStore 為用戶提供高可用性存儲服務,我們還面臨以下挑戰:
有效且高效的一致性保證。根本上,PaxosStore 使用 Paxo 算法處理一致性問題。盡管原始的 Paxos 協議有提供一致性保證,但是應用的復雜性(例如,復雜狀態機器需要進行妥善的維護和跟蹤)和高額運行成本(例如同步所要求的帶寬)使得該協議無法為微信的綜合業務提供支持。
彈性和低延遲。 PaxosStore 需要按城市級的需求來為低延遲讀寫提供支持。在運行時,需要妥善處理負載沖擊(Load surge)。
跨數據中心自動容錯。在微信的運營中,PaxosStore 的應用橫跨全球多個數據中心的數千商用服務器。在如此大規模的系統中,硬件故障和網絡中斷屢見不鮮。容錯系統應能在不影響系統整體效率的條件下,進行錯誤檢測和恢復。
PaxosStore 是一個實用的高可用性存儲解決方案,它的應用為微信后端提供了強大的存儲支持。該系統在存儲層采用了組合式設計,針對不同存儲模型開發不同的存儲引擎。PaxosStore 的特點在于,它將基于 Paxos 的分布式一致性協議(consensus protocol)提取出來作為一個中間件,隱含的多模型存儲引擎在各種情況下都可以訪問這個中間件。這種基于 Paxos 的存儲協議在經過擴展以后,可以為針對各種應用構建的編程模型中各種各樣的數據結構提供支持。而且,PaxosStore 采用 leaseless 設計,可以實現很好的系統可用性和容錯能力。本論文的主要貢獻可概括為以下幾點:
我們介紹了 PaxosStore 的設計,重點闡述了一致性讀寫協議的構建及其運作方式。通過從存儲層中解耦出一致性協議,PaxosStore 擁有很好的可擴展性,可以給為不同存儲模型構建的多種存儲引擎提供支持。
根據 PaxosStore 的設計,我們進一步論述了容錯系統以及關于數據恢復的細節。文中描述的技術已在大型生產環境中實現了全面應用,它們使 PaxosStore 在微信所有的生產應用中達到了99.9999% 的可用性(此結果是通過對 6 個月的運行數據進行統計得出的)。
在日益成長的微信業務背后, PaxosStore 已經為其提供了兩年多的支持。基于這些實踐經驗,我們探討了 PaxosStore 設計上的取舍,并給出了我們的應用實踐所得到的實驗評估結果。
圖1顯示了 PaxosStore 的整體架構,總共有 3 層。編程模型針對各種外部應用提供多種數據架構。一致性層(consensus layer)執行基于 Paxos 的存儲協議。存儲層包含了多個根據不同存儲模型構建的存儲引擎,這些引擎可以滿足各種各樣的性能要求。PaxosStore 的架構與傳統存儲設計的不同之處主要在于它能將一致性協議應用提取出來作為一個中間件,為所有潛在的存儲引擎提供數據一致性保證。
通常,傳統的分布式存儲系統都是基于系統的單一存儲模型構建的,對模型的設計和應用作出稍微調整以滿足不同的應用要求。但是,這樣的話往往必須在不同組件之間進行復雜的協調。雖然將多個現成的存儲系統組合成一個綜合系統可以滿足不同的存儲要求,但是這常常會使整個系統難以維護并且會削弱可擴展性。而且,每個存儲系統都將數據一致性協議嵌入到存儲模型中,針對一致性問題的相應的分解克服(divide-and-conquer)法可能很容易出錯。這是因為整體系統的一致性保證是由單獨的子系統的一致性實現度的耦合決定的。而且,需要跨模型訪問數據(即跨多個存儲子系統)的應用幾乎無法利用任何潛在子系統的一致性支持,對于這種跨模型數據訪問的情況,只能單獨地自行應用一致性協議。
PaxosStore 采用組合式存儲設計。存儲層上應用有多個存儲模型,只處理高可用性的實現問題,一致性問題則由一致性層處理。這使得每個存儲引擎以及整個存儲層可以按照需求進行擴展。由于一致性協議應用已從存儲引擎中解耦出來,所有支持的存儲模型在各種情況下都可以利用數據一致性保證。這也使得跨模型數據訪問更易于實現。
這種編程模型層的設計和應用在技術上簡單易懂,在本部分,我們主要介紹 PaxosStore 一致性層和存儲層的設計細節。
圖5:PaxosLog-as-value for key-value storage
在本文中,我們詳細解讀了 PaxosStore,它是一個高可用性的存儲系統,每秒可以承受數千萬次的一致性讀/寫操作。PaxosStore 中的存儲協議基于用于分布式共享的 Paxos 算法,我們對其進行了進一步具有實操性的優化,包括用于 key-value 存儲的 PaxosLog-as-value 和 簡明PaxosLog 結構。基于細粒度數據檢查點的容錯方案使 PaxosStore 能夠在故障時支持快速數據恢復,而不會導致系統停機。PaxosStore已經在微信中實施和部署,為微信集成服務(如即時消息和社交網絡)提供存儲支持。
在 PaxosStore 的開發過程中,我們總結了幾個設計原則和經驗教訓:
建議不要通過妥協的單一存儲引擎支持存儲多樣性,而是設計這樣的存儲層,讓它能夠支持為不同存儲模型構建的多個存儲引擎。這種方法有助于開發者在操作維護的動態方面進行有針對性的性能調整。
除錯誤和故障外,系統過載也是影響系統可用性的關鍵因素。特別是在設計系統容錯方案時,我們必須對過載引起的潛在雪崩效應給予足夠的重視。 一個具體的例子是在 PaxosStore 中使用迷你集群組(mini-cluster group)。
PaxosStore 的設計大幅借鑒了基于消息傳遞的事件驅動機制,這可能會涉及邏輯實現方面的大量異步狀態機轉換。 在構建 PaxosStore 的工程實踐中,我們開發了一個基于協同程序和 socket hook 的框架,以便于以 pseudo-synchronous 方式對異步過程進行編程。這有助于消除容易出錯的函數回調,并簡化了異步邏輯的實現過程。
原文地址:
http://www.vldb.org/pvldb/vol10/p1730-lin.pdf
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。