?
一個創(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ù)制問題垮斯。