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