社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Instagram是如何利用10个月时间顺利迁移到Python 3

CSDN • 8 年前 • 915 次点击  


作者丨Michelle Gienow 



本文讲述了参与到Instagram迁移工作的两位工程师,Hui Ding和Lisa Guo,他们是如何看待Instagram迁移到Python 3的,以及迁移的原因和好处。以下为译文。 


现在每天在Instagram平台上分享的照片和视频的数量已经超过9500万。照片中心社交媒体平台拥有6亿多注册用户—其中活跃用户每天大概有4亿人。谈谈规模经营:当规模达到了大多数公司做梦都不敢想的阶段以后,Instagram却选择了放弃。


尽管如此,令人印象更深刻的是Instagram在后台是通过Python(当然Django也提供了一点帮助)才能为如此大的访问量提供可靠而稳定的响应。没错,就是Python-就是那门非常容易学习,但是通用性却非常高的编程语言。业内所有人都认为:“是的,Python在很多方面都很出色,但它没办法做到可扩展。”


每天四亿用户。Instagram不仅成为了世界上最大的Python用户,而且该公司最近还将其顺利地转移到Python 3,用户丝毫没有体验到有任何中断。Instagram工程师Hui DingLisa Guo最近接受了The New Stack的访问,他们分享了他们对Python的热爱,并描述了Python 3的迁移体验。


首先请问,Instagram最初为什么会选择使用Python呢?


Hui Ding:我是在Instagram被收购以后,作为第一批进入到Instagram的一员[Instagram成立于2010年,由Facebook在2012年收购]。从那时起,我们从原本的6名工程师变成了300名。尽管最初的时候我并不是其中一员,但是在我们还是一个很小的团队的初期,我和Instagram的联合创始人]Mike Krieger密切合作,所以我有很多关于为什么选择Python的历史背景。


其原因与Instagram的“先做简单事情”的工程座右铭是一致的:对工程师来说,Python是非常容易掌握使用的——它很容易上手,也很容易获得产品,让团队专注于面向用户的功能。Python简洁干净,有利于实用主义。这是一项已被证实的技术。最后,Python是一门非常流行的语言,这使得工程团队的发展变得更加容易。


是什么问题促使Instagram开始考虑了新的堆栈?


Ding:随着我们的发展,我们发现Python并不是最快的语言,而且越来越明显的。AWS也越来越倾向于通过部署更多的服务器来解决速度问题。但是有一点是递减的——在一定程度上,性能回归比用户增长有更多的资源。从现在开始三到五年内,我们估计有10亿用户会加入到社区中,所以是时候开始考虑其他方案了。我们的第一个问题是需要证明切换以后要有足够高的回报。


Instagram用户的增长正在稳步上升——但增速并不像服务器增长那么快


Lisa Guo:我们面临着一个非常大的挑战:在服务器上增加网络的I/O活动。因此,我们需要一种更并行的方式来处理用户请求。实际上,PHP和Python是Facebook最受支持的生态系统,其他任何平台既需要学习曲线,又需要对工程师进行大量新知识的培训。


所以我们做了一个公共投票活动:“与使用PHP进行开发相比,Facebook更应该使用哪一门语言进行服务器端的开发?”


Ding:如果我们看到了性能得到大幅度的提升的话,那么我们就会改变,但最终这些成果都没有展示出来。


所以这些数字并不是很有说服力,我们已经有了很多工具,对Python也投入了很多。使用python/django栈,我们的用户量也达到了几亿,所以我们决定继续使用Python。同样重要的是,我们的工程师非常喜欢Python。这也是他们想要为我们工作的原因。

这就是为什么团队选择python 3的原因吗?


Ding:当时的决定是,我们是否投入到一个相对成熟的版本,但是却不会弃用Python的—或者选择Python的下一个版本?因为下一个版本得到了越来越多的社区支持。这是有道理的,如果我们要在接下来的十年里继续使用Python,我们应该使用Python的最新版本。在我们决定使用Python 3之后不久,我们宣布在2020年以后将不再支持v2.7。


性能速度不再是主要的问题,取而代之的是何时能推向市场。  – Hui Ding


Guo:使用Python 3有三个主要动机:首先,Python不是那种传统意义上的语言,所以当我们开始编写新代码时,开发过程中会出现很多冲突。所以对我们来说,一个很大的动机就是Python宣布了从v3.5版本开始支持typing-我们的开发者对这个消息感到非常兴奋。


其次,网络问题日益成为瓶颈。


第三,Python的速度并不快,但是每一个新版本的运行速度都更快——v2.7,每个人都努力使它运行的更快。随着新版本的发布,我们会得到Python社区的支持,我们也会对社区做出贡献。


那迁移的过程是怎样的?


Guo:总的来说,花了大约十个月,都是处于不同的阶段。


首先,团队修改了大量的代码。这花了2到3个月的时间,包括将不兼容的第三方包替换为支持Python 3的包,工作规则是“没有Python 3,没有新的包”,还删除了未使用的包。


然后进行单元测试,花了两个月的时间。然后,我们在四个多月的时间里进行了缓慢但稳定的新版本的推出。到2017年2月初,我们已经完全运行了Python 3。


Instagram的基础设施工程团队花了10个月的时间完成了向Python 3的迁移


团队究竟是如何实现无缝对接的呢?


Guo:一个重要的因素是,如果你看过了我们是如何迁移的,你就会知道我们会不断地检查主分支的小变化,所以我们从来没有合并过很大的调整。先解决比较多且影响范围大的bug,然后再迭代更新那些影响范围小的bug:这就是我们快速前进的同时还保持住稳定性的关键方法。


Ding:也并不是说迁移工作如此顺利就绝对不会产生任何问题了,因为毕竟这两个版本是不兼容的。 


关键是要提前花时间彻底地解决你的问题。我们从分析设计开始,对潜在的好处和权衡有一个清晰的认识。仔细分析问题真的会有好处,然后再做最合理的事情。也就是说,先做简单的事情并不意味着我们的进展就会延缓,或者我们不承担风险。


切换:Python 2和Python 3之间的无缝转换,不会干扰用户体验


从那以后,Python 3的表现如何?


Ding:
我们没有对Python 3的性能有预期的期望。因此,当我们看到节省了12%的CPU(使用uswgi/django的原因)和30%的内存(使用celery的原因),我们真的感到非常的惊喜。距离推出仅4个月,我们预计性能不会一直保持10%的提升,但这真的是一个非常好的开端。


我们最常使用的一种机制是Thrift,它是用Python编写的,我们Facebook的团队正在努力使其序列化速度更快。


对于那些正在考虑迁移到Python 3的工程师们,你给他们最后的建议是?


Guo:我最了解的是,“我该如何说服经理去使用Python?”由于Python的声誉缓慢,所以很难出售。 但效率工作是我的专长,Python的效率对我来说是一个很大的吸引力,所以通过改善效率可以缓解由于速度问题带来的困扰。


Ding:性能速度不再是主要的问题,取而代之的是何时能推向市场。


Guo:所以我的建议是,先从一个小模块开始,这样你就能感受到它带来的好处——那会让更多的人对改变感兴趣。



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/6kReF440v0
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2409
 
915 次点击