20160817(公開課)通往架構(gòu)師之路--全棧工程師

不想當(dāng)架構(gòu)師的程序員不是好程序員

首先我們看什么是架構(gòu)師可款?架構(gòu)師應(yīng)該具備哪些能力育韩?

大家都知道很多公司都有架構(gòu)師這個(gè)職位,但是我想告訴大家的是看一個(gè)人是不是架構(gòu)師不是看職位闺鲸,而是看他所具備的能力以及正在做的事筋讨,所以有架構(gòu)師頭銜的人不一定具備架構(gòu)師的能力,而不是架構(gòu)師的人卻在做著架構(gòu)師的工作摸恍。

架構(gòu)師類似于建筑行業(yè)的總設(shè)計(jì)師悉罕,通常在一個(gè)軟件項(xiàng)目中,架構(gòu)師需要完成軟件項(xiàng)目中所有技術(shù)環(huán)節(jié)的設(shè)計(jì)立镶,架構(gòu)師雖然說不用親自編寫所有代碼壁袄,但是架構(gòu)師會對項(xiàng)目中所有運(yùn)用的技術(shù)環(huán)節(jié)了如指掌。

因此架構(gòu)師既可以是一個(gè)很簡單的工作媚媒,也可以是一個(gè)具備超高難度的工作嗜逻。而具體的難度系數(shù),取決于具體的項(xiàng)目類型缭召。就好像蓋一個(gè)兩層小樓栈顷,和一個(gè)跨海大橋,對架構(gòu)師的要求截然不同恼琼。


1.png

比如說我們現(xiàn)在目標(biāo)任務(wù)是開發(fā)一個(gè)自主品牌的mp3播放器妨蛹,我們的架構(gòu)師需要懂硬件,比如單片機(jī),傳感器晴竞,聲音設(shè)備蛙卤,再利用匯編或者C語言,來對該電子系統(tǒng)編寫相應(yīng)的程序噩死,就可以完成這樣的一套mp3程序開發(fā)颤难。

但軟件的架構(gòu)師在不斷進(jìn)化著,在計(jì)算機(jī)發(fā)明的初期已维,幾乎大部分應(yīng)用程序都是直接針對硬件來編寫的行嗤,但是這樣會導(dǎo)致程序的通用性差,所以才出現(xiàn)了操作系統(tǒng)垛耳。在目前市場上流通的大部分軟件都是工作在操作系統(tǒng)之上的栅屏。

因此我們可以看見第二張圖的這樣的架構(gòu)。

2.png

編寫這樣的應(yīng)用程序需要我們架構(gòu)師了解硬件堂鲜,了解操作系統(tǒng)栈雳,并且能夠使用C,C++缔莲,VB哥纫,等編程語言調(diào)用操作系統(tǒng)SDK完成軟件功能開發(fā)。
由操作系統(tǒng)去跟硬件系統(tǒng)打交道痴奏,這樣對于開發(fā)人員的要求就降低了很多蛀骇,同時(shí)應(yīng)用程序的通用性會變得更好厌秒。

再看看第三張圖

3.png

隨著計(jì)算機(jī)軟件的發(fā)展秃嗜,我們發(fā)現(xiàn)很多軟件都是在和數(shù)據(jù)打交道痢缎,用戶數(shù)據(jù)需要記錄到系統(tǒng)中,同時(shí)應(yīng)該能快速的檢索數(shù)據(jù)概疆,因此在我們的單機(jī)應(yīng)用中出現(xiàn)了數(shù)據(jù)庫這么一類應(yīng)用程序雕欺。
在需要存儲數(shù)據(jù)岛马,搜書數(shù)據(jù),以及對數(shù)據(jù)加工處理統(tǒng)計(jì)的時(shí)候可以把這些工作交給數(shù)據(jù)庫去處理屠列。

做這類應(yīng)用軟件的開發(fā)工程師啦逆,對硬件和操作系統(tǒng)了解即可。需要他精通數(shù)據(jù)庫笛洛,并且能用任意語言調(diào)用系統(tǒng)提供的SDK夏志。

