<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          微信朋友圈千億訪問(wèn)量背后的技術(shù)挑戰(zhàn)和實(shí)踐總結(jié)

          共 3427字,需瀏覽 7分鐘

           ·

          2021-06-27 14:09

          上一篇:一個(gè)90后員工猝死的全過(guò)程


          1、前言


          微信朋友圈包括圖片和視頻兩套業(yè)務(wù)架構(gòu)組成,朋友圈圖片的特點(diǎn)是請(qǐng)求量大、消耗計(jì)算資源較多,視頻則主要消耗帶寬。朋友圈的數(shù)據(jù)是永遠(yuǎn)存儲(chǔ)的,而且隨著業(yè)務(wù)的快速發(fā)展,存儲(chǔ)容量、帶寬和設(shè)備的消耗大量增加,尤其重大節(jié)日帶來(lái)的使用量增長(zhǎng),更加劇了消耗,也給運(yùn)維人員的保障帶來(lái)了巨大壓力。

          在重在節(jié)假日節(jié)點(diǎn),技術(shù)保障主要由三方面組成:

          • 1)軟件保障指通過(guò)程序、業(yè)務(wù)邏輯層面的優(yōu)化和評(píng)估,減輕負(fù)載;

          • 2)硬件保障主要指帶寬、機(jī)器負(fù)載的評(píng)估和擴(kuò)容;

          • 3)柔性措施指的是通過(guò)業(yè)務(wù)調(diào)整,降低一些不重要特性的資源,來(lái)保障重點(diǎn)特性的正常運(yùn)行。



          2、相關(guān)文章


          《微信朋友圈海量技術(shù)之道PPT [附件下載]》
          《架構(gòu)之道:3個(gè)程序員成就微信朋友圈日均10億發(fā)布量[有視頻]》


          3、軟件架構(gòu)方面的保障


          朋友圈整體情況如下圖所示:

          朋友圈的架構(gòu)主要分為OC和IDC兩種:

          • IDC指的是數(shù)據(jù)中心,即數(shù)據(jù)最終落地存儲(chǔ)的地方;

          • OC指的是帶外網(wǎng)的獨(dú)立機(jī)房,SOC指規(guī)模較大的OC。



          每個(gè)IDC都有一整套接口機(jī)/邏輯設(shè)備/存儲(chǔ)設(shè)備用以支撐用戶的上傳下載、及文件落地存儲(chǔ)的需求。

          OC點(diǎn)的主要作用是提供外網(wǎng)訪問(wèn),承載用戶的下載流量。每個(gè)OC內(nèi)的設(shè)備,一起組成一個(gè)緩存池,用戶下載時(shí),本地OC中緩存不命中,才到IDC去回源拉取文件。每個(gè)OC的功能都是相同的,用戶一般到就近的OC點(diǎn)下載,當(dāng)單個(gè)OC點(diǎn)故障時(shí),會(huì)通過(guò)重試或者切換讓用戶到其他OC點(diǎn)下載,確保下載成功。

          4、容災(zāi)及重試機(jī)制


          朋友圈的模塊容災(zāi)主要是實(shí)現(xiàn)單機(jī)故障時(shí)的自動(dòng)剔除,主要形式是通過(guò)master管理服務(wù)器的ip列表,通過(guò)心跳探測(cè)等方式找到異常設(shè)備,并屏蔽故障ip,不返回給前端使用。

          以front層的單機(jī)剔除為例:

          如果整個(gè)OC或IDC點(diǎn)碰到故障,由于變動(dòng)較大,一般依賴運(yùn)維人員手工切換來(lái)恢復(fù),或者通過(guò)模塊之間的重試機(jī)制來(lái)保障。

          朋友圈下載的重試:

          不管是用戶到OC的下載過(guò)程,還是OC到IDC的回源過(guò)程,默認(rèn)都會(huì)進(jìn)行2次失敗后的重試,并且重試一定會(huì)選擇異地的接入點(diǎn),避免繼續(xù)重試到故障的節(jié)點(diǎn)。實(shí)現(xiàn)的原理是每一層master都會(huì)返回給前端至少兩組ip列表,并保證兩組ip列表為異地節(jié)點(diǎn),前端失敗時(shí)才可以實(shí)現(xiàn)異地重試。

          但重試由于會(huì)造成請(qǐng)求的增加,所以是把雙刃劍,節(jié)日高峰期間由于請(qǐng)求本身漲幅已經(jīng)很高,重試更容易引發(fā)問(wèn)題,需要進(jìn)行調(diào)整:

          • 1)通過(guò)master路由下發(fā),關(guān)閉重試。

            在元旦/春節(jié)這種請(qǐng)求有數(shù)倍增長(zhǎng)的節(jié)日實(shí)行;

          • 2)值班人員嚴(yán)密監(jiān)控,如果IDC失敗率超過(guò)20%,則緊急手工關(guān)閉重試。

            這種在中秋/國(guó)慶這種增長(zhǎng)并不高的節(jié)日實(shí)行。



          Front模塊的重試控制界面:

          5、硬件方面的保障


          5.1容量評(píng)估和設(shè)備擴(kuò)容


          重要節(jié)日前運(yùn)維人員會(huì)連同資源組,根據(jù)業(yè)務(wù)預(yù)算和業(yè)務(wù)增長(zhǎng)的需求及實(shí)際負(fù)載,進(jìn)行各個(gè)機(jī)房、模塊的設(shè)備擴(kuò)容。預(yù)算以外的請(qǐng)求上漲,則通過(guò)柔性或者過(guò)載的方式,進(jìn)行降低或者拒絕。

          評(píng)估方法:

          • 1)機(jī)房容量主要根據(jù)交換機(jī)帶寬的上限評(píng)估;

          • 2)接入層設(shè)備容量主要根據(jù)CPU、內(nèi)存的負(fù)載比例、網(wǎng)卡的流量/包量占比來(lái)評(píng)估;

          • 3)存儲(chǔ)層設(shè)備容量主要根據(jù)CPU、內(nèi)存的負(fù)載比例、磁盤IO的讀寫次數(shù)來(lái)評(píng)估。


          5.2春節(jié)朋友圈上傳負(fù)載


          業(yè)務(wù)側(cè)春節(jié)要求的增長(zhǎng)比例,是上傳支持9倍增長(zhǎng),下載支持1倍增長(zhǎng),超過(guò)這個(gè)比例的請(qǐng)求可以拒絕掉,但根據(jù)預(yù)算擴(kuò)容后,達(dá)到上圖的效果,還是有部分模塊無(wú)法支持這個(gè)漲幅,尤其是壓縮compress模塊,該模塊每支持一倍增長(zhǎng)就需要大量虛擬機(jī)擴(kuò)容,預(yù)算內(nèi)無(wú)法支持,這樣就需要使用柔性策略來(lái)解決。

          6、柔性策略簡(jiǎn)介


          朋友圈的柔性策略分為兩層:
          • 第一層是粗暴柔性:即按比例、接業(yè)務(wù)直接限制上傳下載的請(qǐng)求,被限制的請(qǐng)求會(huì)返回給用戶失敗,與微信C2C相同,這種一般用于超過(guò)系統(tǒng)預(yù)估的負(fù)載能力,造成系統(tǒng)故障時(shí)用于快速恢復(fù)業(yè)務(wù)時(shí)使用;
          • 第二層是按業(yè)務(wù)特性柔性:即從業(yè)務(wù)層面通過(guò)降低圖片視頻清晰度、延遲用戶更新等方向降低系統(tǒng)的負(fù)載。
            下面主要詳述業(yè)務(wù)柔性。

          朋友圈業(yè)務(wù)的主要增長(zhǎng)與瓶頸:從前文的設(shè)備負(fù)載評(píng)估圖看,在預(yù)算范圍內(nèi),接入層和邏輯層都只能支撐5倍增長(zhǎng),而壓縮compress模塊只能支撐1倍增長(zhǎng)。

          7、柔性實(shí)踐之:壓縮compress柔性


          Compress模塊的作用是將客戶端上傳來(lái)的原始圖片按需求壓縮成各種格式和尺寸,以支持特定的業(yè)務(wù)場(chǎng)景,并且節(jié)省存儲(chǔ)空間和帶寬。由于壓縮技術(shù)的不斷發(fā)展,使用更先進(jìn)的壓縮格式,同等清晰度的圖片壓縮比例越高,需要消耗的壓縮計(jì)算資源就越多。

          所以如果反向操作,將當(dāng)前使用的hevc格式替換回jpeg格式存儲(chǔ)的話,就可以節(jié)省壓縮資源,實(shí)測(cè)compress的cpu負(fù)載可以降為20%,即支持5倍增長(zhǎng)。但圖片的平均大小也會(huì)上漲,造成下載流量上漲。

          所以采用的折衷方法,是在上傳圖片換回jpeg格式的同時(shí),將圖片的清晰度從70降為50,這樣可以減小文件平均大小,從而抵消換回jpeg格式帶來(lái)的流量上漲效果。實(shí)際測(cè)試中,發(fā)現(xiàn)用戶對(duì)降清晰度的感知并不明顯,在節(jié)假日短暫開啟不會(huì)影響用戶體驗(yàn)。

          8、柔性實(shí)踐之:小視頻碼率柔性


          小視頻的帶寬平時(shí)會(huì)超過(guò)1TB,節(jié)日效應(yīng)增長(zhǎng)明顯。所采取的降流量方法與圖片類似,即降低上傳視頻的碼率,通過(guò)降低文件平均大小的方法來(lái)節(jié)省帶寬。

          柔性:小視頻碼率1800 -> 1200 平均大小 2.1MB -> 1.3MB

          經(jīng)測(cè)試,降碼率后基本不會(huì)影響用戶體驗(yàn),但由于是對(duì)新上傳視頻生效,要體現(xiàn)到下載帶寬的下降中,就有相當(dāng)程度的延遲,大約需要4小時(shí)完全生效。所以這一柔性措施在節(jié)日之前就需要開啟,不能用于應(yīng)付緊急情況。

          降碼率生效期間流量變化:


          9、柔性實(shí)踐之:上傳TSSD緩沖池柔性


          由于上傳preupload接口機(jī)及后層的邏輯模塊等,都無(wú)法支持10倍漲幅。所以在架構(gòu)中另外搭建了兩套TSSD緩沖池,緩沖池用于臨時(shí)存儲(chǔ)新上傳的文件,可以支持讀寫。按上圖所示,在zone模塊處增加了緩沖池一,在上傳preupload處,增加了緩沖池二。兩個(gè)緩沖池的作用是有區(qū)別的:

          zone模塊如果過(guò)載,主動(dòng)過(guò)載掉的上傳請(qǐng)求,不會(huì)直接返回失敗,而是將請(qǐng)求寫入到緩沖池一中,緩沖池一中的文件并不能被下載到,但會(huì)按比較慢的速度將文件下發(fā),寫入到后端模塊。所以緩沖池一的主要作用是減緩短時(shí)間內(nèi)大量的上傳請(qǐng)求,而不是完全抵消上傳請(qǐng)求,并且緩沖池一中的文件是不能被下載到的。

          在preupload模塊處增加了緩沖池二,preupload模塊中對(duì)存儲(chǔ)TFS的寫請(qǐng)求次數(shù)做了限制,如果上傳請(qǐng)求數(shù)超過(guò)了存儲(chǔ)TFS的能力,則preupload會(huì)將請(qǐng)求寫入緩沖池二。用戶下載時(shí),會(huì)根據(jù)文件標(biāo)識(shí)進(jìn)行判斷,如果發(fā)現(xiàn)文件存儲(chǔ)在緩沖池二而不是TFS中,則會(huì)到緩沖池二中去獲取文件。所以緩沖池二可以替代TFS的功能,起到保護(hù)底層模塊的效果。等到緩沖池二下架時(shí),需要將其中的文件人工寫入到TFS中。

          10、柔性實(shí)踐之:朋友圈timeline按比例柔性


          timeline指的是微信朋友圈更新的時(shí)間戳,這一柔性的原理是將通知用戶好友朋友圈更新的時(shí)間戳先緩存起來(lái),不下發(fā)給用戶的微信終端,這樣微信上就看不到朋友圈更新的內(nèi)容了,也就不會(huì)產(chǎn)生下載圖片/視頻的請(qǐng)求,可以直接減少下載流量。

          timeline柔性后這里不會(huì)更新了:

          但也有幾點(diǎn)注意事項(xiàng):

          • 1)容易引起用戶投訴,用戶一般會(huì)明顯感知到朋友圈內(nèi)容變少了;

          • 2)如果緩存timeline的時(shí)間過(guò)久,將緩存下發(fā)的過(guò)程就必須很慢,否則會(huì)引起下載流量的進(jìn)一步暴漲。



          春節(jié)人工執(zhí)行柔性的步驟:

          文章來(lái)源:即時(shí)通訊網(wǎng) 

          最后,關(guān)注公眾號(hào)互聯(lián)網(wǎng)架構(gòu)師,在后臺(tái)回復(fù):2T,可以獲取我整理和創(chuàng)作的 Java 系列教程非常齊全。


           推薦閱讀 

          1、2019 年 9 月全國(guó)程序員工資統(tǒng)計(jì),你是什么水平?

          2、如何才能成為優(yōu)秀的架構(gòu)師?

          3、從零開始搭建創(chuàng)業(yè)公司后臺(tái)技術(shù)棧

          4、程序員一般可以從什么平臺(tái)接私活?

          5、37歲程序員被裁,120天沒(méi)找到工作,無(wú)奈去小公司,結(jié)果懵了...

          6、滴滴業(yè)務(wù)中臺(tái)構(gòu)建實(shí)踐,首次曝光

          7、不認(rèn)命,從10年流水線工人,到谷歌上班的程序媛,一位湖南妹子的勵(lì)志故事

          8、15張圖看懂瞎忙和高效的區(qū)別!

          瀏覽 18
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大香蕉色性在线视频 | 波多野结衣乱码无码视频 | 日韩国产精品在线 | 欧美精在线 | 日日日日日干 |