架構(gòu)師是一個(gè)充滿挑戰(zhàn)的職業(yè),知識面的寬窄往往決定著一個(gè)架構(gòu)師的架構(gòu)能力
知識面的寬廣對于一名出色的架構(gòu)師來說是必不可少的技能,也許很多人對架構(gòu)的理解還停留在設(shè)計(jì)模式,重構(gòu),SOA等等的軟件層面,然而這僅僅是非?;镜臇|西,架構(gòu)師的腦子里不光需要知道讓軟件如何高效的運(yùn)行,還需要知道如何去結(jié)合網(wǎng)絡(luò),存儲,甚至一些文件系統(tǒng)的特性,比如GFS,NFS,XFS,NTFS等等,而且架構(gòu)師還需要知道一些編程語言的特性,C,C++,Java,PHP,Python,Lisp,JS等等,現(xiàn)在是一個(gè)混合編程的時(shí)代,只了解一種語言,即使再精通也會使你在架構(gòu)系統(tǒng)的時(shí)候受到很大的局限性。
再有一點(diǎn),架構(gòu)師需要對數(shù)據(jù)庫技術(shù)有深刻的認(rèn)識,因?yàn)楝F(xiàn)今是一個(gè)信息時(shí)代,大量的信息都是需要存儲并檢索的,數(shù)據(jù)庫設(shè)計(jì)的不好,將會嚴(yán)重影響系統(tǒng)的性能,而這一點(diǎn)往往會被我們的設(shè)計(jì)人員忽略,他們只知道遵守那些范式而不會結(jié)合數(shù)據(jù)的特性去設(shè)計(jì)數(shù)據(jù)庫。
下面我詳細(xì)介紹成為架構(gòu)師所必須要學(xué)習(xí)的知識點(diǎn):
一、分布式架構(gòu)
分布式架構(gòu)是 分布式計(jì)算技術(shù)的應(yīng)用和工具,目前成熟的技術(shù)包括J2EE, CORBA和.NET(DCOM),這些技術(shù)牽扯的內(nèi)容非常廣.

二、工程化專題
1、Maven
在如今的互聯(lián)網(wǎng)項(xiàng)目開發(fā)當(dāng)中,特別是Java領(lǐng)域,可以說Maven隨處可見。Maven的倉庫管理、依賴管理、繼承和聚合等特性為項(xiàng)目的構(gòu)建提供了一整套完善的解決方案,可以說如果你搞不懂Maven,那么一個(gè)多模塊的項(xiàng)目足以讓你頭疼,依賴沖突就會讓你不知所措,甚至搞不清楚項(xiàng)目是如何運(yùn)行起來的
2、Git
一個(gè)專業(yè)的程序員,怎么能不掌握Git呢?版本控制領(lǐng)域,已經(jīng)發(fā)展了一段時(shí)間,從古老的CVS,到SVN集中式管理,再到現(xiàn)在的Git。由于Git的分布式、everything is local、分支等諸多特性,讓越來越多的項(xiàng)目開始從SVN遷移到Git進(jìn)行管理。
3、Jenkins
Jenkins是一個(gè)開源的持續(xù)集成工具,應(yīng)用Jenkins搭建持續(xù)集成環(huán)境,可以進(jìn)行自動(dòng)構(gòu)建、自動(dòng)編譯和部署,非常方便。
在服務(wù)器比較少的情況下,Jenkins的優(yōu)勢并不明顯,但是隨著項(xiàng)目發(fā)展,服務(wù)器數(shù)量的增加,Jenkins的優(yōu)勢就會凸顯出來,可以很好的提高效率,減少很多人工操作。
公司的項(xiàng)目自動(dòng)自動(dòng)[圖片上傳中...(工程化專題.jpg-fbd9b4-1513502814534-0)]
化部署是采用 Jenkins,并且編寫自動(dòng)構(gòu)建的shell腳本。
由于項(xiàng)目是前后端分離,前端和后端都是單獨(dú)部署的, 后端 采用 JAVA編寫,使用Maven管理多模塊和項(xiàng)目依賴, 前段使用 npm 管理項(xiàng)目組件依賴, webpack進(jìn)行打包。
4、Sonar
Sonar是一個(gè)用于代碼質(zhì)量管理的開源平臺,用于管理Java源代碼的質(zhì)量。通過插件機(jī)制,Sonar 可以集成不同的測試工具,代碼分析工具,以及持續(xù)集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通過不同的插件對這些結(jié)果進(jìn)行再加工處理,通過量化的方式度量代碼質(zhì)量的變化,從而可以方便地對不同規(guī)模和種類的工程進(jìn)行代碼質(zhì)量管理。
同時(shí) Sonar 還對大量的持續(xù)集成工具提供了接口支持,可以很方便地在持續(xù)集成中使用 Sonar。
此外,Sonar 的插件還可以對 Java 以外的其他編程語言提供支持,對國際化以及報(bào)告文檔化也有良好的支持。

