? 沒有設(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)師是多面手,在項目當(dāng)中起到連接管理與項目成員的重要角色躺涝。因此厨钻,在通往大神級的架構(gòu)師的道路上,你需要懂需求坚嗜、設(shè)計夯膀、代碼、部署苍蔬、架構(gòu)诱建、服務(wù)器、運維碟绑、調(diào)優(yōu)等等俺猿。
一個能擔(dān)負(fù)起企業(yè)級應(yīng)用的架構(gòu)師,腦海里常出現(xiàn)的詞會是這些:負(fù)載均衡格仲、集群押袍、分布式、高并發(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)一鍵部署插佛。是否需要負(fù)載均衡杠巡,可以選擇硬負(fù)載(就是前面說的f5),也可以用軟負(fù)載(nginx)雇寇。軟負(fù)載的方案簡單一點可以是apache+tomcat氢拥,需要考慮session復(fù)制,復(fù)雜一點選擇lvs+haproxy锨侯。打包發(fā)布嫩海,熟練使用maven,能建立自己的maven私服囚痴,能指導(dǎo)項目成員使用maven打包發(fā)布叁怪。
(6)安全:大多數(shù)安全在網(wǎng)絡(luò)層就解決了,但應(yīng)用的安全不容忽視深滚,比如需要考慮SQL注入奕谭,授權(quán)認(rèn)證耳璧,這些目前框架都能解決,重點的安全問題來自框架本身展箱,大多數(shù)應(yīng)用選擇框架都是開源的旨枯,如果團隊沒有能力修復(fù)漏洞只能等更新。
(7)其它方面:測試(自動化測試)混驰,版本管理(git or svn)攀隔,大數(shù)據(jù)(奇熱無比),人工智能(高大上)等等栖榨。
有人問昆汹,架構(gòu)師為什么還要寫代碼?我認(rèn)為婴栽,需要一如既往的寫满粗,但寫的目標(biāo)不一樣,理論水平和動手能力需要同時提高愚争。深度方面映皆,注重的設(shè)計思想和模式;廣度方面轰枝,對于前沿技術(shù)捅彻,要不懈的追求和鉆研累魔,這樣才能在未來技術(shù)架構(gòu)選型做出合理的決策凛剥。
支持原創(chuàng),轉(zhuǎn)載請標(biāo)明出處蓝撇。