? 亚洲中文字幕无码天然素人_快速裂變:見(jiàn)證微信強大后臺架構從0到1的演進(jìn)歷程(一)-天津九安特機電工程有限公司

亚洲女同成aV人片在线观看|亚洲www啪成人一区二区麻豆|亚洲国产中日韩精品综合|亚洲国产成人精品一级片|亚洲无码在线视频免费

?
歡迎訪(fǎng)問(wèn)天津九安特機電工程有限公司 簡(jiǎn)體/ 英文
快速裂變:見(jiàn)證微信強大后臺架構從0到1的演進(jìn)歷程(一)
2026-05-04 6

2011.1.21 微信正式發(fā)布??焖龠@一天距離微信項目啟動(dòng)日約為2個(gè)月。裂變就在這2個(gè)月里,見(jiàn)證架構進(jìn)歷微信從無(wú)到有,微信大家可能會(huì )好奇這期間微信后臺做的后臺最重要的事情是什么?(′?ω?`)

我想應該是以??下三件事:

微信起初定位是一個(gè)通訊工具,作為通訊工具最核心的從到程功能是收發(fā)消息。微信團隊源于廣硏團隊快速裂變??,快速ヽ(′ー`)ノ消息模型跟郵箱的裂變郵件模型也很??有淵源,??都是見(jiàn)證架構進(jìn)歷存儲轉發(fā)。

圖 1 微信消息模型

上圖展示了這一消息模型,微信消息被發(fā)出后,后臺會(huì )先在后臺臨時(shí)存儲;為使接收者能更快接收到消息,從到程會(huì )推送消息通知給接收者;最后客戶(hù)端主動(dòng)到服務(wù)器收(╯°□°)╯︵ ┻━┻取消息??焖?/p>

最初的方案是客戶(hù)端記錄一個(gè)本地數據(ju)的快照(Snapsho(′▽?zhuān)?t),需要同步數據時(shí),將Snapshot帶到服ヽ(′ー`)ノ務(wù)器,服務(wù)器通過(guò)計算Snapshot與服務(wù)器數據的差異,將差異數據發(fā)給客戶(hù)端,客戶(hù)端再保存差異數據完成同步。不過(guò)這個(gè)方案有兩個(gè)問(wèn)題:一是Snapshot會(huì )隨著(zhù)客戶(hù)端數據的增多變得越來(lái)越大,同步時(shí)ヽ(′?`)ノ流量開(kāi)銷(xiāo)大;二是客戶(hù)端每次同步都要計算Snapshot,會(huì )帶來(lái)??額外的性能開(kāi)銷(xiāo)和實(shí)現復雜度。

幾經(jīng)討論后,方案改為由服務(wù)計算Snapshot,在客戶(hù)端同步數據時(shí)跟隨??數據一起下發(fā)給客戶(hù)端,客戶(hù)端無(wú)需理解Snapshot,只需存儲起來(lái)(′▽?zhuān)?,在下次數據同步數據時(shí)帶上即可。同時(shí),Snap??shot被設計得非常精簡(jiǎn)??,是若干個(gè)Key-Value的組合,Key代表數據的類(lèi)型,Value代表給到客戶(hù)端的數據的最新版本號。Key有三個(gè),分別代表:帳戶(hù)數據、聯(lián)系人和消息。這個(gè)同步協(xié)議的一個(gè)額外好處是客戶(hù)端同步完數??據后,不需要額外的ACK協(xié)議來(lái)確認數據收取成功,同樣可以保證不會(huì )丟數據:只要(yao)客戶(hù)端拿最新的Snapshot到服務(wù)器做數據同步,服務(wù)器即可(ke)確認上次數據已經(jīng)成功同步完成,可以執行后續操作,例如清??除暫存在服務(wù)的消息等等。

此后,精簡(jiǎn)方案、減少流量開(kāi)銷(xiāo)、盡量由服務(wù)器完成較復雜的業(yè)務(wù)邏輯、降低客戶(hù)端實(shí)現的復雜度就作為重要的指導原則,持續影響著(zhù)后續的(de)微信設計開(kāi)(╯‵□′)╯發(fā)??。記得有個(gè)比較經(jīng)典的案例是:我們在微信1.2版實(shí)現了群聊功能,但為了保證新舊版客戶(hù)端間的群聊體驗ヽ(′?`)ノ,我(wo)們通過(guò)服務(wù)器??適配,讓1.0版客戶(hù)端也能參與群聊。

圖 2 微信后臺系統架構

微信后臺使用三層架構:接入層、邏輯層和存儲層

微信后臺主要使用ヽ(′ー`)ノC++。后臺服務(wù)使用Svrkit框架搭建,服務(wù)之間通過(guò)同步RPC進(jìn)行通訊。

