沒有設(shè)計的思想,你就不能成為一名架構(gòu)師。架構(gòu)師是一個能擼的了一手好代碼,畫的了一個漂亮的UML/原型,寫的了一篇技術(shù)文檔,更加能解決好項目關(guān)鍵技術(shù)的綜合人才。架構(gòu)師=前端工程師+后端程序員+系統(tǒng)分析師+關(guān)鍵技術(shù)解決+各種技術(shù)搭配+設(shè)計模式+部署調(diào)優(yōu)+其他,可見架構(gòu)師是多面手,在項目當中起到連接管理與項目成員的重要角色。因此,在通往大神級的架構(gòu)師的道路上,你需要懂需求、設(shè)計、代碼、部署、架構(gòu)、服務(wù)器、運維、調(diào)優(yōu)等等。
圖1 簡單系統(tǒng)架構(gòu)圖(來源于網(wǎng)絡(luò))
一個能擔負起企業(yè)級應(yīng)用的架構(gòu)師,腦海里常出現(xiàn)的詞會是這些:負載均衡、集群、分布式、高并發(fā)、高可用、易管理等等,粗略說來,應(yīng)具備以下知識技能:
(1)數(shù)據(jù)層:重點在于集群方案的選擇,比如MySQL集群,集群方案很多,需要選擇符合業(yè)務(wù)的方案,比如多主,主備,讀寫分離等等,是否還需要做高可用,是用lvs,還是zookeeper,是否需要例如mycat類中間件來管理數(shù)據(jù)庫或者做數(shù)據(jù)分片等等。?
(2)服務(wù)層:時髦一點,選擇dubbo,微服務(wù)讓團隊開發(fā)耦合度沒有那么高,各自關(guān)心各自的模塊,都以服務(wù)方式發(fā)布出去。傳統(tǒng)一點用springmvc+restful,在我看來,對于并發(fā)不高的系統(tǒng),沒有必要用dubbo。?緩存的選擇,涉及到文件緩存、數(shù)據(jù)庫緩存,可以用memcached、ehcache、redis。
(3)應(yīng)用層:框架太多,ssh,ssm,jfinal等等,選擇適合項目團隊的框架;UI界面,h5很美觀,但對于瀏覽器的兼容就把開發(fā)人員搞哭了,可以選擇成熟的ext或者easyui,或者最近很流行的node.js
(4)網(wǎng)絡(luò)層:多數(shù)開發(fā)人員都不用涉及,能了解下f5之類的就好。
(5)部署:是否需要用docker來部署,開源docker容器讓部署輕量化,很容易就可以擴展一個節(jié)點,對于高并發(fā)、伸縮性要求高的場景可以使用。docker的出現(xiàn),完全可以實現(xiàn)一鍵部署。是否需要負載均衡,可以選擇硬負載(就是前面說的f5),也可以用軟負載(nginx)。軟負載的方案簡單一點可以是apache+tomcat,需要考慮session復制,復雜一點選擇lvs+haproxy。?打包發(fā)布,熟練使用maven,能建立自己的maven私服,能指導項目成員使用maven打包發(fā)布。
(6)安全:大多數(shù)安全在網(wǎng)絡(luò)層就解決了,但應(yīng)用的安全不容忽視,比如需要考慮SQL注入,授權(quán)認證,這些目前框架都能解決,重點的安全問題來自框架本身,大多數(shù)應(yīng)用選擇框架都是開源的,如果團隊沒有能力修復漏洞只能等更新。
(7)其它方面:測試(自動化測試),版本管理(git or svn),大數(shù)據(jù)(奇熱無比),人工智能(高大上)等等。
有人問,架構(gòu)師為什么還要寫代碼?我認為,需要一如既往的寫,但寫的目標不一樣,理論水平和動手能力需要同時提高。深度方面,注重的設(shè)計思想和模式;廣度方面,對于前沿技術(shù),要不懈的追求和鉆研,這樣才能在未來技術(shù)架構(gòu)選型做出合理的決策。
支持原創(chuàng),轉(zhuǎn)載請標明出處。