教育培訓
軟件(jiàn)IT
手機(jī)數(shù)碼
鐘(zhōng)表珠寶
購(gòu)物(wù)商城(chéng)
地(dì)産行(xíng)業(yè)
上(shàng)市(shì)公司
數(shù)碼電(diàn)器(qì)
美(měi)容護膚
裝飾設計(jì)
金(jīn)融投資
旅遊行(xíng)業(yè)
LED
節能(néng)環保
物(wù)流運輸
其他(tā)

發布來(lái)源:武漢瑞傑時代網絡科技有限公司
發布時(shí)間(jiān):2024.12.03
周颢,2001年(nián)畢業(yè)于華南(nán)理('σ$lǐ)工(gōng)大(dà)學,計(jì)算(suàn)機(jī)碩士。2π &©005年(nián)加入騰訊廣州研發部,曆任QQ郵箱架構師(sh™∞≠ī),廣研技(jì)術(shù)總監,T4技(jì)術(shù)專家(jiā)×∞☆>,微(wēi)信中心助理(lǐ)總經理(lǐ)。 ¶×δ
騰訊廣研助理(lǐ)總經理(lǐ)、微(wēi)✔<®♦信技(jì)術(shù)總監 周颢 CSDN配圖 ™δ'
周颢把微(wēi)信的(de)成功歸±"結于騰訊式的(de)“三位一(yī)體(tǐ)”策略:即産品精準、♣ ×項目敏捷、技(jì)術(shù)支撐。微(wēi•≈≥)信的(de)成功是(shì)在三個(gè)方面的(d₹≥e)結合比較好(hǎo),能(néng)夠超出' π絕大(dà)多(duō)數(shù)同行∏€(xíng)或對(duì)手,使得(de)微♣σ(wēi)信走到(dào)比較前的(de)位置。≠₹→所謂産品精準,通(tōng)俗的(de)講就(jiù)是(shì)在恰當的(d→≈≠e)時(shí)機(jī)做(zuò)了(le)恰當的(de•↑)事(shì),推出了(le)重量級功能(néng),在合适的(d∑→e)時(shí)間(jiān)以符合大(dà←∑♦)家(jiā)需求的(de)方式推出去(qù)。他 φ'(tā)認為(wèi)在整個(gè)微(wēi)信的♦≈₹®(de)成功中,産品精準占了(le)很(hěn)大(dà)一(yī)部分§δ(fēn)權重。
敏捷是(shì)一(yī)種态度 敏捷就(jiù)是(shì)試錯(c↓&≥¶uò)
微(wēi)信研發團隊裡(lǐ)鼓勵一(yī)種>δ≥試錯(cuò)的(de)信仰:他(tā)們堅信,在互聯網開(kāi)發裡(l ↑π≠ǐ),如(rú)果能(néng)夠有(yǒγλu)一(yī)個(gè)團隊在更短(duǎn)的(de)時(s↕∞hí)間(jiān)內(nèi)嘗試了(le)更多(duō)機≤✘≤±(jī)會(huì)(并能(néng)改進過來(lái)),就(jiù)能₹↕(néng)有(yǒu)(更多(duō)的(de))機(jī)會(huì)勝÷™♦出。敏捷是(shì)一(yī)種态度,在軟件(jiàn)開(kāi)發過程<∏中,項目管理(lǐ)者都(dōu)會(huì)非常↕§忌諱“變更”這(zhè)個(gè)詞,但(dàn)是(sh≤"δ€ì)在微(wēi)信的(de)項目運作(zuò)中是(shì)不(bù)可(k≠€♦ě)以的(de)。因為(wèi)微(wēi)信必須要(yào)Ω↓≤€容忍說(shuō)哪怕在發布前的(de)十分(fēn)鐘(zhōn±∞↕g),也(yě)要(yào)允許他(tā&✔≠≤)變更。這(zhè)是(shì)非常大(dà)的(de)挑戰,≈★↔因為(wèi)打破了(le)所有(yǒu♦£®✔)傳統項目開(kāi)發的(de)常識。所有(yǒu)人÷ (rén)都(dōu)說(shuō)不(bù)可(kě)能•&↓(néng)做(zuò)到(dào)的(de),但(dàn)→微(wēi)信做(zuò)到(dào)了(le)。πγ≈研發團隊所做(zuò)的(de)一(yī)切×÷φ★都(dōu)是(shì)要(yào)給産品決策者有(yǒu)大(dà)的(d↔§σe)自(zì)由度,而這(zhè)個(gè)決策正是(shì)微(wē♣∞✘i)信能(néng)夠勝出的(de)關鍵 >。
海(hǎi)量系統上(shàng)的(de)敏捷 無異Ωφ<€于懸崖邊的(de)跳(tiào)舞(wǔ)
敏捷有(yǒu)很(hěn)多(duō)困© §境,如(rú)果做(zuò)一(yī)個(gè)單機(jī)₹₽版程序,是(shì)可(kě)以做(zuò)到(dào)很(hěn)敏捷的(∞♦de),但(dàn)是(shì)騰訊正在運作(zuò)的(de)是(shì)•✘一(yī)個(gè)海(hǎi)量系統,有(yǒu)千萬級用(yòng)戶同時'₩(shí)在線,在一(yī)個(gè)單獨的(de∏α♠)功能(néng)上(shàng)每天有(yǒu)百億級的(de)訪∏↑σ∏問(wèn),同時(shí)還(hái)要(y<>ào)保證99.95%的(de)可(kě)用(yòng)性。在海<α•(hǎi)量系統上(shàng)應對(duì)項目開(kāε↔i)發會(huì)有(yǒu)很(hěn)嚴謹的(de)規範,都(dō≈λ↔u)說(shuō)要(yào)盡可(kě)能(néng)少(shǎo)的(d>αe)變化(huà),因為(wèi)90%-95%的(de)錯(cuò)誤δ↑×都(dōu)是(shì)在變更中産生(shēng)的(de),÷σ$如(rú)果系統一(yī)直不(bù)變更會(huì)獲得(de)®α✔♦非常高(gāo)的(de)穩定度,但(dàn)是(shì)微(♣∏wēi)信就(jiù)是(shì)要(yào)在懸崖邊跳(tiào)舞(wǔ ∏☆♠)。微(wēi)信的(de)研發團隊要(yào)做(z®☆uò)一(yī)些(xiē)事(shì)情,讓敏捷開(kāi)發變≥≠≠↑得(de)更簡單。
如(rú)何做(zuò)到(dào)這(zhè)一(yī)切?周颢認為(×§wèi),先,必須建立起一(yī)種狂熱(rè)的(de)技(jì)δ®α術(shù)信念,就(jiù)是(shì)一(yī)定是(shì)→π©↔可(kě)以做(zuò)到(dào)的(dλ✘ e)。然後,需要(yào)用(yòng)一(y≤ €¥ī)些(xiē)穩固的(de)技(jì)術(shù)(理(lǐ)念)來(lá✘±↑i)支撐,例如(rú)大(dà)系統小(xiǎo↕←)做(zuò)、讓一(yī)切可(kě)擴± 展、必須有(yǒu)基礎組件(jiàn)、輕松上(shà ≤ng)線(灰度、灰度、再灰度;精細監控;迅速響應)...等等來σ&(lái)支撐。
四大(dà)法器(qì):大(dà)系統小(xiǎo)做(zuò)、讓一(yī)切可(k™↔ě)擴展、要(yào)有(yǒu)基礎組件(jià¥δ™ n)、輕松上(shàng)線
大(dà)系統小(xiǎo)做(z£™≠uò):當設計(jì)龐大(dà)系統的(de)時(shí)候<∏→,應該盡量分(fēn)割成更小(xiǎo)的(de)顆粒,使得(de≠ ↔γ)項目之間(jiān)的(de)影(yǐ← ng)響是(shì)小(xiǎo)的(de)。一(yī↑π∑€)切可(kě)擴展:在高(gāo)穩定度、高(gāo)性→Ω能(néng)的(de)系統中間(jiān),為(wèi)了♠(le)穩定性能(néng)把它設計(jì)成不 €±(bù)變化(huà)的(de)系統,但(®♥dàn)為(wèi)了(le)支持敏捷需要(yào)讓一(yī)切的λ±←(de)東(dōng)西(xī)都(dōu↔≤)要(yào)變得(de)可(kě)以擴展。必須建立基礎組件(jiàn):要(©♥∑∞yào)解決複雜(zá)問(wèn)題的(de£₽)時(shí)候,需要(yào)将已有(yǒu)的(de)經驗固化(±±huà)下(xià)來(lái),固化(huà)下(xià)ε≈Ωδ來(lái)的(de)東(dōng)西(xī)$φ會(huì)成為(wèi)系統中的(de)一(yī)部分(fēn)™∞。輕松上(shàng)線:當做(zuò)≥∑φ了(le)變化(huà)并把它從(cóng)開(kāi)發環境中部署到<¶(dào)現(xiàn)有(yǒu)的(de)運營環境中去(qù),在這(z↑•hè)個(gè)過程中,“灰度”這(zhè)個(gè)詞非常關鍵,就₹✔(jiù)是(shì)在黑(hēi)和(hé)白(bái)之間(jiān)的(±φde)選擇,必須要(yào)變成一(yī)種小(xiǎo)規模☆¥Ω嘗試,再逐步擴展到(dào)海(hǎi)量過程中的(de)一(y$÷ī)個(gè)問(wèn)題。
大(dà)系統小(xiǎo)做(zuò)——僅僅把模塊變γ✔得(de)更為(wèi)清晰,這(zhè)在海↑•(hǎi)量系統設計(jì)開(kāi)發中是(shì)不(φΩ ∑bù)夠的(de),還(hái)需要(yào)在物(wù)理(lǐ)環境上(↕×πshàng)進行(xíng)分(fēn)離(lí)部署,出現(xiàn)$∑問(wèn)題的(de)時(shí)候可(kě)以快(kuài)速發現™★×₩(xiàn),并且在快(kuài)的(de)情況下(xi← ∏à)解決掉。
大(dà)系統小(xiǎo)做(zuò) 混搭模式
将不(bù)同的(de)應用(yòng)邏↑σγ輯物(wù)理(lǐ)分(fēn)割獨立出來(lái),用(yòβ £±ng)戶注冊登錄、LBS邏輯、搖一(yī)搖邏輯、漂流瓶λ≤↓邏輯、消息邏輯獨立開(kāi)來(lái)。把關鍵♠★<的(de)邏輯混搭在一(yī)起,當所有(yǒu)的(ε'de)邏輯部署在同一(yī)個(gè)服務器(qì)上(shàng),确實也↔<(yě)會(huì)帶來(lái)很(hěn)大(dà)敏捷上(shàng)的×☆ (de)好(hǎo)處,因為(wèi)不(bù∏♣)需要(yào)額外(wài)的(de)考慮部署和(hé)監控的(de)☆≥問(wèn)題。在整個(gè)微(wēi≈™©∞)信的(de)邏輯中,可(kě)能(néng)現(xiàn)在已經有(yǒu≥<)上(shàng)百種不(bù)同的(de)邏輯,因為(wèi)會(huì ×)在邏輯的(de)分(fēn)割上(sh↕δ"àng)拆分(fēn)成8-10種做(zuò)↔♥&分(fēn)離(lí)部署。
一(yī)切可(kě)擴展——網絡協議(yì)可(k♣↕↑ě)擴展、數(shù)據存儲可(kě)擴展
擴展的(de)關鍵點有(yǒu)兩塊。一(yī)個(gè)是σ•(shì)網絡協議(yì)需要(yào)擴展,當要(yào)升級一(yīπ§™)個(gè)新功能(néng)的(de)時( ±'>shí)候,會(huì)有(yǒu)一(yī)些(xiē)比較大(dà)的(d♠>e)困難,所以所有(yǒu)協議(yì)設計(¶¥♦≈jì)都(dōu)比較向前兼容,但(dàn)是(shì)向前兼©♣→★容還(hái)是(shì)不(bù)夠的(de),因為(wèi)網絡協議('₩yì)設計(jì)本身(shēn)有(yǒu)非常'✘多(duō)的(de)功能(néng)也(yě)會(huì)有("β±∞yǒu)比較大(dà)的(de)字段,相(xiàng)關的(de)代碼可(k€β↔ě)能(néng)會(huì)有(yǒu)數(shù)千行(xíng)©×¥,這(zhè)一(yī)塊不(bù)能(néng)通(tōng)過σ' £手寫方式完成。可(kě)以通(tōng)"€過XML描述,再通(tōng)過工(gōng)具自(zì)動♥∏÷<生(shēng)成所有(yǒu)的(de)代碼,這(zhè)是(shì)微±α(wēi)信獲得(de)快(kuài)速開(kāi)發的±∑"×(de)一(yī)個(gè)重要(yào)的(de)點Ω≥。
另外(wài)一(yī)塊就(jiù)是(shì)在數(shùβ×±♦)據存儲方面是(shì)必須可(kě)擴展的(de)。在2005年★★(nián)絕大(dà)多(duō)數(shù)海(hǎi)量系統&"的(de)設計(jì)都(dōu)是(shì)采用(yòng↓✘♥)固定字段的(de)存儲,但(dàn)是(shì)在現(xiàn)↓ 代系統中會(huì)意識到(dào)這(zhè)個(gè)問(wèn)題,會≈•★(huì)采用(yòng)KV或者TLV的(de)方式,微(wēi λε™)信也(yě)做(zuò)了(le)不(bù)同&←✔γ的(de)設計(jì)。
把複雜(zá)邏輯都(dōu)固化(huà)下(xiλσ±≤à)來(lái),成為(wèi)基礎軟件(jiàn)。在微(wēi)信後台會(huì)有(yǒu)幾種不(bù)同的(de↑♥)基礎組件(jiàn)。大(dà)緻包括:
Svrkit——Client/Serv"≠∞er自(zì)動代碼生(shēng)成框≠¥架:10分(fēn)鐘(zhōng)搭建內 ☆(nèi)部服務器(qì)LogicServer— >< —邏輯容器(qì):随時(shí)添加新邏輯OssAgen✔×'♣t——監控/統計(jì)框架:所見(jiàn)即所得(de)的(de)監控報( ≥ bào)表存儲組件(jiàn)——屏蔽容災/擴容↑∏等複雜(zá)問(wèn)題
灰度、灰度、再灰度
在變更後的(de)部署方式上(shàng),微(wē£ φi)信在一(yī)些(xiē)規則會(hu$≥•←ì)限定不(bù)能(néng)一(yī)次把所✔←♠$有(yǒu)的(de)邏輯變更上(shàng)去(qù),每一( >÷©yī)次變更一(yī)小(xiǎo)點觀察到(dào)每一(™βφ yī)個(gè)環節沒有(yǒu)問(w耮≤n)題的(de)時(shí)候,才能(néng)布局到(dào)全網上↓♦↑(shàng)去(qù)。微(wēi)信後台每一(yī)天可(kě)以§∞支撐超過20個(gè)後台變更,在業(yè)界來(lái)說(shuō±₹↔),通(tōng)常做(zuò)到(dào)5個(gè)已經是(☆&shì)比較快(kuài)了(le),但(dàn)是(shì)微(wēi)€♦÷Ω信可(kě)以做(zuò)到(dào)快(kuài)4倍£✘'÷。
騰訊內(nèi)部的(de)上(shà'®ng)線系統
而所謂灰度發布,是(shì)指在黑(hēi)與白(bái)之間(jiān),能(néng)★☆夠平滑過渡的(de)一(yī)種發布方式。AB te₩δst就(jiù)是(shì)一(yī)種灰♠§度發布方式,讓一(yī)部用(yòng)戶繼續用(yòng)A™•π,一(yī)部分(fēn)用(yòng)∑☆₩ 戶開(kāi)始用(yòng)B,如(rú ™)果用(yòng)戶對(duì)B沒有(yǒu)什(←≤shén)麽反對(duì)意見(jiàn&♣♠),那(nà)麽逐步擴大(dà)範圍,把所有(yǒu)用¶γ(yòng)戶都(dōu)遷移到(dào↔™$)B上(shàng)面 來(lái)。灰度發布可(kě)以保證整體(tǐ)系統♥§'的(de)穩定,在初始灰度的(de)時(shí)候就(ji'≥λφù)可(kě)以發現(xiàn)、調整問(wèn)題,以保證其影(yǐn♦"g)響度。(在騰訊,灰度發布是(shì)常采用(yòng)的(deα♠∞)發布方式之一(yī))
孫子(zǐ)兵(bīng)法:古之所謂善戰者,勝于易勝者也γδ(yě)
常識上(shàng),解決一(yī)♥©∏個(gè)複雜(zá)問(wèn)題的(de)時(shí)候,會(huì)用 $¥☆(yòng)高(gāo)明(míng)的(de)技(≤Ω♠jì)巧解決複雜(zá)的(de)問(wèn)題,這(z∏ hè)個(gè)不(bù)是(shì)微♥φ♥(wēi)信團隊的(de)目标,他(tā)們追₩€π₩求的(de)要(yào)做(zuò)到(dào)讓所有(yǒ₽ u)問(wèn)題很(hěn)自(zì)然和 ☆"(hé)簡單的(de)方式解決掉。在周颢看(kàn)來(lái),微(wēiβδ™)信架構的(de)技(jì)術(shù)複雜(zá)點在↓><§四個(gè)要(yào)點:協議(yì)、容災、輕重、監控。$∑↕
微(wēi)信架構
協議(yì)。手機(jī)終端跟後台服務器(qì)之間(jiān)≥≤σ 的(de)交互協議(yì),這(zhè)個(φ♦♠gè)協議(yì)的(de)設計(jì)是(shì)整個(gè)系™'統的(de)骨架,在這(zhè)一(yī)點做(ααεzuò)好(hǎo)設計(jì)可(kě)λ&以使得(de)系統的(de)複雜(zá)度大(dà)大↓₽(dà)降低(dī)。容災。當系統出現(xià '®n)了(le)若幹服務器(qì)或若幹支架(宕機(jī)的(de) 時(shí)候),仍然需要(yào)讓系"π統盡可(kě)能(néng)的(de)提≠€供正常的(de)服務。輕重。如(rú)何在系統架構中分(fēn)布$§功能(néng),在哪一(yī)個(gè)點實現(xiàn)哪♣★>α一(yī)個(gè)功能(néng),代表系統中間(jiān)的(deσσ)功能(néng)配置。監控。為(wèi₽φ€≠)系統提供一(yī)個(gè)智能(néng₩")儀表盤。
在協議(yì)設計(jì)上(shàng),移動互÷<♠聯網和(hé)常規互聯網有(yǒu)很(hěn)λ↔↕Ω大(dà)的(de)區(qū)别。先有(yǒu)CM←βWAP和(hé)CMNET的(de)不(bù)同"♥,在現(xiàn)在有(yǒu)相(xiàng)當多(d÷ ©uō)的(de)手機(jī)用(yòng)戶使用(yòγ♦ng)WMWAP連接,還(hái)有(yǒu)就φΩ¶(jiù)是(shì)在線和(hé)離(lí)線✘®×的(de)概念,當QQ下(xià)線的(¶§¶de)時(shí)候叫離(lí)線,當你(nǐ)登錄的(de)時 →(shí)候叫在線。但(dàn)是(shì)在移動♣₽↑€互聯網這(zhè)兩個(gè)概念比較模糊。從(cóng)微(wēi)信的(¶♠∞de)設計(jì)中,不(bù)管在線還λ±<&(hái)是(shì)離(lí)線系統表現±≠β(xiàn)都(dōu)應該是(shì)一(yī)≥₹≈$緻的(de)。還(hái)有(yǒu)一(× yī)個(gè)是(shì)連接不(bù)穩定的(de)問(wèn)題,由于手γ機(jī)信号強弱的(de)變化(huà),當時(shí)信号很(h→≤ ěn)好(hǎo),5秒(miǎo)鐘(zhōng)走到(dào)信号♠∞不(bù)好(hǎo)的(de)地(dì)區(qū),連↕β接就(jiù)必須斷掉。這(zhè)個(gè∞β)中間(jiān)帶來(lái)不(bù)穩定的(de)因素為(wèi≥↔)協議(yì)設計(jì)帶來(lái) φ→£較大(dà)困難。此外(wài)就(ji$>Ωù)是(shì)資費(fèi)敏感的(de$∏)問(wèn)題,因為(wèi)移動互聯網是(shì)按照 α₩€(zhào)流量計(jì)費(fèi)的(de),這($πzhè)個(gè)計(jì)費(fèi)會(huì)使得(de♦★≤ )在協議(yì)設計(jì)中如(rú)何小(xiǎo)化(huà)傳輸的(d→αe)問(wèn)題。後就(jiù)是(shì)高(gāo)延↕→₽遲的(de)問(wèn)題。
對(duì)此,業(yè)界标準的(de)解決方案:₹ Messaging And Presence Protocol:π∑©1)XMPP;2)SIP/SIMPLE。它的(de)優點是(shì)簡單₽§€,大(dà)量開(kāi)源實現(xiàn)。而缺點同樣明(mí☆>>₩ng)顯:1)流量大(dà):狀态初始化λΩ✔(huà);2)消息不(bù)可(kě)靠。
微(wēi)信在系統中做(zuò)了(le)特殊設計(>' jì),叫SYNC協議(yì),是(shì)參考Actives©✔yec來(lái)實現(xiàn)的(de)®¶&¶。特點先是(shì)基于狀态同步的(de)協議(yì),↕→∑"假定說(shuō)收發消息本身(shēn)是(shδ×ì)狀态同步的(de)過程,假定終端和(hé)服務器(qì)狀态< ✘已經被遲了(le),在服務器(qì)端收到(dào)新的(¥λ>de)消息,當客戶端、終端向服務器(qì)對(&←♦duì)接的(de)時(shí)候,收取消息×÷的(de)過程實際上(shàng)可(kě✔< ↑)以簡單的(de)歸納為(wèi)狀态同步的(de)過程,收消息以及 收取你(nǐ)好(hǎo)友(yǒu)狀态更新都(dōu)是(shì)≥相(xiàng)同的(de)。在這(zhè)樣的(de)模式之下&Ω(xià),我們會(huì)也(yě)許會(huì)把交互的(de)模式統一( δ₹♥yī)化(huà),隻需要(yào)推送一(yī)個(gè)消息到(dào)達σ©→±的(de)通(tōng)知(zhī)就(←α→εjiù)可(kě)以了(le),終端收到(dào)這(zhè)→§¥個(gè)通(tōng)知(zhī)就(π↓ £jiù)來(lái)做(zuò)消息的(Ω ÷λde)同步。在這(zhè)樣的(de)簡化(huà)模式之下(xià),安≠"卓和(hé)塞班都(dōu)可(kě)以得(de)☆&→Ω到(dào)統一(yī)。這(zhè)樣的(de)系統本身(shēn)♠∏&的(de)實現(xiàn)是(shì)更為(wèi)複雜(zá)的(de≈ φ),但(dàn)是(shì)獲得(de)很(hěn)β₩¶€多(duō)額外(wài)的(de)好(hǎo)處。
讓剩下(xià)系統實現(xiàn)的(de)部分(↑∏fēn)更加簡單,簡化(huà)了(le)交互模式,狀态同步可(kě)以σφ∑通(tōng)過狀态同步的(de)差值獲得(de)≤✔ 小(xiǎo)的(de)數(shù)據變更,通(tō ₽βng)過增量的(de)傳輸得(de)到(dào)小(xiǎo)的( ≥£de)數(shù)據傳輸量。通(tōng)過這(zhè)樣的(de)協議(yì×♣¥)設計(jì),微(wēi)信可(kě)以☆®÷♠确保消息是(shì)穩定到(dào)達的(de),而且是(shì)按序到(dà♥&o)達。引用(yòng)一(yī)句俗話(h×≤♣♥uà):比它炫的(de)沒它簡單,比它簡單的(de)沒& ≤它快(kuài),沒誰比他(tā)更快(kuài→♣©Ω),哪怕在GPRS下(xià),微(wēi)Ωδ信也(yě)能(néng)把進度條輕易推到(dào)底 ←∏。
追求設計(jì)的(de)團隊不(bù)能(néng)勝任海(hǎiα☆ )量服務
在容災之前面向壞的(de)思考,如(rú)果系統真的(de☆α∑₩)挂了(le),需要(yào)做(zuò)一(yī)些(xiē±β)事(shì)情,先是(shì)防止雪(xuě)崩,避免蝴蝶效應。如(r¶$§₹ú)果關注春節訂火(huǒ)車(chē)票"™γ(piào)就(jiù)知(zhī)道(dào)了(le),用(yòng)¥戶的(de)請(qǐng)求量會(huì)因為(wèi✔→≤)系統服務不(bù)了(le)而不(bù)斷的(de)重試,意味€&<¶著(zhe)發生(shēng)雪(xuě)崩的σδ(de)時(shí)候,系統可(kě)能(néng)會(huì)承載原先3-₹€10倍的(de)流量,使得(de)所有(yǒu)的(de←£)事(shì)情更加惡化(huà)。所以微(wēi)Ω®§✔信有(yǒu)很(hěn)多(duō)“放₩ &♦(fàng)雪(xuě)”功能(néng)的 ★σ(de)設計(jì)。第二個(gè)詞是(shì) ♠柔性可(kě)用(yòng),在任何的(de)系統中✔≈不(bù)要(yào)追求設計(jì),追求設計(jì)的(de)是(φ♥★®shì)團隊是(shì)不(bù)能(n$↔δéng)勝任海(hǎi)量服務的(de)。如(rú)果在一(yī)個(gè§♣)系統出現(xiàn)問(wèn)題的(de)時(shí)$π→候,這(zhè)個(gè)系統就(jiù)挂¶₽→♥了(le),那(nà)麽這(zhè)是(shì)一(yī)£≥個(gè)不(bù)好(hǎo)的(de)設計(jì),知(zh↑'ī)名的(de)做(zuò)法是(shì)提供0-1中₽€★♥間(jiān)的(de)選擇。舉一(yī)個(gè)例子(zǐ)≥≠>,當一(yī)個(gè)用(yòng)戶向另外(wài)一(yī•γ)個(gè)用(yòng)戶發消息的(de)時±∏(shí)候,可(kě)能(néng)會(huì)通(tōng)過一(yīδ↕∑)個(gè)垃圾信息過濾的(de)檢測,如(£♠§rú)果垃圾信息過濾這(zhè)個(gè)模≥'∏塊突然挂掉了(le),這(zhè)個(gè)消息難道(dào)就♦✘(jiù)不(bù)能(néng)達到(dào)了(le)嗎(ma)?在這(z₽↕₹hè)樣的(de)情況下(xià),要(yào)忽略掉這(zhè)個(gè)錯₽•≥(cuò)誤,使得(de)消息正常達到(dàoδ₩←)對(duì)方。要(yào)精确定位出哪一(>ε×yī)個(gè)環節是(shì)為(wèi)重要(yào)的(¥₩®de),把不(bù)是(shì)重要(yà®φ&o)的(de)錯(cuò)誤盡可(kě)能(néng)的(d★'e)忽略掉。當不(bù)能(néng)做(zuò)到 $ (dào)的(de)時(shí)候,盡可(kě)能(néng)為(wèi)用(←♣♦λyòng)戶提供服務。另外(wài)一(yī)個(gè)重要(yà÷≠♠®o)方面叫做(zuò)“保護點前置”,前的(de)一(yī)個(gè)點>>¥♥就(jiù)是(shì)終端,在手機(jī)終端上(shàng)蘊埋更多(β€≤duō)的(de)保護點,這(zhè)樣會(huì)為(wèi)Ω€用(yòng)戶系統赢得(de)更大(dà)的γ÷ (de)處理(lǐ)空(kōng)間(jiān)。如ε₹₽€(rú)果終端具備這(zhè)樣的(de)能(néng)↓£'力,會(huì)獲得(de)更大(dà)的(de)反應空•<(kōng)間(jiān)。
周颢介紹了(le)在微(wēi)信上(sh∑≈↓àng)具體(tǐ)容災設計(jì)的(de)做(zuò€↓)法。在所有(yǒu)的(de)容災中存儲層的(de)容災是(shì)難的(αde),一(yī)個(gè)系統的(de)設計(jì)分(fēn)為(w↑→èi)三層:接入層、邏輯層、存儲層。接入層和(hé)邏輯♥層的(de)容災都(dōu)有(yǒu)比較成熟的(de)方案€®↓。邏輯層的(de)容災相(xiàng)對(duì)來(lái)說(shuō)比 ✘↔較簡單,盡量不(bù)要(yào)有(yǒu)狀态的≤×★(de)設計(jì),比如(rú)說(shuō)當你(nǐ)做(zu£↕>ò)上(shàng)一(yī)個(gè)請(qǐng)求的(de)時(©✘¥shí)候,會(huì)保持一(yī)些(xiē)狀态,要(λσλλyào)使得(de)下(xià)一(yī↓★ ₩)個(gè)請(qǐng)求發到(dào↓§δ)下(xià)一(yī)個(gè)服務器(qì)。γε如(rú)果任何一(yī)個(gè)請(qǐng)求之γ★γ✘間(jiān)互相(xiàng)不(bù)關聯的(de)話(hπ§ uà),這(zhè)個(gè)就(jiù)是(sh∞₩"ì)無狀态的(de)設計(jì),隻要(yào)做(zuò)到(dào)這♠φλ(zhè)一(yī)點邏輯層的(de)容災可(kě)以随$↔★意的(de)切換。在回到(dào)存儲層&®'¶本身(shēn)的(de)容災設計(jì)上(shàng),相♦"(xiàng)對(duì)來(lái)說(shuō)困難一(yī)些(xiē✘÷),但(dàn)是(shì)微(wēi)信研發團隊采用(yòng)了(δ&•αle)一(yī)些(xiē)技(jì)巧δ↕,叫分(fēn)而治之,分(fēn)離(lí)業(yèπ☆∏)務場(chǎng)景,尋求簡單的(de)設計(jì),并∏'不(bù)會(huì)尋求大(dà)而同一(yī)的(de)解決方案,因為(w<λ<èi)這(zhè)樣會(huì)使得(de)系α統的(de)複雜(zá)度大(dà)幅度上(shàng)升,而§φ↑微(wēi)信會(huì)盡可(kě)能(néng)把産品♠↓拆細,尋求簡化(huà)的(de)設計(jì)。
先是(shì)主備容災,這(zhè)是✔♣§€(shì)常見(jiàn)的(de)方案。在有(yǒu)一(yī)些¥↔∑(xiē)業(yè)務場(chǎng)景中是(shì)可(k€♥★☆ě)以容忍終一(yī)緻性的(de),比如(rú)賬号系統的(de)βφ設計(jì),每天寫入賬号系統的(de)請(γ≥qǐng)求是(shì)非常少(shǎo)的(de),但∑Ω€(dàn)是(shì)訪問(wèn)的(de)請(qǐng)求非常多(dσ₽×uō),這(zhè)個(gè)差異可(kě)∏✔能(néng)會(huì)達到(dào)數(shù)萬倍的∏α(de)規模,在這(zhè)樣的(de)>£πΩ場(chǎng)景下(xià),微(wēi)信會(huì)在賬号系統£✔♠中采用(yòng)簡化(huà)的(de)方案,也(yě)可(kě)以獲♣§得(de)比較大(dà)的(de)穩定度。
SET模型+雙寫
第二種容災的(de)模式叫雙寫,兩台Ma<φ☆↕ster的(de)機(jī)器(qì),當一(yī)台機(jīΩπ¥φ)故障的(de)時(shí)候,另外(wài)一(yī)台機(j₽♣ī)還(hái)是(shì)可(kě)以>βα接收到(dào)寫請(qǐng)求,當兩台機÷ε✘→(jī)交錯(cuò)啓動的(de)時(shí)候,會(♣¶huì)得(de)到(dào)數(shù)據§Ω↕的(de)丢失。但(dàn)是(shì)有(yǒ£π☆♦u)一(yī)些(xiē)場(chǎng)景是(shì)可(kě)以容忍輕度≤數(shù)據丢失的(de),比如(rú)說(shuō)會(→♦™huì)有(yǒu)一(yī)個(gè)存儲專門(mén)記錄用(yòng)'÷∏ 戶終端的(de)類型,比如(rú)說(shuō)安卓還λ♠(hái)是(shì)塞班以及他(tā)們使用(yòng)φ α♣終端的(de)微(wēi)信版本是(shì)什(sβδ hén)麽,這(zhè)樣的(de)數(shπβù)據是(shì)可(kě)以容忍輕度數(shù♠≤£)據丢失的(de),因為(wèi)偶爾有(•φ ×yǒu)一(yī)些(xiē)丢失的(de)話(huà),下(±φ↓xià)一(yī)次訪問(wèn)會(huì)把這(zhè)些×'&(xiē)數(shù)據帶上(shàng)來(lái),會(huì)盡快 ™(kuài)的(de)修複所有(yǒu)的(de)數(shù)據。雙寫也(★πyě)是(shì)非常簡單的(de)模式。
微(wēi)信的(de)研發團隊做(zuò)¥↔₽↑了(le)一(yī)個(gè)叫Simple Quoru↕≤&♥m的(de)機(jī)制(zhì),在微(wēi)←§信的(de)後台中,同步協議(yì)有(yǒu)一(yī)個(gè)很(hě∑₹¥n)重要(yào)的(de)基石叫序列發生(shēng)∑™器(qì),這(zhè)樣的(de)一(yī)個♠★(gè)序列發生(shēng)器(qì)需要(yào)有(yǒu)極高(gā₩♦€☆o)的(de)穩定度。先可(kě)以看(kàn)到(dào)序列号有(yǒu±<§♦)一(yī)個(gè)特點永遠(yuǎn)是(shì)遞增的(de),"<∞♣用(yòng)遞增方式往前推進的(de)時(shí)候,大(dà←$£ )的(de)序列号就(jiù)是(shì)€ ®新的(de)系列号。有(yǒu)一(yī)個(gè)畢業☆ε(yè)才加入廣研的(de)畢業(yè)生(shēng)想到(∏dào)一(yī)個(gè)絕佳的(de ∞≠≥)方案,按SET分(fēn)布,從(cóng)2G減到(∏↑©dào)200K。
前輕後重 功能(néng)點後移
周颢還(hái)談到(dào)了(le)輕重♣$↑的(de)概念。這(zhè)個(gè)概念的(de)提出主要(☆₽yào)是(shì)從(cóng)終端本身(shēn)的(de)↓§←φ一(yī)些(xiē)困境所帶來(lái) ♦±的(de)。先在終端上(shàng)需要(yào)表現(xiàn)多(duōε>σσ)的(de)一(yī)個(gè)産品的(de)邏輯,邏輯非常複雜(zá)€↕®∞,變更的(de)成本也(yě)非常高(gāo),當需要(yào)修複σ♥的(de)時(shí)候必須發布一(yī)個(gè)新版本≤±¥→,這(zhè)個(gè)新版必須由自(zì✘¥♠)己下(xià)載才能(néng)完成,下(xià)載的(de←±)成本非常高(gāo)。在這(zhè)樣的(¥de)前提下(xià),如(rú)果手機(jī)終端産生(sπhēng)了(le)任何變化(huà)的(de)時(shí)候,如( ©rú)果這(zhè)個(gè)變化(huà)有(yǒu)非常大(dà)的(d©±±e)問(wèn)題就(jiù)會(huì≤)有(yǒu)極大(dà)的(de)困境,所以需要(yào♠)在每一(yī)個(gè)發布之前做(zuò)一(yī)些(xiē)充分(§≠fēn)的(de)數(shù)據,确保不(bù)會(huì)發生(shēn£βg)緻命問(wèn)題。如(rú)果一(yī)旦出±±現(xiàn)緻命問(wèn)題難以修複,需要(yào)把關鍵的(de)λ 點從(cóng)終端移到(dào)後台實現(©™≥¶xiàn),把功能(néng)點後移,來(lái)充分(fēn)發揮後台快☆≤∑ (kuài)速變更的(de)能(néng)↑®力。
接入優化(huà):從(cóng)GS£↓→↔LB到(dào)IP重定向
在接入層的(de)優化(huà),速度很(hěn)重要($§↕yào)的(de)因素,是(shì)不(bù)是(shì)能(néng)夠就δγ₩£(jiù)近(jìn)接入一(yī)個(gè)優的(de)節點↓™↓,比如(rú)說(shuō)移動用(yòng€'λ)戶知(zhī)名接入移動的(de)節點,海(hǎi)外(wài)©π♠♦的(de)用(yòng)戶可(kě)能(néng)≈需要(yào)尋找更佳的(de)路(lù)由☆Ω♠ε,有(yǒu)的(de)時(shí)候可 ≥✘(kě)能(néng)無法自(zì)動做(zuò)到(dàε×÷γo)這(zhè)一(yī)點,一(yī)點是(shì)在終端上(sh ¥☆àng)做(zuò)測速,微(wēi)信會(huì)通(tōng)過在後₩ 台IP逆向的(de)能(néng)力,通(tōng)☆∞∏ 過後台指揮微(wēi)信終端聯網的(de)能↓÷(néng)力,尋找優的(de)接入點。上(shàng)圖就(jiù)✔®是(shì)每分(fēn)鐘(zhōng)收到(dào)≥≠同一(yī)項指令曲線的(de)報(bào)表。
如(rú)何解決“偷流量”的(de)問(wèn)題——當國(guó)內(nèi)類微(wēi)信類産品≠≥發布的(de)時(shí)候出現(xiàn)一(yī)個(g♠&λè)大(dà)的(de)問(wèn)題就(jiù)是(shì)“偷流量”,當用λ≥(yòng)戶在某一(yī)些(xiē)邏輯下(xià)進行( ♦xíng)一(yī)個(gè)死循環,不(bù)斷訪問(wèn)某一£≤®(yī)些(xiē)數(shù)據,這(zhè)樣的(de)死循環是(shì)≥φ×非常可(kě)怕的(de),如(rú)果在用(yòng)戶不(bù)知(₹€zhī)覺的(de)情況之下(xià),可(kě)✔$ ₩能(néng)會(huì)在一(yī)個™(gè)小(xiǎo)時(shí)之內(nèi)偷到(d£&↔ào)數(shù)10兆甚至數(shù)百兆的(de•Ω∞)流量。有(yǒu)非常多(duō)業(yè)內(nèi)的(de)同>σ行(xíng)都(dōu)需要(yào)花(huā)大(dà)量的(de)精✔♦→力解決這(zhè)個(gè)問(wèn)題,微(wēi)信∏←研發團隊用(yòng)了(le)非常強大(dà)的(de)方式解決它。∞↕€通(tōng)過在後台建立起嚴厲的(de)監控系統,對(duì)每一(yī)個♣←£ (gè)用(yòng)戶的(de)行(xí→↓✔ng)為(wèi)做(zuò)一(yī)個(gè)監控,當發↔£σ∑現(xiàn)異常的(de)時(shí)候,後>₩γ≤台會(huì)給終端發出指令,使得(deπ♣Ω)微(wēi)信終端在一(yī)段時(s≈™↑hí)間(jiān)無法聯網,但(dàn)是♣∏(shì)可(kě)以保證用(yòng)戶流量πγ÷✔不(bù)會(huì)白(bái)白(bái)的®≈(de)使用(yòng)掉。
功能(néng)适配的(de)例子(zǐ)——期微(wēi)信版本發布的(de)時(shí)候,當時(shí)沒有(€∏yǒu)群聊的(de)功能(néng),第二版發布的(de)時( £♠®shí)候做(zuò)了(le)這(zhè)個(gè)功能(n ₽éng)。當時(shí)有(yǒu)兩個δ✔(gè)選擇,對(duì)于早期版本的(de)用(yòng)戶,因為(wè₩ ₩i)不(bù)支持群聊,就(jiù)無法享用(yòng)$☆到(dào)這(zhè)個(gè)功能(néng),但(dàn)是(shì★₹)微(wēi)信希望提供更好(hǎo)的(de)選↓₹擇,想讓早期不(bù)支持群聊的(de)版本,♦•♣也(yě)可(kě)以被拉到(dào)一(yī)個(gè)群裡"•≥(lǐ)面收消息、發消息,通(tōng)過後台功能(néngφ')的(de)适配也(yě)能(néng)做(zuò)到→<(dào)這(zhè)個(gè)事(shì)情。
分(fēn)而治之 把監控嵌入基礎框架
對(duì)于一(yī)個(gè)海(hǎi)量系統來(lái)說×€&£(shuō),一(yī)個(gè)精密的(βde)儀表盤非常重要(yào)。監控是(shì)非常痛苦的(de),對(§↓♥duì)于這(zhè)樣一(yī)個(gè)系統α≈σ∏來(lái)說(shuō),每小(xiǎo)時(sh←πí)會(huì)産生(shēng)數(shù)百G的(de)監控日(rì) ≤志(zhì)。微(wēi)信希望在1分(fē×φβn)鐘(zhōng)之內(nèi)監控的(de)數(shù)據'↓就(jiù)能(néng)夠顯示在報(bào)≤→¥表上(shàng),因為(wèi)隻有(yǒu)這(zhè)樣的(de)精準♠★•©和(hé)實時(shí)度才能(néng)夠赢☆≤♦得(de)處理(lǐ)故障的(de)時(shí)間(jiān)。微(wēi)信↔Ω≥會(huì)做(zuò)關聯統計(jì),通φ≤∑(tōng)過搖一(yī)搖加了(le)好(hǎo)友(yǒu)γ₽©,他(tā)們活躍度如(rú)何,過了(le)一(yī)段時(shí ∞)間(jiān)他(tā)們的(de)活躍度變化(huà)情況又(yòu)是♥♦(shì)如(rú)何。這(zhè)種需求是(shì✔♥φ™)需要(yào)通(tōng)過大(dà)量日(rì)δ☆φε志(zhì)的(de)關聯統計(jì)來( ®<lái)獲得(de)的(de)。研發團隊也(yě®ε₹)花(huā)了(le)一(yī)段時(shí©₹&)間(jiān)來(lái)理(lǐ)解這(←↕♦zhè)個(gè)問(wèn)題,發現(xiàn)了(le♦↔¶)中間(jiān)一(yī)個(gè)重要(yào)的(de§λΩ±)經驗叫做(zuò)“魚和(hé)熊掌不(bù)能(néng)兼得(de)♦®☆”。
為(wèi)了(le)讓監控數(shù)值更敏感,需要→✔ <(yào)把監控細化(huà)再細化(huà),上(shà≈γδ£ng)面數(shù)據表示每一(yī)欄子(zǐ)系統的(de)數€¶λ(shù)據,下(xià)面這(zhè)個(gè)是(shì)按 ×微(wēi)信版本号來(lái)劃分(fēn)的(de),這(zhè)裡(♥♣♦×lǐ)的(de)數(shù)據項是(shì)非常多(duō)。
微(wēi)信還(hái)需要(yào)采集一©'&(yī)些(xiē)異常的(de)點,如(rú)果有(yǒu)異常的(d'® $e)話(huà)會(huì)發布緊急的(de)版本,盡可(↔εkě)能(néng)快(kuài)的(de)替換它。對(duì)收發消息延時(™≠©γshí)做(zuò)的(de)監控,比如(rú)說(shuō)0—1秒(mΩ↕↔iǎo)端到(dào)端的(de)速度,會(huì)對(duì)不↑★ ∏(bù)同的(de)區(qū)段做(zuò)一(yī)些(x↓↓÷iē)統計(jì),當某一(yī)個(gè)環節出∞₩'現(xiàn)異常的(de)時(shí)候,通(tōng)常會(h♣γ×uì)在中間(jiān)的(de)延時(shí<•Ω♣)上(shàng)體(tǐ)現(xiàn)出來(lái)。有(yǒu)一(♥β±yī)個(gè)很(hěn)重要(yào)的(de)點¶♦±叫自(zì)動報(bào)警,現(xiàn)在有β♣↑&(yǒu)數(shù)千項的(de)數(sh≤÷☆ù)據,不(bù)可(kě)能(néng)每一(yī)項都(dōu)•♥✘靠人(rén)工(gōng)去(qù)看(kàn)的(de),必須要(yào)≠♦跟自(zì)動報(bào)警相(xiàng)關聯,微(wēi)信₹↑↕π有(yǒu)一(yī)些(xiē)智能(néng)的(de)算(s>✘₩uàn)法,是(shì)不(bù)是(shì)在正常的(÷₩ de)範圍內(nèi),跟曆史的(de)數(shù)值進行(xíng)•φ≥↓對(duì)比,如(rú)果有(yǒu)異常的(de)§★話(huà),會(huì)通(tōng)過短(duǎn)信、郵件(jià≥×®↔n)還(hái)有(yǒu)微(wēi)信本身(shēn)來(lái)發出報(÷←©bào)警信息。
把監控嵌入基礎框架
微(wēi)信會(huì)把監控嵌入到(dào)基礎¶≥框架裡(lǐ)面去(qù),因為(wèi∏↓•₽)并不(bù)是(shì)每一(yī)個(gè)人©'(rén)都(dōu)會(huì)意識到(dào)在需要(yào)的(de)地≥★✔(dì)方嵌入一(yī)個(gè)監控點,所以在±•β基礎框架本身(shēn)內(nèi)置很(hěn)重要(&π§≈yào)的(de)監控點,比如(rú)說(shuō)這(zhè)個(gè)表上↓'> (shàng)的(de)欄目,非常多(duō)的(de)欄✘©¶✘目大(dà)概會(huì)有(yǒu)數(shù)₹σβ₹百項的(de)欄目,都(dōu)不(bù)需要(yào)程序員(γ☆÷yuán)自(zì)己去(qù)寫,當用(yòng)基礎組件(jiàn)搭建一•♥σ✔(yī)個(gè)系統的(de)時(shí)候λ≈↔±,就(jiù)可(kě)以直接觀測系統數(shù)據。 &>δ
在談到(dào)微(wēi)信未來(lái)的(de)技(jε>ì)術(shù)挑戰時(shí),周颢先希望能(néng)夠讓微≠€(wēi)信成為(wèi)可(kě)用(yòng)性99.99↑ %的(de)系統;設計(jì)出面向現(xiàn)在10倍容量的("₹↔™de)系統以及完全的(de)IDC容災。
網上(shàng)盛傳的(de)淩晨兩點,騰♥↕₩₹訊大(dà)廈那(nà)多(duō)層大(dà)片大(♠€dà)片的(de)燈光(guāng)和(hé)樓下(xià)那(nàΩ₹)長(cháng)長(cháng)的(de↕♠¥&)出租車(chē)隊伍說(shuō)明(míng)了(le©")一(yī)切。引用(yòng)一(yī)句話(huà)做(z★£"φuò)結尾,可(kě)怕的(de)不(bù)是(shì)微(wēi)信,真≤±正可(kě)怕的(de)是(shì),比你(nǐ)比你(nǐ)更有(₹↔ yǒu)天賦的(de)團隊比你(nǐ)更努力。
咨詢相(xiàng)關問(wèn)題或預約面談,可(kě)以通(←≥♥≠tōng)過以下(xià)方式與我們聯系
業(yè)務熱(rè)線13387655359大(dà)客戶專線13543255359