運維如何為公司節(jié)省一個億?
作者簡介:
梁定安,現(xiàn)就職于騰訊社交網(wǎng)絡運營部,負責社交平臺、增值業(yè)務的運維負責人;開放運維聯(lián)盟委員;騰訊云布道師;騰訊課堂運維講師。
SNG社交網(wǎng)絡運營部管理著近10萬臺的Linux服務器,以此支撐著騰訊社交業(yè)務海量業(yè)務與用戶,如日活2.47億的QQ、月活5.96億的QQ空間(數(shù)據(jù)來源:騰訊2016Q2財報)等眾多***在線的胖子業(yè)務。
面對業(yè)務體量的不斷增胖的社交類UGC業(yè)務,如何能既保證業(yè)務的發(fā)展,又能有效的控制運營成本的增長?是運維團隊迫在眉睫要解決的運營成本難題。經(jīng)過不斷的探索和深挖,我們慶幸
在過去的2年中,找到了一條有效的設備成本管理的路子——精細化容量管理的設備成本優(yōu)化之路,并連續(xù)2年,每年為公司節(jié)約過億的運營成本。
眾所周知,提升設備的使用率是運維界常用的管控運營成本的有效辦法,那么如何能夠針對不同的設備使用場景、不同的設備類型制定出適宜的度量與管理辦法呢?請看騰訊運維在實踐中總結出的6個方法:
方法1:性能管理法
在衡量服務器的使用合理性中,CPU使用率當仁不讓的成為頭號被關注對象。隨著多核超線程技術CPU的普及,CPU負載不均的問題逐漸在海量運維場景下,成為了設備運營成本的吞噬者。
為了發(fā)現(xiàn)并優(yōu)化多核CPU負載不均的現(xiàn)象,我們提出了CPU極差的度量指標,
CPU(極差)=CPU(max)-CPU(min),若CPU(極差)>30%,則該設備存在CPU使用率不合理的問題,需優(yōu)化整改。(備注:優(yōu)化方法可參考多隊列網(wǎng)卡優(yōu)化與CPU親和,本文不展開)。
同理,在分布式集群的模塊容量管理中,運維規(guī)范要求實現(xiàn)模塊的一致性管理,包括容量一致性,為此我們同樣提出模塊的容量極差的度量指標,模塊CPU使用率極差= CPU***的IP的CPU使用率 - CPU***的設備的CPU使用率,若同模塊下不同設備的CPU使用率極差>30%,則該模塊容量使用不合理,需要優(yōu)化整改。(備注:一般此類情況源于配置、權重、調(diào)度等不一致管理問題,不問不展開。)
方法2:密度管理法
對于內(nèi)存使用的合理性,很難直接用內(nèi)存使用率來度量,為此,在內(nèi)存型設備使用中,我們提出了密度管理的管控辦法——訪問密度。訪問密度計算公式:,模塊下的設備內(nèi)存訪問密度應該一致,否則納入負載不均的一致性整改范疇。通過對全量內(nèi)存型模塊訪問密度的統(tǒng)計分析,我們可以得出一條平均負載水平線,結合容量管理的實際需要,提高平均水平線或優(yōu)化低于水平線的模塊,都能實現(xiàn)優(yōu)化設備成本管理的目的。同時,密度管理法也適用于SSD盤的使用場景。(備注:訪問密度會受業(yè)務請求包大小的影響,但是在海量的運維場景下,個別情況可以忽略。)
方法3:特性管理法
特性管理法,同功能模塊的QPS管理類似,就是用來衡量在特定業(yè)務場景下,業(yè)務邏輯的處理性能是否***,要結合不同產(chǎn)品下的同類應用場景的QPS同比來得出分析結論。這種管理辦法因業(yè)務邏輯而異,本文主要舉例說明下。
例如,在移動互聯(lián)網(wǎng)的業(yè)務運維場景中,有些場景是非常規(guī)容量管理手段能度量的,針對一些個性但是規(guī)模龐大的模塊,我們提出了特性管理法。舉個例子,QQ、QQ空間、信鴿等業(yè)務都有長連接功能模塊,該場景的容量CPU少而使用內(nèi)存多,因此可以使用每G內(nèi)存維持的長連接數(shù)量來橫向比較QQ、QQ空間、信鴿等業(yè)務,督促性能低的業(yè)務程序整改優(yōu)化。
又例如,在直播場景中,有對主播視頻實時在線轉碼的需求,不同的開發(fā)可能使用的轉碼技術方案不一,也可以利用同樣的特性管理法來衡量在線轉碼的性能是否有優(yōu)化空間。
方法4:碎片管理法
騰訊社交網(wǎng)絡業(yè)務歷史悠久,從“大哥”QQ到“新秀”企鵝FM,業(yè)務類型覆蓋IM、UGC、多媒體、閱讀、動漫、游戲、直播等主流的娛樂化社交玩法,其中有當紅的產(chǎn)品,也有長尾的產(chǎn)品;有幾十億次每秒功能模塊,也有幾十次每秒的功能模塊。碎片化管理法,就是針對請求量不高的小集群準備的。因為分布式高可用的運維要求,通常生產(chǎn)環(huán)境的部署最小單元都為2臺設備,在物理機時代,訪問量小的模塊浪費成本嚴重,但隨著虛擬化技術的廣泛應用,該場景遇到的問題迎刃而解。利用虛擬化技術將硬件資源碎片化,讓小模塊可以很好的兼顧設備成本和高可用。
與虛擬化解決碎片資源利用率的方案類似,我們還有PaaS平臺“蜂巢”,基于騰訊社交的標準開發(fā)框架SPP,解決小業(yè)務小模塊的容量管理難題。(后續(xù)專題聊蜂巢。)
方法5:木桶管理法
騰訊平臺級的業(yè)務,如QQ、QQ空間、QQ音樂等,基本上都普及了三地三活的SET(專區(qū))容災架構能力,這是真正意義上的異地多活。(正巧在923上海運維大會的海量運維專場,會有個主題與異地容災的海量運維實踐分享,如果大家感興趣的話,誠邀大家參加。)對于平臺級業(yè)務的運維,我們會根據(jù)運維規(guī)范管理的要求,將實現(xiàn)一定業(yè)務場景的多個模塊劃分為SET(減少運維對象),在不同的社交場景下,我們就得出了各種不同類型的SET,通過自動化運維能力擴大到SET的自動化運維能力,運維能很輕松的實現(xiàn)SET異地化部署,如此實現(xiàn)該業(yè)務場景異地多活的容災容錯。
再說SET的容量管理,平臺級SET就意味著用戶量和請求量不會暴增,那么對于SET的可運維性而言,我們必須要對SET的請求量和用戶量等指標進行量化度量。為此,運維賦予SET一個可量化的指標,在我們的場景下,如在線用戶數(shù)、核心請求量等視SET的用途而定,基于壓測可以得到單SET的最合理的容量值,該值符合木桶原理,也就是我們的木桶管理法,SET由多個模塊組成(SET=木桶,模塊=木板),支撐一定的用戶量,SET的容量管理就像木桶原理一樣,木桶的水位高低取決于最短板,因此SET的***容量取決于SET中性能***的模塊容量。
騰訊的平臺級業(yè)務同時在線用戶數(shù)是相對穩(wěn)定的,也就意味著全國要實現(xiàn)多地多活,需要準備多少冗余容量是可預期可規(guī)劃的,換而言之,要部署的SET的數(shù)量是能被提前量化的。同時,結合業(yè)務的自動化部署、調(diào)度方案、柔性策略和有損服務能力,我們就可以利用很合理的成本就能實現(xiàn)異地多活。
舉例說明,假設我們共有1000w的同時在線用戶,且用戶量相對穩(wěn)定,我們就可以規(guī)劃3個支撐500w在線的SET,利用業(yè)務架構的調(diào)度能力分別讓3個SET的容量平均化,在災難場景時,1個SET不可用,另外兩個SET可以完全容災,在此規(guī)劃下,極端場景2個SET不可用是要開有損服務的。通過量化SET管理,業(yè)務運維則可以靈活的根據(jù)成本管理的需求調(diào)整SET的容量水位,以達到***性價比的高可用架構。
方法6:硬件選型法
關注硬件瓶頸,升級硬件降低單機運營成本。比如,過去做UGC內(nèi)存存儲時(QQ相冊、視頻),使用了大量2T硬盤,當4T、8T硬盤成本量產(chǎn)使用,及時的升級硬盤容量,可以有效的提升單機存儲量,以規(guī)模效應實現(xiàn)花小價格換來了大成本。又如,在圖片社交或視頻社交的業(yè)務場景下,因玩法的多樣性需求,會延伸出很多計算量繁重的邏輯,像人臉識別、鑒黃等功能,這時候選用GPU設備代替CPU設備,也是讓性能飛的一種有效做法。(該方法尤為適用于UGC類的存儲量只增不減的業(yè)務,如微云、網(wǎng)盤、圖片存儲、視頻存儲等。)
后記:
包括但不限于上述6種容量管理的方法,使得我們能在用戶數(shù)據(jù)只增不減社交UGC業(yè)務中,能穩(wěn)步的可持續(xù)前行。設備成本管理還涉及很多細節(jié)的技術手段和業(yè)務代碼優(yōu)化,本文只是從運維的視角闡述對容量管理的思考,希望能夠拋磚引玉,對各位同行有幫助。帶寬成本管理的優(yōu)化帶來的成本節(jié)省價值會更大,因為其中涉及的技術點和方法論更多,此文不深入探討。