圖 3 Svrkit 框架

Svrkit是另一個(gè)廣硏后臺就已經(jīng)存在的高性能RPC框架,當時(shí)尚未廣泛使用,但在微信后臺卻大放異彩。作為微信后臺基礎設施中最重要的一部分,Svrkit這幾年一直不斷在進(jìn)化。我們使用Svrkit構建了數?????以千計的服務(wù)模塊,提供數萬(wàn)個(gè)服務(wù)接口,每天RPC調(diao)用次數達幾十萬(wàn)億次。

這三件事影響深遠,乃至于5年后的今天,我們仍繼續沿用最初的架構和協(xié)議,甚至還可??以支持當初1.0版的微信客戶(hù)端。

這里有一個(gè)經(jīng)驗教訓——運營(yíng)支撐系統真的(de)很重要。第一個(gè)版本的微信后臺是倉促完成的,當時(shí)只是完成了基礎業(yè)務(wù)功能,并沒(méi)有配套的業(yè)務(wù)數據統計等等。我們在開(kāi)放注冊后,一時(shí)間竟沒(méi)有業(yè)務(wù)監控頁(yè)面和數據曲線(xiàn)可以看,注冊用戶(hù)數是臨時(shí)從數據庫統計的,在線(xiàn)數是從日志里提??取出來(lái)的,這些數據通過(guò)每個(gè)小時(shí)運行一次??的腳本(這個(gè)腳本也是當天臨時(shí)加ヽ(′?`)ノ的)統計出來(lái),然后自動(dòng)??發(fā)(fa)郵件到郵件組。還有其他各種業(yè)務(wù)數據也通過(guò)郵件進(jìn)行發(fā)布,可以說(shuō)郵件是微信初期最重要的數據門(mén)戶(hù)。

2011.1.21 當天(′?ω?`)最高并發(fā)在線(xiàn)數是 49ヽ(′▽?zhuān)?ノ1,而今天這個(gè)數字是4億。

在微信發(fā)布后的4個(gè)多月里,我??們??經(jīng)歷??了發(fā)布后火爆注冊的驚喜,也經(jīng)歷了隨后一直不溫??不火的困惑。

這一時(shí)期,微信做了很多旨(′▽?zhuān)?在增加用戶(hù)好友量,讓用戶(hù)聊??得起來(lái)的功能。打通騰訊微博私信、群聊、工作郵箱、QQ/郵箱好友推薦等等。

對于后臺而言,比較重要的變化就是這些功能催生了對異步隊列的需求。例如,微博私信需要跟外部門(mén)對接,不同系統(tong)間的處理耗時(shí)和速度不一樣,可以通過(guò)隊列進(jìn)行緩沖;群聊是耗時(shí)操作,消息發(fā)到群后,可以通過(guò)異步隊列來(lái)異步完成消息的擴散寫(xiě)等等。

圖 4 單聊和群聊消息發(fā)送過(guò)程

圖4是異步隊列在群聊中的應用。微信的群聊是寫(xiě)擴散的,也就是說(shuō)發(fā)到群里的一條消息會(huì )給群里的每個(gè)人都存一份(消息索引)。

微信的群聊為什么不是讀擴散呢?有兩個(gè)原因:

異步隊列作為后臺數據交互的一種重要模式,成為了同步RPC服??務(wù)調用之外的??有力補充,在微信后臺被大量使用。

微信的飛速發(fā)展是從2.0版開(kāi)始的,這個(gè)版本發(fā)布了語(yǔ)音聊天功能。之后微信用戶(hù)量急速增長(cháng),2??011??.5用戶(hù)量破100萬(wàn)、2011.7 用戶(hù)量破??100(′▽?zhuān)?)0萬(wàn)、2012.3 注冊用戶(hù)數突破1億。

伴隨著(zhù)喜人成績(jì)而來(lái)的,還有一堆幸福的煩惱:

后臺穩定性的要求:

用戶(hù)多了,功能也多了,后臺模塊數和機器量在不斷翻番,緊跟著(zhù)的還有各種故障。

幫助我們順利度過(guò)這個(gè)階段的,是以下幾個(gè)舉措:

雖然各種需求撲面而來(lái),但我們每個(gè)實(shí)現方案都是一絲不茍完成的。實(shí)現需求最大的困難不是設計出一個(gè)方案并實(shí)現出(T_T)來(lái),而是需要在若干個(gè)可能的方案中,甄選出??最簡(jiǎn)單實(shí)用的那個(gè)。

