2017年 Instagram 把 Python2 升级到了 Python3

Instagram是特别流行的图片和视频分享社交平台,有超过6亿的注册用户,每天有超过4亿的活跃用户。因此,它是一个特别大规模的计算平台。它的主要开发语言是Python。Instagram是世界上最大的Python用户。

像PHP一样,Python也是属于入门容易的语言。最初Instagram选择Python的原因,和其他创业公司的技术选择一样,主要是因为初始团队的技术骨干很熟悉某种技术。而且Python也是很适合快速开发的语言。快速推出功能,比运行速度快要更重要。在架构合理的情况下,运行性能的问题可以通过添加服务器来缓解。

Python的运行慢的确给Instagram带来了服务器运营成本上的增加,他们也确实想过换成其他语言。Instagram属于Facebook,公司的另外一个主流语言是PHP。在调研时,把试点模块用PHP改写后,性能并没有特别大的改善。再加上Instagram的技术团队特别喜欢(熟悉)Python。于是他们改变了态度,与其抱怨,不如积极改善。既然决定了继续留在Python阵营,那么就要跟随Python社区,使用最新版本的Python,并回报社区。全面升级到Python3成了顺理成章的事情(Python3相对于Python2有很多新的特性)。

Python2与Python3并不兼容。Instagram前后花了近一年(10个月)的时间,通过小步快跑的方式,在不影响用户的情况下完成了迁移。

迁移过程中,他们主要做了哪些工作呢?

第一阶段,约3个月时间,大规模的代码修改,以及替换掉不兼容的第三方库。

第二阶段,约2个月时间,单元测试。

第三阶段,约4个月时间,逐步发布新的系统。

虽然他们最初的代码修改是很大规模的,但是主线代码的合并过程是持续小批量的,上线时新的代码也是限定到了小规模的用户群体,通过APM(应用性能管理)方案做好了自动化的性能监控和自动部署切换。而且他们是从小的模块,小的服务等开始,伴随着新功能上线的过程,逐步转换的。这使得整个过程不会受到来自商务和管理层的需求方面的压力。