系統架構領域的一些學習材料

標籤:架構學習材料系統systemresearch
html

轉載:http://qing.blog.sina.com.cn/2244218960/85c41050330031zq.html?utm_source=tuicool&sudaref=www.tuicool.comweb

系統架構是一個工程和研究相結合的領域,既注重實踐又依賴理論指導,入門容易但精通很難,有時候還要講點悟性,很具備「僞科學」的特徵。要在此領域進階,除了要不斷設計並搭建實際系統,也要注意方法論和設計理念的學習和提煉。算法

常常有同窗詢問如何學習,特貼一篇學習材料,供你們參考。09年時寫的,在系統領域浩如煙海的文獻中提取了一些我認爲值得研究和學習的項目,沒包括近幾年出現的一些工做,也不夠全面。不過,其實也足夠了,看paper是一個從少到多再到少的過程。對問題本質、背景和發展歷史有大體瞭解,再輔以hands-on的實踐(長期的真正的實踐),足以摸到本領域的門徑。編程

此文在網上轉載很多,但多數沒有說明出處。今天在這裏重發,也順便向315致敬。windows

---安全

對於工程師來講,到必定階段後每每會遇到成長瓶頸。要突破此瓶頸,須要在所屬技術領域更深刻學習,瞭解本領域的問題本質、方法論與設計理念、發展歷史等。如下提供一些架構相關領域的學習材料,附上簡單點評,供有興趣的工程師參考。但願你們能經過對這些領域的瞭解和學習,掌握更多system design principles,在本身的工做中駕輕就熟,步入自由王國。網絡

1. Operating Systems架構