在看看第四張圖

4.png

這個(gè)是C/S應(yīng)用程序架構(gòu),這里的客戶端架構(gòu)與第三張圖單機(jī)應(yīng)用類似苛让,唯一不同的是在數(shù)據(jù)的來源的上作出了改變沟蔑。原本的單機(jī)應(yīng)用程序數(shù)據(jù)存在本地,但是一個(gè)軟件系統(tǒng)如果有多人使用多個(gè)客戶端連接的時(shí)候狱杰,不可能把數(shù)據(jù)庫再放到莫一臺客戶機(jī)中瘦材。

解決方案就是讓數(shù)據(jù)庫通過網(wǎng)絡(luò)對客戶端提供數(shù)據(jù)服務(wù)。直接通過客戶端遠(yuǎn)程連接直接操作數(shù)據(jù)庫這種方式也是不可以的仿畸,因?yàn)閿?shù)據(jù)庫如果直接對外提供數(shù)據(jù)服務(wù)食棕,那么凡是能連接到該網(wǎng)絡(luò)的用戶都可以繞過客戶端操作數(shù)據(jù)庫,這樣數(shù)據(jù)安全就得不到保障错沽。

因此出現(xiàn)了Server簿晓,我們通過服務(wù)器端程序來操作數(shù)據(jù)庫,客戶端程序只能選擇與服務(wù)器端交互千埃,所有的業(yè)務(wù)操作由服務(wù)器端完成憔儿,這種模式就是C/S架構(gòu)。

完成C/S架構(gòu)的架構(gòu)師就比做單機(jī)應(yīng)用的架構(gòu)師難度大很多放可,不僅要懂得單機(jī)應(yīng)用開發(fā)所需要的知識谒臼,還需要掌握網(wǎng)路數(shù)據(jù)庫系統(tǒng),以及web服務(wù)耀里,socket服務(wù)等技術(shù)蜈缤。

C/S應(yīng)用程序架構(gòu)存在一些缺點(diǎn):需要更新所有已安裝的客戶端版本,而且會出現(xiàn)多個(gè)版本并存的情況备韧,后期維護(hù)代價(jià)極高劫樟,而且很不方便痪枫。

因?yàn)檫@些原因织堂,就出現(xiàn)了B/S這些架構(gòu)的軟件叠艳。

5.png

如圖所示,我們可以看到此架構(gòu)的服務(wù)端與第四張的服務(wù)器端基本一致易阳。
主要區(qū)別是B/S架構(gòu)的應(yīng)用程序不需要安裝客戶端程序附较,而是使用大部分的計(jì)算機(jī)都有安裝的瀏覽器來作為系統(tǒng)前端來與用戶交互,而瀏覽器加載的內(nèi)容全部來由服務(wù)端輸出.

這樣B/S的架構(gòu)師難度相對來說比C/S架構(gòu)師低很多潦俺,并且有諸多的成熟的解決方案拒课,比如:java的javaee架構(gòu),微軟的asp.net架構(gòu)事示,完全開源的lamp架構(gòu)早像,都是很成熟的解決方案。

這樣架構(gòu)的優(yōu)點(diǎn)在于因?yàn)榇嬖诖罅康某墒斓慕鉀Q方案肖爵,只需要一臺可連入網(wǎng)絡(luò)的服務(wù)器卢鹦,就可以讓整個(gè)系統(tǒng)運(yùn)轉(zhuǎn)起來。開發(fā)速度快劝堪,運(yùn)營成本低冀自。這種解決方案被廣泛接納。所以做這樣架構(gòu)的程序員數(shù)量很多秒啦,也因此往往不被當(dāng)做架構(gòu)師來看待熬粗。但是做這樣架構(gòu)的應(yīng)用程序設(shè)計(jì)也架構(gòu)設(shè)計(jì)中的一種。

我們來看第6張圖

6.png

