2021-01-27 分類: 網(wǎng)站建設(shè)
微博現(xiàn)在日活達(dá)到了 2 億,微博廣告是微博最重要且穩(wěn)定的收入來源,沒有之一,所以微博廣告系統(tǒng)的穩(wěn)定性是我們廣告運(yùn)維所有工作中的重中之重。
這樣的自動化運(yùn)維平臺基本上滿足了運(yùn)維的日常操作需求,在 Kunkka 平臺中還有自動擴(kuò)縮容的功能,我們針對這個功能進(jìn)行延伸。
在自動擴(kuò)所容的基礎(chǔ)上,根據(jù)時間段,流量進(jìn)行動態(tài)判斷,自動決策的擴(kuò)所容夠功能。
彈性計算
為什么需要彈性計算
首先簡單介紹一下彈性計算的架構(gòu),彈性計算依托于 Kunkka 自動化運(yùn)維平臺,以及 Oops 監(jiān)控平臺,在業(yè)務(wù)壓測的情況下獲取業(yè)務(wù)指標(biāo)監(jiān)控,將數(shù)據(jù)送到容量決策系統(tǒng),做出是否擴(kuò)縮容的決定。
在云服務(wù)商方面,我們常用阿里云、華為云跟一部分自建的私有云。DCP 混合平臺是我們微博另外一個團(tuán)隊(duì)做了幾年的平臺,它能夠?qū)釉品?wù),快速生成
現(xiàn)在拿到了一個非常重要的容量值及消耗比來進(jìn)行容量評估,用于描述當(dāng)前的容量消耗情況。
拿到這個消耗比之后是不是就可以擴(kuò)容了?還是可以縮容了?此處還需要一個評估標(biāo)準(zhǔn),是 30% 就擴(kuò)?還是 50% 再擴(kuò)?
我們基于歷史數(shù)據(jù)給予分析,制定了三條水位線,包括安全線、警戒線和致命線,拿當(dāng)前消耗值與水位線進(jìn)行對比,在不同階段采取不同的措施。
比如,現(xiàn)在的消耗度遠(yuǎn)遠(yuǎn)低于安全線,說明現(xiàn)在服務(wù)器部署有冗余,我們可以進(jìn)行逐步的縮容。
如果說現(xiàn)在已經(jīng)高于致命線,則需要擴(kuò)容,讓這個值更加接近安全線,保證系統(tǒng)的穩(wěn)定性。
⑤在線容量評估體系
前面進(jìn)行的數(shù)據(jù)采集、計算,以及動作的串聯(lián),都是為了完成最后一個目標(biāo),服務(wù)擴(kuò)容成功。
真正的服務(wù)器擴(kuò)容到線上之后,怎么樣才能保證服務(wù)是健康可用的呢?我們還有另外一套輔助系統(tǒng)叫擴(kuò)容演練。在實(shí)時演練過程中,要注意以下幾點(diǎn):
部署效率:我們通過擴(kuò)容演練來尋找整個擴(kuò)容過程中的瓶頸,比如,我們下發(fā)是通過 DCP 對接云服務(wù)商來完成擴(kuò)容的。
在真正的線上擴(kuò)容過程中,DCP 有時要同時承載幾千臺節(jié)點(diǎn)的擴(kuò)容并發(fā)。DCP 的效率是否能夠滿足?在擴(kuò)容演練過程中需要確認(rèn)這一點(diǎn)。
帶寬限制:微博和云服務(wù)商之間確實(shí)是拉了專線,但是微博和云服務(wù)商不只是微博廣告的一個業(yè)務(wù),還有很多其他大戶。
而且一般在流量增加的時候他們的擴(kuò)容也是非常猛烈的,所以帶寬是否可用,也是我們在日常演練過程中非常注意的現(xiàn)象。
依賴服務(wù):這方面有很多案例,在這里簡單分享一下,2015 年春節(jié),自動擴(kuò)縮容的流程才剛剛開始,春節(jié)當(dāng)天晚上我們擴(kuò)容完幾千個節(jié)點(diǎn)后,忽然發(fā)現(xiàn)負(fù)載均衡加不上去。
說到監(jiān)控,不得不說監(jiān)控遇到的很多問題。市面上有很多開源的監(jiān)控軟件,比如說常見的 Zabbix,在監(jiān)控數(shù)據(jù)量少的情況下,不管是基礎(chǔ)監(jiān)控還是業(yè)務(wù)監(jiān)控,這些開源軟件都是可以直接滿足需求的。
但是隨著監(jiān)控指標(biāo)的增多,加上我們的指標(biāo)是實(shí)時性變化的,數(shù)據(jù)要求又比較高,這些原生軟件不再滿足我們需求了。
另外,微博廣告的業(yè)務(wù)數(shù)據(jù)有特殊性,一般運(yùn)維關(guān)注的數(shù)據(jù)是系統(tǒng)的性能,系統(tǒng)的性能數(shù)據(jù)有時候來源于業(yè)務(wù)日志。
但是微博廣告的業(yè)務(wù)日志是收入,很多業(yè)務(wù)日志是一條都不能丟的,比如說結(jié)算的曝光。
每一條曝光對于廣告來說,都是真金白銀,對精準(zhǔn)性要求比較高,單獨(dú)通過性能監(jiān)控的日志收集方法是不能滿足需求的,這也是我們面臨的挑戰(zhàn)。
另外,監(jiān)控系統(tǒng)一般都會具備告警功能,有告警就會有告警問題,接下來會詳細(xì)地介紹告警問題。
還面臨定位方面的挑戰(zhàn),在監(jiān)控越來越完善的基礎(chǔ)上,很多開發(fā)的操作情況發(fā)生了變化。
一旦發(fā)生問題,第一個反應(yīng)并不是上服務(wù)器看一下系統(tǒng)怎么了,而是翻監(jiān)控,看看哪些監(jiān)控指標(biāo)發(fā)生了問題,所以監(jiān)控系統(tǒng)會越來越多地面向于問題定位這個方向。
Oops 整體架構(gòu)面臨的挑戰(zhàn)
作為監(jiān)控系統(tǒng),Oops 在架構(gòu)上并沒有什么出奇的地方,所有的監(jiān)控?zé)o非就是四個階段:
監(jiān)控數(shù)據(jù)流向特點(diǎn)
所有的監(jiān)控系統(tǒng)都逃不開這四個階段,只是根據(jù)業(yè)務(wù)的不同進(jìn)行了定制化的工作。
針對廣告業(yè)務(wù)的監(jiān)控流向,我們把數(shù)據(jù)分成兩類,有一部分精密數(shù)據(jù)的計算,我們采取的是離線分析的方式,通過采集軟件將所有的日志采集到 Kafka,通過計算的工具進(jìn)行拆洗、計算,計算之后落存儲。
還有另外一個團(tuán)隊(duì)開發(fā)的針對于這一部分?jǐn)?shù)據(jù)的頁面展示化,還有一個系統(tǒng)叫 Hubble,針對精細(xì)數(shù)據(jù)的展現(xiàn),實(shí)現(xiàn)個性化定制的展現(xiàn)。
另外一部分是運(yùn)維比較關(guān)心的數(shù)據(jù),今天來了多少流量?流量有多少是正常的?有多少是異常的?平均耗時是多少?針對這一部分,我們采取了實(shí)時數(shù)據(jù)計算的方法。
在數(shù)據(jù)采集階段發(fā)生了變化,我們并不采集全量日志,而是在客戶端做了預(yù)處理,進(jìn)行分類計算。
比如說監(jiān)控數(shù)據(jù),就按監(jiān)控數(shù)據(jù)的方法計算;告警數(shù)據(jù),就按告警數(shù)據(jù)的計算。而且按照用戶讀取的需求進(jìn)行分類存儲,保證了高并發(fā)數(shù)據(jù)的實(shí)時性。
海量指標(biāo)監(jiān)控系統(tǒng)流程
接下來詳細(xì)介紹實(shí)時數(shù)據(jù)計算。
首先從數(shù)據(jù)采集上講,上文提到我們不采取全量的采集方式,而是通過 Agent 對數(shù)據(jù)進(jìn)行處理。
在數(shù)據(jù)采集階段,在數(shù)據(jù)產(chǎn)生的服務(wù)器上,針對不同的需求按不同的時間進(jìn)行分類聚合,最終向后推送的數(shù)據(jù)是 key-value、計算方法這種模式,推送給 Proxy。
Proxy 拿到已經(jīng)被打包的數(shù)據(jù)進(jìn)行拆包,然后送給不同的計算結(jié)點(diǎn),再按照 Key 進(jìn)行計算,打時間戳。
這個數(shù)據(jù)并不精準(zhǔn),但我們可以接受部分損失,只需要保證數(shù)據(jù)的趨勢是正確的。
另外,關(guān)于分類計算,不同的需求推送給不同的計算節(jié)點(diǎn)。存儲也進(jìn)行了分類,實(shí)時性要求比較強(qiáng)的話會直接放到內(nèi)存,以最精細(xì)粒度進(jìn)行存儲。
前三個小時的數(shù)據(jù)是按秒存的,按天計算的數(shù)據(jù)是按 10 秒、30 秒存的,一些單機(jī)數(shù)據(jù)是按分鐘存的。
另外一些歷史性的數(shù)據(jù)需要出報表的,比如說要看前一周的數(shù)據(jù),前一個月的數(shù)據(jù),按照大數(shù)據(jù)的方式存到 OpenTSDB 當(dāng)中。
存儲的數(shù)據(jù)提供一個 API,通過 API 我們進(jìn)行了分類計算、分類存儲,這種分類的需求來源于用戶,需要看用戶有什么要求,要什么樣的數(shù)據(jù)。
比如,Dashboard 的展示數(shù)據(jù)會直接被放到內(nèi)存里。另外,上文提到的在線擴(kuò)縮容數(shù)據(jù),會相應(yīng)獲取數(shù)據(jù)給用戶,其他相關(guān)的獲取需求 API 也會進(jìn)行分類獲取。
接下來我們計算過的數(shù)據(jù)還有一部分會存儲到 Redis 通過 WatchD 作為告警中心的數(shù)據(jù),因?yàn)楦婢瘮?shù)據(jù)一般都只要求當(dāng)前數(shù)據(jù),不會有人需要查看上個月這臺機(jī)器的負(fù)載有沒有告警。
所以 Alert 節(jié)點(diǎn)計算之后的數(shù)據(jù)直接存在 Redis,Redis 把這個數(shù)據(jù)拿出來之后經(jīng)過告警中心根據(jù)告警規(guī)則進(jìn)行清洗,通過各種方式推送到需求方。
同時有一個相對個性化的展示叫九宮格。我們的九宮格實(shí)際上是一個結(jié)合報警功能的監(jiān)控,它是一個頁面,但具備了告警功能。
接下來看一下監(jiān)控圖,下面三張圖是范冰冰宣布分手拿到的流量,我們的反映是非常靈敏的,平均耗時也漲上來了。
第三張圖是拿到這些數(shù)據(jù)之后,自動平臺顯示應(yīng)該擴(kuò)容了。藍(lán)色跟綠色的流量線已經(jīng)降下來了,大部分量調(diào)到
下圖是我們的九宮格,因?yàn)闀r效性比較強(qiáng),正常來說是以產(chǎn)品為頁面,以業(yè)務(wù)線為格子,每個格子記錄的是單機(jī)的詳細(xì)信息。
如果在這一組服務(wù)器當(dāng)中單機(jī)故障數(shù)超過一定的比例,這個格子會變顏色。
所以在正常的運(yùn)維工位上都會有這樣的大屏幕,運(yùn)維可以一目了然發(fā)現(xiàn)自己所有負(fù)責(zé)的業(yè)務(wù)線情況,而不是讓一臺臺機(jī)器在這里展現(xiàn),這樣就沒有辦法看到業(yè)務(wù)線情況了。九宮格可以讓運(yùn)維更加直觀地看到當(dāng)前的告警情況。
告警
告警有很多的問題,我們遇到的問題可以分為以下四個方面:
①告警數(shù)量巨大
運(yùn)維人員需要關(guān)注所有部分,從系統(tǒng)到服務(wù)、接口等等,維度很多,一旦有問題,各種策略都會觸發(fā)報警,報警數(shù)量多到一定程度,基本上等于沒有報警。
②重復(fù)告警率高
告警策略一般會周期性執(zhí)行,一直到告警條件不被滿足,如果服務(wù)一直不恢復(fù),就會重復(fù)報下去,另外,同一個故障也可能引發(fā)不同層次的告警。
比如,我們有一個業(yè)務(wù)線叫超粉,會有 360 臺服務(wù)器,流量高峰時 360 臺服務(wù)器會同時發(fā)送告警,這種告警的重復(fù)率很高。
③告警有效性不足
很多時候,網(wǎng)絡(luò)抖動、擁堵、負(fù)載暫時過高或者變更等原因,會觸發(fā)報警,但這類報警要么不再重現(xiàn),要么可以自愈。
比如一個硬盤在接近 80% 的時候開始告警了,你讓它告嗎?好像得告,但似乎不告也可以。
④告警模式粗放
無論是否重要、優(yōu)先級如何,告警都通過郵件、短信、App PUSH 發(fā)送到接收人,就像暴風(fēng)一樣襲擊著接收人,接收人沒有辦法從中獲取到有效的信息,經(jīng)常會讓真正重要的告警淹沒在一大堆普通告警中。
針對這些問題,我們采取了以下措施:
①抖動收斂
對于這種大規(guī)模服務(wù)器的維護(hù),抖動是非常常見的現(xiàn)象。網(wǎng)絡(luò)抖一抖,整個服務(wù)單元就會向你告警。
針對這種抖動,我們增加了一些策略,抖動的時候會前后比較,監(jiān)測重復(fù)性,看看是不是具備告警的意義,通過增加告警策略這種方式來進(jìn)行收斂。
比如說流量突增的時候,需要查看是不是同單元都出現(xiàn)了這個情況。
②告警的分類和分級
詳細(xì)定義告警級別,發(fā)送優(yōu)先級、升級策略等,可有效減少粗放模式下告警接收量。比如,一些低優(yōu)先等級的告警會讓它告,處理的級別會低一點(diǎn)。
③同類合并
同一個原因可能會觸發(fā)一個服務(wù)池里面的所有實(shí)例都報警,比如同時無法連接數(shù)據(jù)庫,其實(shí)只需要報一次即可。
④變更忽略
我們的好多變更都是在 Kunkka 平臺上操作的,開發(fā)有時候會選中一個通知,現(xiàn)在是變更,告警請忽略。
以上措施能解決告警問題中 80% 的問題,現(xiàn)在大家都在朝著更高級的方向發(fā)展,我們也簡單做了一些探索。
在原有告警數(shù)據(jù)流情況下引入了工具 SkyLine,這個工具包含了多種算法,在異常檢測環(huán)節(jié)中,能夠通過它內(nèi)置的算法將我們傳入的數(shù)據(jù)自動去抖動,提供平滑的數(shù)據(jù),等你再拿到這個數(shù)據(jù)時就不需要再檢測是不是告警。
這個工具避免了人工操作,通過 Skyline 將數(shù)據(jù)進(jìn)行平滑,提供一份準(zhǔn)確的數(shù)據(jù),我們只需要通過這份數(shù)據(jù),進(jìn)行規(guī)則判斷,決定是否需要告警就好了,減少了對數(shù)據(jù)準(zhǔn)確性判斷的復(fù)雜過程。
接著是根因分析部分,隨著監(jiān)控的覆蓋面越來越廣,監(jiān)控精確性越來越高。
等故障出現(xiàn)的時候,開發(fā)人員就會去翻監(jiān)控圖,去查看大概是哪些原因?qū)е铝斯收稀?/p>
隨著 Dashboard 越來越多,即便是經(jīng)驗(yàn)非常豐富的工作人員也很難快速地定位到原因會出現(xiàn)哪個方面、該去看哪張監(jiān)控圖。
出現(xiàn)流量突增的情況時,Skyline 會通過內(nèi)部的算法 Luminosity 尋找相似的情況,查看相同的時間內(nèi)是否有其他地方出現(xiàn)流量異常,并將根源問題展示在 TOPN 上。
這樣就能夠快速查看在故障出現(xiàn)的前后哪些
新聞名稱:3000臺服務(wù)器不宕機(jī),微博廣告系統(tǒng)全景運(yùn)維大法
網(wǎng)址分享:http://www.sd-ha.com/news/97690.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、微信公眾號、外貿(mào)建站、動態(tài)網(wǎng)站、網(wǎng)站收錄、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容