【Python环境】人们对Python在企业级开发中的10大误解

在PayPal的编程文化中存在着大量的语言多元化。除了长期流行的C++和Java,越来越多的团队选择JavaScript和Scala,Braintree的收购也推出了成熟的Ruby社区。

有一种特别的语言,它在eBay和PayPal有很长的历史,在开发者心中的地位也在日渐提高,这种语言就是:Python。

多年来,Python一直得到eBay开发人员的广泛使用和支持。甚至在官方管理层支持以前,技术人员就开始使用Python,并从中受益。多年前,我加入PayPal,并选择Python来编写内部应用程序,但我发现在PayPal的一些产品中,Python代码存在已有15年之久了。

现在,Python掌控了超过50个项目,包括:

· 功能和产品,如eBay Now和RedLaser

· 运营和基础设施,既有OpenStack,也有专属产品

· 中间层服务和应用程序,如设置PayPal的价格和顾客的功能审查

· 监控代理和接口,用于多种部署和安全用例

· 数据导入的批量作业,价格调整等等

· 还有太多的开发工具没有计入

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的基于安全应用的例子。

· 为促进密钥置换和加强加密的实现创建安全代理

· 集成行业领先的HSM技术

· 为不兼容的栈构建基于传输层安全的包装器代理

· 为我们内部双向认证机制产生密钥和证书

· 开发主动的漏洞扫描器

另外,很多由Python构建的以运营为导向的系统都暗含安全特性,例如防火墙和连接管理。将来,我们肯定会尝试将PayPal python的安全事项进行深入结合。

误解4:Python是一门脚本语言

Python确实可以作为脚本语言使用,而且还是这个领域的先行者之一,因为它语法简单,支持跨平台,并且普遍存在于Linux,Macs和其它Unix机器中。

事实上,Python可能是通用编程语言中最灵活的技术之一。下面列出一部分例子:

1.电话基础设施(Twilio)

2.支付系统(PayPal,Balanced Payments)

3.神经科学和心理学(例子很多)

4.数值分析和工程学(numpy, numba和很多其它例子)

5.动画片(LucasArts, Disney, Dreamworks)

6.游戏后端(Eve Online, Second Life, Battlefield和很多其它例子)

7.电子邮件基础设施(Mailman, Mailgun)

8.媒体存储和处理(YouTube, Instagram, Dropbox)

9.运营和系统管理(Rackspace, OpenStack)

10.自然语言处理(NLTK)

11.机器学习和计算机视觉(scikit-learn, Orange, SimpleCV)

12.安全和渗透测试(太多了,包括eBay/Paypal/)

13.大数据(Disco, Hadoop support)

14.日历(Calendar Server, which powers Apple iCal)

15.搜索系统(ITA, Ultraseek, and Google)

16.互联网基础设施(DNS) (BIND 10)

更不用说大量的网站和网络服务器。事实上,PayPal工程师似乎都有一个嗜好,喜欢从事一些基于Python的门户网站的开发,如YuTube和Yelp。从官方的名单中,可以列举出更多关于Python成功的应用。

误解 5: Python是弱类型的

强大的动态类型是Python类型系统的特点。维基百科上有更详细的解释。

这不是比赛,但做为一个有趣的事实,Python具有比Java更强的类型系统。Java的原语和对象有各自的类型系统,Null存在于一种灰色地带。而另一方面,Python有一个统一的强类型系统,None这种类型也有明确的定义。此外,Java虚拟机本身也是动态类型,它可以追溯到SUN公司收购的Smaltalk虚拟机的实现。

Python的类型系统非常友好,但对于企业的使用,还有更需要关注的问题。

误解 6: Python速度慢

首先,很重要的一点是:Python是一种编程语言,不是一个运行环境。下面列举几种Python的主要实现:

1.CPython是参考实现,它的分布和使用也最为广泛。

2.Jython是一种成熟的实现,是在Java虚拟机上使用的Python。

3.IronPython是用微软的公共语言库即.NET实现的Python语言。

4.PyPy是一种很有前途的Python语言的实现,具有一些高级特性,如JIT编译器,增量垃圾收集等等。

每种运行时都有它自身的性能特点,它们中没有一个本身是慢的。更重要的一点是这里存在一个错误,即对一种编程语言进行性能评估。应该对一个应用程序,最好是针对一个特定的用例进行评估。

为了使问题更明确,这里筛选了几个案例来说明Python有非常大的性能优势:

1.使用NumPy作为英特尔公司数学核心函数单指令多数据的接口

2.PyPy的JIT编译器达到了比C语言更快的性能

