雲計算之路-阿里雲上:一場暴風雨的襲擊


2013年6月13日晚10點左右,一場暴風雨(突發的非正常流量)突襲園子,造成滿園盡是500。

這次風暴給大家帶來了麻煩,懇請大家的諒解!在這篇博文中,我們向大家匯報一下暴風雨的襲擊過程。

當發現問題后,我們立即登錄上雲服務器發現巨量的請求撲向雲服務器,將雲服務器的CPU撐爆,奇怪的是這些請求訪問的竟然不是我們的域名。

原來是有人將域名解析到了我們的IP,針對這個域名的大量請求全部轉向了我們的Web服務器,暴風雨就是這么來的。

雖然我們在程序中會對這種情況(請求的域名不匹配)直接返回404錯誤,但這次請求量太大,雲服務器的CPU撐不住,從而引發了500錯誤。

*思考:

  • 如果阿里雲能提供雲服務器的CPU占用報警功能,就能更及時地發現這種異常情況。
  • 如果阿里雲能實現真正的計算能力彈性擴展,就能在CPU跑滿的情況下自動增加CPU,減少突增請求對網站正常訪問的影響。如果按照現在的方式,發現CPU不夠用的時候再購買雲服務器、配置、部署,黃花菜都涼了。
  • 在非常高並發的情況下,托管代碼還是有些力不從心,證據來自——我們后來用非托管的IIS URL Rewrite Module解決了問題。

由於我們用了阿里雲SLB(七層負載均衡),請求是由SLB轉發過來的,所以我們想到了讓阿里雲通過SLB屏蔽針對這個域名的請求,但阿里雲客服說SLB目前沒有這個功能。

為了盡快讓網站恢復正常,我們先通過IIS域名綁定的方式屏蔽異常域名的請求,讓www.cnblogs.com的訪問恢復正常。但這樣的情況下,通過cmt.cnblogs.com這樣的二級域名就不能正常訪問。

后來,我們改用IIS URL Rewrite Module屏蔽了異常域名的請求。

<rule name="BlockForeignDomain" enabled="true" stopProcessing="true">
<match url=".*" />
    <conditions>
    <add input="{HTTP_HOST}" pattern="^.*?\.?cnblogs\.com$" negate="true" />
    <add input="{HTTP_HOST}" pattern="^\d+\.\d+\.\d+\.\d+$" negate="true" />
    </conditions>
    <action type="AbortRequest" />
</rule>

通過雲服務器上的屏蔽策略,消除了500錯誤。但此后的訪問還時不時會出現502 Bad Gateway錯誤:

雖然在雲服務器層屏蔽了異常域名的請求,但巨量的請求依然會給阿里雲SLB(七層負載均衡)帶來巨大的壓力,502錯誤是SLB引起的。

后來阿里雲開啟了SLB的流量清洗,但問題還是存在。

最終切換了SLB(換IP)才解決問題。

 

相關博文:滿園盡是503,記曾經的一次IIS 7性能考驗


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM