一線Java架構(gòu)師概括互聯(lián)網(wǎng)公司的標(biāo)準(zhǔn)Java技術(shù)架構(gòu)

大部分人對于BAT的技術(shù)有一種莫名的崇拜感,覺得只有非常牛逼和天才才能做出現(xiàn)在的這些系統(tǒng)娇豫,但經(jīng)過前面兩篇博文的分析,我們可以看到其實(shí)并沒有什么神秘的力量和魔力融合在技術(shù)里面,而是業(yè)務(wù)的不斷發(fā)展推動技術(shù)的不斷發(fā)展辉浦,一步一個腳印,持續(xù)幾年甚至十幾年的發(fā)展茎辐,才能達(dá)到當(dāng)前技術(shù)復(fù)雜度宪郊、先進(jìn)性掂恕、牛逼度。

拋開BAT各自差異很大的業(yè)務(wù)弛槐,站在技術(shù)的角度來看懊亡,其實(shí)BAT的技術(shù)架構(gòu)基本是一樣的,再將視角放大乎串,你會發(fā)現(xiàn)整個互聯(lián)網(wǎng)行業(yè)的技術(shù)發(fā)展店枣,最后都是殊途同歸

如果你正處于一個創(chuàng)業(yè)公司叹誉,或者正在成為另一個BAT的路上而拼搏鸯两,那么深入理解這種技術(shù)模式(或者叫技術(shù)結(jié)構(gòu)、技術(shù)架構(gòu))长豁,對于自己的發(fā)展钧唐、公司的發(fā)展都大有裨益,你將不會再迷茫匠襟,你也不再會心里打鼓逾柿,CTO將對你刮目相看,CEO將奉你為神明 :)

架構(gòu)師筑基

閑話不多說宅此,有圖有真相机错,看看互聯(lián)網(wǎng)的標(biāo)準(zhǔn)技術(shù)架構(gòu)是什么樣子:

上面這張圖基本上一網(wǎng)打盡了互聯(lián)網(wǎng)技術(shù)公司的技術(shù)點(diǎn),不同的公司只是在具體的技術(shù)實(shí)現(xiàn)上稍有差異父腕,但不會跳出這個框架的范疇弱匪。

接下來我將逐一介紹每個技術(shù)點(diǎn),包括為什么會有這些技術(shù)點(diǎn)璧亮,這些技術(shù)點(diǎn)的主要場景是什么萧诫,這些技術(shù)點(diǎn)將如何發(fā)展。

存儲層技術(shù)剖析

高性能

1. SQL

即關(guān)系數(shù)據(jù)枝嘶。前幾年NoSQL火了一陣子帘饶,很多人都理解為NoSQL是完全拋棄關(guān)系數(shù)據(jù),全部采用非關(guān)系型數(shù)據(jù)群扶,但事實(shí)經(jīng)過幾年的試驗(yàn)后及刻,大家發(fā)現(xiàn)關(guān)系數(shù)據(jù)不可能完全拋棄,NoSQL不是No SQL竞阐,而是Not Only SQL缴饭,即NoSQL是SQL的補(bǔ)充。

所以互聯(lián)網(wǎng)行業(yè)也必須依賴關(guān)系數(shù)據(jù)骆莹,考慮到Oracle太貴颗搂,還需要專人維護(hù),一般情況下互聯(lián)網(wǎng)行業(yè)都是用MySQL幕垦、PostgreSQL這類開源數(shù)據(jù)庫丢氢。這類數(shù)據(jù)庫的特點(diǎn)是開源免費(fèi)傅联,拿來就用;但缺點(diǎn)是性能相比商業(yè)數(shù)據(jù)庫要差較多疚察。隨著互聯(lián)網(wǎng)業(yè)務(wù)的發(fā)展蒸走,性能要求越來越高,必然要面對一個問題:將數(shù)據(jù)拆分到多個數(shù)據(jù)庫實(shí)例才能滿足業(yè)務(wù)的性能需求(其實(shí)Oracle也一樣稍浆,只是時間早晚的問題)载碌。

數(shù)據(jù)庫拆分滿足了性能的要求,但帶來了復(fù)雜度的問題:數(shù)據(jù)如何拆分衅枫、數(shù)據(jù)如何組合嫁艇。這個復(fù)雜度的問題解決起來并不是那么容易,如果每個業(yè)務(wù)都去實(shí)現(xiàn)一遍弦撩,重復(fù)造輪子將導(dǎo)致投入浪費(fèi)步咪、效率降低,業(yè)務(wù)開發(fā)想快都快不起來益楼。

