前段時間網上最流行的三個問題:" 我是誰?"、" 我從哪裏來?"、" 要到哪裏去?」。這三個問題不僅是網上流行的問題也是哲學家們最常思考的問題,但不僅是哲學家,咱們每一個人都有本身對這三個問題的認知。那麼若是想要成爲架構師,咱們也須要面臨瞭解什麼是架構師?架構師應該具有什麼樣的能力?前端
一樣的三個問題:web
首先是找準本身定位:我是誰?在哪裏?數據庫
其次是怎樣作好架構師:我要作什麼?設計模式
最後如何搭建架構師知識體系:我該怎麼作?安全
以上三個問題能夠總結爲:目標(我要作什麼),方法(計劃), 執行/行動(我該怎麼作)網絡
架構師的成長之路:架構
一.什麼是架構師?併發
什麼是架構師,這是一個架構話題裏永恆的問題。由於每一個公司所處的階段不一樣,公司對架構師的定位也有所不一樣,業務模式、應用場景也都不同。因此對架構的要求也不同。分佈式
在公司初創階段:工具
業務場景和需求的邊界很難把握,有時候根本不須要架構師,產品須要快速的更新迭代和變現,需求頻繁更新,這個時候須要的就是如何快速實現。固然若是公司成長之後,這個階段就是欠下的技術債,埋下的坑,若是人員流動很頻繁,後期系統維護成本是很是巨大的。
在公司穩定成長階段:
業務模式和應用場景邊界都已經比較清晰,這個時候最須要架構師能對線上業務進行模塊劃分,系統拆分重構,並作好相關高可用的措施,以保證系統的穩定、安全、高效地運行。
不一樣的行業,對架構師的要求也不一樣,好比電商業務和AI領域,從架構到業務場景,徹底是兩個物種。
在百度百科裏面這樣定義:系統架構師是一個既須要掌控總體又須要洞悉局部瓶頸並依據具體的業務場景給出解決方案的團隊領導型人物。一個架構師得須要足夠的想像力,能把各類目標需求進行不一樣維度的擴展,爲目標客戶提供更爲全面的需求清單。
具體來講是一個確認和評估系統需求,給出開發規範,搭建系統實現的核心構架,並澄清技術細節、掃清主要難點的技術人員。主要着眼於系統的「技術實現」。所以架構師應該是特定的開發平臺、語言、工具的大師,對常見應用場景能立刻給出最恰當的解決方案,同時要對所屬的開發團隊有足夠的瞭解,可以評估本身的團隊實現特定的功能需求須要的代價。系統架構師負責設計系統總體架構,從需求到設計的每一個細節都要考慮到,把握整個項目,使設計的項目儘可能效率高,開發容易,維護方便,升級簡單等。
架構師實際上就是軟件的整體設計師。打個通俗的比方好比某個工程總設計師,相似三峽工程的總設計師。
架構師的造成必定是在實踐中積累起來的,而並不是上了幾回培訓班,讀了幾本書就能夠成功的,架構師是在工程實踐中培養出來的!
二.架構師的做用是什麼?
架構師在整個軟件系統開發過程當中都起着重要的做用,並隨着開發進程的推動而其職責或關注點不斷地變化。
1.按軟件開發過程維度來講:
需求階段:軟件架構師主要負責理解和管理非功能性系統需求,好比軟件的可維護性、性能、複用性、可靠性、有效性和可測試性等等。此外,架構師還要常常審查和客戶及市場人員所提出的需求,確認開發團隊所提出的設計;
架構設計階段:架構師負責對整個系統架構設計,制定開發規範、開發計劃,指導整個開發團隊完成這個計劃。
開發階段:架構師則成爲詳細設計者和代碼編寫者的顧問,而且常常性地要舉行一些技術研討會、技術培訓班等;
測試和交付階段:協調作好相關測試和部署。
維護階段:軟件架構師就開始爲下一版本的產品是否應該增長新的功能模塊進行決策。
2.按職能維度:
1 確認需求
架構師要懂得用戶需求,理解用戶真正想要什麼,這使得架構師必需要和分析人員不斷溝通,反覆確認需求規格說明書,以此來保證他精準清楚用戶需求。
項目經理劉先生在受訪時說:「架構師會與不少人溝通,例如開發人員,例如咱們項目經理,有時甚至是用戶自己。架構設計的目的很明確,目的是什麼呢?挖掘用戶需求。」
2 系統分解
在架構師承認需求規格說明書後,架構師已明確用戶需求是什麼,這時候就要看架構師的分解能力了。
系統分解包括縱向分解和橫向分解:
橫向分解是對系統分解成不一樣的邏輯層,肯定層與層之間的關係。是指基於技術架構層次進行的人員角色分工和任務分解。常見的分層:
應用層:主要負責具體的業務邏輯處理
服務層:提供可複用的服務
數據層:負責數據的存儲和訪問
分層注意事項:①必須合理規劃層次邊界和接口;②禁止跨層次的調用及逆向調用。
縱向分解是將不一樣的功能和服務分割開來,包裝成高內聚低耦合的模塊單元,有助於軟件開發和維護,還便於不一樣模塊的分佈式部署,提升網站的併發處理能力和功能擴展能力。
3 技術選型
在系統分解後,架構師會最終造成軟件總體架構。接下來,架構師的職責是技術選型。
前端到底用瘦客戶端仍是富客戶端呢?數據庫是用MySQL仍是MSSQL又或是Oracle呢?在瞭解用戶需求後,分解完系統後,技術選型是很是重要的環節,提出各個方向,再進行評估。不過,不少人都覺得架構師是有決定權的,其實不是,架構師沒有拍板的權力,最終由項目經理來決定。
架構師在技術選型階段會提供參考信息給項目經理,項目經理再從預算、進度、人力、資源等各方面狀況來權衡,最終確認。
4 制定技術規格說明
架構師在項目開發過程當中是「靈魂人物」,而且要具有協調組織能力和懂得人員分工。
在制定技術規格說明階段,架構師要協調起全部的開發人員,架構師一般會用技術規格說明書與開發人員保持溝通,讓開發人員能從各個視角去觀測、理解他們負責的模塊或者子系統,確保開發人員可以按照架構意圖實現各項功能。
三.架構師分類
其實架構師就是個title,每一個公司稱呼均可能不同,和架構概念同樣。
軟件架構師:
軟件架構師是軟件行業中的一種新興職業,工做職責是在一個軟件項目開發過程當中,將客戶的需求轉換爲規範的開發計劃及文本,並制定這個項目的整體架構,指導整個開發團隊完成這個計劃。主導系統全局分析設計和實施、負責軟件構架和關鍵技術決策的人員,好比這些架構師的title多是JAVA架構師、Python架構師、LAPM架構師等等。
web架構師:
web架構師是網站系統、功能、模塊、流程的設計師,架構師,比如是高樓大廈的設計人員,一般一座大廈在建以前,都先由設計師將藍圖描繪出來,包括其形狀、結構、尺寸、材料等等,而後建築工程師帶領工人們按照藍圖將大廈一層一層地建起來。
架構師也要看在什麼樣的公司,中小公司不少架構師都是全能的。一般公司規模和體系越大,分工會越細。大致能夠這麼分類:
解決方案架構師、系統架構師、平臺架構師、業務架構師、網絡架構師、移動架構師、前端架構師、大數據架構師等等。
什麼是架構師?架構師應該具有什麼樣的能力?
四.架構師具有素質能力
• 精通某項技術,可以從本質上類比,舉一反三其餘技術
• 對等全部技術,只有合適和不合適,沒有喜歡和不喜歡。
• 視野開闊,瞭解不一樣技術的優缺點。知道使用某項開源技術實現某項業務需求,可以辨別重複造輪子。
• 精通設計模式,但又不泛用。
• 把系統拆分紅多個子系統或模塊。模塊之間儘可能鬆耦合,使得原先串行的開發任務變得能夠並行發展。
• 能清楚系統的瓶頸在什麼地方, 不判定位技術難度,開發進度,性能,內存等個方面的瓶頸。不斷調整骨幹力量解決瓶頸,在風險爆發以前消除隱患。
• 能作好前瞻性設計,預判到需求可能產生的變化。
架構師團隊內作的事情
•溝通能力:各個方面都要了解,人人想法及規劃都要知道,瞭解產品思想,用了什麼方法實現的
•組織能力:組織推進各類技術的改進及功能的完善
•談判表明:左右兩難的時候的調解人
•設計模塊及業務:經過圖形化設計發現開發後纔會發現的業務問題
•成本規劃:經過過往經驗評估成本及步伐
•願望收集:不斷收集建議及願望,一步步實現
•傳播佈道:不斷參與行業交流,提升理論及技術知識科普分享團隊
總結
以上就是架構應該具有的能力以及什麼是架構師。架構師的造成並非看幾本書,或是看幾節視頻就能夠的。這須要在工做中積累大量的工做經驗,以及不斷的學習,才能夠的。因此想成爲架構師的小夥伴們,努力加油吧。