[轉載] 【每週推薦閱讀】SEDA:高併發系統設計模型與架構

布式文件系統最複雜的設計莫過於master節點,其制約了整個系統的性能和存儲容量。不管是GFS、Tencent XFS,仍是後來Baidu的Nearline、乃至當今的AFS設計,都採用了兩級的設計架構:namespace和meta info分離的方式來解決系統可擴展性問題,以更好適應萬臺規模的系統應用。而後,採用這樣的兩級架構也使得文件元數據更新變得複雜,特別在數據一致性與性能之間尋求最佳平衡點的問題上。架構

 

Google的GFS在這種架構上走在最前列,Tencent XFS延續了GFS設計的許多經驗和成功積累。從2011年開始我參與的XFS項目是由來自Google inf的huican和hans兩位大牛所領導的。整個XFS的master沿用了GFS所採用的「triple-tree」實現思想(即read-only tree, mutation tree, checkpoint),將對meta tree的操做進行了細粒度的分離,讀、更新、checkpoint操做所有分離,從而實現了在強一致以及高魯棒下的高性能要求,當時的UPS(updates per second)接近2W。在隨後大半年的應用中都沒有太多的升級和修改(部分緣由hans調任其餘組組長),由於對namespace的操做而言,這樣的設計已經接近於完美。直到2012年,在一次profiling中發現namespace與meta info之間的數據控制流存在階段性依賴(例如2PC部分),並嘗試採用SEDA去改造才實現了再次的性能突破,最終將UPS提高到6W。併發

 

SEDA(Staged Event-Driven Architecture)是一種以狀態事件驅動爲基礎的高併發模型。在2012年在XFS中參照SEDA模型將master改形成並行流水線方式處理,從而提升整個master的吞吐。本週推薦閱讀的是發表在2006年SOSP上的SEDA: An Architecture for Highly Concurrent Server Applications高併發

相關文章
相關標籤/搜索