所以互聯(lián)網(wǎng)公司流行的做法是發(fā)展到一定階段后猾漫,就會將這部分功能獨(dú)立成中間件,例如百度的DBProxy感凤、淘寶的TDDL悯周。不過這部分的要求很高,將分庫分表做到自動化和平臺化陪竿,不是一件容易的事情禽翼,所以一般是很牛逼的公司才會做。典型的有:百度的DBProxy族跛、淘寶TDDL闰挡。

如下是淘寶TDDL的結(jié)構(gòu)圖:

2. NoSQL

NoSQL首先體現(xiàn)在數(shù)據(jù)結(jié)構(gòu)上與傳統(tǒng)的SQL的不同,例如典型的Memcached的Key-value結(jié)構(gòu)礁哄、Redis的復(fù)雜數(shù)據(jù)結(jié)構(gòu)长酗、MongoDB的文檔數(shù)據(jù)結(jié)構(gòu);其次NoSQL無一例外的都會將性能作為自己的一大買點(diǎn)桐绒。

NoSQL的這兩個特點(diǎn)很好的彌補(bǔ)了關(guān)系數(shù)據(jù)庫的不足夺脾,因此在互聯(lián)網(wǎng)行業(yè)NoSQL的應(yīng)用基本上是基礎(chǔ)要求,要是你聽到一個號稱自己是互聯(lián)網(wǎng)公司卻連NoSQL都沒用掏膏,那基本上可以判斷是掛羊頭賣狗肉類型的劳翰。

由于NoSQL方案一般都會自己本身就提供集群的功能,例如Memcached的一致性hash集群馒疹、Redis 3.0的集群,因此NoSQL在剛開始應(yīng)用的時候很方便乙墙,不像SQL分庫分表那么復(fù)雜颖变。一般公司也不會在開始的時候就考慮將NoSQL包裝成存儲平臺生均,但如果公司發(fā)展很大,例如Memcached的節(jié)點(diǎn)有上千甚至幾千的時候腥刹,NoSQL集群就很有意義了:首先是集中管理能夠大大提升運(yùn)維效率马胧;其次是集中管理可以大大提升資源利用效率,2000臺機(jī)器衔峰,如果利用率能提升10%佩脊,就是減少200臺機(jī)器,一年幾十萬就節(jié)省出來了垫卤。

所以威彰,NoSQL發(fā)展到一定規(guī)模后,一般都是走集群路線穴肘,當(dāng)然要發(fā)展到這個階段歇盼,一般也是很牛逼的公司才會這么做。

典型的有:Twitter的Twemproxy评抚,豆瓣的BeansDB豹缀、騰訊TTC。

如下是Twemproxy的結(jié)構(gòu)圖:

3. 小文件存儲

除了關(guān)系型的業(yè)務(wù)數(shù)據(jù)外慨代,互聯(lián)網(wǎng)行業(yè)還有很多用于展示的數(shù)據(jù)邢笙,例如淘寶的商品圖片、商品描述侍匙;Facebook的用戶圖片氮惯,新浪微博的一條微博內(nèi)容等等。這些數(shù)據(jù)具有3個典型特征:一是數(shù)據(jù)小丈积,一般在1M一下筐骇;二是數(shù)量巨大,F(xiàn)acebook 2013年就達(dá)到了每天上傳3.5億張的照片江滨;三是訪問量巨大铛纬,F(xiàn)acebook每天的訪問量超過10億。

由于互聯(lián)網(wǎng)行業(yè)基本上每個業(yè)務(wù)都會有大量的小數(shù)據(jù)唬滑,如果每個業(yè)務(wù)都自己去考慮如何設(shè)計(jì)海量存儲和海量訪問告唆,效率自然會低,重復(fù)造輪子晶密,投入浪費(fèi)擒悬,自然而然的想法就是將小文件存儲做成統(tǒng)一的和業(yè)務(wù)無關(guān)的平臺。

