架構師之路:一個架構師需要掌握的知識技能
沒有設計的思想,你就不能成為一名架構師。架構師是一個能擼的了一手好代碼,畫的了一個漂亮的UML/原型,寫的了一篇技術文檔,更加能解決好項目關鍵技術的綜合人才。架構師=前端工程師+後端程序員+系統分析師+關鍵技術解決+各種技術搭配+設計模式+部署調優+其他,可見架構師是多面手,在項目當中起到連接管理與項目成員的重要角色。因此,在通往大神級的架構師的道路上,你需要懂需求、設計、代碼、部署、架構、伺服器、運維、調優等等。
489034603
簡單系統架構圖 (加圖片下面數字入學習交流羣)
一個能擔負起企業級應用的架構師,腦海里常出現的詞會是這些:負載均衡、集群、分散式、高並發、高可用、易管理等等,粗略說來,應具備以下知識技能:
(1)數據層:重點在於集群方案的選擇,比如MySQL集群,集群方案很多,需要選擇符合業務的方案,比如多主,主備,讀寫分離等等,是否還需要做高可用,是用lvs,還是zookeeper,是否需要例如mycat類中間件來管理資料庫或者做數據分片等等。
(2)服務層:時髦一點,選擇dubbo,微服務讓團隊開發耦合度沒有那麼高,各自關心各自的模塊,都以服務方式發布出去。傳統一點用springmvc+restful,在我看來,對於並發不高的系統,沒有必要用dubbo。緩存的選擇,涉及到文件緩存、資料庫緩存,可以用memcached、ehcache、redis。
(3)應用層:框架太多,ssh,ssm,jfinal等等,選擇適合項目團隊的框架;UI界面,h5很美觀,但對於瀏覽器的兼容就把開發人員搞哭了,可以選擇成熟的ext或者easyui。
(4)網路層:多數開發人員都不用涉及,能了解下f5之類的就好。
489034603
(5)部署:是否需要用docker來部署,開源docker容器讓部署輕量化,很容易就可以擴展一個節點,對於高並發、伸縮性要求高的場景可以使用。docker的出現,完全可以實現一鍵部署。是否需要負載均衡,可以選擇硬負載(就是前面說的f5),也可以用軟負載(nginx)。軟負載的方案簡單一點可以是apache+tomcat,需要考慮session複製,複雜一點選擇lvs+haproxy。打包發布,熟練使用maven,能建立自己的maven私服,能指導項目成員使用maven打包發布。
(6)安全:大多數安全在網路層就解決了,但應用的安全不容忽視,比如需要考慮SQL注入,授權認證,這些目前框架都能解決,重點的安全問題來自框架本身,大多數應用選擇框架都是開源的,如果團隊沒有能力修復漏洞只能等更新。
(7)其它方面:測試(自動化測試),版本管理(git or svn),大數據(奇熱無比),人工智慧(高大上)等等。
有人問,架構師為什麼還要寫代碼?我認為,需要一如既往的寫,但寫的目標不一樣,理論水平和動手能力需要同時提高。深度方面,注重的設計思想和模式;廣度方面,對於前沿技術,要不懈的追求和鑽研,這樣才能在未來技術架構選型做出合理的決策。
推薦閱讀:
※有哪些提高學習專註度的方法?
※如果永遠離開現在的工作,你有什麼技能能讓你混口飯吃?
※經管出身的你都有哪些技能?
※一篇文章教你如何練就好聲音?
※軟體公司工作閑余時間可以學什麼?