閱讀本文大概須要 4 分鐘。前端
昨天寫的一篇,關於架構師是作什麼的文章,以後就有讀者在後臺問起,說要想成爲架構師要具有那些方面的知識,那今天就讓咱們一塊兒來扒一扒。程序員
曾經有這麼個段子:面試
甲:我已經應聘到一家中型軟件公司了,今天上班的時候,全公司的人都來歡迎我。數據庫
乙:羨慕ing,都什麼人來了?編程
甲:CEO、COO、CTO、All of 程序員,還有會計、司機都來了。後端
乙:哇,他們過重視你了,人才啊,這麼多人迎接你!緩存
甲:沒有啊,就一我的!安全
乙:靠,#%¥$%...服務器
業內不少的創業型公司都是這樣,在公司發展前期,因成本有限,每每須要一我的身兼多職,也比較鍛鍊人。架構師有時也扮演着這樣的角色,身爲團隊的頂樑柱,公司的「IT架構靈魂人物」,天然大小事務均可能會涉及。微信
那什麼是架構師?
架構師英文 architect,這個詞源於建築學。軟件工程當中的架構師和建築工程當中建築師有許多相通之處,都是負責「產品」宏觀的架構設計。
在一個團隊裏,架構師充當了技術 Leader 的角色,不只要完成項目的總體設計和規劃,還要帶領技術團隊一塊兒解決實際問題,攻克技術難點,使得軟件的設計、開發、測試、發佈流程得以順利完成。
下面這張圖,表達了一個應用架構師(技術 Leader)在團隊當中的角色:
須要注意的是,這張圖中的架構師只是應用架構師,因此運維和 DBA 人員沒有納入到他的管轄範圍。同時,每一個公司的具體組織結構也不盡相同。
架構師都作些什麼?
1. 架構設計
架構師,顧名思義,第一職責就是在軟件設計階段,作好軟件「骨架」的設計。架構師須要把產品的需求翻譯成軟件工程的設計文檔,肯定各個系統與模塊的邊界,評估系統的量級。
2. 技術選型
從前端到後端,從緩存到數據庫,面對爲數衆多的第三方組件,架構師須要做出合理的選擇。
前端頁面選擇模板引擎仍是動靜分離?服務端選擇 Java 仍是 Go?
服務治理選擇 Dubbo 仍是 Spring Cloud?
消息隊列選擇 ActiveMQ 仍是 Kafka?
分佈式緩存選擇 Redis Cluster 仍是 Codis?
數據庫選擇 MySQL 仍是 Oracle?
全文檢索選擇 Solr 仍是 ES?
技術沒有絕對的好壞之分,關鍵看是否適用於公司的業務場景。
3. 管理非功能性需求
知足需求是項目開發和架構設計的根本,而管理非功能性需求則是項目的昇華。
在公司從 0 到 1 的創業階段,開發者更關注的是功能性需求,每每一個簡單粗暴的 MVC 項目就能夠搞定一切。當業務量級逐漸增大,用戶需求逐漸多樣化,非功能性需求的重要性就逐漸顯現。
非功能性需求有不少,好比:性能、可擴展性、可用性、安全性、可監控、靈活性、可維護等方面。
4. 攻克技術難題
架構師不僅須要關注宏觀的設計,也須要具備攻克技術細節的能力。在團隊開發過程當中遇到難以實現和優化的技術問題時,架構師須要發揮技術優點,解決系統的疑難雜症。
5. 技術人員的管理和指導
架構師不僅是一個技術大牛,也應該是一個好的管理者,在工做中須要把較大的項目和需求拆分一個個 Story,依照每一個人的狀況分配給研發團隊的成員,而且在必要的時候進行技術上的培訓指導。
6. 制定技術規格說明
架構師在項目開發過程當中,是技術權威。他須要協調全部的開發人員,與開發人員一直保持溝通,始終保證開發者依照它的架構意圖去實現各項功能。
架構師與開發者溝通的最重要的形式是技術規格說明書,它能夠是UML視圖、Word文檔,Visio文件等各類表現形式。經過架構師提供的技術規格說明書,保證開發者能夠從不一樣角度去觀察、理解各自承擔的子系統或者模塊。
怎樣才能成爲架構師?
1. 技術的深度和廣度
有一句話說得好,將軍就是更優秀的士兵。架構師做爲程序員中的將軍,首先須要有足夠的技術深度,同時須要普遍瞭解行業內的主流技術,以便更好地設計架構和技術選型。
2. 業務的理解
拋開業務談架構就是耍流氓。這一點對應用架構師來講尤爲重要。只有對業務有了充分的理解,才能對項目的設計和擴展作出合理的規劃。
3. 良好的溝通能力
架構師不僅是低頭作技術,更須要協調指揮團隊內的成員,也須要跨部門和產品、運營、項目經理等人員作及時有效的溝通,因此溝通能力是必不可少的。
架構師都有哪些種類?
1. 應用架構師
應用架構師是行業中數量最多的架構師,主要負責公司產品的技術架構。產品架構師須要對業務有足夠的理解,根據產品需求設計架構,在運營團隊的協助下評估量級,並管理項目的整個生命週期。
2. 中間件架構師
中間件架構師主要負責基礎框架、公共組件,通用服務的搭建。好比分佈式服務框架諸如 Dubbo,HSF;好比消息隊列諸如 RocketMQ,Kafka。在大型互聯網公司中,每每不是把開源框架簡單「拿來」,而是研發出符合自身業務的企業中間件。
3. 基礎設施架構師
基礎設施架構師負責服務器資源、網絡資源、數據庫等基礎設施的建設;以及持續集成工具、持續部署工具的搭建。
以上所說的三種,只是架構師最基本的分類。一些特殊領域也有着專門的架構師,好比網絡安全架構師、大數據架構師等等。
推薦閱讀
·END·
路雖遠,行則必至
本文原發於 同名微信公衆號「程序員的成長之路」,回覆「1024」你懂得,給個讚唄。
微信ID:cxydczzl