和SQL和NoSQL不同的是稻艰,小文件存儲不一定需要公司或者業(yè)務(wù)規(guī)模很大懂牧,基本上可以認(rèn)為業(yè)務(wù)在起步階段就可以考慮做小文件統(tǒng)一存儲。得益于開源運(yùn)動的發(fā)展和最近幾年大數(shù)據(jù)的火爆,在開源方案的基礎(chǔ)上封裝一個小文件存儲平臺并不是太難的事情僧凤。例如HBase畜侦、Hadoop、Hypertable躯保、FastDFS等都可以作為小文件存儲的底層平臺旋膳,只需要在這些開源方案三再包裝一下基本上就可以用了。

典型的有:淘寶的TFS途事、京東JFS验懊、Facebook的Haystack。

如下是淘寶TFS的架構(gòu):

開發(fā)層技術(shù)剖析

開源框架源碼解析

1. 開發(fā)框架

在系列文章的第2篇《BAT解密:業(yè)務(wù)如何驅(qū)動技術(shù)發(fā)展》中我們深入分析了互聯(lián)網(wǎng)業(yè)務(wù)發(fā)展的一個特點(diǎn):復(fù)雜性越來越高尸变。復(fù)雜性增加的典型現(xiàn)象就是系統(tǒng)越來越多义图,不同的系統(tǒng)由不同的小組開發(fā)。如果每個小組用不同的開發(fā)框架和技術(shù)振惰,將會帶來很多問題歌溉,典型的問題有:

技術(shù)人員之間沒有共同的技術(shù)語言,交流合作少

每類技術(shù)都需要投入大量的人力和資源和熟練精通

不同團(tuán)隊(duì)之間人員無法快速流動骑晶,人力資源不能高效的利用

所以痛垛,互聯(lián)網(wǎng)公司都會指定一個大的技術(shù)方向,然后使用統(tǒng)一的開發(fā)框架桶蛔,例如Java相關(guān)的開發(fā)框架SSH匙头、SpringMVC、Play仔雷、Ruby的Ruby on Rails蹂析、PHP的ThinkPHP、Python的Django等等碟婆。使用統(tǒng)一的開發(fā)框架能夠解決上面提到的各種問題电抚,大大提升組織和團(tuán)隊(duì)的開發(fā)效率。

對于框架的選擇竖共,有一個總的原則:優(yōu)選成熟的框架蝙叛,避免盲目追逐新技術(shù)!為什么呢公给?

首先借帘,成熟的框架資料文檔齊備,各種坑基本上都有人踩過了淌铐,遇到問題很容易通過搜索解決

其次肺然,成熟的框架受眾更廣,招聘時更加容易招聘到合適的人才

第三腿准,成熟的框架更加穩(wěn)定际起,不會出現(xiàn)大的變動,適合長期發(fā)展

以我親身經(jīng)歷的一個反例為例:我們使用了Play 1作為Java開發(fā)框架,因?yàn)樗禽p量級的Java開發(fā)框架加叁,但沒想到Play 2直接改為Scala語言開發(fā)倦沧,Play 1的架構(gòu)演進(jìn)停滯唇撬,而我們又不能切換為Play 2它匕,結(jié)果就導(dǎo)致只能一直用Play 1,有新的需求只能自己開發(fā)窖认。

2. 服務(wù)器

開發(fā)框架只是負(fù)責(zé)完成業(yè)務(wù)功能的開發(fā)豫柬,真正能夠運(yùn)行起來,給用戶提供服務(wù)扑浸,還需要服務(wù)器配合烧给。

獨(dú)立開發(fā)一個成熟的web服務(wù)器,成本非常高喝噪;且業(yè)界又有那么多成熟的開源web服務(wù)器础嫡,所以互聯(lián)網(wǎng)行業(yè)基本上都是拿來主義,挑選一個流行的開源服務(wù)器即可酝惧。牛逼一點(diǎn)的公司榴鼎,可能會在開源服務(wù)器的基礎(chǔ)上,結(jié)合自己的業(yè)務(wù)特點(diǎn)做二次開發(fā)晚唇,例如淘寶的Tengine巫财,但一般公司基本上只需要將開源服務(wù)器摸透,優(yōu)化一下參數(shù)哩陕,調(diào)整一下配置就差不多了平项。

選擇一個服務(wù)器主要和開發(fā)語言相關(guān),例如:Java的有Tomcat悍及、Jboss闽瓢、Resin等,PHP/Python的用Nginx心赶,當(dāng)然最保險(xiǎn)的就是用Apache了扣讼,什么語言都支持。

