王賢(花名賢哥)睹逃,淘寶技術(shù)部技術(shù)專家牙咏,在分布式系統(tǒng)架構(gòu)設(shè)計(jì)、高并發(fā)系統(tǒng)設(shè)計(jì)做院、系統(tǒng)穩(wěn)定性保障等領(lǐng)域積累了較為豐富的實(shí)踐經(jīng)驗(yàn)盲泛,對(duì)新技術(shù)有濃厚的興趣濒持。
請(qǐng)先和大家介紹下你和目前所從事的工作,以及關(guān)注哪些技術(shù)領(lǐng)域寺滚?
賢哥:目前在負(fù)責(zé)某直播平臺(tái)柑营,包括整體的技術(shù)架構(gòu)以及業(yè)務(wù)推廣,平臺(tái)旨在提供直播的一站式解決方案村视,涵蓋了大型音視頻直播官套、超大直播間中的聊天、彈幕蚁孔、PPT教學(xué)奶赔、主播打賞等業(yè)務(wù)功能模塊。大型直播是一個(gè)非常有挑戰(zhàn)的業(yè)務(wù)場(chǎng)景勒虾,不僅僅需要解決音視頻的編解碼纺阔、切片、分發(fā)修然、穩(wěn)定性及播放質(zhì)量監(jiān)控的所帶來(lái)的一系列問(wèn)題,還需要解決超高并發(fā)場(chǎng)景下消息發(fā)送质况、信令愕宋、心跳等問(wèn)題,以及對(duì)于各種UGC內(nèi)容的過(guò)濾(圖像结榄、文字)中贝、多端的兼容、數(shù)字版權(quán)保護(hù)等等臼朗。
由于之前工作的原因邻寿,了解和接觸到的東西比較雜,在做云手機(jī)商城時(shí)视哑,由于是異構(gòu)的系統(tǒng)绣否,需要跨平臺(tái)部署,去研究過(guò)異構(gòu)SOA架構(gòu)下的應(yīng)用通信挡毅、路由蒜撮、部署、升級(jí)跪呈、遷移段磨,到了淘寶之后,發(fā)現(xiàn)淘寶對(duì)于各種場(chǎng)景都有相對(duì)應(yīng)的中間件耗绿,花了很多的精力去熟悉分布式場(chǎng)景下各種中間件的工作原理及使用場(chǎng)景苹支,以便提高系統(tǒng)架構(gòu)的可靠性降及低工作量,在店鋪那邊呆了幾個(gè)月误阻,了解到一個(gè)復(fù)雜建站系統(tǒng)是如何工作的债蜜,頁(yè)面如何模塊化晴埂,如何渲染,如何通過(guò)靜態(tài)化提升性能策幼,后面又做支付寶卡寶邑时,由于那時(shí)候數(shù)據(jù)分析平臺(tái)還沒(méi)有現(xiàn)在這么成熟,為了看到系統(tǒng)的運(yùn)行狀態(tài)及業(yè)務(wù)數(shù)據(jù)特姐,去研究了數(shù)據(jù)在線及離線分析晶丘,由于那時(shí)候頁(yè)面是放在支付寶客戶端首屏,對(duì)系統(tǒng)可靠性要求很高唐含,又去看系統(tǒng)穩(wěn)定性保障的各種原理浅浮、技術(shù)、工具捷枯,很多時(shí)候都是需求驅(qū)動(dòng)自己去學(xué)習(xí)新知識(shí)滚秩,這樣學(xué)了之后也能夠馬上用上,遇到一項(xiàng)新技術(shù)后淮捆,會(huì)先去了解一下它是做什么的郁油,適合什么場(chǎng)景,等有具體的業(yè)務(wù)場(chǎng)景之后攀痊,再去深入學(xué)習(xí)桐腌。目前關(guān)注的主要有這么幾個(gè)領(lǐng)域,包括音視頻領(lǐng)域的技術(shù)發(fā)展及技術(shù)架構(gòu)(如數(shù)字版權(quán)保護(hù)苟径、編解碼及視頻協(xié)議案站、點(diǎn)對(duì)點(diǎn)通信),高性能的WEB端雙工通信(通信協(xié)議性能)棘街,音視頻應(yīng)用的可靠性監(jiān)控蟆盐。
能夠談下你是走上技術(shù)這條路的?
賢哥:大學(xué)學(xué)的計(jì)算機(jī)專業(yè)遭殉,后又因各種機(jī)緣巧合到了淘寶石挂,個(gè)人本身對(duì)于技術(shù)非常有興趣,享受通過(guò)實(shí)踐所帶來(lái)的成就感恩沽、滿足感誊稚,因此實(shí)際上是很自然而然的就選擇了這一行,作為碼農(nóng)的樂(lè)趣在于罗心,可以通過(guò)一行行代碼里伯,表達(dá)自己對(duì)于這個(gè)世界的理解。當(dāng)然渤闷,最主要的原因還是個(gè)人興趣疾瓮,喜歡各種折騰。
畢業(yè)至今你都是一直在阿里飒箭,是因?yàn)榧夹g(shù)文化還是其它的原因讓你有這樣的堅(jiān)守狼电?以及談?wù)劗厴I(yè)這些年來(lái)在工作中的收獲和體驗(yàn)蜒灰。
賢哥:阿里面臨著整個(gè)中國(guó)電商行業(yè)甚至是全球電商行業(yè)的最大的挑戰(zhàn),無(wú)論是從業(yè)務(wù)規(guī)模肩碟,還是用戶規(guī)模來(lái)看强窖,都與其他競(jìng)爭(zhēng)對(duì)手拉開(kāi)了數(shù)量級(jí)的差距,這背后實(shí)際上是成千上萬(wàn)的碼農(nóng)在默默支持削祈,它能夠提供其他地方無(wú)法提供的場(chǎng)景和挑戰(zhàn)翅溺,這或許是堅(jiān)持下來(lái)的最大原因吧。能夠加入阿里工作的同事髓抑,必然是在某個(gè)領(lǐng)域有一技之長(zhǎng)的咙崎,因此,跟每一個(gè)同事的合作過(guò)程吨拍,實(shí)際上也是學(xué)習(xí)的過(guò)程褪猛,成天與這些行業(yè)專家們打成一片,自己看待問(wèn)題的眼光也會(huì)越來(lái)越全面羹饰,越來(lái)越成熟伊滋,收獲并不僅僅是從技術(shù)上,還有思考問(wèn)題的方式队秩,人生觀世界觀都有很大的變化和成長(zhǎng)新啼,大公司能夠聚集人才,并提供很多學(xué)習(xí)的機(jī)會(huì)和交流的氛圍刹碾,也鼓勵(lì)分享經(jīng)驗(yàn)和個(gè)人積累,長(zhǎng)此以往的這種氛圍的熏陶座柱,也讓人受益匪淺迷帜。
在阿里做過(guò)的項(xiàng)目非常多,給你印象最深或收獲最大的是色洞?為什么戏锹?
賢哥:實(shí)際上也經(jīng)歷過(guò)很多階段,不同的階段火诸,不同的角色锦针,可能體會(huì)不盡相同,感悟也不大一樣置蜀,從一開(kāi)始的看的多奈搜、做的多,到后來(lái)的想的多盯荤、設(shè)計(jì)的多馋吗,每個(gè)階段關(guān)注的點(diǎn)不同,從具體技術(shù)細(xì)節(jié)難點(diǎn)的攻關(guān)秋秤,到整體方案的把控宏粤、風(fēng)險(xiǎn)控制脚翘,不同的階段,感受可能也會(huì)有所不同绍哎。印象比較深的可能有這么幾件事吧来农,記得有幾次,夜里一兩點(diǎn)鐘的樣子收到報(bào)警短信崇堰,系統(tǒng)掛了沃于,然后吭哧吭哧爬起來(lái)找問(wèn)題,各種翻日志翻代碼赶袄,找到問(wèn)題之后需要和對(duì)應(yīng)的PE同學(xué)一起解決揽涮,打電話過(guò)去人家早就睡了,也是吭哧吭哧爬起來(lái)直到把問(wèn)題修復(fù)饿肺,沒(méi)有任何怨言蒋困,阿里的同學(xué)就是這樣,線上有問(wèn)題第一時(shí)間解決敬辣,職業(yè)素養(yǎng)絕對(duì)是值得敬佩雪标。
我實(shí)際上是比較懶的一個(gè)人,能自動(dòng)的絕不人肉溉跃,有一次一個(gè)問(wèn)答功能剛上線村刨,淘寶的賣家也是挺聰明的,各種小廣告又是賣衣服又是賣手機(jī)的好不熱鬧撰茎,最后的結(jié)果就是整個(gè)頁(yè)面完全沒(méi)法看了嵌牺,苦逼的運(yùn)營(yíng)MM一條一條手工的刪,刪的再快也趕不上發(fā)的多龄糊,然而我又是那種喜歡多管閑事的人逆粹,想到用貝葉斯算法可以解決這個(gè)問(wèn)題,然后就業(yè)余+周末花了有一兩周的時(shí)間開(kāi)發(fā)了一套反垃圾系統(tǒng)炫惩,把這事拿出來(lái)說(shuō)并非是這個(gè)算法有多牛逼多厲害僻弹,貝葉斯算法反垃圾并不是什么新鮮事,而是因?yàn)檫@個(gè)事情完全是腦袋一熱去做的他嚷,但是又收到了出人意料的效果蹋绽,實(shí)際上這樣的事情也干了不少,只是這件比較有代表性筋蓖。
另外一個(gè)印象比較深刻的項(xiàng)目是去年的雙十一直播卸耘,之前由于工作的變化,剛到新團(tuán)隊(duì)沒(méi)幾天扭勉,接到一個(gè)任務(wù)鹊奖,要設(shè)計(jì)一套直播系統(tǒng),能支持XXX萬(wàn)人同時(shí)在線涂炎,XXX個(gè)主播同時(shí)推流忠聚,又是游戲的雙十一雙十二核心玩法设哗,可是以往的雙十一從來(lái)沒(méi)有做過(guò)類似的直播,沒(méi)有經(jīng)驗(yàn)可借鑒两蟀,而此時(shí)離雙十一也就一兩個(gè)月的時(shí)間网梢,那好吧,開(kāi)始做赂毯,方案設(shè)計(jì)战虏、資源協(xié)調(diào)、容量評(píng)估党涕、壓力測(cè)試烦感,中間涉及到N個(gè)團(tuán)隊(duì)的合作、協(xié)調(diào)膛堤、擴(kuò)容手趣,技術(shù)上又遇到各種坑,連續(xù)加了一兩個(gè)月的班肥荔,大家都非常疲倦绿渣,可以說(shuō)是遇到的挑戰(zhàn)最多的一個(gè)項(xiàng)目,所有的東西都得從零開(kāi)始燕耿,上線的時(shí)間節(jié)點(diǎn)又無(wú)法往后推中符,謝天謝地最終我們解決了所有的問(wèn)題,在雙十一雙十二期間總體表現(xiàn)的比較平穩(wěn)誉帅,雖然并不完美淀散。當(dāng)然,這一切并不是靠天吃飯蚜锨,跟前期的方案和小伙伴們的努力密不可分吧凉,實(shí)際上這里面收獲也是蠻多的。
當(dāng)然踏志,不論是處于什么角色,做好手頭的工作是本分胀瞪,但是也不要被自己當(dāng)前的角色所局限针余,多去了解一下周圍的人在干什么,了解系統(tǒng)的設(shè)計(jì)思路凄诞,多問(wèn)幾個(gè)為什么圆雁,為何要這樣設(shè)計(jì),這樣設(shè)計(jì)有什么好處帆谍,有沒(méi)有其他更優(yōu)的方案伪朽,主動(dòng)學(xué)習(xí),你能得到更多汛蝙。
互聯(lián)網(wǎng)發(fā)展日新月異烈涮,技術(shù)也在不斷的更迭朴肺,在新技術(shù)來(lái)臨時(shí),作為技術(shù)人員的你坚洽,有什么學(xué)習(xí)方法或技能可分享戈稿?
賢哥:技術(shù)總是從無(wú)到有,從有到優(yōu)讶舰,顛覆整個(gè)行業(yè)的技術(shù)鞍盗,在誕生初期也是襁褓中的嬰兒,需要不斷完善跳昼。因此般甲,對(duì)于技術(shù)的學(xué)習(xí)首先要把握脈絡(luò),在理清思路之后鹅颊,從源碼學(xué)習(xí)也很重要敷存,要知道,源碼面前挪略,了無(wú)秘密历帚,不但要知其然,還要知其所以然杠娱,這樣就容易觸類旁通挽牢,技術(shù)的發(fā)展往往是演進(jìn)式的,從最初概念的提出摊求,到原型產(chǎn)生禽拔,再到工業(yè)化,最后獲得業(yè)界的廣泛認(rèn)可被大規(guī)模使用室叉,這中間有一個(gè)演變的歷程睹栖,所以,只要明白技術(shù)的運(yùn)作機(jī)制茧痕,也就是所謂的原理野来、價(jià)值、使用場(chǎng)景踪旷,就很容易一個(gè)feature一個(gè)feature的學(xué)習(xí)曼氛。當(dāng)然,很多東西都是從大洋彼岸來(lái)的令野,從技術(shù)投入應(yīng)用舀患,到相關(guān)的文章書(shū)籍出來(lái),會(huì)有一定的滯后期气破,然而聊浅,等國(guó)內(nèi)翻譯的書(shū)籍出來(lái),又是一個(gè)漫長(zhǎng)的時(shí)間,所以低匙,得習(xí)慣看英文文檔旷痕。
當(dāng)然,最重要的還是要理解技術(shù)的核心本質(zhì)努咐,包括原理苦蒿、解決什么樣的問(wèn)題、什么樣的場(chǎng)景適合使用渗稍,另外佩迟,還得看相關(guān)的技術(shù)的社區(qū)活躍度,有沒(méi)有可能在未來(lái)成為主流竿屹,這是非常重要的报强,通常來(lái)說(shuō),解決同一領(lǐng)域的問(wèn)題拱燃,可能有很多方案秉溉,那么選擇那個(gè)方案,可能將在很長(zhǎng)一段時(shí)間里碗誉,影響著你和你的團(tuán)隊(duì)召嘶,如果選擇了一種不成熟的技術(shù),或者是社區(qū)不是那么活躍的技術(shù)哮缺,那么弄跌,你就得花更多的時(shí)間來(lái)解決生產(chǎn)環(huán)境中所遇到的問(wèn)題。當(dāng)理解了之后尝苇,再去學(xué)習(xí)铛只,實(shí)際上就變得容易了,并且糠溜,一項(xiàng)技術(shù)在出來(lái)之后淳玩,會(huì)不斷的有改進(jìn),有新特性非竿,但是都是在原來(lái)的基礎(chǔ)上增磚添瓦蜕着,當(dāng)你理解這些技術(shù)的本質(zhì)之后,再去理解這些改進(jìn)红柱,這些新特性侮东,會(huì)變得相對(duì)來(lái)說(shuō)更容易一些。
另外就是不要一味的求新豹芯,流行的并不一定就是好的,適合你的才是最好的驱敲,A來(lái)了學(xué)A铁蹈,B來(lái)了學(xué)B,C來(lái)了又覺(jué)得C好,學(xué)習(xí)是有成本的握牧,把時(shí)間用在對(duì)的地方容诬,多一份堅(jiān)持。新的技術(shù)的引入沿腰,還需要考慮到周邊的生態(tài)環(huán)境览徒,社區(qū)是否成熟,否則光是開(kāi)發(fā)各種中間件颂龙、各種工具习蓬,都?jí)蚰愫纫粔兀瑹岢蓖嗜ゴ肭叮坏仉u毛躲叼。
在編程/開(kāi)發(fā)之余,還有哪些興趣愛(ài)好企巢?目前你一天的生活節(jié)奏是怎樣的枫慷?
賢哥:每天除了工作中的系統(tǒng)設(shè)計(jì)、編程開(kāi)發(fā)浪规、各種會(huì)議之外或听,業(yè)余時(shí)間可以說(shuō)非常有限了。這些有限的時(shí)間一般會(huì)被這樣劃分笋婿,各種寫(xiě)作誉裆、PPT會(huì)花去一部分時(shí)間,因?yàn)樾枰獙⒐ぷ髦懈鞣N經(jīng)驗(yàn)萌抵,踩過(guò)的坑記錄下來(lái)找御,這也是人生的一筆寶貴財(cái)富,隨著時(shí)間的流逝绍填,很難想起來(lái)3年前做過(guò)什么項(xiàng)目霎桅,寫(xiě)過(guò)什么代碼,獲得過(guò)什么經(jīng)驗(yàn)讨永,因此滔驶,日常的總結(jié)和反思很重要。
然后就是運(yùn)動(dòng)卿闹,會(huì)給自己留出一點(diǎn)時(shí)間進(jìn)行運(yùn)動(dòng)揭糕,畢竟身體是革命的本錢,身體是自己的锻霎,一旦健康出了問(wèn)題著角,任何的成功都沒(méi)有意義。另外就是看書(shū)學(xué)習(xí)旋恼,技術(shù)發(fā)展的步伐是很快的吏口,如果不能持續(xù)學(xué)習(xí)而钞,可能就會(huì)落后壮韭,而這些落后的觀念最后將直接反映在你所設(shè)計(jì)的系統(tǒng)上北滥,另外就是通過(guò)看書(shū)學(xué)習(xí)讓自己的知識(shí)變得更全面井赌,視野更加開(kāi)闊,這樣反過(guò)來(lái)也會(huì)使你解決問(wèn)題的思路更廣舟铜,變得更有創(chuàng)造力戈盈,看書(shū)是一種非常好的學(xué)習(xí)方式,因?yàn)槠綍r(shí)快餐式的學(xué)習(xí)會(huì)容易陷入細(xì)節(jié)而無(wú)法了解全面谆刨,知識(shí)無(wú)法成體系塘娶,因此,也可借看書(shū)的時(shí)間來(lái)好好梳理自己的知識(shí)痴荐。由于比較喜歡音樂(lè)血柳,也會(huì)花一部分時(shí)間去搜尋各種流行歌曲、輕音樂(lè)生兆、鋼琴难捌、小提琴曲目等等,音樂(lè)能使人的大腦處于放松狀態(tài)鸦难,再就是陪伴自己的家人根吁,旅行等等。
掌握知識(shí)合蔽、技術(shù)的三個(gè)層次
此前击敌,你出版了《大型分布式網(wǎng)站架構(gòu)設(shè)計(jì)與實(shí)踐》一書(shū),能否分享下你寫(xiě)書(shū)的原因拴事、過(guò)程沃斤、困難和感悟等?以及介紹下這本書(shū)的特色刃宵。
賢哥:其實(shí)是比較機(jī)緣巧合的一件事情衡瓶,記得是2013年4月份,博文視點(diǎn)的董英女士找到我牲证,問(wèn)我是否有興趣寫(xiě)本關(guān)于分布式系統(tǒng)方面的書(shū)哮针,其實(shí)當(dāng)時(shí)已經(jīng)預(yù)感到這個(gè)事情做起來(lái)會(huì)比較難,但是還是義無(wú)反顧接下了這個(gè)活坦袍。主要是覺(jué)得十厢,寫(xiě)書(shū)是個(gè)高尚的事情,也算是為互聯(lián)網(wǎng)技術(shù)的發(fā)展盡了一絲綿薄之力了捂齐,從另一個(gè)角度來(lái)說(shuō)蛮放,也是難得的一次機(jī)會(huì),對(duì)之前的知識(shí)一個(gè)全面的回顧奠宜,一些知識(shí)點(diǎn)及細(xì)節(jié)包颁,有些也是知其然不知其所以然缝其,或者是沒(méi)有親身驗(yàn)證,剛好借此機(jī)會(huì)深入了解和挖掘徘六。
對(duì)于知識(shí)或者是技術(shù)的掌握,個(gè)人認(rèn)為有三個(gè)層次榴都,在項(xiàng)目中能做出來(lái)是一個(gè)層次待锈,將經(jīng)驗(yàn)寫(xiě)出來(lái)惠及大家則是一個(gè)升華,當(dāng)然嘴高,能夠在各種場(chǎng)合隨時(shí)隨地的清晰表達(dá)出來(lái)竿音,又是另一個(gè)層次。
實(shí)際上拴驮,真正寫(xiě)作的過(guò)程遠(yuǎn)比想象的要困難春瞬,在互聯(lián)網(wǎng)企業(yè)工作本身就是一件比較累比較辛苦的事情,有時(shí)候加班到晚上9-10點(diǎn)鐘回家套啤,還要抽出一兩個(gè)小時(shí)的時(shí)間來(lái)寫(xiě)作宽气,周末基本上就一心撲在上面了,時(shí)間是一方面潜沦,最痛苦的莫過(guò)于在這過(guò)程中需要不停的上下文切換萄涯,工作到寫(xiě)作,寫(xiě)作到生活唆鸡,而寫(xiě)作又是一件需要靈感的事情涝影,有時(shí)候可能在那坐了老半天憋不住幾句話,而在上班的路上你可能又文思如泉涌争占,很多時(shí)候常常不得不等到夜深人靜燃逻,才能夠完全靜下心來(lái)投入。
寫(xiě)書(shū)的一年多時(shí)間里臂痕,簡(jiǎn)直可以用煎熬來(lái)形容伯襟,無(wú)數(shù)次想過(guò)放棄,也曾經(jīng)質(zhì)疑過(guò)糾結(jié)過(guò)刻蟹,能夠堅(jiān)持下來(lái)寫(xiě)完逗旁,我只能說(shuō),Oh舆瘪,my god片效,謝天謝地,感謝所有陪伴在身邊的人及支持我的人英古。從一開(kāi)始這本書(shū)的定位就不是曲高和寡淀衣,陽(yáng)春白雪召调,而是希望讓各個(gè)不同崗位以及不同基礎(chǔ)的讀者們膨桥,都能夠有所收獲蛮浑,因此,內(nèi)容中即有過(guò)程只嚣,也有總結(jié)沮稚,當(dāng)然,每次回過(guò)頭來(lái)看這本書(shū)册舞,寫(xiě)作時(shí)候的那種“戰(zhàn)戰(zhàn)兢兢蕴掏,如履薄冰”的感覺(jué),依然還在调鲸,寫(xiě)作是嚴(yán)肅的事情盛杰,每一次落筆,常常會(huì)擔(dān)心會(huì)不會(huì)因?yàn)樽约旱睦斫馄蠲晔`導(dǎo)讀者即供,以現(xiàn)在的眼光或者視角來(lái)看,這本書(shū)遠(yuǎn)稱不上完美于微,但是一本書(shū)不可能無(wú)休止的寫(xiě)下去逗嫡,難免會(huì)有不完美的地方,接受瑕疵有時(shí)候也挺痛苦的角雷。
避免失敗是所有工程技術(shù)的核心
你個(gè)人對(duì)架構(gòu)/軟件架構(gòu)的理解是祸穷?
賢哥:以下僅是個(gè)人的一些理解,架構(gòu)不僅僅融合了思想勺三,融合了技術(shù)雷滚,同時(shí)也融合了藝術(shù),好的架構(gòu)并不僅僅是停留在技術(shù)文檔里吗坚,而是在實(shí)踐的過(guò)程中不斷地修正和調(diào)整的祈远,這對(duì)架構(gòu)師也提出了更高的要求,僅僅是停留在抽象和概念階段是沒(méi)有太大價(jià)值的商源,細(xì)節(jié)是魔鬼车份,一些從抽象層面看起來(lái)比較簡(jiǎn)單的架構(gòu),實(shí)際上最大的挑戰(zhàn)往往來(lái)自于細(xì)節(jié)牡彻,這些細(xì)節(jié)既包含產(chǎn)品視覺(jué)交互功能的實(shí)現(xiàn)扫沼,也包含業(yè)務(wù)規(guī)則、風(fēng)險(xiǎn)等種種邏輯的處理庄吼,還包括技術(shù)上的一些難以預(yù)知的“坑”缎除,具體的技術(shù)方案在實(shí)施的過(guò)程中,可能需要花費(fèi)大量的時(shí)間跟精力去解決和避免那些極端情況下可能出現(xiàn)的問(wèn)題总寻。
架構(gòu)應(yīng)該滿足一段時(shí)間內(nèi)的業(yè)務(wù)發(fā)展器罐,但是這一段時(shí)間到底有多長(zhǎng),有說(shuō)三個(gè)月渐行,有說(shuō)半年轰坊,有說(shuō)一年铸董,也有說(shuō)三年,不同的人不同的環(huán)境對(duì)于這個(gè)問(wèn)題的理解可能不同肴沫,創(chuàng)業(yè)型公司粟害,或者是嘗試型的業(yè)務(wù),風(fēng)雨飄搖九死一生颤芬,優(yōu)先考慮的是業(yè)務(wù)模式而非技術(shù)架構(gòu)我磁,因此,此時(shí)的架構(gòu)應(yīng)該盡可能簡(jiǎn)單盡可能容易實(shí)現(xiàn)驻襟,三個(gè)月之后業(yè)務(wù)變成什么樣子甚至是否存在,還很難說(shuō)芋哭,這個(gè)時(shí)候去想三年之后的架構(gòu)沉衣,基本上也是天馬行空,對(duì)于比較成熟的業(yè)務(wù)减牺,或者是對(duì)之前穩(wěn)定的業(yè)務(wù)系統(tǒng)進(jìn)行重構(gòu)豌习,則需要將眼光放長(zhǎng)遠(yuǎn)些,避免一些在中長(zhǎng)期可能面臨的問(wèn)題拔疚,比如數(shù)據(jù)庫(kù)的分庫(kù)分表數(shù)量肥隆,ID的長(zhǎng)度,分庫(kù)分表的維度等稚失。
另外就是系統(tǒng)需要可擴(kuò)展栋艳,在設(shè)計(jì)時(shí)要留有一定的擴(kuò)展點(diǎn),避免稍有變更就需要整個(gè)系統(tǒng)重構(gòu)的情況出現(xiàn)句各,對(duì)擴(kuò)展開(kāi)放吸占,對(duì)修改封閉,實(shí)際上這很好理解凿宾,修改原有的系統(tǒng)而不是擴(kuò)展原有的系統(tǒng)矾屯,更容易引入新的問(wèn)題,也會(huì)帶來(lái)更大的測(cè)試工作量初厚。一段時(shí)間之內(nèi)架構(gòu)的演變件蚕,常常會(huì)經(jīng)歷從清晰,再到模糊混亂产禾,再重構(gòu)排作,再清晰,然后又變得模糊的過(guò)程下愈,市場(chǎng)環(huán)境總是瞬息萬(wàn)變的纽绍,因此,系統(tǒng)的設(shè)計(jì)要遵循對(duì)擴(kuò)展開(kāi)放势似,對(duì)修改封閉的原則拌夏,做到這點(diǎn)即可方便及時(shí)的接入新流程僧著,又能夠不影響既有的流程。
從宏觀來(lái)看障簿,各個(gè)系統(tǒng)間的關(guān)系一定不應(yīng)該是煙囪與煙囪的關(guān)系盹愚,而是猶如城市里的高樓大廈,通過(guò)公路連接起來(lái)站故,因此皆怕,要提高建房子的速度,就要充分利用已有的基礎(chǔ)設(shè)施西篓,已有的中間件愈腾,來(lái)降低系統(tǒng)構(gòu)建的成本和風(fēng)險(xiǎn)。
架構(gòu)設(shè)計(jì)的幾個(gè)層次岂津,沒(méi)有架構(gòu)也是架構(gòu)虱黄,專注于解決現(xiàn)有問(wèn)題也能稱為架構(gòu),而好的架構(gòu)應(yīng)該是即能夠約束開(kāi)發(fā)者又能夠解放開(kāi)發(fā)者使其專注于功能的設(shè)計(jì)吮成。盡量將復(fù)雜的事情變的簡(jiǎn)單橱乱,而不要將簡(jiǎn)單的事情變的復(fù)雜,技術(shù)從來(lái)都不是用來(lái)炫的粱甫,而是用來(lái)解決實(shí)際問(wèn)題的泳叠。避免失敗是所有工程技術(shù)的核心,架構(gòu)也是技術(shù)茶宵,要運(yùn)用架構(gòu)技術(shù)去緩解風(fēng)險(xiǎn)危纫。
分布式架構(gòu) VS. 集中式架構(gòu)系統(tǒng),以及思考
分布式系統(tǒng)架構(gòu)是一個(gè)非常廣發(fā)的概念乌庶,他有著怎樣的特點(diǎn)叶摄,以及在網(wǎng)站何時(shí)要用分布式?另外它有哪些的場(chǎng)景安拟?
賢哥:分布式架構(gòu)實(shí)際上是解決了集中式架構(gòu)系統(tǒng)能力進(jìn)一步向上擴(kuò)展的所面臨的瓶頸蛤吓,這些瓶頸包括資源、運(yùn)維糠赦、開(kāi)發(fā)維護(hù)等会傲,因?yàn)閱螜C(jī)的硬件受到技術(shù)條件的限制,越往上擴(kuò)展拙泽,成本可能并非是線性的而是指數(shù)級(jí)的淌山,分布式架構(gòu)通過(guò)大量廉價(jià)的PC Server集群,使得能力的擴(kuò)展與經(jīng)濟(jì)成本的關(guān)系再次回歸線性顾瞻,另外當(dāng)開(kāi)發(fā)團(tuán)隊(duì)的規(guī)模越來(lái)越大泼疑,業(yè)務(wù)越來(lái)越復(fù)雜,分布式及服務(wù)化也使得系統(tǒng)能夠更好的進(jìn)行拆解荷荤,讓更多的團(tuán)隊(duì)能夠更高效率的在一起協(xié)作退渗。
但是移稳,從另一個(gè)角度來(lái)看,分布式架構(gòu)也是一種復(fù)雜的架構(gòu)会油,很多傳統(tǒng)架構(gòu)下面可以弱化的問(wèn)題个粱,在分布式環(huán)境下變得凸顯,甚至是成為至關(guān)重要的問(wèn)題翻翩,比如數(shù)據(jù)一致性問(wèn)題都许,比如網(wǎng)絡(luò)通信、序列化嫂冻、延時(shí)問(wèn)題胶征,比如如何應(yīng)對(duì)失敗的問(wèn)題,傳統(tǒng)環(huán)境下數(shù)據(jù)一致性通過(guò)數(shù)據(jù)庫(kù)事務(wù)在相當(dāng)程度下被弱化了桨仿,而分布式環(huán)境下將成為一個(gè)非常復(fù)雜的問(wèn)題弧烤,另外就是分布式架構(gòu)使得集群內(nèi)部的網(wǎng)絡(luò)通信變得更加頻繁,通信協(xié)議蹬敲、序列化方式、通信延遲莺戒、容錯(cuò)伴嗡、性能這些都會(huì)變得復(fù)雜化,分布式環(huán)境下的失敗將成為常態(tài)从铲,如何處理這些失敗也會(huì)變得一個(gè)非常復(fù)雜的問(wèn)題瘪校,一個(gè)成熟的分布式架構(gòu)體系所依賴的基礎(chǔ)設(shè)施很多,從各種中間件名段,到自動(dòng)化運(yùn)維體系阱扬,監(jiān)控體系,容災(zāi)體系伸辟,這些都需要一段時(shí)間的積累麻惶,并且持續(xù)投入和付出,因此信夫,在考慮分布式架構(gòu)的同時(shí)窃蹋,也需要從投入產(chǎn)出以及回報(bào)角度綜合考慮,對(duì)于創(chuàng)業(yè)公司來(lái)說(shuō)静稻,需要想清楚優(yōu)先要解決的問(wèn)題是什么警没,再來(lái)思考企業(yè)需要什么樣的架構(gòu),一味地參考大公司的架構(gòu)振湾,可能會(huì)提前讓系統(tǒng)變得過(guò)于復(fù)雜杀迹,失去響應(yīng)靈活的特點(diǎn),從而失去競(jìng)爭(zhēng)力押搪。
我所理解的網(wǎng)站架構(gòu)
賢哥送福利:
因資料太多嗅回,加QQ群:897889510及穗,領(lǐng)取以上免費(fèi)的學(xué)習(xí)資源。
大型網(wǎng)站架構(gòu)設(shè)計(jì)的思想與原則是什么绵载?
賢哥:實(shí)際上很難說(shuō)有個(gè)一個(gè)統(tǒng)一的思想和設(shè)計(jì)原則埂陆,能夠放之四海而皆準(zhǔn),因?yàn)槊總€(gè)人對(duì)于設(shè)計(jì)的理解和理念是不同的娃豹,個(gè)人覺(jué)得設(shè)計(jì)一個(gè)復(fù)雜的大型網(wǎng)站焚虱,實(shí)際上是一個(gè)分而治之的過(guò)程:
首先得充分的理解業(yè)務(wù),理解需求懂版,理解當(dāng)下需要解決的首要問(wèn)題鹃栽,以及可能的風(fēng)險(xiǎn)有哪些,再將目標(biāo)進(jìn)行分解躯畴,進(jìn)行具體的技術(shù)選型民鼓、模型設(shè)計(jì)、架構(gòu)設(shè)計(jì)蓬抄。如果需要解決的核心問(wèn)題是并發(fā)丰嘉,則可以通過(guò)各種緩存手段(本地緩存、分布式緩存)嚷缭,來(lái)提高查詢的吞吐饮亏,這樣雖然會(huì)一定程度上需要在數(shù)據(jù)一致性上做出犧牲,由強(qiáng)一致性變?yōu)樽罱K一致性阅爽,但是路幸,如果數(shù)據(jù)一致性不是核心需要解決的問(wèn)題,那么付翁,此問(wèn)題的優(yōu)先級(jí)則可以先放一放简肴,反過(guò)來(lái)如果核心問(wèn)題變?yōu)閿?shù)據(jù)的一致性,如交易系統(tǒng)百侧,那么再怎么強(qiáng)調(diào)數(shù)據(jù)的一致性都不為過(guò)着帽,由于分布式環(huán)境下為了應(yīng)對(duì)高并發(fā)的寫(xiě)入以及海量數(shù)據(jù)的存儲(chǔ),通常需要對(duì)關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行分庫(kù)分表擴(kuò)展移层,這也給數(shù)據(jù)一致性帶來(lái)了很大的挑戰(zhàn)仍翰,原本的單庫(kù)事務(wù)的強(qiáng)一致性保障,在這個(gè)時(shí)候升級(jí)為跨庫(kù)的分布式事務(wù)观话,而通過(guò)二階段或者三階段提交所保障的分布式事務(wù)予借,由于分布式事務(wù)管理器與資源管理器之間的多次網(wǎng)絡(luò)通信成本,吞吐及效率上很難滿足高并發(fā)場(chǎng)景下的要求,而這實(shí)際上對(duì)于交易系統(tǒng)來(lái)說(shuō)灵迫,又是一個(gè)很難回避的問(wèn)題秦叛,因此,大家又想出很多的招來(lái)解決這個(gè)問(wèn)題瀑粥,通過(guò)可靠消息系統(tǒng)來(lái)保障不失為一種方式挣跋,變同步為異步,但是狞换,又引入新的問(wèn)題避咆,消息系統(tǒng)為保證不丟消息,則很難保證消息的順序性以及是否重復(fù)投遞修噪,這樣作為消息的接收方查库,則需要保障消息處理的冪等性,以及對(duì)消息去重黄琼。
個(gè)人比較推崇洛克希德·馬丁公司的著名飛機(jī)設(shè)計(jì)師凱利·約翰遜所提出的KISS原則樊销,架構(gòu)設(shè)計(jì)能簡(jiǎn)單絕不復(fù)雜,堅(jiān)決砍掉任何華而不實(shí)的設(shè)計(jì)脏款,不要因?yàn)?年后可能怎樣甚至是一些現(xiàn)實(shí)中根本無(wú)法出現(xiàn)的場(chǎng)景围苫,加入到當(dāng)下的架構(gòu)設(shè)計(jì)中,導(dǎo)致系統(tǒng)無(wú)比復(fù)雜撤师。有時(shí)候看似引入的是一個(gè)很簡(jiǎn)單很容易解決的問(wèn)題剂府,可能在具體的執(zhí)行過(guò)程中,會(huì)因此帶來(lái)一系列不必要的麻煩丈氓,按下葫蘆起來(lái)瓢。
另外一點(diǎn)就是對(duì)于未經(jīng)驗(yàn)證的新技術(shù)强法、新理念的引入一定要慎重万俗,一定要在全方位的驗(yàn)證過(guò)后,再大規(guī)模的使用饮怯,新技術(shù)闰歪、新理念的出現(xiàn),自然有它的誘惑蓖墅,慎重并不代表保守库倘,技術(shù)總是在不斷前進(jìn),擁抱變化本身沒(méi)有問(wèn)題论矾,但是引入不成熟的技術(shù)看似能帶來(lái)短期的收益教翩,但是它的風(fēng)險(xiǎn)或者是后期的成本可能遠(yuǎn)遠(yuǎn)大于收益。
設(shè)計(jì)一個(gè)大型網(wǎng)站架構(gòu)時(shí)贪壳,通常需要從哪些層面去考慮饱亿?服務(wù)器/存儲(chǔ)部署方面需要注意哪些問(wèn)題?
賢哥:大型網(wǎng)站的設(shè)計(jì)是一個(gè)非常復(fù)雜的問(wèn)題,需要考慮的問(wèn)題很多彪笼,比如海量數(shù)據(jù)的存儲(chǔ)钻注,存儲(chǔ)又分為在線存儲(chǔ)與離線存儲(chǔ),在線又有關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)和非關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)配猫,持久化存儲(chǔ)和內(nèi)存存儲(chǔ)幅恋,這些都需要架構(gòu)師根據(jù)具體的場(chǎng)景進(jìn)行選型。
高并發(fā)且允許數(shù)據(jù)丟失的情況下泵肄,可以采用內(nèi)存存儲(chǔ)捆交,而查詢條件單一,只需要根據(jù)主鍵進(jìn)行查詢凡伊,則可以選擇key-value型的存儲(chǔ)零渐,對(duì)于海量的文檔及圖片內(nèi)容,則可借助分布式文件系統(tǒng)以及CDN邊緣節(jié)點(diǎn)系忙,即解決了存儲(chǔ)的問(wèn)題诵盼,又能夠?qū)⒗錈釘?shù)據(jù)分離,并且通過(guò)邊緣節(jié)點(diǎn)提高用戶訪問(wèn)的效率银还,如果是需要多維度的復(fù)雜查詢风宁,則需要使用關(guān)系型數(shù)據(jù)庫(kù)。當(dāng)數(shù)據(jù)量大蛹疯,并發(fā)寫(xiě)入請(qǐng)求多的時(shí)候戒财,又需要進(jìn)行分庫(kù)分表,由于分庫(kù)分表會(huì)限制數(shù)據(jù)的查詢維度捺弦,查詢條件必須得帶上分庫(kù)分表的鍵饮寞,如果需要多個(gè)查詢維度,則需要使用數(shù)據(jù)同步工具同步出另一維度的數(shù)據(jù)結(jié)構(gòu)列吼,或者是搭建垂直搜索引擎幽崩,以提供多維度的數(shù)據(jù)查詢,很多情況下難以通過(guò)一種存儲(chǔ)工具解決所有問(wèn)題寞钥,因此需要多種存儲(chǔ)復(fù)合使用慌申,以提高效率及用戶的使用體驗(yàn)。
再又如應(yīng)用的部署理郑,從集中式架構(gòu)到分布式架構(gòu)蹄溉,SOA服務(wù)化,再到時(shí)下流行的微服務(wù)架構(gòu)您炉,接入層的負(fù)載均衡設(shè)備解決了無(wú)狀態(tài)WEB應(yīng)用的擴(kuò)展問(wèn)題柒爵,而軟負(fù)載中心則解決了服務(wù)發(fā)現(xiàn)和服務(wù)路由的問(wèn)題,輕量虛擬化及docker的出現(xiàn)使得Martin Fowler所提出的微服務(wù)理念能夠更容易成為現(xiàn)實(shí)赚爵,當(dāng)然餐弱,大型網(wǎng)站還需要考慮比如某個(gè)地域出現(xiàn)不可抗力因素時(shí)宴霸,如何保障整站的可用性以及數(shù)據(jù)完整性,諸如同城容災(zāi)膏蚓,異地容災(zāi)(如兩地三中心)瓢谢,以及時(shí)下正處于風(fēng)口浪尖的異地雙活、異地多活架構(gòu)驮瞧。
大型網(wǎng)站的架構(gòu)往往不是一蹴而就的氓扛,而是通過(guò)需求的推動(dòng)經(jīng)過(guò)多年演變一步步形成的,不同的時(shí)期不同的階段不同的規(guī)模论笔,所面臨的業(yè)務(wù)不同采郎、需求不同、需要解決的核心問(wèn)題也不同狂魔,這就導(dǎo)致不同的階段不同的架構(gòu)蒜埋,并且架構(gòu)也是不斷演進(jìn)與發(fā)展的。
大型網(wǎng)站有哪些典型的故障以及通常有哪些解決之道或相應(yīng)的優(yōu)化建議呢最楷?
賢哥:一個(gè)成規(guī)模的網(wǎng)站可能每天都在經(jīng)歷故障整份,只不過(guò)故障可能在絕大部分人感知到之前就已經(jīng)修復(fù)了,導(dǎo)致故障的原因很多籽孙,有可能是業(yè)務(wù)邏輯的變更對(duì)于依賴的測(cè)試不充分烈评,或者是不兼容的版本升級(jí)導(dǎo)致的序列化錯(cuò)誤,又或者是測(cè)試用例未覆蓋到的程序bug犯建,又或者是不同版本jar包的同名類沖突問(wèn)題等等讲冠,也有可能是訪問(wèn)量太高導(dǎo)致日志將磁盤打爆,又或者是機(jī)器負(fù)載過(guò)高導(dǎo)致大量線程阻塞适瓦,又或者是鎖競(jìng)爭(zhēng)過(guò)于激烈導(dǎo)致進(jìn)程僵死竿开,或者是數(shù)據(jù)庫(kù)連接池用完,JVM頻繁GC等等玻熙。
另外也有可能是由于物理環(huán)境問(wèn)題否彩,比如網(wǎng)線被拔掉,光纖被挖斷揭芍,機(jī)房停電胳搞,硬件設(shè)備損壞等等卸例,導(dǎo)致故障的原因可能千奇百怪称杨,很難一一枚舉,對(duì)于變更所導(dǎo)致的故障筷转,能做的是讓測(cè)試用例盡可能全面的覆蓋到每一個(gè)細(xì)節(jié)姑原,包括依賴項(xiàng),項(xiàng)目設(shè)計(jì)階段多考慮風(fēng)險(xiǎn)呜舒,按照流程來(lái)發(fā)布锭汛,但是也不能因噎廢食,使得發(fā)布流程沉重僵化,對(duì)新的業(yè)務(wù)需求響應(yīng)緩慢唤殴,實(shí)際上這也是一個(gè)很難拿捏的度般婆。
此外就是要建立起完善的監(jiān)控系統(tǒng),包括異常日志收集分析朵逝,業(yè)務(wù)流程全鏈路校驗(yàn)蔚袍,機(jī)器運(yùn)行狀態(tài)檢測(cè)(負(fù)載、qps配名、磁盤啤咽、內(nèi)存、網(wǎng)絡(luò)渠脉、運(yùn)行水位)宇整,歷史數(shù)據(jù)的分析,異常報(bào)警等芋膘,對(duì)于服務(wù)化的架構(gòu)鳞青,還需要完善服務(wù)治理,包括強(qiáng)弱依賴管理索赏,調(diào)用關(guān)系(誰(shuí)調(diào)用了誰(shuí)盼玄,誰(shuí)被誰(shuí)調(diào)用了),調(diào)用頻次潜腻,異常狀況等埃儿,這實(shí)際上是一個(gè)體系化的工作,也是一個(gè)比較基礎(chǔ)的工作融涣,有了這些之后童番,你才能夠及時(shí)的感知到系統(tǒng)的異常狀況,及時(shí)定位問(wèn)題威鹿,修復(fù)問(wèn)題剃斧。
構(gòu)建一個(gè)網(wǎng)站時(shí),可以選擇開(kāi)源或自主研發(fā)忽你,前者因萬(wàn)一選用的開(kāi)源方案在將來(lái)才發(fā)現(xiàn)某一些特性不滿足幼东,就得推倒重來(lái),而后者則似乎有重復(fù)造輪子的嫌疑科雳,對(duì)此你怎么看根蟹?
賢哥:這個(gè)問(wèn)題得辯證來(lái)看,使用開(kāi)源能夠降低很大的工作量糟秘,但是也會(huì)存在潛在的風(fēng)險(xiǎn)简逮,特別是一些未得到廣泛驗(yàn)證的技術(shù),即便是使用的十分廣泛的如Struts尿赚、SSL散庶,也時(shí)不時(shí)會(huì)爆出一些驚人的漏洞蕉堰,對(duì)于小公司來(lái)說(shuō),使用開(kāi)源的技術(shù)能夠快速的構(gòu)建出一個(gè)勘用的網(wǎng)站悲龟,即便是在使用開(kāi)源軟件的過(guò)程中遇到問(wèn)題屋讶,切換的成本可能也不會(huì)很高,但是對(duì)于大公司而言须教,切換的成本可能會(huì)變得非常的高丑婿,因?yàn)闃I(yè)務(wù)和依賴關(guān)系實(shí)在是太復(fù)雜,一旦大規(guī)模使用没卸,影響的范圍可能非常廣羹奉,因此在做選擇之前不得不非常之慎重,當(dāng)然约计,我們也會(huì)有一些比較特殊的需求诀拭,開(kāi)源軟件無(wú)法滿足,或者說(shuō)是走在了開(kāi)源的前面煤蚌,這些工具耕挨、中間件就需要自己動(dòng)手開(kāi)發(fā)了。
另外就是開(kāi)源的軟件有些特性實(shí)際上與我們的期望有很大的差距尉桩,而他們本身的架構(gòu)可能又不是那么方便擴(kuò)展筒占,但是這些特性對(duì)于我們來(lái)說(shuō)又十分的關(guān)鍵,比如Hadoop蜘犁,它的MapReduce翰苫、HDFS、Hive提供一整套海量數(shù)據(jù)的分析解決方案这橙,但是底層的權(quán)限控制做的很弱奏窑,因此我們不得不花了很大的精力開(kāi)發(fā)出一套替代方案,又花費(fèi)很大的精力將原來(lái)Hadoop上的數(shù)據(jù)和Job遷移到新平臺(tái)屈扎。對(duì)于開(kāi)源技術(shù)的選擇埃唯,我們更傾向于選擇一些社區(qū)比較活躍比較成熟的軟件,最好是有一些比較成規(guī)模的成功案例的鹰晨,這樣的風(fēng)險(xiǎn)會(huì)小一些墨叛,畢竟對(duì)于一家成熟的電商網(wǎng)站來(lái)說(shuō),穩(wěn)定大于一切模蜡,系統(tǒng)的不可用時(shí)間是跟成交金額直接關(guān)聯(lián)的漠趁,分分秒秒過(guò)去的時(shí)間,就是實(shí)實(shí)在在的金錢哩牍。
對(duì)于較為核心的應(yīng)用所引入的開(kāi)源技術(shù)棚潦,我們也會(huì)花費(fèi)較大的精力深入地去了解令漂,做一些bugfix膝昆,避免踩到一些坑丸边。
另外一點(diǎn)就是大公司的很多場(chǎng)景可能是非常特殊的,比如高并發(fā)場(chǎng)景下的MySAL數(shù)據(jù)庫(kù)行鎖荚孵,大對(duì)象常駐內(nèi)存時(shí)的JVM的內(nèi)存回收妹窖,一些軟件可能為了滿足通用的需求,犧牲了一些特殊場(chǎng)景下的性能收叶。因此骄呼,對(duì)于我們來(lái)說(shuō),了解這些后判没,也是有一定的優(yōu)化空間的蜓萄,包括從實(shí)現(xiàn)上去規(guī)避,或者是去改造開(kāi)源軟件澄峰,而做這些的前提就是對(duì)開(kāi)源軟件的了解嫉沽。
一般網(wǎng)站面臨的問(wèn)題就是負(fù)載的問(wèn)題,當(dāng)人數(shù)多俏竞,導(dǎo)致速度慢是主要解決的問(wèn)題绸硕,對(duì)此你有什么建議?
賢哥:相較于傳統(tǒng)企業(yè)來(lái)說(shuō)魂毁,大部分互聯(lián)網(wǎng)企業(yè)都會(huì)面臨的一個(gè)很大的挑戰(zhàn)玻佩,隨著用戶規(guī)模的不斷擴(kuò)大,系統(tǒng)的壓力會(huì)越來(lái)越大席楚,而在創(chuàng)業(yè)初期咬崔,系統(tǒng)的架構(gòu)設(shè)計(jì)往往是一切從簡(jiǎn)甚至根本沒(méi)有架構(gòu),快速迭代烦秩,優(yōu)先滿足業(yè)務(wù)刁赦,而受市場(chǎng)環(huán)境的影響業(yè)務(wù)往往是多變的,因此往往會(huì)背下“技術(shù)債”闻镶,業(yè)務(wù)邏輯高度耦合甚脉,系統(tǒng)不可擴(kuò)展,代碼結(jié)構(gòu)臃腫铆农,此時(shí)不得不進(jìn)行重構(gòu)牺氨。
“分布式”是應(yīng)對(duì)大流量核心思想,首先墩剖,系統(tǒng)得做好準(zhǔn)備猴凹,支持?jǐn)U展,尤其是在數(shù)據(jù)岭皂、模型層面舱沧,因?yàn)閿?shù)據(jù)的拆分侠鳄、擴(kuò)容、數(shù)據(jù)遷移最麻煩最費(fèi)時(shí)間葡粒,稍有不慎,還可能導(dǎo)致數(shù)據(jù)不一致,造成的損失也有可能是無(wú)法挽回的,方案設(shè)計(jì)必須得慎之又慎,在數(shù)據(jù)拆分遷移的同時(shí)猾昆,新的數(shù)據(jù)正在源源不斷的寫(xiě)入,老的數(shù)據(jù)也常常會(huì)面臨高并發(fā)的更新骡苞,因此垂蜗,業(yè)界經(jīng)常將數(shù)據(jù)拆分?jǐn)U容比喻成是在給一架高速飛行的飛機(jī)換引擎,這也是整個(gè)擴(kuò)容過(guò)程中解幽,最復(fù)雜贴见,技術(shù)含量最高,最有挑戰(zhàn)的任務(wù)躲株。
再就是集中式應(yīng)用的業(yè)務(wù)邏輯拆分蝇刀,原先團(tuán)隊(duì)規(guī)模小,業(yè)務(wù)量也小徘溢,可能會(huì)在少數(shù)幾個(gè)應(yīng)用上堆了很多代碼和業(yè)務(wù)邏輯吞琐,而隨著公司規(guī)模的增長(zhǎng),業(yè)務(wù)迅速發(fā)展然爆,團(tuán)隊(duì)規(guī)模越來(lái)越大站粟,集中式的應(yīng)用維護(hù)將會(huì)變得十分困難,這既包括開(kāi)發(fā)部署曾雕,筆者曾經(jīng)開(kāi)發(fā)過(guò)一個(gè)應(yīng)用奴烙,改幾行代碼,本地編譯打包需要10幾分鐘剖张,本地部署又需要十幾分鐘切诀,這極大的降低了開(kāi)發(fā)的效率,另外這樣的巨無(wú)霸工程也會(huì)占用很多服務(wù)器資源搔弄,而單機(jī)的硬件資源又不可能無(wú)限升級(jí)幅虑,這也會(huì)是一個(gè)問(wèn)題,再者就是耦合的業(yè)務(wù)邏輯也不便于復(fù)用顾犹,得四處重復(fù)造輪子倒庵,浪費(fèi)資源,這又引申出另一塊炫刷,也就是企業(yè)內(nèi)部的服務(wù)化擎宝。
SOA架構(gòu)包括時(shí)下流行的微服務(wù)理念,解決的是企業(yè)內(nèi)部資源復(fù)用的問(wèn)題浑玛,避免信息孤島和重復(fù)造輪子绍申,提高系統(tǒng)可維護(hù)性,降低業(yè)務(wù)試錯(cuò)以及系統(tǒng)構(gòu)建成本,提升企業(yè)競(jìng)爭(zhēng)力极阅。通用的統(tǒng)一的SOA通信標(biāo)準(zhǔn)胃碾,包括通信協(xié)議、序列化反序列化方式涂屁,能夠簡(jiǎn)化SOA架構(gòu)的實(shí)現(xiàn),服務(wù)的自動(dòng)注冊(cè)灰伟、路由拆又、軟負(fù)載能降低運(yùn)維成本,隨著服務(wù)的增加栏账,單靠人工來(lái)進(jìn)行服務(wù)治理越來(lái)越困難帖族,又衍生了服務(wù)治理系統(tǒng),對(duì)服務(wù)的調(diào)用挡爵,依賴竖般,異常等信息進(jìn)行統(tǒng)一的管理。當(dāng)應(yīng)用變得無(wú)狀態(tài)之后茶鹃,擴(kuò)容就非常方便了涣雕,通過(guò)負(fù)載均衡軟硬件設(shè)施,或者是SOA的軟負(fù)載機(jī)制闭翩,可以根據(jù)需要十分方便的增減機(jī)器擴(kuò)充容量挣郭,而這種能力幾乎是線性的(在一定規(guī)模下)。當(dāng)然疗韵,大部分的場(chǎng)景以及技術(shù)解決方案兑障,國(guó)外的Yahoo、Google蕉汪、Facebook流译、Linkin 、Twitter…者疤,國(guó)內(nèi)的BAT福澡,這些知名的互聯(lián)網(wǎng)企業(yè),實(shí)際上很大程度上已經(jīng)充當(dāng)先驅(qū)驹马,后來(lái)的追隨者竞漾,只需要緊隨前人的腳步,驀直前行窥翩,架構(gòu)的風(fēng)險(xiǎn)已經(jīng)被大大的降低业岁。
架構(gòu)師的技能或素養(yǎng),架構(gòu)師到底要不要寫(xiě)代碼寇蚊?
成為一名架構(gòu)師需要哪些的技能或素養(yǎng)笔时?
賢哥:以下僅代表個(gè)人觀點(diǎn),設(shè)計(jì)符合要求的系統(tǒng)是架構(gòu)師的基本技能仗岸,功能允耿、可用性借笙、可擴(kuò)展性,以及團(tuán)隊(duì)能力较锡、項(xiàng)目執(zhí)行風(fēng)險(xiǎn)业稼、運(yùn)行環(huán)境都需要綜合考慮,架構(gòu)師的功力更多體現(xiàn)在技術(shù)的綜合運(yùn)用上蚂蕴,因此對(duì)于項(xiàng)目所需要的技術(shù)細(xì)節(jié)的了解必須是全面的低散,這樣才能夠?qū)⒆詈线m的技術(shù)用在最需要的地方,并且還需要有技術(shù)的前瞻性骡楼,通過(guò)經(jīng)驗(yàn)以及積累發(fā)現(xiàn)可能潛在的風(fēng)險(xiǎn)熔号,對(duì)于問(wèn)題的理解,不能夠僅停留在表面鸟整,邏輯思維和抽象思維能力是一個(gè)架構(gòu)師的重要素質(zhì)引镊。
當(dāng)然,作為架構(gòu)師還需要一個(gè)非常重要的技能篮条,就是充分的溝通弟头,完成系統(tǒng)的設(shè)計(jì)只是萬(wàn)里長(zhǎng)征的第一步,設(shè)計(jì)思想需要充分的傳達(dá)給團(tuán)隊(duì)中涉茧,并且從團(tuán)隊(duì)中得到相應(yīng)的反饋亮瓷,對(duì)方案進(jìn)行調(diào)整,不斷完善降瞳,只有在團(tuán)隊(duì)中所有人都了解領(lǐng)悟了你的設(shè)計(jì)之后嘱支,后續(xù)的推進(jìn)包括項(xiàng)目的實(shí)施才能夠變得順暢,細(xì)節(jié)是魔鬼挣饥,在后續(xù)的執(zhí)行過(guò)程中除师,可能會(huì)面臨各種問(wèn)題,涉及到的方案調(diào)整扔枫,溝通協(xié)調(diào)是不可避免的汛聚,作為架構(gòu)師來(lái)說(shuō),需要有充分的準(zhǔn)備短荐,好的架構(gòu)師能夠帶領(lǐng)團(tuán)隊(duì)高歌猛進(jìn)倚舀,而不稱職的架構(gòu)師最終會(huì)導(dǎo)致矛盾重重,對(duì)于合作的團(tuán)隊(duì)來(lái)說(shuō)忍宋,需要確認(rèn)可能的風(fēng)險(xiǎn)痕貌,包括接口,時(shí)間節(jié)點(diǎn)糠排,兼容性舵稠,對(duì)接可能遇到的技術(shù)問(wèn)題,對(duì)于可能遇到的風(fēng)險(xiǎn),架構(gòu)師必須了然于胸哺徊,提前準(zhǔn)備室琢,從容應(yīng)對(duì)。
Linus Torvalds說(shuō)落追,
Talk is cheap, show me the code.
但是我想說(shuō)的是盈滴,
Talk is not cheap, talk is important too!
很多人會(huì)問(wèn),架構(gòu)師到底要不要寫(xiě)代碼轿钠,首先巢钓,個(gè)人認(rèn)為,架構(gòu)師是需要寫(xiě)代碼的谣膳,無(wú)奈時(shí)間是有限的竿报,項(xiàng)目的規(guī)模越大铅乡,所需要思考的細(xì)節(jié)點(diǎn)越多继谚,自然而然花費(fèi)的時(shí)間越多;除此之外阵幸,作為架構(gòu)師的你還需要傳播布道花履,告訴所有人你理解的架構(gòu)是什么樣子,告訴大家怎么做如何做挚赊,核心的目標(biāo)是什么诡壁,核心的風(fēng)險(xiǎn)是什么;架構(gòu)師還需要協(xié)調(diào)各個(gè)依賴的關(guān)聯(lián)系統(tǒng)荠割,告訴其他人你要做一件什么事情妹卿,需要其他人怎么配合,做這件事的價(jià)值以及其他人為何要配合你蔑鹦,這同樣需要花費(fèi)大量的時(shí)間夺克,那么,在剩下不多的時(shí)間里嚎朽,架構(gòu)師能寫(xiě)的代碼可能不多铺纽,但是,為了讓你設(shè)計(jì)的系統(tǒng)不脫離現(xiàn)實(shí)哟忍,你必須寫(xiě)代碼狡门,必須Review核心關(guān)鍵代碼,確保整體架構(gòu)的思路得到貫徹锅很,確保你的設(shè)計(jì)是易于實(shí)施的其馏,確保潛在的風(fēng)險(xiǎn)得到妥善的控制,特別是在有新技術(shù)引入的情況下爆安,原型驗(yàn)證是必不可少的步驟尝偎。有種觀點(diǎn)認(rèn)為,架構(gòu)師必須是代碼貢獻(xiàn)最多的,一個(gè)人寫(xiě)代碼致扯,自然不需統(tǒng)一思想肤寝,但是實(shí)際上這很難做到,作為架構(gòu)師你得記住抖僵,不是你一個(gè)人在奮斗鲤看,不要讓自己成為團(tuán)隊(duì)的瓶頸,但是耍群,我同樣也不贊成架構(gòu)師完全不編碼义桂,不親身體驗(yàn)過(guò),有的風(fēng)險(xiǎn)是很難事先做出判斷的蹈垢,何況技術(shù)本身也在發(fā)展慷吊,今天的經(jīng)驗(yàn)放在明天不一定有效,作為程序員的最基本技能曹抬,編碼是你學(xué)習(xí)和積累的最直接的方式溉瓶。
架構(gòu)師也是一個(gè)普通人,一天只有24小時(shí)谤民,需要花費(fèi)很多時(shí)間進(jìn)行方案設(shè)計(jì)堰酿,技術(shù)合理性思考,原型驗(yàn)證张足,還需要花費(fèi)大量的時(shí)間給團(tuán)隊(duì)傳達(dá)設(shè)計(jì)思想和目標(biāo)触创,為何這樣設(shè)計(jì),這樣設(shè)計(jì)有什么好處为牍,不這樣設(shè)計(jì)會(huì)有什么樣的問(wèn)題哼绑,人是最復(fù)雜的生物,程序員都是非常有個(gè)性并且非常聰明的碉咆,統(tǒng)一思想統(tǒng)一目標(biāo)是一個(gè)非常艱巨的任務(wù)抖韩,一千個(gè)人心中有一千個(gè)哈姆雷特,同樣吟逝,做一件事情可能也有不同的方法帽蝶,方法太多有時(shí)候并不是好事,作為架構(gòu)師块攒,需要找出最合適的方法励稳,并讓它得到大家認(rèn)可,這并非是把個(gè)人目標(biāo)轉(zhuǎn)化為團(tuán)隊(duì)目標(biāo)的過(guò)程囱井,而是不斷地溝通不斷的改進(jìn)演化之后驹尼,在大家充分參與的前提下找到的最適合當(dāng)前業(yè)務(wù)場(chǎng)景的方案。
對(duì)未來(lái)你有著怎樣的規(guī)劃和期許庞呕?
賢哥:技術(shù)這條路注定不是坦途新翎,碼農(nóng)大多數(shù)時(shí)候的生活是枯燥無(wú)味的程帕,并且這又是一個(gè)學(xué)無(wú)止境的行業(yè),技術(shù)的更新?lián)Q代非车貑快愁拭,失敗的糾結(jié),苦思冥想的無(wú)奈亏吝,成功的喜悅岭埠,其中的酸甜苦辣,我想只有真正的碼農(nóng)才能體會(huì)蔚鸥。
近期來(lái)看惜论,應(yīng)該會(huì)繼續(xù)專注于直播,阿里在電商領(lǐng)域積累了豐富的經(jīng)驗(yàn)止喷,但是對(duì)于直播來(lái)說(shuō)還屬于一個(gè)有待成熟的領(lǐng)域馆类,還有很大的提升空間,技術(shù)挑戰(zhàn)也是比較大的弹谁,后續(xù)希望能夠做一些事情乾巧,降低直播的門檻,降低資源的消耗僵闯,提高服務(wù)的穩(wěn)定性卧抗。
就跟《戰(zhàn)爭(zhēng)之王》這部電影里尤里·奧洛夫(Yuri Orlov)的經(jīng)典臺(tái)詞所說(shuō)的一樣藤滥,人總想在有生之年做件大事鳖粟,只是暫時(shí)還沒(méi)想好要做什么,誠(chéng)然拙绊,我不會(huì)跟尤里一樣去販賣軍火向图,社會(huì)的發(fā)展和變化太快,很難預(yù)料自己五年之后會(huì)專注于什么标沪,從事哪方面的工作榄攀,但是,作為一個(gè)熱愛(ài)技術(shù)金句,喜歡專研的人檩赢,應(yīng)該還是會(huì)是做跟技術(shù)、跟工程能扯上點(diǎn)關(guān)系的事情违寞。
最后贞瞒,想給看這篇文章的讀者說(shuō)些什么?
賢哥:當(dāng)初畢業(yè)找工作的時(shí)候趁曼,說(shuō)實(shí)話也沒(méi)想過(guò)說(shuō)一份工作會(huì)干這么長(zhǎng)時(shí)間军浆,而且后面可能還要繼續(xù)做下去很長(zhǎng)時(shí)間,實(shí)際上畢業(yè)的第一份工作非常重要挡闰,因?yàn)楫?dāng)你開(kāi)始工作之后乒融,你將不再是一張白紙掰盘,而你后續(xù)再去找工作的時(shí)候,前面的工作經(jīng)歷將會(huì)是很重要的參考赞季,第一份工作將很大程度影響你后續(xù)工作的大方向愧捕,后續(xù)再想要轉(zhuǎn)型,可所付出的努力和冒的風(fēng)險(xiǎn)可能更大申钩。
選擇有時(shí)候很重要晃财,首先得清楚自己喜歡做什么樣的工作,因?yàn)樽鲎约合矚g做的事情典蜕,你更愿意付出断盛,不會(huì)覺(jué)得辛苦,更不會(huì)覺(jué)得痛苦愉舔,而是樂(lè)在其中钢猛,工作是一件長(zhǎng)期的事情,因此轩缤,值得你好好想想自己到底喜歡做什么命迈。
另外就是看后續(xù)的成長(zhǎng)空間,一滴水到了一杯奶中火的,水就變成了奶壶愤,一滴奶到了一杯水中,奶就變成了水馏鹤,有可能某個(gè)公司A給你的offer多了1-2K征椒,而公司B卻能夠提供給你一個(gè)更大的舞臺(tái)去發(fā)揮,去成長(zhǎng)湃累,給你提供一套系統(tǒng)的培訓(xùn)和成長(zhǎng)體系勃救,并且周圍都是業(yè)界大牛,此時(shí)的選擇治力,考驗(yàn)著你的智慧蒙秒。
短期的1-2K,從長(zhǎng)遠(yuǎn)來(lái)看宵统,實(shí)際上真的不算什么晕讲,但是損失可能是長(zhǎng)期的發(fā)展空間,那有人說(shuō)马澈,工資給的高不說(shuō)明更重視么瓢省,話雖沒(méi)錯(cuò),但是去到一個(gè)沒(méi)有發(fā)展空間的公司箭券,或者已經(jīng)是夕陽(yáng)產(chǎn)業(yè)净捅,也許你確實(shí)很優(yōu)秀,可能你的高度就代表了公司最高的高度辩块,那么你的空間在哪蛔六,這實(shí)際上是一個(gè)雞頭鳳尾的抉擇問(wèn)題荆永,選擇一個(gè)更有空間更有潛力的公司,可能剛開(kāi)始你在團(tuán)隊(duì)中并不是那么出色国章,但是具钥,認(rèn)真工作幾年后,你再出去跟同齡人比液兽,區(qū)別還是蠻大的骂删,并且,優(yōu)秀四啰、成熟的公司會(huì)有一套相對(duì)公平的評(píng)價(jià)機(jī)制宁玫,總的來(lái)講,會(huì)讓足夠優(yōu)秀并且給公司創(chuàng)造更多價(jià)值的人柑晒,得到相應(yīng)的回報(bào)欧瘪,所以也不用擔(dān)心回報(bào)的問(wèn)題。實(shí)際上HR也不傻匙赞,你得到的回報(bào)可能是經(jīng)濟(jì)上的回報(bào)+成長(zhǎng)空間的總和佛掖,而兩部分加起來(lái),大部分公司給出的價(jià)位應(yīng)該是差不多的涌庭。
機(jī)會(huì)是總是留給有準(zhǔn)備的人芥被,選擇很重要,堅(jiān)持有時(shí)候也很重要坐榆,做事情得要能沉的下心拴魄,不要怕困難,人生就像騎單車猛拴,想保持平衡就得往前走羹铅。