大型網(wǎng)站架構(gòu)演進(jìn)的五大階段盤點(diǎn)

?

一個創(chuàng)業(yè)公司起步時很可能就兩臺機(jī)器捆交,一臺Web 服務(wù)器、一臺數(shù)據(jù)庫服務(wù)器腐巢,在一個應(yīng)用系統(tǒng)中集成了所有功能模塊品追,但隨著業(yè)務(wù)的發(fā)展、流量的增長冯丙,單應(yīng)用遠(yuǎn)遠(yuǎn)不能滿足業(yè)務(wù)需求肉瓦。

下面我們一同來聊聊網(wǎng)站架構(gòu)發(fā)展所經(jīng)歷的幾次主要演進(jìn),包括:從PHP 到Java 的改造胃惜、分布式改造风宁、無線化改造、中臺的改造蛹疯、國際化改造。

階段一 從PHP 到Java

很多網(wǎng)站早期都是基于Linux+Apache+MySQL+PHP 架構(gòu)的網(wǎng)站热监,從當(dāng)時來看捺弦,這種非常流行的個人網(wǎng)站架構(gòu)的確也非常匹配當(dāng)時的發(fā)展?fàn)顟B(tài)。PHP 語言的特性是快速發(fā)布,從頁面渲染到數(shù)據(jù)庫訪問列吼,均可以在一個頁面里全部搞定幽崩。

即使放到今天,這種架構(gòu)仍然還有很多人在用寞钥,它的優(yōu)點(diǎn)就是非常簡單高效慌申,但缺點(diǎn)也非常明顯:擴(kuò)展性和分布式不好,不適合企業(yè)級的理郑、復(fù)雜業(yè)務(wù)邏輯的大規(guī)模協(xié)同開發(fā)蹄溉。

隨著網(wǎng)站的發(fā)展,大家覺得應(yīng)該將PHP 切換到Java您炉。為什么要切換到Java 語言呢柒爵?一般來說,企業(yè)選擇開發(fā)語言會有如下考慮赚爵。

(1) 語言本身的特性棉胀。每種語言開發(fā)出來都有它的特性和所適合的場景,像Python冀膝、PHP 這類腳本語言非常適合快速簡單的開發(fā)方式唁奢,而Java 則比較適合構(gòu)建復(fù)雜業(yè)務(wù)邏輯的企業(yè)級開發(fā),但是開發(fā)效率會比PHP 要差一點(diǎn)窝剖。

(2) 程序員隊伍麻掸。企業(yè)選擇何種開發(fā)語言,還要看市場上的人才隊伍是不是足夠枯芬,是不是有很高層次的人才论笔。是否有高層次的人才,取決于當(dāng)前的行業(yè)老大是不是也在用這種語言千所,比如當(dāng)前的頂級互聯(lián)網(wǎng)公司如果在用Java狂魔,那么自然這些公司的Java人才比較多,這樣淫痰,他們的經(jīng)驗可以被快速復(fù)制到其他公司中最楷。

(3) 語言所對應(yīng)的工具生態(tài)是否完善。一個語言是否有生命力待错,要看這個語言對應(yīng)的生態(tài)工具是否完善籽孙,它的社區(qū)是否活躍。因為我們要用到各種工具火俄,而我們也不可能自己去寫每種工具犯建,因此,是否能方便地利用開源工具瓜客,快速提升開發(fā)效率也是非常關(guān)鍵的适瓦。像現(xiàn)在很多大公司開源了很多Java 的中間件產(chǎn)品竿开,這些中間件可以直接拿來使用,就不需要再重新開發(fā)了玻熙。

綜合以上因素否彩,電商網(wǎng)站選擇Java 語言作為主要的系統(tǒng)開發(fā)語言是非常合適的。

從PHP 切換到Java 后嗦随,整個網(wǎng)站采用WebX+EJB+iBatis+JBoss+Oracle(后面又將EJB 改成Spring)的架構(gòu)列荔,但是隨著業(yè)務(wù)量的不斷增大,存儲層的瓶頸暴露出來枚尼。

