【IT觀察】從全球女鹿飯同時失聯(lián)引發(fā)的悲劇看運維如何在流量峰值力挽狂瀾
原創(chuàng)【51CTO.com原創(chuàng)稿件】引用51CTO開發(fā)者QQ交流群中對“鹿晗關(guān)曉彤公布戀情,是如何把新浪微博的服務(wù)器搞垮的”這個話題的深入討論,特整理出從開發(fā)者和運維工程師的角度來應(yīng)對服務(wù)器遇到流量峰值的處理措施。以下內(nèi)容來自群里小伙伴們的觀點分享。
10月8日,在十一長假的最后一天,微博搜索工程師丁振凱發(fā)微博 “埋怨”鹿晗,稱:“服務(wù)器穩(wěn)定了,岳父喊我喝酒去了,都是鹿晗干的好事!”起因是當(dāng)紅流量小生鹿晗發(fā)了一條“大家好,給大家介紹一下,這是我女朋友@關(guān)曉彤”的微博,全世界的女鹿飯同時失戀造成了微博服務(wù)器的宕機。
到底是什么毀了程序員的婚禮?
關(guān)于這場浩劫的原因這幾天一直眾說紛紜。微博官方的說法是因為單條微博轉(zhuǎn)發(fā)、評論次數(shù)太多了造成數(shù)據(jù)庫崩潰。很顯然這是不全面的,微博這個級別的數(shù)據(jù)量放在平時也不是傳統(tǒng)的分布式架構(gòu)就能抗住的。況且鹿晗的這條微博既不是有史以來被轉(zhuǎn)發(fā)最多的,也不是有史以來收到評論最多的一條微博。
51CTO開發(fā)者交流群昵稱為Java-阿飛-南京的小伙伴提出了問題出在算法上,自動擴容的算法沒有寫好,或者干脆沒把希望寄托在算法上而是全靠人肉運維卻趕上了休假。這種說法是認(rèn)可度最高的,但群友Android-小孔-合肥卻不敢茍同:算法不是不好,而是太好了,因為沒寫好算法的化,服務(wù)器延遲幾秒,此事就不了了之了;但如果服務(wù)器反應(yīng)非常靈敏,那么很快就會不堪重負(fù)。
云計算-恩威-成都則把鍋甩給了運營商:節(jié)假日期間中國電信IDC全網(wǎng)封網(wǎng),停止了一切工程施工、系統(tǒng)割接、網(wǎng)絡(luò)和數(shù)據(jù)調(diào)整等工作導(dǎo)致了運維無法到位。
最后51CTO開發(fā)者交流群的群友們還有幾種開玩笑的說法:Android-jqorz-合肥說是微博的運維妹子是女鹿飯,一吃醋就故意讓服務(wù)器出故障;而從事安全行業(yè)的小新(安全-小新-北京)則說是鹿晗的黑粉有懂技術(shù)的,在這個節(jié)骨眼上搗鬼。言者無意,聽者有心,安全問題也是網(wǎng)絡(luò)運維的重要環(huán)節(jié),況且以國內(nèi)網(wǎng)民的數(shù)量來看,任何吸引全國網(wǎng)民訪問的事件都是一場大規(guī)模的DDOS攻擊。
微博用什么避免此次事故
國內(nèi)運維人員應(yīng)對流量峰值的傳統(tǒng)方法有提前申請足夠甚至冗余的設(shè)備和降級非核心及周邊的業(yè)務(wù)兩種,但不可避免帶來成本高昂、業(yè)務(wù)負(fù)載飽和度不一、擴縮容流程繁瑣等問題。
微博目前應(yīng)對流量峰值的機制是新浪微博混合云DCP項目,能根據(jù)容量情況進行自動的彈性伸縮。首先建立統(tǒng)一的設(shè)備資源管理池,然后將服務(wù)部署在基于 Docker 的云化架構(gòu)上;在業(yè)務(wù)上需要盡心對傳統(tǒng)業(yè)務(wù)進行微服務(wù)化、消息化等改造;在平臺上,需要打通持續(xù)集成平臺以及實現(xiàn)多租戶隔離、彈性伸縮、故障自愈等能力。最后用統(tǒng)一的監(jiān)控平臺實現(xiàn)人肉運維緊急支援。
目前DCP 已經(jīng)具備 20 分鐘內(nèi)彈性擴容千臺服務(wù)器規(guī)模的能力,即公有云要滿足10分鐘內(nèi)完成上千臺服務(wù)器的創(chuàng)建與交付,同時私有云平臺則在接下來的10分鐘內(nèi)完成服務(wù)器的初始化、服務(wù)調(diào)度、上線等全流程。這就保證了當(dāng)流量峰值來臨時DCP平臺可以迅速調(diào)度部署公有云服務(wù)器解決私有云短時間無法迅速擴容服務(wù)器的問題。同時公有云的按量彈性需求也可以降低大量成本,事實上此次事故中靠人工臨時增加的服務(wù)器也在幾個小時后退訂了。
微博混合云平臺DCP可以說是萬無一失,但到了史無前例、并且恰好趕在假期的流量峰值面前卻仍然因為沒有可行的、立竿見影的預(yù)案執(zhí)行,最后還是用臨時靠人工增加服務(wù)器數(shù)量的笨方法解決了問題。所以自動化運維工作仍然任重而道遠(yuǎn)。
大數(shù)據(jù)時代的運維要從這個災(zāi)難中學(xué)到什么
隨著網(wǎng)民數(shù)量的劇增和大數(shù)據(jù)時代的到來,這次的峰值將在不久的將來變成家常便飯,幾小時之內(nèi)緊急增加1000臺臨時服務(wù)器很明顯指標(biāo)不治本,運維人員要從這個災(zāi)難中學(xué)到什么呢?
應(yīng)對流量峰值要從集群、負(fù)載均衡和分布式三個方面入手:
所謂集群,就是一組協(xié)同工作的服務(wù)實體,用以提供比單一服務(wù)實體更具擴展性與可用性的服務(wù)平臺。集群有兩大特性——可擴展性、高可用性都是為失效轉(zhuǎn)移這一目標(biāo)服務(wù)的。
所謂負(fù)載均衡,就是把任務(wù)分?jǐn)偟蕉鄠€操作單元上進行執(zhí)行,是一種廉價有效透明的方法擴展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性的方法。
所謂分布式,就是將數(shù)據(jù)分散的存儲于多臺獨立的機器設(shè)備上、利用多臺存儲服務(wù)器分擔(dān)存儲負(fù)荷、利用位置服務(wù)器定位存儲信息的技術(shù)。分布式與集群的區(qū)別在于分布式是以縮短單個任務(wù)的執(zhí)行時間來提升效率的,而集群則是通過提高單位時間內(nèi)執(zhí)行的任務(wù)數(shù)來提升效率。
【51CTO原創(chuàng)稿件,合作站點轉(zhuǎn)載請注明原文作者和出處為51CTO.com】