三、微服務(wù)架構(gòu)
1、微框架
微服務(wù)架構(gòu)(MSA)是一種架構(gòu)概念,旨在通過將功能分解到各個(gè)離散的服務(wù)中以實(shí)現(xiàn)對解決方案的解耦。你可以將其看作是在架構(gòu)層次而非獲取服務(wù)的類上應(yīng)用很多SOLID原則。 用通俗的話來講,就是為了高度解耦軟件之間的依賴性,使每個(gè)獨(dú)立的模塊都能夠單獨(dú)測試,單獨(dú)運(yùn)維,最大限度的提高軟件的開發(fā)流程。
2、Docker虛擬化
Docker有著小巧、遷移部署快速、運(yùn)行高效等特點(diǎn),但隔離性比服務(wù)器虛擬化差:不同的集裝箱屬于不同的運(yùn)單(Docker上運(yùn)行不同的應(yīng)用實(shí)例),相互獨(dú)立(隔離)。但由同一個(gè)庫管人員管理(主機(jī)操作系統(tǒng)內(nèi)核),因此通過庫管人員可以看到所有集裝箱的相關(guān)信息(因?yàn)楣蚕聿僮飨到y(tǒng)內(nèi)核,因此相關(guān)信息會共享)。

四、性能優(yōu)化
性能優(yōu)化,簡而言之,就是在不影響系統(tǒng)運(yùn)行正確性的前提下,使之運(yùn)行地更快,完成特定功能所需的時(shí)間更短。性能問題永遠(yuǎn)是永恒的主題之一,而優(yōu)化則更需要技巧。

五、源碼分析
源碼主要功用有如下2種作用:
1.生成目標(biāo)代碼,即計(jì)算機(jī)可以識別的代碼。
2.對軟件進(jìn)行說明,即對軟件的編寫進(jìn)行說明。為數(shù)不少的初學(xué)者,甚至少數(shù)有經(jīng)驗(yàn)的程序員都忽視軟件說明的編寫,因?yàn)檫@部分雖然不會在生成的程序中直接顯示,也不參與編譯。但是說明對軟件的學(xué)習(xí)、分享、維護(hù)和軟件復(fù)用都有巨大的好處
我們在寫程式時(shí),有不少時(shí)間都是在看別人的代碼。
例如看小組的代碼,看小組整合的守則,若一開始沒規(guī)劃怎么看,不管是參考也好,從開源抓下來研究也好,為了了解箇中含意,在有限的時(shí)間下,不免會對龐大的源代碼解讀感到壓力。

六、電商項(xiàng)目實(shí)戰(zhàn)
無需贅述,如果沒有實(shí)戰(zhàn)經(jīng)驗(yàn),如何成為一名架構(gòu)師?

從一個(gè)程序員到架構(gòu)師是一個(gè)很大的變化,架構(gòu)師需要從大的方面考慮,而不只是考慮這個(gè)模塊該用哪種設(shè)計(jì)模式去開發(fā)。
總之,想要成為架構(gòu)師,需要有耐心,不斷學(xué)習(xí),拓寬自己的視野,不僅僅局限于自己眼前的項(xiàng)目