Instagram: 用Django服务30亿用户

2018 年 2 月 6 日 互联网架构师

相关阅读:

年底被裁!卸磨杀驴,程序员心中的悲愤与无奈……

想从技术转管理?这些坑你可要注意了!

互联网技术(java框架、分布式、集群)干货视频大全,不看后悔!(免费下载)

在今年的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%的用户测试,最后才公开升级。



迁移到Python3过程中遇到的挑战:

1、Unicode问题

2、数据格式不兼容问题

3、迭代器问题

4、字典排序问题



迁移到Python3后,性能变化如何?


CPU节省12%,内存占用下降30%。



在Python3迁移的过程中,Instagram的月活从4.5亿增长到了6.5亿。所以Instagram推荐大家也迁移Python3,因为Python3有如下优秀的特性:

1、类型提示:你可以在代码中加入额外的说明,指定类型。

2、异步IO,和异步框架。

3、更好的社区,提供更好的工具,如性能测试、内存检测等。


最后,Instagram爱Python


看完本文有收获?请转发分享给更多人


欢迎关注“互联网架构师”,这里是聚集了10W+技术的架构师圈子,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们聊互联网、聊架构,聊人生,聊职场,助你最快进阶!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

登录查看更多
0

相关内容

Django 是用 Python 语言写的开源 Web 开发框架,它鼓励快速开发,并遵循 MVC 设计和 BSD 版权。Django 根据比利时的爵士音乐家 Django Reinhardt 命名。
【SIGIR2020】用于冷启动推荐的内容感知神经哈希
专知会员服务
22+阅读 · 2020年6月2日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
105+阅读 · 2020年5月3日
【WWW2020-微软】理解用户行为用于文档推荐
专知会员服务
34+阅读 · 2020年4月5日
德勤:2020技术趋势报告,120页pdf
专知会员服务
187+阅读 · 2020年3月31日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
223+阅读 · 2020年3月22日
前端微服务在字节跳动的落地之路
前端之巅
40+阅读 · 2019年9月19日
专访阿里亚顿:Serverless与BFF与前端
前端之巅
45+阅读 · 2019年5月8日
使用 Canal 实现数据异构
性能与架构
20+阅读 · 2019年3月4日
爱奇艺基于AI的移动端自动化测试框架的设计
前端之巅
18+阅读 · 2019年2月27日
抖音爬虫
专知
3+阅读 · 2019年2月11日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
有了场景和画像才懂用户
互联网er的早读课
6+阅读 · 2017年8月26日
用户画像之用户性别识别
Python技术博文
7+阅读 · 2017年7月7日
Arxiv
19+阅读 · 2019年11月23日
Factor Graph Attention
Arxiv
6+阅读 · 2019年4月11日
Arxiv
3+阅读 · 2018年10月18日
Next Item Recommendation with Self-Attention
Arxiv
5+阅读 · 2018年8月25日
Arxiv
6+阅读 · 2018年2月7日
Arxiv
3+阅读 · 2012年11月20日
VIP会员
相关VIP内容
【SIGIR2020】用于冷启动推荐的内容感知神经哈希
专知会员服务
22+阅读 · 2020年6月2日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
Python分布式计算,171页pdf,Distributed Computing with Python
专知会员服务
105+阅读 · 2020年5月3日
【WWW2020-微软】理解用户行为用于文档推荐
专知会员服务
34+阅读 · 2020年4月5日
德勤:2020技术趋势报告,120页pdf
专知会员服务
187+阅读 · 2020年3月31日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
223+阅读 · 2020年3月22日
相关资讯
前端微服务在字节跳动的落地之路
前端之巅
40+阅读 · 2019年9月19日
专访阿里亚顿:Serverless与BFF与前端
前端之巅
45+阅读 · 2019年5月8日
使用 Canal 实现数据异构
性能与架构
20+阅读 · 2019年3月4日
爱奇艺基于AI的移动端自动化测试框架的设计
前端之巅
18+阅读 · 2019年2月27日
抖音爬虫
专知
3+阅读 · 2019年2月11日
Python为啥这么牛?
Python程序员
3+阅读 · 2018年3月30日
有了场景和画像才懂用户
互联网er的早读课
6+阅读 · 2017年8月26日
用户画像之用户性别识别
Python技术博文
7+阅读 · 2017年7月7日
相关论文
Arxiv
19+阅读 · 2019年11月23日
Factor Graph Attention
Arxiv
6+阅读 · 2019年4月11日
Arxiv
3+阅读 · 2018年10月18日
Next Item Recommendation with Self-Attention
Arxiv
5+阅读 · 2018年8月25日
Arxiv
6+阅读 · 2018年2月7日
Arxiv
3+阅读 · 2012年11月20日
Top
微信扫码咨询专知VIP会员