12306搶票插件拖垮github
作為世界上最大規模的短期人口遷徙活動,今年的春運在全世界的程序員中也已經引起了廣泛注意——因為一個12306搶票插件12306_ticket_helper直接引用了Github上的js文件,導致Github直接面對了春運搶票的人潮。接著結果就很顯而易見了:github服務器被拖垮了,不得不屏蔽掉對這些文件的引用。
產生問題的原因是插件的更新機制。作者將檢查更新用的js文件托管在GitHub上,通過這個js來獲得最新的代碼。而GitHub對于過于頻繁的請求則會采用屏蔽的方式來暫時阻斷,作者在解決這個問題時沒有經過深思熟慮就采用了最簡單的重試方法,在被阻止5S以后,插件將會重試向GitHub服務器獲取更新。
在Github崩潰的時候,12306面臨著比Github重數十倍的網絡負擔。
當用戶數沒那么多的時候,這個機制比較好用,但是當用戶增加,特別是這個插件嵌入到獵豹以及360瀏覽器以后,暴增的用戶數造成了極其頻繁的更新請求,而GitHub拒絕這些請求以后這個插件的重試功能則讓全國使用這個插件的電腦對GitHub發出以5秒為周期的DDOS攻擊。
目前插件作者和GitHub團隊已經在使用重定向等一切手段來減輕Github的負擔,并且插件作者已經在最新版的插件中將所需文件指向了作者自有的服務器,已經有不少人手動更新了插件版本。但是目前GitHub的網絡負擔依然相當沉重,除了使用chrome的用戶以外,有不少用戶使用的是360以及獵豹等已經直接集成該插件的瀏覽器,這部分用戶要更新該插件將需要很長時間。