专栏名称: Python程序员
最专业的Python社区,有每日推送,免费电子书,真人辅导,资源下载,各类工具。我已委托“维权骑士”(rightknights.com)为我的文章进行维权行动
目录
相关文章推荐
Python开发者  ·  DeepSeek 四连炸!梁文峰参与开发 ·  昨天  
Python爱好者社区  ·  王炸!DeepSeek彻底爆了! ·  昨天  
Python爱好者社区  ·  同事年底绩效是C,提离职领导死活不让走,后来 ... ·  2 天前  
Python爱好者社区  ·  卧槽,这才是最惊艳的python教程 ·  3 天前  
Python爱好者社区  ·  刚刚,奥特曼晒出早产娃引爆全网!两个爸爸孕育 ... ·  3 天前  
51好读  ›  专栏  ›  Python程序员

Instagram: 用Django服务30亿用户

Python程序员  · 公众号  · Python  · 2017-06-17 11:12

正文

在今年的Pycon大会上,Instagram分享了他们使用Python的方法和心得。作为一款全球性质的,月活跃用户破7亿的产品,Instagram的经验可以给我们很多启发。现在就让我们看看他们分享的经验吧。


为什么Instagram选择Python?

1、易于部署

2、容易招人

3、语言成熟且Django好用

4、使用Django的User model服务30亿用户



我们对我们的Python做了哪些hack?

1、增加分布式数据库的支持

2、禁止垃圾回收来优化内存使用率

3、跨多数据中心运行我们应用




赞美Python

1、Python总是快速解决问题,可以快速实现初版

2、Python是被验证过的技术,大家都说好

3、用户优先:专注为用户提供价值


Python是有点慢,但我们不在乎,我们的瓶颈是开发的进度!



解决Python效率的问题

1、构建工具来监控性能,理解性能瓶颈所在。

2、把稳定的、大访问量的部分用C/C++改写,比如memcached访问。

3、用Cython来处理代码转换的问题。

4、我们也在考略用Async,或者改换Python运行时。



为什么我们要迁移到Python3?

1、改善开发效率

2、提升性能

3、社区支持,毕竟Python2已经不支持了。



如此巨大的服务,如何完成Python2到Python3的迁移?


从代码管理上


Instagram不区分分支,都在单一master分支上开发。他们认为:

1、分支同步会有额外的负载,而且有时候会出错。

2、分支合并有巨大的风险。

3、丧失了互相学习的机会


Instagram也没有使用多个代码库的办法。他们认为:

1、多个代码库之间有很多通用代码需要共用。

2、程序员需要在多个项目之前切换思维。

3、管理多个代码库耗费精力。


Instagram也没有采用微服务,因为:

1、微服务意味着大量的代码重构。

2、架构效率更低。

3、部署更复杂。


他们最后选择的办法是:让master分支兼容Python2和Python3


在实际操作中


Instagram安排了一个整块时间做迁移,到一个时间点后,所有的代码都是Python3的了。


这个过程中,替换第三方包以及代码修改用了3-4个月,然后测试进行了2个月,最后部署流程进行了4个月。


替换第三方包以及代码修改时 ,有四个步骤:

1、不是Python3的包不添加。

2、删除不兼容的包,比如thrift,ipaddr,django-paging,python-memcached,hiredis,enum34,httplib2,dnspython,twisted,django-templatetag-sugar,pyapns,django-sentry,jsonfig,phpserialize.....

3、升级兼容包,比如Django。

4、使用codemod升级代码,这一步会把很多Python2语法自动更改为Python3代码。


测试 的过程当然就是修Bug啦,但是测试不足以证明代码已经没问题了,因为:

1、测试不可能有100%的覆盖率。

2、很多外部服务都被mock了。

3、单元测试测不出数据不兼容的问题


所以Instagram采取了灰度部署的策略

开发测试,内部测试,0.1%的用户测试,20%的用户测试,最后才公开升级。








请到「今天看啥」查看全文