這中間往往需要經(jīng)過(guò)幾輪思考——討論——推翻的迭代過(guò)程,謀定而后動(dòng)有ヽ(′▽?zhuān)?ノ不少好處,一方面可以避免做出華而不實(shí)的過(guò)度設計,提升效率;另一方面,通過(guò)詳盡的討論出來(lái)的看似簡(jiǎn)單的方案,細節考究,往往是可靠性最好的方案。

邏輯層的業(yè)務(wù)邏輯服務(wù)最早只有一個(gè)服務(wù)模塊(我們稱(chēng)之為mmweb),囊括了所有提供給客戶(hù)端訪(fǎng)問(wèn)的API,甚至還有一個(gè)完整的微信官網(wǎng)。這個(gè)模塊架構類(lèi)似Ap??ache,由一個(gè)CGI容器(CGIHost)和(he)若干CGI組成(每個(gè)CGI即為一個(gè)API),不同之處在于每個(gè)CGI都是一個(gè)動(dòng)態(tài)庫so,由CGIHost動(dòng)態(tài)加載。

于是我們開(kāi)始嘗試使用一種新的??CGI架構——Logicsvr:

Logicsv??r基于Svrki?t框架。將Svrkit框架和CGI邏輯(′-ι_-`)通(tong)過(guò)靜態(tài)編譯生成可直接ヽ(′▽?zhuān)?ノ使用HTTP訪(fǎng)問(wèn)的Logicsvr。我們將mmweb模塊拆分為8個(gè)不ヾ(′▽?zhuān)??同服務(wù)模塊。拆(′Д` )分原則是:實(shí)現不同業(yè)務(wù)功能的CGI被拆到不同Logicsvr,同一功能(′?`*)但是重要程度不一樣的也進(jìn)行拆分。例如,作為核心功能的消息收發(fā)邏輯,就被拆為3個(gè)服務(wù)模塊:消息同步、發(fā)文本和語(yǔ)音消息、發(fā)圖片和視頻消息。

每個(gè)Logicsvr都是一個(gè)獨立的二進(jìn)制程序,可以分開(kāi)部署、ヾ(?■_■)ノ獨立上線(xiàn)。時(shí)至今日,微信后臺有數十個(gè)Logicsvr,提供了數百個(gè)CGI服務(wù),部署在數千臺服務(wù)器上,每日客戶(hù)端訪(fǎng)問(wèn)量幾千億次。

除了API??服務(wù)外,其他后臺服務(wù)模塊也遵循“大系統小做”這一實(shí)踐準則,微信后臺服務(wù)模塊數從微信發(fā)布時(shí)的約10個(gè)模塊,迅速上漲到數百個(gè)模塊。

這一時(shí)ヽ(′ー`)ノ期,后臺故障很多。比故障更麻煩的是,因為監控的缺失,經(jīng)常有些故障我們沒(méi)法第一時(shí)間發(fā)現,造成故障影響面??被放大。

監控的缺失一方面是因為(wei)在快速迭代過(guò)程中,重視功能開(kāi)發(fā),輕視了業(yè)務(wù)監控的重要性,有故障一直是兵來(lái)將擋水來(lái)土掩;另一方面是基礎設施對業(yè)務(wù)邏輯監控的支持度較弱?;A設施提供了機器資源監控和Svrkit服務(wù)運行狀態(tài)的監控。這個(gè)是每臺機器、每個(gè)服務(wù)標配的,無(wú)需額外開(kāi)發(fā),但是業(yè)務(wù)邏輯的監控就要麻煩得多了。

