Part.1 什麼是架構?
簡單來講,架構就是一個考察對象的內部結構。數據庫
這個內部結構是【以組件爲視角】來進行考慮的,架構的含義包括了【組件以及組件之間的關係】。安全
另外一方面,架構的含義還包括考察對象內部的【關鍵機制】。微信
什麼是組件?
組件一般是開發或部署的一個單元。多線程
根據考察對象的大小,組件的粒度也有所區別。架構
如咱們如今常說的大數據平臺,其系統內部由不少子系統組成,如權限系統、數據採集系統、數據處理系統、數據分析系統、數據存儲系統、數據管理系統、數據展現系統,這一個個子系統即可稱爲大數據平臺的組件。併發
而將組件視角再下沉,如數據採集系統中又分爲爬蟲組件、數據清洗轉換組件,其中又可能用到了橫貫整個大數據平臺的日誌管理組件。app
這是開發系統內部的一個結構,而從部署上來講,大數據平臺通常是由3臺及以上的多點系統部署而組成。負載均衡
在對內或對外開放大數據計算資源時,又由權限系統進行資源分配。其中的單例大數據平臺又能夠做爲一個單獨的組件。數據庫設計
組件與組件間的關係
這是架構要考慮的重要因素。性能
來自系統外部的請求一般是由多個組件協做完成的。
系統內部的結構是否良好,很大程度上取決於組件之間的關係。
關鍵機制
所謂關鍵機制,是指影響到系統可用性、安全性、性能等重要非功能特性的一些技術方案,如技術選型、關鍵設計、處理流程等等。
Part.2 什麼是架構設計?
那什麼是架構設計?
咱們先看這樣一段定義,是指【以需求分析爲輸入,經過架構師的分析,產出架構設計資料,用於指導後續概要設計、詳細設計、開發、測試、部署、上線運行】。
架構設計是否是就是概要設計?
架構設計是以組件視角來思考系統如何分解,並定義分解出來的組件之間的關係。
而概要設計則是從功能模塊視角對系統進行分解,並定義這些功能模塊之間的關係。
全部的功能模塊都要有歸屬的組件,所以應先作架構設計,再作概要設計。
它與代碼設計又有什麼區別?
代碼設計有一張表的模型就能夠開始作了,相似於在一面牆上定位一幅畫,掛歪了再修正很容易。
架構設計則是造一個房子。移動一幅畫很容易,移動一面牆則是一個徹底不一樣性質的事了。
三個磚瓦匠的故事想必很多人都聽過。
有一我的去採訪三個磚瓦匠,他問:「大家是在作什麼?」
第一我的答:「砌磚,混口飯吃」。
第二我的答:「砌牆啊,賺錢」。
第三我的答:「蓋房子,建設漂亮的大樓」。
作架構設計即是蓋樓。
開發一間房子,房子中有各類各樣的組件,畫好房間的圖紙,將窗戶、樑柱、牆、水電燃氣通道等按照既定的位置組裝起來。就如咱們的一個單例系統。這已經能夠說是一次架構設計了。
而蓋樓,則須要將組件的視角再上升一層。每一個房子都是一個組件,要考慮地基、水管鏈接、上下層承重。
甚至再上升到小區,咱們還要考慮綠化、容積、車位等等。
架構設計是不容易更改的,猶如地基,想蓋更高的樓,就要打更深的地基,因此在設計時,必定要考慮可擴展、可兼容性。
可是,架構真的是設計出來的嗎?咱們回頭再說說,架構的設計與演進之旅。
而誰來作這些架構設計的事呢?接下來講說什麼是架構師吧。
Part3.誰能稱爲架構師?
架構師就是在其領域內可以全局把握的人,可以給出其負責範圍內的整體設計,並能解決關鍵問題、指導其餘人員落實設計。
架構師又分爲:
系統架構師、數據架構師、基礎設施架構師、應用架構師。
系統架構師是系統或產品線的負責人,是一個負責理解和管理並最終確認和評估非功能性系統需求(性能、安全、可用性、可擴展性、可移植性),給出開發規範,搭建系統實現的核心架構,對整個軟件架構、關鍵構件、接口進行整體設計並澄清關鍵技術的高級技術人員。
【在沒有架構師這個崗位的公司,通常會由項目經理或技術經理、研發負責人等人員負責其所有或部分職責。】
架構師也都不是憑空而來的,通常會由團隊中的【技術高手】進化而來。
在《架構師修煉之道(一)技術高手的困惑與發展》中,咱們也說了技術人的幾個發展方向。
那麼架構師應該有些什麼具體的能力呢?
架構師應該有什麼能力呢?
一、 認清本身,認識崗位,理解工做內容。
架構師應當對架構師崗位有着清晰的認識,對架構工做的內容有着深入的理解。
知道本身能作什麼。
知道本身在作什麼。
知道本身怎麼作。
二、 承上啓下,掌控全局。
架構設計上接需求分析、下接概要設計,是整個軟件工程中很是重要的一環,將決定整個系統實現的質量,架構設計對後續全部工程環節都有影響。
三、 輸入需求,輸出設計。
運用規範的架構設計方法論,產出標準的架構設計資料。不要隨意發揮,弄一些毫無章法的產物出來。
若是公司當前沒有相關標準,能夠自行設計一套,而後要求你們共同遵照。
四、 知識普遍,兼具深度。
須要具有普遍的知識面,並在某些方面具備必定深度。例如數據庫設計、多線程併發、負載均衡等。
對系統相關的技術棧有全面清晰的認識,並能夠解決疑難雜症或給出藥方(方向)。
五、 架構複用。
掌握常見的架構模式,在遇到相似問題時,可直接複用。
六、 軟技能。
架構所涉及的方方面面較多,所以須要有良好的溝通能力。
七、 keep learning,保持學習,飽含熱情。
技術不斷髮展,業務不斷變化,須要保持學習熱情,立於不敗之地。
Part4.總結
咱們如今對以上的架構部分簡單作一個總結:一個系統的架構就是指在系統運行期間的實際內部架構,它是各類組件的一個組成,架構設計就是對這種組件間關係的書面描述,而架構師就是負責描述這種關係的人。
怎樣成爲一個優秀的架構師?
我我的的定義是:格局要大,作事要沉。視野要遠,腳下要實。
具體的作法即是在作決策的時候,不僅是作一個技術架構,須要關心業務實際要解決的問題,可是又不能頭疼醫頭腳疼醫腳,眼光要關注將來。
在成本、技術實現、將來演化之間,咱們須要不斷作平衡。
最後,在我的而言,咱們應當對於新生的事務應當有所瞭解,對於須要用到的新技術能隨時沉下心去鑽研,對接觸的業務應能抓住核心目標,強力推動系統的落地與演化。
本文部份內容參考《軟件體系結構》、《領域設計模型》。
本文分享自微信公衆號 - 架構師之殤(ysistrue)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。