架構師接龍:黃冬&鄧毅

 

提問嘉賓:

黃冬,多年軟件開發、系統架構、系統運營的經驗。長期關注高可用性、高可擴展性的系統架構設計。主持設計和運行過多個大型高容量產品和系統。是中國FreeBSD Python 社區的發起者和積極參與者,也是國內啄木鳥( http://www..woodpecker.org.cn )社區的創始人之一。現在北京從事系統架構諮詢及系統運營外包的的創業。

 

回答嘉賓:

鄧毅,網易有道技術總監,負責新技術與應用研究團隊的工作,帶領很多有道核心技術的開發。清華大學計算機系博士學位,在模式識別、計算機視覺等領域有豐富的研究經驗。

 

 

黃冬: 互聯網在過去的數年中發展迅速,交換帶寬已經從10M 迅速提升到了萬 M ,而計算機的總線、 CPU 計算能力出現了很多瓶頸。經常會發現一臺服務器的帶寬有千 M 甚至更高,而使用的卻不足,在架構上有什麼考慮,讓一臺服務器能更多用起這樣的帶寬來?

鄧毅: 網絡技術的高速發展的確使得單臺服務器的帶寬有了很大的提高,這可以使得一些以前不太好做的事情更容易的實現。

一方面,對於後臺計算服務部分,高速的帶寬使得我們可以把更多的服務器通過以太網連接起來,進行大規模的分佈式運算,讓不同的機器處理大數據的不同部分,再通過網絡把數據進行彙總,從而得到以前需要大型機才能獲得的超大規模的計算能力,這讓我們可以從海量的數據中分析出更加有用的信息。此外,通過網絡,我們可以把多臺機器聯合起來組成分佈式的存儲系統,從而提高系統的存儲容量、訪問帶寬以及可靠性。

另一方面,在前端與用戶直接接觸的部分,由於帶寬的提升、網速的變快,用戶的客戶端程序可以更加頻繁的與服務器進行通訊,傳輸更多的數據,“雲計算”或者“軟件加服務”的模式,使得原來單機服務無法實現的功能或者服務質量得以實現。例如有道的詞典,當存在網絡連接的時候,客戶端的軟件會把查詢需求發送到服務器端,服務器端可以在一個非常大的詞庫中進行查詢,還可以做一些智能分析的操作,從而在不佔用用戶本地資源的情況下,大大提升用戶的體驗。另一個例子是類似“雲殺毒”之類的應用,通過網絡把數據傳回服務器進行殺毒,也是充分利用當今互聯網的帶寬。

 

 

黃冬: 作爲負載均衡的一種方式,基於四層、七層的負載均衡交換在很長的時間裏都是一種非常簡單和常用的解決方案,隨着服務器計算能力的提升,這種解決方案會發現越來越像是一個瓶頸點,有什麼更好的考慮來解決這樣的問題?

鄧毅: 當網站的流量不斷變大的時候,負載均衡交換的方法是一個較爲簡單的擴展系統容量的辦法,但是它畢竟是一個通用的解決方案,有一定的侷限性。所以,當這個方案遇到瓶頸的時候,就需要對業務流程和用戶訪問行爲進行更細緻的分析,找到可能的瓶頸。通常,解決這一些瓶頸的辦法來源於對一些冗餘運算或 I/O  的優化。例如,負載均衡有可能導致一些重複的運算(可能被均衡到不同的機器上去了),此時通過優化均衡方法、優化系統結構,可能可以在某個地方放入一個合適的緩存,保存中間結果,從而避免重複的運算,最終提高系統的吞吐。再進一步,如果還存在瓶頸,就可能需要在系統架構的層次做妥協,比如通過犧牲一定程度上事務的一致性換取更高的性能。

 

 

黃冬: 互聯網的即時計算越來越多,而這樣的計算越來越多的依賴大量的數據存儲,比如依據數千萬甚至更多的用戶使用習慣和用戶自身的使用歷史,得出該次搜索的排充。在這樣的計算面前是否有什麼巧妙的方法?

鄧毅: 使用大量的用戶行爲數據進行智能的分析,的確能夠得到一些非常有用的數據,從而提升用戶的體驗。當然,這裏需要大量的計算資源。

對於一些即時計算的場合,如果想享受這些數據帶來的好處,一個辦法就是把一些計算模型進行劃分:對於規模較大且較長時期不會變化從而可以預處理的部分,在後臺花費一些計算資源預先計算好,然後通過分佈式的只讀系統提供快速的讀取服務;中等規模變化較快的數據,可以建立快速計算流程,定時計算,並立即可以訪問;而與本次操作直接相關的數據,如用戶特徵、搜索詞等,纔是真正的即時計算,這時候需要考慮到足夠短的響應時間。

把計算模型分解成這樣的三個層次並不總是一件特別容易的時候,有時候甚至需要對計算模型進行必要少量的修改,在不大幅度犧牲準確度的情況下做一些簡化,從而可以讓不同類型的數據分開計算,最後再綜合一起處理。

 

 

黃冬: 垂直搜索引擎已經成爲各個網站及業務系統的必備功能,在這方面是否有一些良好的現成產品和架構方案?

鄧毅: 隨着互聯網用戶對於搜索這個概念的認識,垂直搜索日益成爲各個網站的一個重要功能。當用戶不知道某個東西在哪裏的時候,可能不願意一層層的去找,而會去搜。

相比通用搜索引擎,垂直搜索首先需要保證較低的開發成本,因爲網站最大的技術力量需要花在其自身的核心價值上;其次,這樣的引擎需要滿足一定的性能和質量要求,雖然不必與通用過的搜索引擎那樣快、那樣準;最後,網站通常有自己特有的一些東西,比如一些結構較爲特殊的數據需要搜索或者影響搜索排序,這就要求一個結構和功能可以方便定製的引擎。

互聯網上有不少優秀的開源項目, 我個人比較瞭解的有 Apache  的分佈式存儲與計算軟件 Hadoop 、搜索索引軟件  Lucene  等。

 

 

黃冬: 大量的用戶使用行爲記錄需要留存,而留存下的數據量非常大,對於相關的數據也要進行頻繁和複雜的業務計算,對於這樣的存儲有什麼解決方案嗎?對於這樣的分析型計算有什麼有效的架構 ?

鄧毅: 首先存儲方面,根據計算對於數據的讀寫需求,可以有兩種方案:

一種方式是採用適合流式處理的分佈式文件系統,如 HDFS GFS ,通過自動數據塊的備份等技術,可以保證數據的可靠存儲,同時利用大數據塊的存儲保證流式順序數據讀寫的高性能。當一些數據需要經常性的全量訪問,且這樣的訪問較容易流式的處理的時候,可以把這些數據存在這類文件系統中。

另一種方式是採用分佈式的 Key-Value  結構,如  HBase BigTable  等,他們的特點是可以支持隨機讀寫,而簡化的操作限制又使得它比數據庫更容易實現大規模的分佈式結構,因而適合計算中只需要讀寫海量數據中隨機一部分條目的情況。

運算框架只要是支持大規模分佈運算的都可以,例如前面提到的基於 Map/Reduce  的分佈式計算框架  Hadoop

(本文來自《程序員》雜誌0911期,更多精彩內容敬請關注0911期)

《程序員》雜誌官方網站:http://www.programmer.com.cn/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章