講師秀之7:林仕鼎談架構設計與架構師-CSDN.NEThtml
摘要:他自稱「西二旗跨界架構師」,官方身份是百度大數據首席架構師,他喜歡在微博和博客上討論技術、詩歌和社會熱點,他就是林仕鼎。他不斷地對架構師這份工做作着總結。架構
【CSDN綜合】林仕鼎自稱是個「喜歡釐清概念的人」,在他的博客、CSDN舉行的TUP活動中以及QCon中一次一次進行了剖析。運維
林仕鼎在博客中寫道,系統架構是一個工程和研究相結合的領域,既注重實踐又依賴理論指導,入門容易但精通很難,有時候還要講點悟性,很具備「僞科學」的特徵。要在此領域進階,除了要不斷設計並搭建實際系統,也要注意方法論和設計理念的學習和提煉。對於工程師來講,到必定階段後每每會遇到成長瓶頸。要突破此瓶頸,須要在所屬技術領域更深刻學習,瞭解本領域的問題本質、方法論與設計理念、發展歷史等。異步
架構 (architecture) 這個概念確實很差定義。首先,它很虛,不像代碼能夠用源文件「自證」。其次,它很泛,好像跟什麼都相關,開發、測試、部署甚至運營等各階段都有其影子。而後,它好像還在變,在計算機發展的各個階段(Mainframe/PC/Cloud)都感受不太同樣。並且,在不一樣的領域也都有不一樣的反映。分佈式
因此,一千我的心中有一千個哈姆雷特,一千個工程師眼裏也能有一千種架構。以建築爲例,設計師想方案,建築師出圖紙,工人施工同時項目管理貫穿始終,那圖紙就是架構。若是說到烤鴨,骨頭和肉是代碼,鴨架子就是架構,而過程管理將其變成烤鴨。ide
若是要更正式點定義,架構就是model和pattern,從而把code串成system。而其中最重要的就是design principles (設計原則),即爲何這個問題要用這個而非那個。更文藝點,再結合點美學,也能夠叫做design philosophy (設計哲學或理念)。佈局
而後咱們來看什麼是model和pattern,這兩個具體的定義我還沒想出來。先說一下比較,model偏宏觀,而pattern偏微觀;model重抽象描述,而pattern重具體實現。好比,你的系統有一個服務端和一個客戶端,那麼client/server就是model,而client與server之間的交互方式則是pattern,好比RPC/message、同步/異步,好比用滑動窗口來組織請求與應答等等。固然,這和系統的尺度有關。若是你zoom in到服務端,此時的model可能就是模塊的組織關係,而pattern則是調用方式,好比用function call仍是event等。學習
具體到領域上,我以爲主要有三類架構問題(不包括硬件):測試
軟件架構,其典型用例是企業級軟件,經過合理的功能抽象,提取出公共組件和通用流程,進行最大化的功能複用 (reuse)。我稱其爲軟件的可維護性問題。
系統架構,其巔峯是OS,重點是解決資源的分配與複用 (multiplexing)。
大規模分佈式架構,主要應用在Cloud中,重點是大規模系統的資源整合、快速交付和運維問題。
那爲何架構會很泛又多變呢?這就牽扯到開發過程了。咱們再引入一個方法論 (methodology) 的概念。傳統軟件工程那一套沒必要說了,互聯網服務經常使用迭代式的開發方法 (如今又叫敏捷),這就是方法論。我我的的作法一般有三種:divide and conquer,modeling and iterate,back-of-envelop calculation and simulation,按問題的規模、難易程度、熟悉程度、項目的組織方式等等選擇不一樣作法。
存儲和分佈式
林仕鼎認爲程序組織很是重要,對於存儲這部分來講,它須要考慮包括結構、數據特色、訪問模式、接口性質四大方面的問題。林仕鼎對這四大方面的問題做了詳細闡述,指出每個問題都面臨若干選擇,好比結構問題就有:File、Object、Table的選擇,而後在一樣一個結構中,還要面臨是實時讀寫、批量寫實時讀之類的訪問模式的選擇,接下來不一樣訪問模式對系統帶來的影響,數據大小的分佈、佈局等。林仕鼎表示,正是由於有這麼多因素的影響,致使開發者在設計系統時,必須要考慮不少方面。只有在全面掌握這些信息的狀況下,才能設計出符合實際要求的系統。
存儲帶來的一些矛盾包括:延遲與吞吐、隨機與順序、規模與實時性。通常來講,系統的規模越大,實時性的保證難度也就越大。要化解矛盾,須要在包括B+tree、Log-based兩類模型建設的基礎上作到弱化需求、發掘局部性、組合模型。
在談到分佈式時,林仕鼎表示其實分佈式的目標很簡單,只有兩個:擴容和容錯。要實現這些目標須要採用Partition和Replication兩種方法,而協議設計、調試是難點。
服務架構和計算模型
在進行系統設計時,全部系統都會面臨一個極限值,即在給定系統資源狀況下,所能提供的最大請求數,這裏須要作一個特別設計,以防請求數突破極限值。若是沒有做特別設計,在極端狀況下,吞吐量超過一個點,那整個系統將崩潰。
服務架構的目標包括系統的高吞吐能力和在極限壓力下的穩定輸出。要實現這兩個目標離不開服務架構的兩類模型:屬於基本類型的threadpool + queue和屬於複雜類型的event-driven。爲了保證整個系統的穩定性,還須要注意:減少資源分配粒度並主動調度、Flow Control、負載反饋,Throttling和延遲截斷這四個方面。
計算模型包含不少不一樣特色,通常來說分爲三類:數據密集型、計算密集型、通信密集型(即傳統HPC)。林仕鼎表示,首先要分析系統的特色,找到適合的模型。
架構師的三板斧
林仕鼎認爲,在不少狀況下,在怎麼作系統、服務、數據倉庫等問題上,開發者面臨的具體問題都千差萬別。此時,須要創建一些模型,或者有比較好的實踐原則。做爲一個架構師,首先是要很是深刻地瞭解本身的業務,再根據業務特色運用一些現行作法。林仁鼎總結了「架構師三板斧」,做爲本次演講總結與各位分享。
架構師三板斧內容以下:
看清需求:Tradeoff、沒法知足全部需求、無須同等對待全部需求、發現根本需求、抽象、降維、瞭解需求隨時間的變化、選擇方法、把握節奏。
選擇方法:測算 -> 模擬 -> 實現、分解 vs 迭代、設計模式。
把握節奏:目標與可達路徑、按期產出。
林仕鼎認爲在Cloud時代,架構可歸結爲三點:軟件架構和開發過程支持快速迭代,系統架構與分佈式架構支持大規模用戶和數據分析,而後由數據分析驅動迭代。