Mach [Intro: http://www-2.cs.cmu.edu/afs/cs/project/mach/public/www/mach.html,Paper: http://www-2.cs.cmu.edu/afs/cs/project/mach/public/www/doc/publications.html]app

傳統的kernel實現中,對中斷的響應是在一個「大函數」裏實現的。稱爲大函數的緣由是從中斷的入口到出口都是同一個控制流,當有中斷重入發生的時候,實現邏輯將變得很是複雜。大多數的OS,如UNIX,都採用這種monolithic kernel architecture。異步

1985年開始的Mach項目,提出了一種全新的microkernel結構,使得因爲70年代UNIX的發展到了極致而以爲後續無枝可依的學術界頓時找到了興奮點,也開始了沸沸揚揚的monokernel與microkernel的爭論。

插播一個花絮:Mach的主導者Richard Rashid,彼時是CMU的教授,受BillGates之託去遊說JimGray加盟MS。結果把本身也被繞了進來,組建了Microsoft Research。他到中國來作過幾回21Century Computing的keynotes。

Exokernel [Intro:http://pdos.csail.mit.edu/exo/,Paper:http://pdos.csail.mit.edu/PDOS-papers.html#Exokernels]

雖然microkernel的結構很好,但實際中並無普遍應用,由於performance太差,並且你們逐漸發現OS的問題並不在於實現的複雜性,而更多在於如何提升application使用資源的靈活性。這也就是在kernel extension(例如loadable module in Linux)出現後,有關OS kernel architecture的爭論就慢慢淡出人們視線的緣由。

Exokernel正是在這樣的背景中出現的,它並不提供傳統OS的abstraction(process,virtual memory等),而是專一於資源隔離與複用(resource isolation and multiplexing),由MIT提出。在exokernel之上,提供了一套庫,著名的libOS,用於實現各類OS的interface。這樣的結構爲application提供了最大的靈活度,使不一樣的application能夠或專一於調度公平性或響應實時性,或專一於提升資源使用效率以優化性能。以今天的眼光來看,exokernel更像是一個virtual machine monitor。

Singularity [Intro:http://research.microsoft.com/os/Singularity/,Paper: http://www.
research.microsoft.com/os/singularity/publications/HotOS2005_BroadNewResearch.pdf
]

Singularity出如今virus,spyware取之不盡、殺之不絕的21世紀初期,由Microsoft Research提出。學術界和工業界都在討論如何提供一個trust-worthy computing環境,如何使計算機系統更具備manage-ability。Singularity認爲要解決這些問題,底層系統必須提供hardisolation,而之前人們都依賴的硬件virtual memory機制並沒有法提供高靈活性和良好性能。在.Net和Java等runtime出現以後,一個軟件級的解決方案成爲可能。

Singularity在microkernel的基礎上,經過.Net構建了一套type-safed assembly做爲ABI,同時規定了數據交換的message passing機制,從根本上防止了修改隔離數據的可能。再加上對application的安全性檢查,從而提供一個可控、可管理的操做系統。因爲.NetCLR的持續優化以及硬件的發展,加了這些檢查後的Singularity在性能上的損失相對於它提供的這些良好特性,還是能夠接受的。

這種設計目前還處於實驗室階段,是否能最終勝出,還須要有當年UNIX的機遇。

2. Virtual Machines

VMWare ["MemoryResource Management in VMware ESX Server",OSDI’02,Best paper award]

耳熟能詳的vmware,無需多說。

XEN [「Xen and the Art of Virtualization」, OSDI’04]

性能極好的VMM,來自Cambridge。

Denali [「Scaleand Performance in the Denali Isolation Kernel」, OSDI’02, UW]

爲internetservices而設計的application level virtual machine,在普通機器上可運行數千個VMs。其VMM基於isolation kernel,提供隔離,但並不要求資源分配絕對公平,以此減小性能消耗。

Entropia [「The Entropia VirtualMachine for Desktop Grids」, VEE’05]

要統一利用公司內桌面機器資源來進行計算,須要對計算任務進行良好的包裝,以保證不影響機器正常使用並與用戶數據隔離。Entropia就提供了這樣的一個計算環境,基於windows實現了一個application level virtual machine。其基本作法就是對計算任務所調用的syscall進行重定向以保證隔離。相似的工做還有FVM:「AFeather-weight Virtual Machine for Windows Applications」。

3. Design Revisited

 「Are Virtual Machine Monitors Microkernels Done Right?」,HotOS’05

這個題目乍聽起來,十分費解,其意思是VMMs其實就是Microkernel的正確實現方法。裏面詳細討論了VMM和Microkernel,是瞭解這兩個概念的極好參考。

Thirty Years Is Long Enough: Getting Beyond C」, HotOS’05

C多是這個世界上最成功的編程語言,但其缺點也十分明顯。好比不支持thread,在今天高度並行的硬件結構中顯得有點力不從心,而這方面則是functional programming language的長處,如何結合兩者的優勢,是一個很promising的領域。

4. Programming Model

Why Threads Are a Bad Idea

單使用thread結構的server是很難真正作到高性能的,緣由在於內存使用、切換開銷、同步開銷和保證鎖正確性帶來的編程複雜度等。

SEDA: An Architecture for Well-Conditioned, Scalable Internet Services」,OSDI’01

Thread很差,但event也無法解決全部問題,因而咱們尋找一個結合的方法。SEDA將應用拆分爲多個stage,不一樣stage經過queue相鏈接,同一個stage內能夠啓動多個thread來執行queue中的event,而且可經過反饋來自動調整thread數量。

Software Transactional Memory

若是內存能夠提供transaction語義,那麼咱們面對的世界將徹底兩樣,language, compiler, OS, runtime都將發生根本變化。雖然intel如今正在作hardware transactional memory,但估計可預見的未來不會商用,因此人們轉而尋求軟件解決方案。可想而知,這個方案沒法base在native assembly上,目前有C#,haskell等語言的實現版本。資料比較多,參見Wikipedia

5. Distributed Algorithms

Logical clock, [「Time,clocks, and the ordering of events in a distributed system」, Leslie Lamport, 1978]

這是一篇關於Logic clock, time stamp, distributed synchronization的經典paper。

Byzantine [「The ByzantineGenerals Problem」, Leslie Lamport, 1982]

分佈式系統中的錯誤各類各樣,有出錯就能停機的,有出錯了拖後腿的,更嚴重的是出錯了會作出惡意行爲的。最後的這種malicious behavior,就好像出征將軍的叛變,將會對系統形成嚴重影響。對於這類問題,Lamport提出了Byzantine failure model,對於一個由3f+1個replica組成的statemachine,只要叛變的replica數量小於等於f,整個state machine還能正常工做。

Paxos [「The part-time parliament」, Leslie Lamport, 1998]

如何在一個異步的分佈式環境中達成consensus,這是分佈式算法研究的最根本問題。Paxos是這類算法的頂峯。不過這篇paper太難了,聽說全世界就3.5人能看懂,因此Lamport後來又寫了一篇普及版paper:「Paxos Made Simple」 ,不過仍是很難懂。另外,也可參看Butler Lampson寫的「The ABCD’s of Paxos」(PODC’01),其中關於replicated state machine的描述會嚴重啓發你對並行世界本質的認識,圖靈獎的實力可不是蓋的。

這上面反覆出現了一個名字:Leslie Lamport,他在distributed computing這個領域挖坑不輟,終成一代宗師。關於他,也有幾則軼事。記得之前他在MSR的主頁是這麼寫的,「當我在研究logicalclock的時候,BillGates還穿着開襠褲(in diaper)…」(大意如此,原文如今找不到了)。另外,他在寫paper的時候,很喜歡把其餘牛人的名字變換一下編排進去。這可能也是他還沒拿到圖靈獎的緣由。[注1]

關於Lamport的其餘成就,還能夠參見這篇向他60歲生日獻禮的paper:「Lamport on mutual exclusion: 27 years of planting seeds」, PODC’01。

6. Overlay Networking, and P2P DHT

RON [「Resilient Overlay Networks」, SOSP’01]

RON描述瞭如何在應用層搭建一個overlay,以提供秒級廣域網網絡層故障恢復速度,而現有的經過路由協議來恢復通訊的時間至少在幾十分鐘。這種快速恢復特性和靈活性使得overlay networking如今被普遍應用。

Application Level Multicast

End System Multicast」, SigMetrics’00

Scalable Application Layer Multicast」, SigComm’02

關於ALM的paper不少,基本上都是描述如何搭建一個mesh network用以魯棒的傳輸控制信息,另外再搭建一個multicast tree用以高效傳輸數據,而後再根據多媒體數據的特色作一些layered delivery。前幾年出現的coolstream, pplive等系統都是這類系統的商業化產品。

P2P

P2P的出現改變了網絡。按照各類P2P網絡的結構,能夠分爲三種。

1.    Napster式,集中式目錄服務,數據傳輸Peer to peer。

2.    Gnutella式,經過在鄰居間gossip來查詢,也被稱爲unstructured P2P。

3.    DHT,與unstructured P2P不一樣的是,DHT進行的查詢有保證,若是數據存在,可在必定的hop數內返回。這個hop數一般爲logN,N爲系統節點數。

典型的DHT有CANChord,PastryTapestry等四種。這些研究主要在算法層面,系統方面的工做主要是在其上創建廣域網存儲系統。還有一些人在機制層面進行研究,例如如何激勵用戶共享、防止做弊等。

7. Distributed Systems

GFS/MapReduce/BigTable/Chubby/Sawzall

Google的系列paper,你們比較熟悉,再也不多說。在可查。

Storage

Distributed storage system的paper太多了。下面列出幾篇最相關的。

Chain Replication for Supporting High Throughput and Availability」, OSDI’04。

Dynamo: Amazon’s Highly Available Key-value Store」,SOSP’07。

BitVault: a Highly Reliable Distributed Data Retention Platform」, SIGOPS OSR’07。

PacificA: Replication inLog-Based Distributed Storage Systems」, MSR-TR。

Distributed Simulation

Simulating Large-Scale P2P Systems with the WiDS Toolkit」, MASCOTS’05。Distributed simulation有意思的地方是simulated protocol是distributed的,而這個simulation engine自己也是distributed的。Logical和physical的time和event交雜在系統中,須要仔細處理。

8. Controversial Computing Models

如今的軟件系統已經複雜到了人已經沒法掌握的程度,不少系統在發佈時都仍然帶着許多肯定性(deterministic)或非肯定性(non-deterministic)的bugs,只能不斷的patch。既然做爲人類,不夠精細的特性決定了咱們沒法把系統的bug fix乾淨,咱們只能從其餘角度入手研究一種讓系統在這使人沮喪的環境中仍能工做的方法。這就像一個分佈式系統,故障沒法避免,咱們選擇讓系統做爲總體來提供高可靠性。

如下3個即是典型表明。基本上,主要研究內容都集中於1) 如何正確保存狀態;2)如何捕捉錯誤並恢復狀態;3)在進行單元級恢復時,如何作到不影響總體。

Recovery Oriented Computing

Failure oblivious computing, OSDI’04

Treating Bugs as Allergies, SOSP’05

9. Debugging

系統很複雜,人類沒法從邏輯上直接分析,只能經過data mining的方法在宏觀上進行觀察。

Black box debugging[「Performance debugging for distributed systems of black boxes」, SOSP’03]

對大型系統的performance debugging很是困難,由於裏面的問題不少都是非肯定性的,並且沒法重現。只能經過對log的挖掘,找出配對的調用/消息以定位問題。

CP-miner [「A Tool for Finding Copy-paste and Related Bugs in Operating System Code」, OSDI’04]

不少人在重用代碼的時候,都使用copy-paste。但有時候簡單的CP會帶來嚴重的問題,例如局部變量的重名等。CP-miner經過分析代碼,創建語法樹結構,而後mine出這類錯誤。

---

注1:2014年3月19日,Lamport得到2013年度圖靈獎,也是Microsoft Research的第5位圖靈獎得到者。一代宗師,實至名歸,功德圓滿,可喜可賀。

相關文章
相關標籤/搜索