3.Disqus的用户规模从2.5亿增长到5亿,一直都是使用同样的100台服务器

诚然,这些都不是最新的例子,只是我最喜欢的,因为这将很容易扯到高性能Python和独特运行时的广阔世界。我们应该将注意力应该转移到一些通用的,影响开发者提高最终产品性能的问题上,尤其是企业级环境上,而不是解决单个特殊的问题。

C++与Python的对比,两种语言,同一输出

只要有足够的时间,一个受过训练的开发人员可以执行唯一行之有效的方法,从而获得准确的高性能的软件:

1.工程师的正确行为,包括相应的测试开发

2.概括和测量性能,识别瓶颈

3.优化,适当考虑测试套件和阿姆达尔定律,同时利用Python在C语言方面强大的根源关系。

这也许听起来简单,但即使对于经验丰富的工程师,这也是一个非常耗时的过程。Python从设计之初就充分考虑过开发者的时间表。根据我们的经验,Python项目经受3次甚至更多的迭代并不稀罕,而同样的时间,C++或Java项目只需要做一次。今天,PayPal和eBay已经看到了多个成功的案例,Python项目超越了C++和Java的同行,使用更少的代码,这一切都得益于快的开发时间可以进行仔细的裁剪和优化。你应该知道这些有趣的内容。

误解 7: Python不能扩展

关于扩展有多种定义,但无论哪种,YouTube都是一个可扩展的网站。每月都有超过10亿的独立访客,每分钟上传超过100小时的视频,占用20%的互联网络峰值带宽,这些都用Python作为核心技术。Dropbox,Disqus,Eventbrite,RedTwilio,Instagram,Yelp,EVEOnline, 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实现的项目。

原文发布于微信公众号 - 数据科学与人工智能(DS_AI_shujuren)

原文发表时间:2015-10-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏about云

程序员:如何提高影响力,为自己代言

影响力,让梦想离你更近。 试想一下,有一天你开发了一个新的语言。它比现有的某某主流软件,运行效率将提高了50%,开发效率提高了100%。接着,你在github...

39370
来自专栏JavaQ

我的Java开发之路

最近有一位小伙伴通过公众号给我留言, “我参加工作没多久,看着圈里的技术大牛,特别羡慕,也渴望成为技术大牛,想让您分享一下从小白到大牛是怎样练成的,我该如何提...

46380
来自专栏纯洁的微笑

月薪8k 和 月薪38K的程序员差距在哪里?

回想自己做开发的这八年多,我获得了很多,技术能力、培训、出国、大公司的,还记得刚刚出来第一年那段时间,太多东西不懂的,我都是一切听从老大的安排,敲敲代码,看看数...

15040
来自专栏Android群英传

RootTools·Neo 正式发布

16520
来自专栏性能与架构

月薪8k 和 月薪38K的程序员差距在哪里?

回想自己做开发的这八年多,我获得了很多,技术能力、培训、出国、大公司的,还记得刚刚出来第一年那段时间,太多东西不懂的,我都是一切听从老大的安排,敲敲代码,看看数...

14630
来自专栏JAVA高级架构

卷首语:什么样的人可以称为“架构师”

我曾问过很多自称热爱代码的程序员的发展规划,大多都回答说期望成为一名架构师。而在招聘一方,有的团队会过滤掉多次提起架构一词而一点不提具体内容的简历。可见,虽然在...

37790
来自专栏BestSDK

一文揭秘,爬虫那些不为人知的套路

1、真实世界的爬虫比例 大家应该听过一句话吧,大概意思是说,整个互联网上大概有50%以上的流量其实是爬虫。第一次听这句话的时候,我还不是很相信,我觉得这个说法实...

52390
来自专栏我就是马云飞

一个 2 年 Android 开发者的 18 条忠告

我仍记得2014年我决定做安卓开发的那天,这是我一生中做出的最好决定之一。到现在已经有2年半了, 最初的时候,并没有人告诉我如何做才是正确的。我犯了很多错误,浪...

26680
来自专栏华章科技

早知道就好了!这些编程入门神器,赶紧用起来

导读:现在,技术已经成为所有行业创新的基石。这引发全世界对程序员和开发人员的巨大需求。技术的美妙之处在于它触手可及,所以……

14910
来自专栏带你撸出一手好代码

会当凌绝顶,一览众山小,宇宙第一的visual studio诞生20年回顾

IDE华山论剑,天下第一非微软家的visual studio莫属。 visual studio以极佳的用户体验和高效的协助工程师工作而著称, 深得无数开发者喜爱...

301100

扫码关注云+社区

领取腾讯云代金券