當時(shí)ヽ(′?`)ノ的業(yè)務(wù)邏輯監控是(shi)通過(guò)業(yè)務(wù)邏輯統計功能來(lái)做的,實(shí)現一個(gè)??監控需要4步:

可以想象,這種費時(shí)費力的模式會(huì )反過(guò)來(lái)降低開(kāi)發(fā)人員對加入業(yè)務(wù)監控的積極性。于是有一天??,我們去公司內的標桿——即通后臺(QQ后臺)取經(jīng)了,發(fā)現解決方案出乎意料地簡(jiǎn)單且強大:

【故障報告】

之前每次故障后,是由QA牽頭出一份故障報告,著(zhù)重點(diǎn)是對故障影響的評估和故??障定級。新的做??法是每個(gè)故障不分大小,開(kāi)發(fā)人員需要徹底復盤(pán)故障過(guò)程,然后商定解決方案,補充出一份詳細的技術(shù)報告。這份報告側重于:如何避免同類(lèi)型故障再次發(fā)生、提高故障主動(dòng)發(fā)現能力、縮短故障響應和處理過(guò)程。

【基于 ID-Value 的(de)業(yè)務(wù)無(wú)關(guān)的監控告警體系】

圖 5 基于 ID??-Value 的監控告警體系

監控體系實(shí)ヽ(′ー`)ノ現思路非常簡(jiǎn)單,提供了2個(gè)API,允許業(yè)務(wù)代碼在共享內存中對某個(gè)監控ID進(jìn)行設置Value或累加Value的功能。每臺機器上的A??gent會(huì )定時(shí)將所有ID-Value上報到監控中心,監控中心對數據匯總入庫后就可以(°ロ°) !通過(guò)統一的監控頁(yè)面輸出監控曲線(xiàn),并通過(guò)預先配置的監控規則產(chǎn)生報ヽ(′?`)ノ警。

對于業(yè)務(wù)代碼來(lái)說(shuō),只需在要被監控的業(yè)務(wù)流程中調(′_`)用一下監控API,并配置好告警條件即可。這就極大地降低(╬?益?)了開(kāi)發(fā)監控報警的??成本,我們補全了各種監控項,讓我們能主動(dòng)及時(shí)地發(fā)現問(wèn)題。新開(kāi)發(fā)的功能也會(huì )預先加入相關(guān)監控項,以(╯‵□′)╯便在少量灰度階段就能直接通過(guò)監控曲線(xiàn)了解業(yè)務(wù)是否符合預ヾ(′?`)?期。

微信后臺每個(gè)存儲服務(wù)都有自己獨立的存儲模塊,是相互獨立的。每個(gè)存儲服務(wù)都有一個(gè)業(yè)務(wù)訪(fǎng)問(wèn)模??塊和一個(gè)底層存儲模塊組成。業(yè)務(wù)訪(fǎng)問(wèn)層隔離業(yè)(′?`*)務(wù)邏輯層和底層存儲,提供基于RPC的??數據訪(fǎng)問(wèn)接口;底層存儲有兩類(lèi):SDB和MySQL。

SDB適用于以用戶(hù)UIN(uin??t32_??t)為(′?`)Key的數(shu)據存儲,比方說(shuō)消息索引和聯(lián)系人。優(yōu)點(diǎn)是性ヽ(′ー`)ノ能高,在可靠性上,提供基于異步流水同步的Ma??s(′▽?zhuān)?ter-Slave模式,Master故(′?_?`)障時(shí),Slave可以提供讀數據服務(wù)快速裂變,無(wú)法寫(xiě)入新數據。

由于微信賬號為字母+數字組合,無(wú)法直接作為SDB的Key,所以微信帳號數據并非使用SDB,而是(shi)用MySQL存儲的。MySQL也使用基于異步流水復制的Master-Slave模式。

KVSvr使用基于Quorum的分布式數據強一致性算法,提供Key-Valu(′?`*)e/Ke(╯°□°)╯︵ ┻━┻y-??Table模型的存儲服務(wù)。傳統Quor??um算法的性能不高,KVSvr創(chuàng )造性(′?ω?`)地將數據的版本和數據本身做了區分,將Quorum算法應用到數據的版本的協(xié)商,再通過(guò)基于流(′▽?zhuān)?)水同步??的異步數據復制提供了數據強一致性保證和極高的數據寫(xiě)入性能,另外KVSvr天(′?`)然具備數據的Cache能力,可??以提供高效的讀取性能。

KVSvr一舉解決了我們當時(shí)迫切需要的無(wú)單點(diǎn)故障的容災能力。除了第5版的帳號服??務(wù)外,很快所有SDB底層存儲模塊和大部分MySQL底層存儲模塊都切換到KVSvr。隨著(zhù)業(yè)務(wù)的發(fā)(fa)展,KVSvr也不斷在進(jìn)化著(zhù),還配合業(yè)務(wù)需要衍??生出了各種定制版本?,F在(′▽?zhuān)?)的KVSvr仍然作為核心存儲,發(fā)揮著(zhù)舉足輕重的作用。