為了解決存儲問題贴浙,就逐漸用上了非常昂貴的IBM 小型機(jī)、Oracle 的數(shù)據(jù)庫以及EMC的高端存儲(IOE)姑原;并對數(shù)據(jù)庫做了分庫的拆分悬而,分布式緩存(Tair)也隨之誕生,分布式文件系統(tǒng)TFS 開始出現(xiàn)锭汛,CDN 也慢慢建立了笨奠。

階段二 分布式改造

所謂分布式改造,就是盡量讓系統(tǒng)無狀態(tài)化唤殴,或者讓有狀態(tài)的信息封裝在一定范圍內(nèi)般婆,以免限制應(yīng)用的橫向擴(kuò)展。簡單來說朵逝,就是即便某個應(yīng)用的少數(shù)服務(wù)器“宕”掉蔚袍,也不會影響整體業(yè)務(wù)的穩(wěn)定性。

要實現(xiàn)應(yīng)用的分布式改造必須先解決以下幾個問題配名。

(1) 把應(yīng)用微服務(wù)化:即將大量粗粒度的應(yīng)用邏輯拆小啤咽,做服務(wù)化改造。

(2) 必須先建立分布式服務(wù)框架渠脉。必須具備分布式RPC 框架宇整、異步消息系統(tǒng)、分布式數(shù)據(jù)層芋膘、分布式文件系統(tǒng)鳞青、服務(wù)的發(fā)現(xiàn)、注冊和管理为朋。

(3) 必須要解決分布式Session 問題臂拓。

為了做業(yè)務(wù)的服務(wù)化改造,我們大量拆分了當(dāng)時的業(yè)務(wù)系統(tǒng)习寸,形成了商品中心胶惰、交易中心、用戶中心霞溪、店鋪中心童番。這些服務(wù)作為底層服務(wù)供上層的前臺系統(tǒng)調(diào)用精钮,此時的系統(tǒng)架構(gòu)變成了下面的形式。

?

現(xiàn)在來看剃斧,系統(tǒng)的分布式改造為網(wǎng)站接下來5 年的發(fā)展奠定了很好的基礎(chǔ),整個網(wǎng)站的擴(kuò)展性非常好忽你。幾乎每個初創(chuàng)企業(yè)都必須經(jīng)歷一次分布式化的改造幼东,才能為企業(yè)的長期發(fā)展奠定基礎(chǔ)。筆者前面提及的幾個重要的中間件產(chǎn)品和關(guān)鍵的分布式Session 等技術(shù)在《深入分析Java Web 技術(shù)內(nèi)幕(修訂版)》一書中有詳細(xì)的介紹科雳,感興趣的讀者可以自行去學(xué)習(xí)了解根蟹。

階段三 無線化改造

到了2013 年,無線技術(shù)已經(jīng)非吃忝兀火爆了简逮。在此之前,無線的業(yè)務(wù)總是跟著PC 走尿赚,基本上是PC 做好后無線再復(fù)制一份散庶,而且無線和PC 還不是同一個前臺系統(tǒng),導(dǎo)致一個功能要做兩遍凌净,并且無線部門的開發(fā)人員本來就不多悲龟。這些給業(yè)務(wù)的發(fā)展帶來很多問題。因此2013 年底冰寻,啟動了All in 無線項目须教,目標(biāo)就是用一套系統(tǒng)、一套架構(gòu)快速支撐多端的個性化斩芭,并在服務(wù)端做了很多模塊化和組件化的改造轻腺。

隨著無線技術(shù)的發(fā)展,我們也開始嘗試一些新技術(shù)划乖,最具代表性的就是Node贬养。

Node 在業(yè)界很火,前端同學(xué)非常推崇迁筛,而且它也大幅提升了前端的開發(fā)效率和體驗煤蚌。

目前大家也多方嘗試使用Node 技術(shù),并且用在一些業(yè)務(wù)線上细卧。但是尉桩,從今天來看,Node 并沒有達(dá)到我們想象中的發(fā)展前景贪庙。這其中有多種原因蜘犁,本書的后續(xù)章節(jié)會專門介紹網(wǎng)站的無線化改造實踐,也將分享Node 在實際使用中的一些思考止邮。