從2010年以后余境,智能手機(jī)在國內(nèi)大量普及驻呐,幾年時(shí)間誕生了數(shù)百萬的App與手機(jī)游戲,往往一個(gè)項(xiàng)目既擁有自己的網(wǎng)站葛超,又擁有獨(dú)立的APP暴氏,而且作為一個(gè)整體的系統(tǒng),iOS绣张,安卓答渔,與網(wǎng)頁的數(shù)據(jù)應(yīng)該是一致的。

那么要做到這樣的架構(gòu)設(shè)計(jì)的話侥涵,我們需要讓我們的ios沼撕,安卓客戶端共用我們的服務(wù)端,這樣我們的多端才能保持?jǐn)?shù)據(jù)高度一致芜飘。

服務(wù)器端的結(jié)構(gòu)沒有太大的變化务豺,但是軟件設(shè)計(jì)的方式產(chǎn)生了變化,原本B/S架構(gòu)中由服務(wù)端向?yàn)g覽器輸出相應(yīng)的html嗦明,css笼沥,js等靜態(tài)內(nèi)容即可,但如果涉及到移動(dòng)互聯(lián)網(wǎng)應(yīng)用開發(fā),我們會將我們的應(yīng)用程序規(guī)范化奔浅,把前端和后端完全區(qū)分開來馆纳。

服務(wù)器端提供數(shù)據(jù)交互服務(wù),并編寫相應(yīng)的接口汹桦,移動(dòng)端進(jìn)行接口調(diào)用鲁驶,并完成界面數(shù)據(jù)填充以負(fù)責(zé)用戶交互,即便是移動(dòng)端瀏覽器舞骆,也應(yīng)采用這種方式來交互钥弯。

接下來看第7張圖

7.png

它和6張圖比較類似,但多出來幾塊督禽。我們把橫線以上的部分叫服務(wù)端脆霎,橫線以下的叫前端。我們在移動(dòng)互聯(lián)網(wǎng)絡(luò)時(shí)代狈惫,經(jīng)常會涉及到自己的平臺與第三方平臺的交互绪穆,我們的應(yīng)用在接入支付寶,微信虱岂,微博等功能后玖院,還會涉及到與第三方平臺的功能交互。

通常需要我們通過服務(wù)器發(fā)起請求調(diào)用第三方的API第岖,并且為第三方的平臺保留回調(diào)的接口难菌,因此在制作這樣的應(yīng)用程序開發(fā)的時(shí)候,架構(gòu)師除了要掌握移動(dòng)互聯(lián)網(wǎng)絡(luò)的技術(shù)外蔑滓,還需要對第三方提供的功能與規(guī)范以及相應(yīng)接口有充分的了解郊酒。

來看第8張圖

8.png

如果只是從功能實(shí)現(xiàn)來說,能夠按照第7張圖完成架構(gòu)設(shè)計(jì)的架構(gòu)師键袱,已經(jīng)能滿足需求燎窘。但是在實(shí)際運(yùn)營的項(xiàng)目中,除了有功能需求以外蹄咖,還要有質(zhì)量需求褐健,比如:網(wǎng)站的負(fù)載能力,網(wǎng)絡(luò)并發(fā)連接數(shù)澜汤,系統(tǒng)的數(shù)據(jù)吞吐量蚜迅,項(xiàng)目是否具有擴(kuò)容能力等。

之前所展示給大家的所有架構(gòu)俊抵,都是基于單服務(wù)器架構(gòu)來設(shè)計(jì)的谁不,如果只有一臺服務(wù)器,無能我們怎樣花錢來升級他的硬件配置徽诲,我們會發(fā)現(xiàn)很快將無法進(jìn)一步擴(kuò)容刹帕。最好的CPU吵血,最大的內(nèi)存條也是有限度的,因此采用集群架構(gòu)偷溺,才是解決問題的正確方法践瓷。

而第8張圖所畫的就是標(biāo)準(zhǔn)的分布式集群架構(gòu),集群的擴(kuò)容原則就是一個(gè)人干不完的活多個(gè)人一起干亡蓉,讓服務(wù)器與服務(wù)器之間,進(jìn)行分工與協(xié)作喷舀。2

