架構師一直是程式設計師「羨慕且追求」的高度,今天來說說我(奈學教育ceo:孫玄)眼裡優秀的架構師該如何定義。畢竟我也曾經是一名架構師:
在開始今天的話題之前我說乙個和我前公司p9現在已經是p10的對話。
問題是這樣的他說公司中介軟體架構師不熟悉公司業務,很多事落地不了,非常的疑惑。他最近主要任務就是和這些架構師聊天解惑:)
接著他說了乙個模擬的故事大概是這樣的,
我們(架構師)要建設一條高速公路,來分別看看公路建造者(架構師)和司機(業務研發)的視角。
1,建造者 他們選用最好的沙子 水泥 更好的設計圖紙和操作流程保證質量和處理異常情況(比如出入口提示,超車,緊急停車帶)
2,司機同志 他們關心什麼?
司機關心路寬麼,有堵車可以提前告知麼。
司機關心路平整麼?當然關心,關心。
引出乙個的問題:司機(業務研發)關心用最好的水泥麼 ?
想象你是司機(業務研發)你你關心嗎?
a,關心
b,不關心
我覺得一名優秀的架構師,在設計系統時需要有以下這四項關鍵能力:「平衡取捨、預判未來、抽象思維、容錯機制」。
平衡取捨
乙個架構本質上總會有優有劣,它不可能是完美的、普適的,也不存在乙個架構在 a 場景能用,在 b 場景也最適用的情況,所以就需要我們準確判斷,作出取捨。
我們可以根據具體的業務需求來調整架構,也就是以當前的業務需求,選出最匹配的架構。另外,架構師還需要根據現狀衡量好需求和資源、效率和安全、時延和吞吐等等之間的關係,做出判斷。
預判未來
架構師需要具備一定的未來的預判能力,因為架構的調整週期通常比較長。這也是程式設計師和架構師之間乙個很大的區別所在。
程式設計師負責乙個專案,在當前的網際網路大背景下,專案的迭代週期非常快,基本以天或週為單位,最多乙個月。如果發現不合適的**,需要重構,程式設計師基本也能在幾天或幾周內就能完成重構。
而架構的調整是相對漫長的過程,可能需要數月,甚至要幾年。因此,在設計架構時就需要架構師具備預判意識,對很多不確定的事情做出預判和選擇,諸如未來訪問量會增長到什麼量級,會不會產生新的業務,這些會對系統產生什麼樣新的要求等等。
抽象思維
除了懂得取捨和擁有預判意識,架構師在設計架構時還要掌握抽象的方法,不能鬍子眉毛一把抓,要做好分層和區隔。
因為架構師面對的是乙個很龐大的系統,為了避免過早陷入細節,不要去看各個元件的細節,而是把它們的角色定義下來之後,再分塊來思考。而在看每個分塊時,其他分塊都可以視為乙個抽象的概念,另外,也需要考慮復用的問題。
我們把對話機械人抽象成乙個通用的介面,再將它分為乙個個小機械人。這樣一來,每個小機械人只需要關注自己的業務模組就行了。然後,我們會在前端再引入乙個路由機械人,由路由機械人根據當前對話管理的狀態,來判斷當前的對話應該交給哪個小機械人去完成。這就是典型的分層的思想。
容錯機制
相比程式設計師,架構師面對的環境要惡劣的多,因為系統更複雜了,出錯的概率也增加了,每個節點、每個功能都有可能出錯,所以這就需要架構師為錯誤而設計(design for failure),事先提前做好解決方案。
除了應用出錯,還有可能產生資料丟失的情況,這個可以通過備份來預防。
另外,如果出現故障,該怎樣做到快速恢復呢?我們現在普遍的做法是不修只換,因為如果要修復乙個異常狀態,可能修復後還會出現連帶問題,而如果能通過技術手段,刪除已出現的故障,換乙個全新的系統,就能夠保證它迅速恢復到正常狀態。
優秀的架構師應該具備哪些能力
合格的運營式運維工程師 首先我們總結下,關於談到何為一名合格的運維運營工程師,大概就是幾點 具備一定運營技能 要有運營意識 主動性要強 學習能力要跟得上。而學習能力完全是乙個人綜合能力的體現,這一點個人覺得客觀性佔絕大部分。最近發生的一系列事情,我頗有感觸,合格與不合格的運營工程師就差在這裡,接下來...
架構師思維
引言 架構師應該關注的點,持續更新中 模組結構 大多數的工程都分為服務端和控制端,這樣的好處顯而易見,比如更新了控制端,服務端不收影響,更新了服務端,控制端不受影響 功能抽象 將專門的功能抽象出來,比如將消耗mq訊息的工程抽象出來,這樣有什麼好處呢,當訊息處理不過來了,可以簡單增加消費mq的模組,不...
架構師應該掌握哪些設計模式
今天去參加了北京博文視點出版社在上海辦的乙個open party http www.douban.com event 11051981 其中有兩個topic給我很大的啟發,乙個是溫昱的 架構 設計的事實與謬誤 另乙個是老趙 jeffz cn 的 web應用中的快取 當然,我的收穫未必是他們兩位想要傳...