架構師修煉之道(二)——架構?設計?架構師?

妖生發表於2019-07-22

Part.1 什麼是架構?

簡單來說,架構就是一個考察物件的內部結構。

這個內部結構是【以元件為視角】來進行考慮的,架構的含義包括了【元件以及元件之間的關係】。

另一方面,架構的含義還包括考察物件內部的【關鍵機制】。

什麼是元件?

元件通常是開發或部署的一個單元。

根據考察物件的大小,元件的粒度也有所區別。

如我們現在常說的大資料平臺,其系統內部由很多子系統組成,如許可權系統、資料採集系統、資料處理系統、資料分析系統、資料儲存系統、資料管理系統、資料展示系統,這一個個子系統便可稱為大資料平臺的元件。

而將元件視角再下沉,如資料採集系統中又分為爬蟲元件、資料清洗轉換元件,其中又可能用到了橫貫整個大資料平臺的日誌管理元件。

這是開發系統內部的一個結構,而從部署上來說,大資料平臺一般是由3臺及以上的多點系統部署而組成。

在對內或對外開放大資料計算資源時,又由許可權系統進行資源分配。其中的單例大資料平臺又可以作為一個單獨的元件。

元件與元件間的關係

這是架構要考慮的重要因素。

來自系統外部的請求通常是由多個元件協作完成的。

系統內部的結構是否良好,很大程度上取決於元件之間的關係。

關鍵機制

所謂關鍵機制,是指影響到系統可用性、安全性、效能等重要非功能特性的一些技術方案,如技術選型、關鍵設計、處理流程等等。

Part.2 什麼是架構設計?

那什麼是架構設計?

我們先看這樣一段定義,是指【以需求分析為輸入,通過架構師的分析,產出架構設計資料,用於指導後續概要設計、詳細設計、開發、測試、部署、上線執行】。

架構設計是不是就是概要設計?

架構設計是以元件視角來思考系統如何分解,並定義分解出來的元件之間的關係。

而概要設計則是從功能模組視角對系統進行分解,並定義這些功能模組之間的關係。

所有的功能模組都要有歸屬的元件,因此應先做架構設計,再做概要設計。

它與程式碼設計又有什麼區別?

程式碼設計有一張表的模型就可以開始做了,類似於在一面牆上定位一幅畫,掛歪了再修正很容易。

架構設計則是造一個房子。移動一幅畫很容易,移動一面牆則是一個完全不同性質的事了。

三個磚瓦匠的故事想必不少人都聽過。

有一個人去採訪三個磚瓦匠,他問:“你們是在做什麼?”

第一個人答:“砌磚,混口飯吃”。

第二個人答:“砌牆啊,賺錢”。

第三個人答:“蓋房子,建設漂亮的大樓”。

做架構設計便是蓋樓。

開發一間房子,房子中有各種各樣的元件,畫好房間的圖紙,將窗戶、樑柱、牆、水電燃氣通道等按照既定的位置組裝起來。就如我們的一個單例系統。這已經可以說是一次架構設計了。

而蓋樓,則需要將元件的視角再上升一層。每個房子都是一個元件,要考慮地基、水管連線、上下層承重。

甚至再上升到小區,我們還要考慮綠化、容積、車位等等。

架構設計是不容易更改的,猶如地基,想蓋更高的樓,就要打更深的地基,所以在設計時,一定要考慮可擴充套件、可相容性。

但是,架構真的是設計出來的嗎?我們回頭再說說,架構的設計與演進之旅。

而誰來做這些架構設計的事呢?接下來說說什麼是架構師吧。

Part3.誰能稱為架構師?

架構師就是在其領域內能夠全域性把握的人,能夠給出其負責範圍內的總體設計,並能解決關鍵問題、指導其他人員落實設計。

架構師又分為:

系統架構師、資料架構師、基礎設施架構師、應用架構師。

系統架構師是系統或產品線的負責人,是一個負責理解和管理並最終確認和評估非功能性系統需求(效能、安全、可用性、可擴充套件性、可移植性),給出開發規範,搭建系統實現的核心架構,對整個軟體架構、關鍵構件、介面進行總體設計並澄清關鍵技術的高階技術人員。

【在沒有架構師這個崗位的公司,一般會由專案經理或技術經理、研發負責人等人員負責其全部或部分職責。】

架構師也都不是憑空而來的,一般會由團隊中的【技術高手】進化而來。

在《架構師修煉之道(一)技術高手的困惑與發展》中,我們也說了技術人的幾個發展方向。

那麼架構師應該有些什麼具體的能力呢?

架構師應該有什麼能力呢?

  1. 認清自己,認識崗位,理解工作內容。

架構師應當對架構師崗位有著清晰的認識,對架構工作的內容有著深刻的理解。

知道自己能做什麼。

知道自己在做什麼。

知道自己怎麼做。

  1. 承上啟下,掌控全域性。

架構設計上接需求分析、下接概要設計,是整個軟體工程中非常重要的一環,將決定整個系統實現的質量,架構設計對後續所有工程環節都有影響。

  1. 輸入需求,輸出設計。

運用規範的架構設計方法論,產出標準的架構設計資料。不要隨意發揮,弄一些毫無章法的產物出來。

如果公司當前沒有相關標準,可以自行設計一套,然後要求大家共同遵守。

  1. 知識廣泛,兼具深度。

需要具備廣泛的知識面,並在某些方面具有一定深度。例如資料庫設計、多執行緒併發、負載均衡等。

對系統相關的技術棧有全面清晰的認識,並可以解決疑難雜症或給出藥方(方向)。

  1. 架構複用。

掌握常見的架構模式,在遇到類似問題時,可直接複用。

  1. 軟技能。

架構所涉及的方方面面較多,因此需要有良好的溝通能力。

  1. keep learning,保持學習,飽含熱情。

技術不斷髮展,業務不斷變化,需要保持學習熱情,立於不敗之地。

Part4.總結

我們現在對以上的架構部分簡單做一個總結:一個系統的架構就是指在系統執行期間的實際內部架構,它是各種元件的一個組成,架構設計就是對這種元件間關係的書面描述,而架構師就是負責描述這種關係的人。

怎樣成為一個優秀的架構師?

我個人的定義是:格局要大,做事要沉。視野要遠,腳下要實。

具體的做法便是在做決策的時候,不只是做一個技術架構,需要關心業務實際要解決的問題,但是又不能頭疼醫頭腳疼醫腳,眼光要關注未來。

在成本、技術實現、未來演化之間,我們需要不斷做平衡。

最後,在個人而言,我們應當對於新生的事務應當有所瞭解,對於需要用到的新技術能隨時沉下心去鑽研,對接觸的業務應能抓住核心目標,強力推進系統的落地與演化。


本文內容參考《軟體體系結構》、《領域設計模型》。


如果你對我的文章有什麼想法,歡迎評論。

如果你想及時看到我的最新文章,請關注我的公眾號。
架構師修煉之道(二)——架構?設計?架構師?

如果你想跟我一起探討,圍觀我的學習日常,歡迎加入我的星球。
架構師修煉之道(二)——架構?設計?架構師?

相關文章