Python 语言在企业应用方面遭遇的十大谬误
语言多元化是PayPal编程文化中一个重要的构成部门。在C++和Java恒久风行的同时,更多的团队选择了JvaScript和Scala。同时,Braintree的收购也引入了一个久经世故的Ruby社区。
Python作为一门出格的语言,在eBay和PayPal有很长的汗青。并且其风行水平依然有增不减。
eBay的开拓者支持Python这个应用于下层规模多年的语言。甚至在eBay打点层官方支持Python以前,技能人员就开始利用Python。我在几年前插手PayPal并选择Python来写内部应用,然而,我却发明白PayPal中快要15年以前的Python代码。
今朝,Python 支撑着 高出50个项目, 包罗:
成果和产物型, 譬喻 eBay Now 和 RedLaser
运营和基本设施型, 从开放的 OpenStack 到专有设施
中间层处事和应用型, 譬喻 PayPal 用来设订价值以及检测用户可用成果的谁人(处事/应用)
监测署理和接口型, 用于涉及到陈设和安详的一些用例
批处理惩罚任务型, 譬喻数据导入,价值调解,及其它项目
以及不行胜数的开拓者东西
在接下来的文章里我将具体先容那些使得 eBay 和 PayPal 的 Python 生态系统从2011年的不高出25个工程师到2014年高出260个工程师所利用的技能和办法。对付本文,我则会专注于10个不得不予以揭破的关于 eBay 和 PayPal 的企业情况的谬误。
谬误 #1: Python 是一门新语言
陪伴着所有的初创公司正在利用它以及孩子们最近也在进修它的事实,这个谬误为何仍然存在是可以领略的。实际上 Python 已经 高出23岁了, 它最初宣布于1991年, 早于 HTTP 1.0协议 5年且早于 Java 4年. 今朝较量有著名的很早就利用 Python 的例子是在1996年: Google 的第一个乐成的网络爬虫.
谬误 #2: Python 没有被编译
不像 C++ 一样需要一个独立的编译器东西链,Python 实际上被编译成了字节码,和 Java 可能很多其他的编译型语言十分相似。更进一步的编译进程,假如有的话, 取决于运行时情况, 不管是 CPython,PyPy,Jython/JVM,IronPython/CLR,或是其它的历程式虚拟机(process virtual machine)。参考 谬误 #6 来相识更多。
一条在 PayPal 以及其它处所的通用原则就是,(应用的)安详性不能依赖于代码的已编译状态。更为重要的是增强运行时情况的安详,因为实质上每种语言都有一个解码器,可能能被拦截并导出受掩护的状态。参考下一条谬误来相识更多的 Python 安详性问题。
谬误 #3: Python 不安详
轻量级 Python 的亲和力大概使他看起来不怎么可骇,可是这里直觉很洪流平上是受到了误导的. 安详的一个焦点原则就是尽大概让泛起的方针更小. 大系统是违背安详原则的,因为他们趋向于 使行为过渡会合化, 而且也 让开拓者难于领略. Python 通过建议简捷化来边沿化这些恶心的问题. 更有甚者, CPython 通过让本身成为一个简朴、不变而且易于审核的虚拟机来使这些问题获得办理. 事实上,近期 Coverity Software 的一个阐明功效显示 CPython 获得了他们的最高质量评级.
Python 还拥有一系列可扩展的开源、财富尺度化的安详库序列. 在PayPal, 我们把安详和授信看做是重中之重, 我们发明 hashlib, PyCrypto, 以及 OpenSSL, 通过 PyOpenSSL 和我们本身的定制构建的团结,涵盖了 PayPal 多样化的安详和机能需求.
这些诸多的原因,使得 Python 成为PayPal(和eBay)的应用措施安详团队在某些业务中最快的选择. 这里有把Python用在PayPal的安详第一情况中的几个以安详为基本应用措施:
建设安详署理,以促进密钥的轮换以并固定加密实现
同业界领先的 HSM 技能集成
为缺乏兼容性的技能栈构建受TLS掩护的封装署理
为我们内部的相互认证打算生成键和证书
开拓主动的裂痕扫描器
别的,尚有无数存在安详隐患的用Python构建,面向操纵的系统, 诸如防火墙和毗连打点. 将来,我们必然归去深入的整合PayPal Python的安详事项.
谬误 #4: Python 是一门剧本语言
Python 确实可以用来编写剧本,而且因其简朴的语法、跨平台而且无所不在于 Linux, Macs, 和其它Unix 呆板而成为这个规模的领跑者之一.
事实上, Python 大概是通例用途编程语言中最机动的技能. 以下是一些实例:
电信基本设施 (Twilio)
付出系统 (PayPal, Balanced Payments)
神经科学和心理学 (很多, 很多, 例子)
数值阐明和工程 (numpy, numba, 以及 更多其它)
动画(LucasArts, Disney, Dreamworks)
游戏靠山 (Eve Online, Second Life, Battlefield, 以及 其它许多)
Email 基本设施 (Mailman, Mailgun)
媒体存储和处理惩罚 (YouTube, Instagram, Dropbox)
操纵和系统打点 (Rackspace, OpenStack)
自然语言处理惩罚(NLTK)
呆板进修和计较机版本 (scikit-learn, Orange, SimpleCV)
安详性和渗透性测试 (许多许多 以及 eBay/PayPal
大数据 (Disco, Hadoop support)
如理 (Calendar Server, 它 驱动了 Apple iCal)
搜索系统 (ITA, Ultraseek, 尚有 Google)
Internet 基本设施 (DNS) (BIND 10)
#p#分页标题#e#
更别提网站和web处事了,那些都不在少数. 事实上,PayPal工程师看起来像是有乐趣致力于基于Python的web特性,好比 YouTube 和 Yelp. 假如对Python乐成案例的更大清单感乐趣,那就看看官方的清单吧.
谬误 #5: Python 是弱范例的
Python 范例系统的特点是拥有强大、机动的范例操纵. 维基百科上对此作出的叙述.
而存在一个不争而有趣的事实是, Python 是比Java越发强范例的. Java 对付原生范例和工具区分了范例系统,它让null存在于一个灰色地带. 另一方面,现代的 Python 拥有一个统一的强范例系统, 个中什么都没有(None) 的范例是明晰指定的. 更进一步的,JVM自身也是动态范例的,因为可以把它的 来源 追溯到由Sun所收购的Smalltalk VM的一个实现.
Python的范例系统 很棒,但要提供应企业级利用,今朝仍然尚有很多更重大的事项需要存眷.
谬误 #6: Python 速度慢
首先是有一个重要区别: Python 是一门编程语言,而不是运行时情况. Python 拥有几个实现:
CPython 是参考实现, 且也是遍及宣布和利用的实现.
Jython 是Python用于JVM的是一个成熟的实现.
IronPython 是 Microsoft 针对其自家的通用语言运行时——又名 .NET,实现的Python .
PyPy 是一个正在日趋成熟的Python实现,拥有JIT编译,增量垃圾收集诸多先进的特性.
每一个运行时都有其本身的机能特点, 并且他们自己也不慢. 这里更重要的处地址于不能错误地把一本机能指标分配到一门编程语言智商. 应该老是把该评估用在一个应用措施运行时上面,最好是针对一个特定的利用场景.
给定足够的时间,一个安分守纪的开拓者只会凭据下面这种颠末论证的方法来编写准确高效的软件:
设计实现一个可以正确完成任务的软件,包罗开拓单独的测试
测试机能,明晰瓶颈
优化,按照测试和Amdahl法例,而且操作Python与C的渊源
固然这听起来很简朴,可是纵然是老道的工程师,这依旧是一个很是耗时的进程。Python设计之初就思量到了这一套开拓流程。按照我们的履历,凡是C++和Java项目完成一次迭代流程的时间,够Python项目完成三次迭代流程。本日,PayPal和eBay中不乏有Python项目利用更少的代码战胜了同类C++和Java项目,这多亏了快速的开拓使得仔细的裁剪和优化变得大概。
Myth #7: Python无法做到大局限
大局限有很多界说,但无论奈何,YouTube是个大局限网站。每月UV高出十亿,每分钟上传的视频时长高出100小时,占用互联网带宽的20%,所有这一切都以Python作为焦点技能。Dropbox,Disqus, Eventbrite, Reddit, Twilio, Instagram, Yelp, EVE Online, Second Life,,以及,是的,以及eBay和PayPal中都有Python大局限的例子,这些证明大局限不只仅是大概:它是一种模式。
乐成的关是键简朴性且一致性。CPython,Python的主要虚拟机,其最大限度地放大了这些特性,从而演变出了一个准确可测的运行时。人们很难发明 Python措施员体贴垃圾的收集暂停或应用地启动时间。拥有强大的平台和网络支持,Python其自己自然而然的智能程度可扩展,BitTorrent就是其充实的浮现。
另外,局限化主要涵盖丈量和迭代。Python是以阐明和优化为要义成立的。看Myth #6相识更多Python如何垂直拓展的细节。
Myth #8: Python缺少好的并发支持
除了偶然哗闹机能和局限化的问题,有人想提的技能些,“Python缺乏并发,”可能,“GIL怎么样?“假如几十个反例仍不敷以支持Python程度及垂直拓展局限的本领,那么再更深地表明CPython实现细节也不会有辅佐,所以我会简短些。
Python拥有强大的并发原语,包罗generators, greenlets, Deferreds, 和futures.。Python有优秀的并发框架,包罗eventlet, gevent,和Twisted。Python在定制运行时尚投入了惊人的事情量,包罗Stackless和 PyPy。所有烦人这些和更多表白,基础不存工程师们在Python并发编程方面的缺憾。同时,所有这些都正在被正式的在企业出产情况中支持或利用。譬喻,请参考Myth #7。
全局表明器锁,或称GIL,是Python在大大都应用场景下的机能优化,也是险些所有CPython实现代码的开拓上的基本优化。GIL使得Python可以很便利地利用操纵系统的线程或轻线程(凡是指greenlets),且不影响利用多历程。更多相关信息,请看该主题的Q&A列表,以及Python文档中的先容。
在PayPal中,一个典范处事的陈设需要多台呆板,多个历程,多个线程,以及一个数字很是复杂的greenlets,相当于一个很是强大可扩展的并行情况(见下图)。在大大都的企业情况中,团队更倾向于往更高条理太过,审慎并注重劫难规复。然而,在某些环境下,每台呆板天天Python处事仍然处理惩罚数以百万计的请求,并且轻松处理惩罚。
#p#分页标题#e#
一个基于单一worker的协同异步架构草图。最外层的盒子是历程,下一个条理为线程,这里这些线程都是轻线程。操纵系统处理惩罚线程间的抢占,而I/O异步协同相助。
谬误 #9: Python 措施员很稀缺
事实上,此刻利用 Python 的 web 开拓者简直没有利用 PHP 可能 Java 的 web 开拓者多。这大概主要是由于企业需求和教诲之间的彼此浸染导致的,不外 教诲规模(解说所利用的编程语言)的趋势使得环境大概发生变革 。
也就是说,利用 Python 的开拓者并不稀缺。此刻全世界有数百万利用 Python 的开拓者。已有几十个Python 技能大会、 StackOverflow 上成千上万的 Python 内容问答、雇佣大量利用 Python 的开拓者的大企业好比 YouTube 、 美国银行( Bank of American )和 LucasArts/Dreamworks 等等,这些都显而易见解证实了这一点。在 eBay 和 PayPal 我们一直保持拥有几百位利用 Python 的正式开拓者,这是怎么做到的呢?
那么,当一个项目被建设时为什么它会被首推?对付孩子来,大学生和传授们来说,Python作为第一门措施设计语言长短常易于进修的。在eBay,仅仅需要一个礼拜,一个新的Python措施员就能展示一个真正的成就,而且他们开始披发光线经常只要2-3个月,通过Internet的宝藏(互动式教程,书,文档和开源代码库)一切皆有大概。
别的一个重要的思量因素是,项目利用Python会更简朴,它不会像其他项目那样需要那么多的开拓者。在谬误6和谬误9中提到的那样,在Python项目中,进修像Instagram那样的高效团队是一个常见的比喻,而且这确实是我们在eBay和PayPal的履历。
Myth #10: Python不适应于大项目
Myth #7 接头了大局限运行Python的项目,但开拓Python大局限项目是什么环境呢?正如在Myth #9中提到的,大大都Python不被人看好。 然而Instagram在其被亿元美金收购当天到达千万的点击量,而整个公司只有十几小我私家。Dropbox在2011年只有70个工程师,其他团队更少。所以,Python适合大局限团队吗?
美国银行实际上有高出5000的Python开拓者,一个单独的项目高出一千万行Python代码。JP摩根也经验了雷同的转变。YouTube也有数千的开拓者和数百万行的代码。大局限产物和团队天天都在利用Python,因为它具有精采的模块化和封装特性,在特定方面很多的大局限开拓发起是一致的。东西,强大的老例以及代码审查促使了项目局限化打点的现实。幸运的是,Python成长于上面所提到的好的奠定。我们在查抄执行利用pyflakes以及其他东西举办Python代码的静态阐明,正如僵持PEP8——Python语言的基本气势气魄指南。
最后,应该指出的是,除了调治加快Myth #6以及#7中所提到的,利用Python的项目凡是需要更少的开拓者。我们常见的乐成案例中,利用Java或C++的项目凡是有3-5开拓者耗时2-6个月,最终由单一的开拓者在2-6周(或小时,因为这些原因)完成项目。
有点像古迹,但却是现代成长的事实,但其往往出自一个竞争剧烈的行业。
一种清洁的状态
这些谬误大概只是消遣。接头这些谬误仍然很活泼的和受开导的,包罗内部和外部, 因为隐含在每一个谬误里的都是一个Python的优势的认识。 并且, 记着这些看似乏味的表示和贫苦的问题是稳步生长的露出, 并不变地增长乐趣促进教诲和一连地事情。 在这里,但愿能毁灭一场布满火焰的战争,而且使得能真正去谈论事情与Python的实现。
把稳未来的帖子,我将深入研究细节在这个概览。 那么你在那之前就必需相识细节,已经批改 或是注释起来, 我的电子邮件是 [email protected] 到当时,开心编码吧!