世界是并發(fā)的,我們周圍的一切都是異步和事件驅動的。在最近召開的倫敦Qcon大會上,Joe Duffy在他的主題演講里宣稱,未來每一個開發(fā)者都需要同并發(fā)和云打交道。其中的核心在于通信,它對于并發(fā)和分布式系統(tǒng)都至關重要。
Duffy曾任微軟的語言和編譯器工程總監(jiān),他認為分布式的就是并發(fā)的;本質上就是很多件事在同一時間一起發(fā)生。唯一的區(qū)別在于,在分布式系統(tǒng)中,事情發(fā)生時,彼此相距較遠,比如在不同的處理器、服務器或者數(shù)據(jù)中心。這個差異很重要,尤其對于通信來說。使用內存共享還是采用把時延控制在毫秒級的網(wǎng)絡通信會帶來不同的約束和能力,也會影響系統(tǒng)架構。
并發(fā)編程和分布式編程在早期的計算機科學中有著相同的根源。在早期,問題總是由異步帶來的。Duffy認為,Butler Lampson在構建分布式系統(tǒng)方面是最偉大的思想家之一,尤其在可靠性方面,他也強烈推薦了Lampson的論文,即1983年發(fā)表的“系統(tǒng)設計”。Duffy宣稱,在2000年之后多核CPU開始出現(xiàn)至今,在并發(fā)編程領域我們沒有發(fā)明任何東西。相反,我們回過頭去找早期的想法和發(fā)表的論文。
在未來,Duffy期望看到分布式編程的回歸,有越來越多設計良好的分布式系統(tǒng)使得系統(tǒng)看起來更像經(jīng)典的并發(fā)系統(tǒng)。我們已經(jīng)學了不少關于構建并發(fā)系統(tǒng)的東西,他則強調了七條關鍵經(jīng)驗:
先思考通信。它必須是任何分布式應用架構的一部分。Ad-hoc通信會帶來可靠性的問題。而Actor模式和隊列則是好的范例。 概要設計很有用,但是不要盲目相信它。服務器總是以跟客戶端不同的速度發(fā)生變化,Duffy以Internet為例說明了即便如此也可以工作的很好。 安全很重要,但是很難做到。安全性的缺乏可能會導致資源競爭、死鎖或者未定義行為的出現(xiàn)。Duffy認為,更好的安全形式是做好隔離。如果無法做到,你需要做到不可改變。如果這也做不到,你需要采用標準同步機制。 在設計時為失敗做好準備,因為總會有錯誤發(fā)生的。Duffy認為,我們的設計應該考慮可復制和重啟能力,還說明了,故障恢復對于一個可靠的并發(fā)系統(tǒng)來說是必需的。 結構應該反映因果關系。一連串的事件引發(fā)的某個行為在并發(fā)系統(tǒng)里可能是非常復雜的。有相關上下文可以簡化對這些事件和行為的跟蹤。 編碼結構采用并發(fā)模式,以使其更容易理解系統(tǒng)。Duffy的兩個最喜歡的模式是Fork-Join和Pipeline。 少說,多用聲明和反應式編程。聲明和反應模式善于把難題交給編譯器和框架來處理。他認為Serverless是這個想法在只有一個事件和一個動作時的特殊實例。Duffy在最后總結強調了,未來是分布式的,他期望在分布式編程方面見到更多有啟發(fā)的先鋒。我們當下的編程語言對于并發(fā)支持的很好,他期望編程語言能漸漸對于分布式和云編程也支持的更好,最好能把他提到的七點內建進去。