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