最厲害的黑客,只要一句話——論新浪微博架構

事件描述

昨天中午,新浪微博出現宕機,運維人員的國慶小長假就這樣提前結束了。微博客服發消息稱:頁面無法刷新、評論無法顯示,客戶端出現了大面積癱瘓。作爲一名程序員,你可能並不關心又是某某某發生了什麼事,但是服務器宕機又是怎麼一回事呢,誰又是最厲害的黑客?

 

我們來看一下微博數據助手的分析,截止至昨天14:50,鹿晗的一條微博覆蓋了8.4億人次,評論達98萬,同時關曉彤也發佈了微博,評論達72萬。

 

國慶收假之時,很多粉絲和路人都在返程路上刷微博,會造成了巨大的訪問量。因此對於突發性事件,微博無法有效預警,最終官方緊急擴容了1,000臺服務器才得以緩解,對雲服務提供商也是巨大的壓力。

 

個人分析

1.      如此高的併發、訪問和I/O全部壓到DB服務器上,對於路由器上的大量流量有成熟的方案,大量的讀操作也可以使用Redis和Memcached緩存,而大量的寫操作是必須在發出之後立即響應的(比如你回覆了某人的評論,某人就會收到提示)。又因爲是在假期,運維人員可能很多都放假了,而且微博不同於阿里的雙十一可以提前準備和演練;

2.      異步處理,意思是當用戶發表消息成功了,就提示成功,而後臺的消息隊列則慢慢地完成,可以提升程序的運行效率,但容易造成衝突和數據髒讀。當負載不大的時候,1秒之內就處理完了,用戶感覺不出來,當請求量上去之後,服務器可能暫時應付不過來,要過幾秒鐘纔會響應,這就是“卡了”的感覺,但是如果等待30秒以上都沒有應答,瀏覽器就顯示無法訪問。

3.      微博需要處理消息推送,微博會將新消息推送給活躍的粉絲,而這些粉絲(可能是機器人)又會轉發,由此隊列裏的消息發不完了,服務器開始丟棄部分請求,當TCP協議棧也滿了,那麼服務器的網絡就連不上了,如果繼續加大請求,操作系統和硬件就有可能會崩盤;

4.      自我恢復功能失效了?自我恢復功能有個臨界點,當在此臨界點之前時,系統可以快速恢復;而過了臨界點,服務器的CPU和內存資源耗盡,服務器累壞了,就會如滾雪球一般一條路走到黑。而且服務器和人不同,人說加班就加班,說拼命就拼命,可以連軸轉哈哈,但機器它可不會;

5.      自動擴容和縮容算法也失效了?算法不是萬能的,當流量升高了,自動擴容下單幾臺、幾十臺服務器是合適的,但對於一千臺服務器它也不敢這樣做。假如是因爲系統的bug造成流量飆升,那損失就大了(根據阿里雲ECS,1核2GB服務器+10Mbps帶寬= 6.95元/臺/4小時,一千臺使用4小時就是6,950元)。

 

可見,微博沒有對最壞的情況做好預計,也沒有經過良好的壓力測試,導致自取滅亡。

 

總結:偶像的力量是無窮的,堪比黑客Web攻擊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章