集團概況
代運營(yíng) 百度優(yōu)化 微信開(kāi)發(fā) 新聞中心 AI運營(yíng)推廣
新聞中心
AI運營(yíng)推廣 APP開(kāi)發(fā) 網(wǎng)站建設 SEO內容優(yōu)化 百度SEO工具
產(chǎn)業(yè)介紹
AI運營(yíng)推廣 關(guān)鍵詞優(yōu)化 SEO診斷
新聞中心
代運營(yíng)
社會(huì )責任
口碑營(yíng)銷(xiāo) 整站優(yōu)化 網(wǎng)站建設 新聞中心
微信開(kāi)發(fā)
加入恒興
百度SEO工具 SEO診斷 微信開(kāi)發(fā) 整站優(yōu)化 網(wǎng)站優(yōu)化
聯(lián)系我們
口碑營(yíng)銷(xiāo) SEO內容優(yōu)化 關(guān)鍵詞優(yōu)化 微信開(kāi)發(fā) 網(wǎng)站建設

友情鏈接: 靈寶瑪遠網(wǎng)絡(luò )科技有限公司滄州銀啟網(wǎng)絡(luò )科技有限公司衡陽(yáng)豪暉網(wǎng)絡(luò )科技有限公司本溪事財網(wǎng)絡(luò )科技有限公司鳳城愛(ài)網(wǎng)網(wǎng)絡(luò )科技有限公司

新疆吐魯番識語(yǔ)網(wǎng)絡(luò )科技有限公司
青島明羅網(wǎng)絡(luò )科技有限公司內蒙臨河智京網(wǎng)絡(luò )科技有限公司
遼陽(yáng)洲西網(wǎng)絡(luò )科技有限公司
臨江明羅網(wǎng)絡(luò )科技有限公司濟寧清原網(wǎng)絡(luò )科技有限公司建陽(yáng)貝元網(wǎng)絡(luò )科技有限公司應城運詩(shī)網(wǎng)絡(luò )科技有限公司宜州用韋網(wǎng)絡(luò )科技有限公司
樂(lè )昌開(kāi)成網(wǎng)絡(luò )科技有限公司
高州堅建網(wǎng)絡(luò )科技有限公司龍井尼全網(wǎng)絡(luò )科技有限公司西寧環(huán)耀網(wǎng)絡(luò )科技有限公司雅安瑪暉網(wǎng)絡(luò )科技有限公司孝義利電網(wǎng)絡(luò )科技有限公司蚌埠迪瑪網(wǎng)絡(luò )科技有限公司
馬鞍山迪皇網(wǎng)絡(luò )科技有限公司
遂寧吉語(yǔ)網(wǎng)絡(luò )科技有限公司乳山馳集網(wǎng)絡(luò )科技有限公司五大連池邦皇網(wǎng)絡(luò )科技有限公司福安源欣網(wǎng)絡(luò )科技有限公司徐州超頻網(wǎng)絡(luò )科技有限公司陽(yáng)春源士網(wǎng)絡(luò )科技有限公司北京慧華網(wǎng)絡(luò )科技有限公司四平佩格網(wǎng)絡(luò )科技有限公司鶴壁輝碼網(wǎng)絡(luò )科技有限公司泉州子理網(wǎng)絡(luò )科技有限公司濟南本嘯網(wǎng)絡(luò )科技有限公司威海偉覽網(wǎng)絡(luò )科技有限公司地級及以上城:龍馳網(wǎng)絡(luò )科技有限公司六盤(pán)水含聰網(wǎng)絡(luò )科技有限公司普蘭店瑪遠網(wǎng)絡(luò )科技有限公司醴陵翔雷網(wǎng)絡(luò )科技有限公司深州銘羅網(wǎng)絡(luò )科技有限公司南陽(yáng)帝諾網(wǎng)絡(luò )科技有限公司

© 2013-2025.Company name All rights reserved.網(wǎng)站地圖 天津九安特機電工程有限公司-More Templates

亚洲女同成aV人片在线观看|亚洲www啪成人一区二区麻豆|亚洲国产中日韩精品综合|亚洲国产成人精品一级片|亚洲无码在线视频免费 烟台市| 镇安县| 昆山市| 元朗区| 荥经县| 应城市| 溧水县| 龙里县| 浮梁县| 尚义县| 上林县| 平乡县| 湘阴县| 同仁县| 江都市| 嵩明县| 吴堡县| 巴里| 临高县| 万荣县| 平江县| 茂名市| 山阳县| 琼结县| 奇台县| 江城| 霍城县| 西昌市| 大关县| 从化市| 昆山市| 叶城县| 和平县| 依安县| 海安县| 新源县| 济源市| 仙游县| 阿巴嘎旗| 长海县| 那曲县| http://444 http://444 http://444 http://444 http://444 http://444