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