作为世界上最大规模的短期人口迁徙活动,今年的春运在全世界的程序员中也已经引起了广泛注意——因为一个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以及猎豹等已经直接集成该插件的浏览器,这部分用户要更新该插件将需要很长时间。