From : 人们对Python在企业级开发中的10大误解 python
在PayPal的编程文化中存在着大量的语言多元化。除了长期流行的C++和Java,愈来愈多的团队选择JavaScript和Scala,Braintree的收购也推出了成熟的Ruby社区。程序员
有一种特别的语言,它在eBay和PayPal有很长的历史,在开发者心中的地位也在日渐提升,这种语言就是:Python。编程
多年来,Python一直获得eBay开发人员的普遍使用和支持。甚至在官方管理层支持之前,技术人员就开始使用Python,并从中受益。多年前,我加入PayPal,并选择Python来编写内部应用程序,但我发如今PayPal的一些产品中,Python代码存在已有15年之久了。后端
如今,Python掌控了超过50个项目,包括:安全
eBay/PayPal的Python社区,2011年只有25名工程师,而2014年这个数字已经超过了260。接下来的一系列文章,我会详细介绍促进Python社区发展的举措和技术。对于这篇介绍性文章,我会专一于人们对Python的10个误解,它们中大多数,我都已经在eBay和PayPal的企业级环境中对它的真相予以揭穿。性能优化
误解1: Python是一门新的语言服务器
今天,伴随着大多初创企业使用的使用,同时儿童也在进行学习,咱们不难发现这种误解仍然在持续。事实上,Python已经有超过23年的历史了,它的第一个公开版本发布于1991年,比HTTP 1.0早了5年,比JAVA早了4年。Python一个著名的早期使用的例子是1996年Google的第一个成功的网络爬虫。网络
若是你对Python悠久的历史感到好奇,Python语言的创立者吉多·范罗苏姆(Guido van Rossum)会向你详细讲述关于Python的整个故事。多线程
误解2:Python没有被编译架构
Python不像C++须要单独的编译器工具链,它更像Java和其它编译型语言,会将代码编译成字节码。进一步的编译步骤,若是有的话,是在程序运行时决定的,并由CPython, PyPy, Jython/JVM, IronPython/CLR或其它进程虚拟机来完成。更多信息参见误解#6。
PayPal和其它地方的通常原则是,安全不能依靠编译状态的代码,更重要的是使运行环境更安全。由于在本质上,每种语言都有反汇编器或能够被破解的特性,这一特性会破坏程序的保护状态。看一看下一个误解,咱们可以了解更多Python的安全内容。
误解 3:Python不安全
Python与轻量级的密切关系也许不会让它看起来很是强大,但偏偏是这种直觉会给人误解。安全的一个核心原则是尽量小的呈现目标。大系统趋向于过分集中化的行为,以及对开发者理解力的削弱,使得它是反安全的。Python的简单高效轻松的解决了这个问题。此外,CPython经过简单的、稳定的和易于审计的虚拟机来解决这些问题。事实上,在Coverity软件最近的一个分析中,CPython获得了最高的质量评价。
Python还具备一系列普遍开源的、行业标准的安全库。在PayPal,咱们对安全和信任丝绝不敢马虎。咱们发现,将hashlib,PyCrypto和OpenSSL结合在一块儿,经过PyOpenSSL,以及咱们自定义的捆绑,已经覆盖了PayPal的各类安全和性能需求。
综合这些缘由,咱们已经能够看到一些在PayPal(eBay)的应用安全组中使用Python并被快速采用的例子。下面给出一些在PayPal最重要的环境中利用Python的基于安全应用的例子。
另外,不少由Python构建的以运营为导向的系统都暗含安全特性,例如防火墙和链接管理。未来,咱们确定会尝试将PayPal python的安全事项进行深刻结合。
误解4:Python是一门脚本语言
Python确实能够做为脚本语言使用,并且仍是这个领域的先行者之一,由于它语法简单,支持跨平台,而且广泛存在于Linux,Macs和其它Unix机器中。
事实上,Python多是通用编程语言中最灵活的技术之一。下面列出一部分例子:
更不用说大量的网站和网络服务器。事实上,PayPal工程师彷佛都有一个嗜好,喜欢从事一些基于Python的门户网站的开发,如YuTube和Yelp。从官方的名单中,能够列举出更多关于Python成功的应用。
误解 5: Python是弱类型的
强大的动态类型是Python类型系统的特色。维基百科上有更详细的解释。
这不是比赛,但作为一个有趣的事实,Python具备比Java更强的类型系统。Java的原语和对象有各自的类型系统,Null存在于一种灰色地带。而另外一方面,Python有一个统一的强类型系统,None这种类型也有明确的定义。此外,Java虚拟机自己也是动态类型,它能够追溯到SUN公司收购的Smaltalk虚拟机的实现。
Python的类型系统很是友好,但对于企业的使用,还有更须要关注的问题。
误解 6: Python速度慢
首先,很重要的一点是:Python是一种编程语言,不是一个运行环境。下面列举几种Python的主要实现:
每种运行时都有它自身的性能特色,它们中没有一个自己是慢的。更重要的一点是这里存在一个错误,即对一种编程语言进行性能评估。应该对一个应用程序,最好是针对一个特定的用例进行评估。
为了使问题更明确,这里筛选了几个案例来讲明Python有很是大的性能优点:
诚然,这些都不是最新的例子,只是我最喜欢的,由于这将很容易扯到高性能Python和独特运行时的广阔世界。咱们应该将注意力应该转移到一些通用的,影响开发者提升最终产品性能的问题上,尤为是企业级环境上,而不是解决单个特殊的问题。
C++与Python的对比,两种语言,同一输出
只要有足够的时间,一个受过训练的开发人员能够执行惟一行之有效的方法,从而得到准确的高性能的软件:
这也许听起来简单,但即便对于经验丰富的工程师,这也是一个很是耗时的过程。Python从设计之初就充分考虑过开发者的时间表。根据咱们的经验,Python项目经受3次甚至更多的迭代并不稀罕,而一样的时间,C++或Java项目只须要作一次。今天,PayPal和eBay已经看到了多个成功的案例,Python项目超越了C++和Java的同行,使用更少的代码,这一切都得益于快的开发时间能够进行仔细的裁剪和优化。你应该知道这些有趣的内容。
误解 7: Python不能扩展
关于扩展有多种定义,但不管哪一种,YouTube都是一个可扩展的网站。每个月都有超过10亿的独立访客,每分钟上传超过100小时的视频,占用20%的互联网络峰值带宽,这些都用Python做为核心技术。Dropbox,Disqus,Eventbrite,RedTwilio,Instagram,Yelp,EVE Online, Second Life, 是的,还有eBay和PayPal,这些案例证实Python的扩展性不只仅只是可能,仍是一种模式。
简单性和一致性是成功的关键。CPython这个基本的Python虚拟机,使这些特征最大化,同时也使运行时间能够预测。很难看到Python程序员关注垃圾收集停止或应用程序启动时间。随着强大的平台和网络支持,Python天然地适应了智能的横向可伸缩性,主要表如今像BitTorrent这样的系统中。
此外,伸缩性是与全部测量和迭代有关。Python创建的初衷是分析与优化。误解6能够找到更多关于如何垂直扩展Python的内容。
误解 8: Python缺少好的并发性支持
在消除了性能和伸缩性的误解后,一些人试图从技术方面来置疑Python,“Python缺少并发性”,或者,“Python的GIL怎么样?”,若是数十个反例还不足以支撑一我的对Python在水平和垂直方面的扩展能力的信心,那么对CPython的详细实现展开来解释也没有什么帮助,因此我只进行简单的说明。
Python有大量的并发性原语,包括generators,greenlets,Deferreds和futures。Python有很是多的并发性框架,包括eventlet,gevent和Twisted。目前已有大量的工做投入到了为并发性定制运行时间,包括Stackless和PyPy。全部这些以及更多的案例代表有效地使用Python进行并发编程不乏其人。全部这些企业级的产品都获得了官方支持和使用。例子能够参考误解7。
全局解释器锁或GIL是在Python大多数使用状况下的性能优化,也是CPython 代码在开发中的易用性优化。GIL可让操做系统的线程或绿色线程使用起来更容易,同时不影响多进程的使用。更多信息能够参考这个主题的Q&A和Python文档的综述。
在PayPal,一个典型的业务配置须要多台机器承担,采用多进程,多线程,和大量的绿色线程,达到一个很是强大和可扩展性的并行环境(见下图)。在大多数企业级环境中,当事人出于谨慎和灾难居处的目的,倾向于选择一个很是高的配置。然而,在某些状况下,仍然能看到Python服务器天天每台机器有数百万次的请求,但它们均可以轻松的处理。
一个处在基于协同的异步架构内的工做草图,最外面的盒子是一个进程,下一级是线程,在线程内是“绿色线程”。操做系统处理线程间的抢占,I/O协同是合做的。
误解 9: Python程序员稀缺
这个误解有一些道理。Python的网页开发工程师不如PHP和Java那么多。这多是因为行业需求和教育的联动致使的,但教育趋势代表这颇有可能会被改变。
即使如此,Python开发者并不稀缺。全世界有数以百万计的Python开发人员,几十个Python会议,StackOveflow上几万个Python相关的问题,一些公司,如YouTube,美国银行,和LucasArts/Dreamworks雇用了成千上万的Python开发人员。在eBay和PayPal,咱们有数百名开发人员常用Python,为何会这样呢?
一个项目建立的时候为何选择Python?Python很是容易学习,并且对孩子,大学生和在职人员来讲也是首选编程语言。在eBay,对一个新Python程序员来讲,只须要一周时间,他就可以初见成效,每每在2到3个月就能够大放异彩,互联网上丰富的互动式教程,书籍,文档和开源的代码库,使这一些变得可能。
另外一个重要因素是使用Python的项目比其它项目须要的开发人员要少。正如误解6和9中所说的,像Instagram这样的精干、高效的团队,在Python项目中已成为一个常见的比喻,这也无疑是咱们在eBay和PayPal的经验。
误解 10: Python不适合作大项目
误解7中讨论了Python项目在运行时的扩展性,但Python项目在开发中的扩展性又怎样呢?如误解9中提到的,Python项目的人员不是不少。然而,Instagram达到天天亿万次的点击和数10亿美圆,整个公司仍然只有一组数十人的团队。Dropbox在2011年仅有70名工程师,其它Python团队的状况也很相似,人员很少。因此Python能够扩展到一个很大的团队吗?
美国银行实际上有超过5000名Python的开发人员,一个单独的Python项目有超过千万行Python代码。摩根大通经历了类似的转变。YouTube也有数千名工程师和数百万行代码。大的产品和大的团队天天都使用Python,它们具备卓越的模块化和封装特性,超过某一特定点后,通用开发规模基本保持不变。工具、强的约定和代码评审使大的项目易于管理。
幸运的是,Python始于一个好基线。在提交代码前,咱们使用PyFlakes和其它工具去执行Python代码的静态分析,同时也坚持PEP8,即Python语言的风格指南。
最后,须要注意的是,除了误解6和7中提到的调度的明显变化外,使用Python的项目也须要更少的开发人员。咱们最多见的成功案例是,一个Java或C++项目,预计须要一个3-5人的开发团队,2-6周的时间,最终由一名受到激励的开发人员仅用2-6周(或小时)完成这个项目。
这是一个奇迹,但也是现代发展的事实,而且一般是商业竞争的必需品。
干净的状态
误解能够做为有趣的消遣。围绕这些误解的讨论仍然是一些最积极和有意义的事情,包括内部的和外部的,由于从每个误解中都能认识到Python的优点。同时也要记住,那些表面上看起来繁琐和麻烦的事情经常是兴趣稳步增加的表现,随着各行业稳定的流入,带来了持续的教育工做。但愿这篇文章能够扑灭一场火焰战争,可以谈论一两个用Python实现的项目。
未来的文章,我会深刻地对细节进行研究。若是在此以前,你但愿了解细节或有任何修正和评论,能够给我发邮件:mahmoud@paypal.com。到那时,快乐编码吧!