比特網 發(fā)表于:14年05月09日 09:17 [轉載] 比特網
關于軟硬件誰為主導這個話題,套用一句諺語就是三十年河東三十年河西,風水輪流轉。軟件和硬件一定是相互促進、相互拆臺又相互搭臺的。一些之前被詬病的上層架構,或許若干年之后會被發(fā)現(xiàn)成了最合適的選擇,而再過若干年,又會變得不合適。軟件定義亦或是硬件定義,同樣也是這樣,硬件定義的結果是性能夠強但是不靈活,此時軟件定義便會開始醞釀翻盤,但是任何事情都有慣性,軟件“過度”定義之后,會發(fā)現(xiàn)很多事情搞不定,還得靠硬件來加速一下,此時開始進入硬件定義周期,然后循環(huán)往復。我們可以用幾個例子來窺探一下這種規(guī)律。
CPU和OS
一對不離不棄的夫妻,陰抱陽,陽抱陰。一開始沒有所謂中斷,更沒有所謂OS,只有順序執(zhí)行指令計算機和被寫死的程序,很不靈活。后來才有了OS,CPU先執(zhí)行OS這個大循環(huán)程序,然后載入所需要執(zhí)行的用戶程序執(zhí)行,執(zhí)行完退出,可以繼續(xù)載入其他程序執(zhí)行。哪怕最簡單的OS要想玩轉,CPU起碼也得至少提供IO和時鐘中斷機制。OS呱呱墜地,就得不斷長大,不斷地進化,單任務不靈活,就得多任務分時執(zhí)行,所有任務共享內存空間,導致了安全性問題,這就不得不引入虛擬內存技術,所以軟件越來越復雜,性能逐漸就不行了。此時CPU出來說話了,我來搞定虛擬內存,提供頁表極致,提供專用的控制寄存器,并提供專用的查表加速硬件部件。多任務分時OS的生產力被初步釋放,但是性能還是較差,還得依靠CPU搞定。CPU繼續(xù)發(fā)力,引入超線程技術,讓多個線程的代碼可以并發(fā)執(zhí)行,這得益于流水線的設計;為了能夠更好的實現(xiàn)線程并發(fā)執(zhí)行,后來繼續(xù)出現(xiàn)多核心多CPU的SMP技術, OS不得不做出改動。但是多CPU/核心并不是任何時候都很高效地并發(fā)多線程的,隨著軟件復雜度提升,線程同步、緩存一致性等問題導致需要大量狀態(tài)和數據同步,傳統(tǒng)的共享式的前端總線效率太低,所以不得不改為交換式Fabric比如IntelQPI,訪問內存經過太多跳器件效率上不去,所以也改為直連CPU分布式共享架構,這也是當今的形態(tài)。再往后會怎么發(fā)展,應該可以順著慣性往前推導一下,交換式Fabric的出現(xiàn),意味著CPU和CPU之間可以離得越來越遠,只要有足夠高速的鏈路連接,這一形態(tài)其實就是大型NUMA計算機的形態(tài)了。這一形態(tài)的輪回意味著軟件架構的變化,傳統(tǒng)領域需要高性能的場景不得不使用大型機、小型機,但它們是極其昂貴的——就是因為不開放,而且又不可能像互聯(lián)網領域一樣投入開發(fā)資源在分布式系統(tǒng)上定制化自己的應用。而開放式大型NUMA系統(tǒng)出現(xiàn)之后,可能之前的被“過度”定義了的分布式系統(tǒng)生態(tài)又會沉寂下來,這個循環(huán)進入新的周期紀元,在這個紀元里,曾經光鮮的分布式系統(tǒng)可能會被新生代工程師/架構師認為是一種很不可思議的“野路子”:“你看,以前這種架構,好坑爹啊!”。這就像我們現(xiàn)在回頭看之前的有些設計一樣,也會感覺到不可思議,那時候的人都這么“腦殘”么?恩,如果換了你回到那個時代,或許更腦殘:)。不管誰腦殘,一個事實是始終不變的,那就是硬件性能的絕對值是一直直線上升的,不管分布式還是集中式。