有的人可能擔(dān)心Apache的性能之類的問題园担,其實(shí)不用過早擔(dān)心這個届谈,等到你的業(yè)務(wù)真的發(fā)展到Apache撐不住的時候再考慮切換也可以,那時候你有的是錢弯汰,有的是人艰山,有的是時間。

3. 容器

容器是最近幾年年才開始火起來的咏闪,其中以Docker為代表曙搬,在BAT級別的公司已經(jīng)有較多的應(yīng)用,例如騰訊:騰訊萬臺規(guī)模的Docker應(yīng)用實(shí)踐;新浪微博:微博紅包:大規(guī)模Docker集群實(shí)踐經(jīng)驗(yàn)分享等等纵装。

傳統(tǒng)的虛擬化技術(shù)是虛擬機(jī)征讲,解決了跨平臺的問題,但由于虛擬機(jī)太龐大橡娄,啟動慢诗箍,運(yùn)行時太占資源,在互聯(lián)網(wǎng)行業(yè)并沒有大規(guī)模的應(yīng)用挽唉;而Docker的容器技術(shù)滤祖,雖然沒有跨平臺,但啟動快瓶籽,幾乎不占資源匠童,推出后立刻就火起來了,預(yù)計(jì)Docker類的容器技術(shù)將是技術(shù)發(fā)展的主流方向塑顺。

千萬不要以為Docker只是一個虛擬化或者容器技術(shù)汤求,它將在很大程度上改變我們目前的技術(shù)形勢:

運(yùn)維方式會發(fā)生革命性的變化:Docker啟動快,幾乎不占資源严拒,隨時啟動和停止扬绪,基于Docker打造自動化運(yùn)維、智能化運(yùn)維將成為主流方式

設(shè)計(jì)模式會發(fā)生本質(zhì)化的變化:啟動一個新的容器實(shí)例代價如此低糙俗,將鼓勵設(shè)計(jì)思路朝“微服務(wù)”的方向發(fā)展勒奇。

例如一個傳統(tǒng)的網(wǎng)站包括登錄注冊、頁面訪問巧骚、搜索等功能赊颠,沒有用容器的情況下,除非有特別大的訪問量劈彪,否則這些功能開始時都是集成在一個系統(tǒng)里面的竣蹦;有了容器技術(shù)后,一開始設(shè)計(jì)就可以將這些功能按照服務(wù)的方式設(shè)計(jì)沧奴,避免后續(xù)訪問量增大時又要重構(gòu)系統(tǒng)痘括。

微服務(wù)

團(tuán)隊(duì)協(xié)作開發(fā)

設(shè)計(jì)模式:設(shè)計(jì)模式是工作經(jīng)驗(yàn)的結(jié)晶

工程化

B2C商城項(xiàng)目實(shí)戰(zhàn)

轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)文章

BATJ面試題點(diǎn)此獲取

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滔吠,一起剝皮案震驚了整個濱河市纲菌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疮绷,老刑警劉巖翰舌,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冬骚,居然都是意外死亡椅贱,警方通過查閱死者的電腦和手機(jī)懂算,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庇麦,“玉大人计技,你說我怎么就攤上這事∩介希” “怎么了垮媒?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驾胆。 經(jīng)常有香客問我涣澡,道長,這世上最難降的妖魔是什么丧诺? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮奄薇,結(jié)果婚禮上驳阎,老公的妹妹穿的比我還像新娘。我一直安慰自己馁蒂,他們只是感情好呵晚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沫屡,像睡著了一般饵隙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沮脖,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天金矛,我揣著相機(jī)與錄音,去河邊找鬼勺届。 笑死驶俊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的免姿。 我是一名探鬼主播饼酿,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胚膊!你這毒婦竟也來了故俐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤紊婉,失蹤者是張志新(化名)和其女友劉穎药版,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肩榕,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刚陡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年惩妇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筐乳。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡歌殃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝙云,到底是詐尸還是另有隱情氓皱,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布勃刨,位于F島的核電站波材,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏身隐。R本人自食惡果不足惜廷区,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贾铝。 院中可真熱鬧隙轻,春花似錦、人聲如沸垢揩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叁巨。三九已至斑匪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锋勺,已是汗流浹背蚀瘸。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宙刘,地道東北人苍姜。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像悬包,于是被迫代替她去往敵國和親衙猪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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