經(jīng)過無線化改造的應(yīng)用系統(tǒng)架構(gòu)如圖这橙。

?

階段四 中臺改造

中臺這個概念早期是由美軍的作戰(zhàn)體系演化而來奏窑,技術(shù)上的“中臺”主要是指學(xué)習(xí)這種高效、靈活和強(qiáng)大的指揮作戰(zhàn)體系屈扎。電商經(jīng)過十幾年的發(fā)展埃唯,組織已經(jīng)龐大而復(fù)雜,業(yè)務(wù)不斷細(xì)化拆分鹰晨,也導(dǎo)致野蠻發(fā)展的系統(tǒng)越來越不可維護(hù)墨叛,開發(fā)和改造效率極低,也有很多新業(yè)務(wù)不得不重復(fù)造輪子模蜡,所以中臺的目標(biāo)是為了解決效率問題漠趁,同時降低創(chuàng)新成本。

如何一起學(xué)習(xí)忍疾,有沒有免費(fèi)資料闯传?

對Java技術(shù),架構(gòu)技術(shù)感興趣的同學(xué)卤妒,歡迎加QQ群:681179158甥绿,一起學(xué)習(xí),相互討論荚孵。

群內(nèi)已經(jīng)將知識體系整理好(源碼妹窖,筆記,PPT收叶,學(xué)習(xí)視頻)骄呼,歡迎加群免費(fèi)領(lǐng)取。

掃碼加群:681179158 免費(fèi)領(lǐng)取資料

階段五 國際化

國際化一般會有兩種思路:一種是一套原始代碼部署到多個地方判没,各地的系統(tǒng)基本沒有什么關(guān)聯(lián)蜓萄、保持相互獨(dú)立,每個地方再根據(jù)本地實際情況做一些個性化的定制澄峰。一般來說嫉沽,會精簡原始代碼,減少不必要的依賴俏竞。這種思路在一些跨國公司用得比較多绸硕,但是這個對技術(shù)要求比較低。

另一種思路就是我們所說的國際化魂毁,它主要是解決如何將一套系統(tǒng)部署到多地的問題玻佩。一般國際化有兩個發(fā)展階段:第一個階段是在國內(nèi)實現(xiàn)了交易的單元化;第二個階段是實現(xiàn)了中美的跨國部署席楚。

國際化的本質(zhì)仍然是要解決以下的通用問題:多語言問題咬崔、多時區(qū)問題、數(shù)據(jù)路由問題、全球數(shù)據(jù)的同步與復(fù)制問題垮斯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末郎仆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子兜蠕,更是在濱河造成了極大的恐慌扰肌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牺氨,死亡現(xiàn)場離奇詭異狡耻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)猴凹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岭皂,“玉大人郊霎,你說我怎么就攤上這事∫妫” “怎么了书劝?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長土至。 經(jīng)常有香客問我购对,道長,這世上最難降的妖魔是什么陶因? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任骡苞,我火速辦了婚禮,結(jié)果婚禮上楷扬,老公的妹妹穿的比我還像新娘解幽。我一直安慰自己,他們只是感情好烘苹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布躲株。 她就那樣靜靜地躺著,像睡著了一般镣衡。 火紅的嫁衣襯著肌膚如雪霜定。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天廊鸥,我揣著相機(jī)與錄音望浩,去河邊找鬼。 笑死黍图,一個胖子當(dāng)著我的面吹牛曾雕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播助被,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剖张,長吁一口氣:“原來是場噩夢啊……” “哼切诀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搔弄,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤幅虑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后顾犹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倒庵,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年炫刷,在試婚紗的時候發(fā)現(xiàn)自己被綠了擎宝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡浑玛,死狀恐怖绍申,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顾彰,我是刑警寧澤极阅,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站涨享,受9級特大地震影響筋搏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厕隧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一奔脐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栏账,春花似錦帖族、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茶鹃,卻和暖如春涣雕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闭翩。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工挣郭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疗韵。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓兑障,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子流译,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354

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