阅读更多
引用

译者注:本文讲述了参与到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:所以我的建议是,先从一个小模块开始,这样你就能感受到它带来的好处——那会让更多的人对改变感兴趣。
  • 大小: 43.3 KB
  • 大小: 69.2 KB
  • 大小: 99.9 KB
  • 大小: 59.6 KB
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 为什么向 Python 3迁移需要这么长时间?

    在 2014 年的 Pycon 中,Python 的发明人 Guido van Rossum 说:“现在是进入 Python 3 的时候了!”-- 他告诉现场听众应该开始在工作中采用 Python3。 经过核心代码贡献者和开源社区的多年努力,Python 2 终于...

  • 从无人问津到占主导,脸书如何从Python 2迁移到Python 3

    \过去几年,Python 3的...在今年的PyCon 2018会议上,Facebook产品工程师Jason Fried讲述了该公司在过去四年时间里,Python 3从几乎无人问津到成为该公司主流Python版本的全过程,也展示出Fried作为一名工程师的坚持...

  • Python那么慢,为什么大公司还在用?听听Instagram怎么说

    在大会上,来自世界各地的 Python 用户与核心开发者齐聚一堂,共同分享 Python 世界的新鲜事、Python 语言的应用案例、使用技巧等等内容。 Instagram 简介 Instagram 是一款移动端的照片与视频分享软件,由 Kevin ...

  • 都说Python处理速度慢,为何月活7亿的 Instagram依然在使用Python?

    点击“Python编程与实战”,选择“置顶公众号”第一时间获取 Python 技术干货!来自 | 简书作者 |我爱学python链接 |https://www.jianshu....

  • Python + Django 如何支撑了 7 亿月活用户的 Instagram?

    在大会上,来自世界各地的 Python 用户与核心开发者齐聚一堂,共同分享 Python 世界的新鲜事、Python 语言的应用案例、使用技巧等等内容。 Instagram 简介 Instagram 是一款移动端的照片与视频分享软件,由 Kevin ...

  • Python向来以慢著称,为啥Instagram却唯独钟爱它?

    在 Python 2017 上,Instagram 的工程师们带来了一个有关 Python 在 Instagram 的主题演讲,同时还分享了 Instagram 如何将整个项目运行环境升级到 Python 3 的故事。本文为该次演讲的内容摘要,由 Python 爱好者...

  • 20个必不可少的Python库也是基本的第三方库

    今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们。他们是: Requests.Kenneth Reitz写的最富盛名的http库。每个Python程序员都应该有它。 Scrapy.如果你从事爬虫相关的工作,那么...

  • Instagram 使用 Python 的经验

    作者|朱雷PyCon 是全世界最大的以 Python 编程语言 为主题的技术大会,大会由 Python 社区组织,每年举办一次。在 Python 2017 上,Insta...

  • 怎么用Python写出随时间变化的字_Python 容器使用的 5 个技巧和 2 个误区

    每天 11:40 准时为你分享文 | piglei@piglei 公众号编辑 | EarlGrey编程派公众号授权发布“容器”这两个字很少被 Python 技术文章提起。一看到“容器”,大家想到的多是那头蓝色小鲸鱼:Docker,但这篇文章和它没有...

  • python语言是二进制语言吗_在大型项目上,Python 是个烂语言吗?

    我玩 Python 的时候了解到,用 Python 用的好的大型互联网公司,非 FaceBook 莫属了。你们知道吗?Instagram 的总注册用户达到 30 亿,月活用户超过 7 亿。而令人吃惊的是,这么高的访问量背后,竟完全是由以速度慢...

  • python3.8对应django版本_对于Python2到Python3的代码转换,Python&Django的哪个版本最适合?...

    直到你触发3.x你的测试应该在这两种情况下运行不要使用任何3.x特定的功能,比如f字符串首先是python3.x,然后是Django 2.x,它不运行在2.7上尽早开始,不要过度分析,但要避免大爆炸的方法一开始一个文件一个文件。...

  • Python 3和Python如何去选择?老司机来带带你吧!

    一种语言版本的升级是极为普通且常见的事情,不升级才算的上不正常,但是Python 3 算的上是一个例外,因为 Python 3 放弃了向下兼容,也就是说,你在 Python 2 系列版本中写的代码,一直好好的运行着,只要放到 3 的...

  • 整理了上千个 Python 工具库,涵盖24个大方向

    Python 生态,向来以各种类库齐全而闻名,这也是这门语言如此受欢迎的重要原因。今天就给大家分享一下这几天的战果,宵衣旰食,不眠不休的整理了近千个 Python 库,

  • Django学习笔记-Django概述与Python3语法

    Django是后起之秀,近些年越来越流行,Youtube(月活20亿+)、Instagram(月活10亿+)等公司采用了Django框架。可以作为Web、App、小程序、AcWing云端App(AC APP)等各种项目的后端。开发效率高,生态完善,有官方...

  • 100个相见恨晚的Python库

    它总结了Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等各个方向的python库这里面每个方向的库都是

  • python是什么公司开发的软件-9个使用Python的世界级软件公司

    原标题:9个使用Python的世界级软件公司我们现在就告诉你九个使用Python的顶级公司。通过这种方式,您可以看到Python在商业和软件开发中的实际应用。Industrial Light and MagicIndustrial Light and Magic(ILM)是...

  • 有什么网站是python做的_有什么是用python做的

    3、Instagram;4、Quora;5、Netflix等等。python有多强大?都能做什么?现在就告诉你使用Python的顶级公司。通过这种方式,您可以看到Python在商业和软件开发中的实际应用以及python的强大之处。使用python的世界...

  • spring-ai-spring-boot-autoconfigure-1.0.0-M5.jar中文文档.zip

    # 【spring-ai-spring-boot-autoconfigure-***.jar中文文档.zip】 中包含: 中文文档:【spring-ai-spring-boot-autoconfigure-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【spring-ai-spring-boot-autoconfigure-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-spring-boot-autoconfigure-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-spring-boot-autoconfigure-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-spring-boot-autoconfigure-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-spring-boot-autoconfigure-***.jar中文文档.zip,java,spring-ai-spring-boot-autoconfigure-***.jar,org.springframework.ai,spring-ai-spring-boot-autoconfigure,***,org.springframework.ai.autoconfigure.anthropic,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,springframework,spring,ai,boot,autoconfigure,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【spring-ai-spring-boot-autoconfigure-***.jar中文文档.zip】,再解压其中的 【spring-ai-spring-boot-autoconfigure-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-spring-boot-autoconfigure</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'org.springframework.ai', name: 'spring-ai-spring-boot-autoconfigure', version: '***' Gradle (Short): implementation 'org.springframework.ai:spring-ai-spring-boot-autoconfigure:***' Gradle (Kotlin): implementation("org.springframework.ai:spring-ai-spring-boot-autoconfigure:***") ``` # 含有的 Java package(包): ``` org.springframework.ai.autoconfigure.anthropic org.springframework.ai.autoconfigure.azure.openai org.springframework.ai.autoconfigure.bedrock org.springframework.ai.autoconfigure.bedrock.anthropic org.springframework.ai.autoconfigure.bedrock.anthropic3

  • 50页-道路环卫保洁服务项目管理计划方案.pdf

    在当今智慧城市的建设浪潮中,智慧环卫作为城市管理的重要组成部分,正以其独特的魅力引领着环卫行业的变革。本方案旨在通过一系列高科技手段,如物联网、大数据、云计算等,全面提升环卫作业效率与管理水平,为城市居民创造更加清洁、宜居的生活环境。 一、智慧环卫系统概述与核心亮点 智慧环卫系统是一个集机械化保洁、垃圾清运、设施管理、事件指挥调度等多功能于一体的综合性管理平台。其核心亮点在于通过高精度定位、实时监控与智能分析,实现环卫作业的精细化管理。例如,机械化保洁管理子系统能够实时监控机扫车、洒水车等作业车辆的运行状态,自动规划最优作业路线,并根据作业完成情况生成考核评价报表,极大地提高了作业效率与服务质量。同时,垃圾清运管理子系统则通过安装GPS定位设备和油量传感器,对清运车辆进行全方位监控,确保垃圾清运过程的规范与高效,有效解决了城市垃圾堆积与随意倾倒的问题。此外,系统还配备了垃圾箱满溢报警系统,通过智能感应技术,当垃圾箱内垃圾达到预设高度时自动报警,提醒作业人员及时清运,避免了因垃圾满溢而引发的居民投诉与环境污染。 二、智慧环卫系统的趣味性与知识性融合 智慧环卫系统不仅实用性强,还蕴含着丰富的趣味性与知识性。以餐厨垃圾收运管理子系统为例,该系统通过为餐厨垃圾收运车辆安装GPS定位、车载称重、视频监控等多种感知设备,实现了对餐厨垃圾收运过程的全程监控与智能管理。作业人员可以通过手机APP实时查看车辆位置、行驶轨迹及收运情况,仿佛在玩一场现实版的“垃圾追踪游戏”。同时,系统还能自动生成餐厨垃圾收运统计报表,帮助管理人员轻松掌握收运量、违规情况等关键数据,让数据管理变得既科学又有趣。此外,中转站视频监控子系统更是将趣味性与实用性完美结合,通过高清摄像头与双向语音对讲功能,实现了对中转站内外环境的实时监控与远程指挥,让管理人员足不出户就能掌控全局,仿佛拥有了一双“千里眼”和一对“顺风耳”。 三、智慧环卫系统的未来展望与社会价值 随着科技的不断进步与智慧城市建设的深入推进,智慧环卫系统将迎来更加广阔的发展前景。未来,智慧环卫系统将更加注重数据的深度挖掘与分析,通过大数据与人工智能技术,为城市环卫管理提供更加精准、高效的决策支持。同时,系统还将加强与其他城市管理系统的互联互通,实现资源共享与协同作战,共同推动城市管理的智能化、精细化水平。从社会价值来看,智慧环卫系统的推广与应用将有效提升城市环境卫生质量,改善居民生活环境,提升城市形象与竞争力。此外,系统还能通过优化作业流程、减少资源浪费等方式,为城市可持续发展贡献重要力量。可以说,智慧环卫系统不仅是城市管理的得力助手,更是推动社会进步与文明发展的重要力量。

Global site tag (gtag.js) - Google Analytics