而做分布式集群的架構(gòu)的架構(gòu)師砍濒,也有著較高的要求,而互聯(lián)網(wǎng)上受人敬仰的架構(gòu)師大多屬于這類硫麻。你也可以認(rèn)為這才是真正的架構(gòu)師爸邢。

看第9張圖

9.png

服務(wù)器端同第7張,第8張可以是一致的拿愧,具體是選擇哪個(gè)服務(wù)器的架構(gòu)杠河,取決于項(xiàng)目的規(guī)模。
項(xiàng)目初期用戶量少浇辜,可以選擇單服務(wù)器架構(gòu)券敌,如果項(xiàng)目后期服務(wù)器負(fù)載壓力過大,可以重構(gòu)為分布式集群架構(gòu)柳洋。

第9張圖的重點(diǎn)在于項(xiàng)目前端待诅,我們來看前端的技術(shù)架構(gòu)圖,這里所畫的是市面所流行的混合APP的架構(gòu)熊镣。

著名的混合APP應(yīng)用有很多卑雁,比如說支付寶手機(jī)客戶端,還有Facebook绪囱,這些應(yīng)用都是采用混合APP架構(gòu)設(shè)計(jì)的测蹲。

混合APP應(yīng)用使用html,和css打造用戶界面鬼吵,無論是在瀏覽器扣甲,微信端,還是在APP中齿椅,都是如此文捶。因此他具備B/S應(yīng)用程序的優(yōu)點(diǎn),可以在服務(wù)器端更新應(yīng)用內(nèi)容媒咳,并且讓應(yīng)用在ios粹排,安卓,瀏覽器端保持高度一致性涩澡。

利用單頁web APP開發(fā)技術(shù)顽耳,能夠讓網(wǎng)頁程序像原生應(yīng)用一樣流暢,而web APP的缺點(diǎn)在于,網(wǎng)頁js程序無法調(diào)用手機(jī)硬件功能射富,但是混合APP架構(gòu)可以通過微信sdk膝迎,微博sdk ,iOS bridges胰耗,安卓bridge是等方式來獲取微信APP限次,微博APP以及手機(jī)硬件的功能。

因此混合APP架構(gòu)同時(shí)具備了web APP與原生應(yīng)用的優(yōu)勢柴灯,成為了市場上主流的移動(dòng)應(yīng)用架構(gòu)設(shè)計(jì)方法卖漫。跨平臺兼容性好赠群,開發(fā)成本低羊始,開發(fā)速度快。逐步取代了大量的原生應(yīng)用查描。這也是我們兄弟全棧工程師學(xué)習(xí)的主要內(nèi)容突委。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市冬三,隨后出現(xiàn)的幾起案子匀油,更是在濱河造成了極大的恐慌,老刑警劉巖勾笆,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钧唐,死亡現(xiàn)場離奇詭異,居然都是意外死亡匠襟,警方通過查閱死者的電腦和手機(jī)钝侠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酸舍,“玉大人帅韧,你說我怎么就攤上這事】忻悖” “怎么了忽舟?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長淮阐。 經(jīng)常有香客問我叮阅,道長,這世上最難降的妖魔是什么泣特? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任浩姥,我火速辦了婚禮,結(jié)果婚禮上状您,老公的妹妹穿的比我還像新娘勒叠。我一直安慰自己兜挨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布眯分。 她就那樣靜靜地躺著拌汇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弊决。 梳的紋絲不亂的頭發(fā)上噪舀,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機(jī)與錄音飘诗,去河邊找鬼与倡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛疚察,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仇奶,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼貌嫡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了该溯?” 一聲冷哼從身側(cè)響起岛抄,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狈茉,沒想到半個(gè)月后夫椭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氯庆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年蹭秋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堤撵。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仁讨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出实昨,到底是詐尸還是另有隱情洞豁,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布荒给,位于F島的核電站丈挟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏志电。R本人自食惡果不足惜曙咽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挑辆。 院中可真熱鬧桐绒,春花似錦夺脾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烁竭,卻和暖如春菲茬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背派撕。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工婉弹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人终吼。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓镀赌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親际跪。 傳聞我的和親對象是個(gè)殘疾皇子商佛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容