新聞中心
編輯注:本文作者 @林仕鼎 為百度首席架構師。

網站建設哪家好,找創(chuàng)新互聯(lián)!專注于網頁設計、網站建設、微信開發(fā)、微信小程序、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了平昌免費建站歡迎大家使用!
原文地址:http://hi.baidu.com/linsd99/blog/item/9de5a90ad17770d03ac7632c.html
今天@Laruence 挖了個坑,我試著來灌點水。純粹個人觀點,不準確也不全面。
架構 (architecture) 這個概念確實不好定義。首先,它很虛,不像代碼可以用源文件“自證”。其次,它很泛,好像跟什么都相關,開發(fā)、測試、部署甚至運營等各階段都有其影子。然后,它好像還在變,在計算機發(fā)展的各個階段(Mainframe/PC/Cloud)都感覺不太一樣。而且,在不同的領域也都有不同的反映。
所以,一千個人心中有一千個哈姆雷特,一千個工程師眼里也能有一千種架構。在2012年2月1日晚11點左右(向Pkubuntu致敬),我的看法可以用兩個例子說明。以建筑為例,設計師想方案,建筑師出圖紙,工人施工同時項目管理貫穿始終,那圖紙就是架構。如果說到烤鴨,骨頭和肉是代碼,鴨架子就是架構,而過程管理將其變成烤鴨。
如果要更正式點定義,架構就是model和pattern,從而把code串成system。而其中最重要的就是design principles (設計原則),即為什么這個問題要用這個而非那個。更文藝點,再結合點美學,也可以叫作design philosophy (設計哲學或理念)。
然后我們來看什么是model和pattern,這兩個具體的定義我還沒想出來。先說一下比較,model偏宏觀,而pattern偏微觀;model重抽象描述,而pattern重具體實現(xiàn)。比如,你的系統(tǒng)有一個服務端和一個客戶端,那么client/server就是model,而client與server之間的交互方式則是pattern,比如RPC/message、同步/異步,比如用滑動窗口來組織請求與應答等等。當然,這和系統(tǒng)的尺度有關。如果你zoom in到服務端,此時的model可能就是模塊的組織關系,而pattern則是調用方式,比如用function call還是event等。
具體到領域上,我覺得主要有三類架構問題(不包括硬件):
1. 軟件架構,其典型用例是企業(yè)級軟件,通過合理的功能抽象,提取出公共組件和通用流程,進行最大化的功能復用 (reuse)。我稱其為軟件的可維護性問題。
2. 系統(tǒng)架構,其巔峰是OS,重點是解決資源的分配與復用 (multiplexing)。
3. 大規(guī)模分布式架構,主要應用在Cloud中,重點是大規(guī)模系統(tǒng)的資源整合、快速交付和運維問題。
1有《Design Patterns》一書,2有很多OS、并行程序設計的書可供參考 (或者應該寫本《Parallel Patterns》?),3目前我還不知道有什么書可參考。
那為什么架構會很泛又多變呢?這就牽扯到開發(fā)過程了。我們再引入一個方法論 (methodology) 的概念。傳統(tǒng)軟件工程那一套不必說了,互聯(lián)網服務常用迭代式的開發(fā)方法 (現(xiàn)在又叫敏捷),這就是方法論。我個人的做法通常有三種:divide and conquer,modeling and iterate,back-of-envelop-calculation and simulation,按問題的規(guī)模、難易程度、熟悉程度、項目的組織方式等等選擇不同做法。這就又提到架構師這個角色了,找時間再談。
總而言之,相對于代碼和功能這些更實際的東西,以上所說的都是偏虛偏抽象的事情,我稱其為開發(fā)工藝問題,包括架構和方法論兩個層面。不同時代的系統(tǒng),其組成不同,對開發(fā)工藝的要求也不同。在Cloud時代,可歸結為三點:軟件架構和開發(fā)過程支持快速迭代,系統(tǒng)架構與分布式架構支持大規(guī)模用戶和數(shù)據(jù)分析,然后由數(shù)據(jù)分析驅動迭代。
網站名稱:百度首席架構師眼中的架構
新聞來源:http://fisionsoft.com.cn/article/coicipi.html


咨詢
建站咨詢
