Python语言,在企业应用方面惨遭十大误解,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 的第一个成功的网络爬虫.

如果你对于长长的 Python 历史比较好奇,Python 的作者 Guido van Rossum 已经为你准备好整个故事了.

误区#2: Python 没有被编译

不像 C++ 一样需要一个独立的编译器工具链,Python 实际上被编译成了字节码,和 Java 或者许多其他的编译型语言十分相似。更进一步的编译过程,如果有的话, 取决于运行时环境, 不管是 CPython,PyPy,Jython/JVM,IronPython/CLR,或是其它的进程式虚拟机(process virtual machine)。参考 误区#6 来了解更多。

一条在 PayPal 以及其它地方的通用原则就是,(应用的)安全性不能依赖于代码的已编译状态。更为重要的是加强运行时环境的安全,因为实质上每种语言都有一个解码器,或者能被拦截并导出受?;さ淖刺2慰枷乱惶趺罄戳私飧嗟?Python 安全性问题。

误区#3: Python 不安全

轻量级 Python 的亲和力可能使他看起来不怎么可怕,但是这里直觉很大程度上是受到了误导的. 安全的一个核心原则就是尽可能让呈现的目标更小. 大系统是违背安全原则的,因为他们趋向于 使行为过渡集中化, 并且也 让开发者难于理解. Python 通过倡导简洁化来边缘化这些恶心的问题. 更有甚者, CPython 通过让自己成为一个简单、稳定并且易于审核的虚拟机来使这些问题得到解决. 事实上,近期 Coverity Software 的一个分析结果显示 CPython 得到了他们的最高质量评级.

Python 还拥有一系列可扩展的开源、产业标准化的安全库序列. 在PayPal, 我们把安全和授信看做是重中之重, 我们发现 hashlib, PyCrypto, 以及 OpenSSL, 通过 PyOpenSSL 和我们自己的定制构建的结合,涵盖了 PayPal 多样化的安全和性能需求.

这些诸多的原因,使得 Python 成为PayPal(和eBay)的应用程序安全团队在某些业务中最快的选择. 这里有把Python用在PayPal的安全第一环境中的几个以安全为基础应用程序:

创建安全代理,以促进密钥的轮换以并巩固加密实现

同业界领先的 HSM 技术集成

为缺乏兼容性的技术栈构建受TLS?;さ姆庾按?/p>

为我们内部的互相认证计划生成键和证书

开发主动的漏洞扫描器

另外,还有无数存在安全隐患的用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)

更别提网站和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编译,增量垃圾收集诸多先进的特性.

每一个运行时都有其自己的性能特点, 而且他们本身也不慢. 这里更重要的地方在于不能错误地把一个性能指标分派到一门编程语言智商. 应该总是把该评估用在一个应用程序运行时上面,最好是针对一个特定的使用场景.

清楚了那些事项之后,下面就是一些有Python提供的小项,体现其重要的性能优势:

把 NumPy 用作 Intel 的 MKL SIMD接口

PyPy的 JIT 编译能 达到比C还快的性能

Disqus 能在同样的100个盒子上容纳两亿五千万到5亿用户

诚然,这些都不是最新的列子,只是我个人的最爱罢了. 这将很容易扯到高性能Python以及独立提供的运行时这些广阔的领域. 我们不应只是专注于解决单个特殊的案例, 而是应该把注意力放在对开发人员在 最终产品性能 方面的生产力的普遍影响上面, 特别是在一种企业级环境之下.

C++ vs Python,. 两种语言在同一个输出下的对比.

误区#7:Python无法扩展

规模有很多定义,但按照任何定义,YouTube都是一个大规模的网站。每月超过10亿的独立访问者,每分钟上传的视频超过100小时,以及20%的峰值互联网带宽,所有这些都以Python为核心技术。Dropbox,Disqus,Eventbrite,Reddit,Twilio,Instagram,Yelp,EVE Online,Second Life,以及,是的,eBay和PayPal都有Python缩放故事,证明规模不仅仅是可能的:它是一种模式。

成功的关键是简单性和一致性。CPython是主要的Python虚拟机,可以最大化这些特性,从而实现非??稍げ獾脑诵惺薄H嗣呛苣颜业焦刈⒗占萃;蛴τ贸绦蚱舳奔涞腜ython程序员。凭借强大的平台和网络支持,Python自然适用于智能水平可伸缩性,如BitTorrent等系统所体现的那样。

误区#8:Python缺乏良好的并发支持

偶尔揭穿性能和扩展,有人试图获得技术,“Python缺乏并发性”,或者“GIL怎么样?”如果有数十个反例不足以增强人们对Python垂直和水平扩展能力的信心,那么对CPython实现细节的扩展解释可能无济于事,所以我会简短地介绍一下。

Python有很大的并发原语,包括发电机,greenlets,Deferreds,和期货。Python有很好的并发框架,包括eventlet,gevent和Twisted。Python在为并发运行时定制运行时方面做了一些了不起的工作,包括Stackless和PyPy。所有这些以及更多表明,使用Python进行并发编程时,工程师并不缺乏有效和毫无歉意的工作。此外,所有这些都是正式支持和/或在企业级生产环境中使用。例如,请参考误区7。

Global Interpreter Lock或GIL是针对大多数Python用例的性能优化,并且几乎对所有CPython代码都进行了开发简易优化。GIL使得使用OS线程或绿色线程(通常是greenlet)变得更加容易,并且不会影响使用多个进程。有关更多信息,请参阅Python文档中有关该主题和此概述的精彩问答。

在PayPal,典型的服务部署需要多台机器,具有多个进程,多个线程和大量的greenlet,相当于一个非常强大和可扩展的并发环境。在大多数企业环境中,各方倾向于选择相当高度的过度配置,以实现一般审慎和灾难恢复。尽管如此,在某些情况下,Python服务每天仍然会看到每台机器数百万的请求,并且易于处理。

误区#9:Python程序员很少

这个神话有一些道理。没有像PHP或Java Web开发人员那样多的Python Web开发人员。这可能主要是由于行业需求和教育的相互作用,尽管教育趋势表明这可能会发生变化。

也就是说,Python开发人员远非稀缺。数十个Python会议,数以万计的StackOverflow问题以及像YouTube,美国银行和LucasArts / Dreamworks这样的公司在全球范围内有数百万人使用Python开发人员成千上万。在eBay和PayPal,我们有数百名开发人员定期使用Python,那么诀窍是什么?

好吧,为什么一个人可以创造清除?Python非常容易学习,是儿童,大学生和专业人士的第一种编程语言。在eBay上,只需要一周的时间就可以显示一位新的Python程序员的真实结果,而且他们通常会在2-3个月内开始大放异彩,所有这一切都可以通过互联网丰富的交互式教程,书籍,文档和开源代码库。

另一个需要考虑的重要因素是使用Python的项目不需要像其他项目那样多的开发人员。正如误区6和误区9中所提到的,像Instagram这样精益有效的团队是Python项目中的常见比喻,这肯定是我们在eBay和PayPal上的经验

误区#10:Python不适用于大型项目

误区7讨论了大规模运行Python项目,但是如何大规???Python项目呢?正如神话误区9中提到的,大多数Python项目往往不会让人满意。虽然Instagram在收购数十亿美元时每天达到数亿次点击,但整个公司仍然只有十几个人。Dropbox在2011年只有70名工程师,而其他团队同样精益求精。那么,Python可以扩展到大型团队吗?

美国银行实际上拥有超过5,000名Python开发人员,仅在一个项目中就有超过1000万行Python。摩根大通经历了类似的转变。YouTube还拥有成千上万的代码工程师和数百万行代码。大型产品和大型团队每天都在使用Python,虽然它具有出色的??榛头庾疤匦裕谀骋坏闵?,大多数通用开发扩展建议都保持不变。工具,强大的约定和代码审查使大项目成为可管理的现实。

幸运的是,Python在这些方面也有良好的基线。我们使用PyFlakes和其他工具在签入之前对Python代码进行静态分析,并遵循PEP8,Python的语言范围基本风格指南。

最后,应该注意的是,除了误区#6和误区#7中提到的调度加速之外,使用Python的项目通常也需要更少的开发人员。我们最常见的成功故事始于一个Java或C ++项目,该项目计划在2-6 个月内将3-5名开发人员带到一个团队,并以一个有动力的开发人员在2-6 周(或几小时内完成)完成该项目。物)。

对某些人来说是一个奇迹,但这是现代发展的事实,而且往往是竞争性企业的必需品。

喜欢的话 转发 在下方留言我们可以一起探讨技术相关的知识。

?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,945评论 25 707
  • 本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入...
    小小不懂11阅读 3,414评论 2 30
  • 02228木可可 看到这个绘本的名字和封面就无限吸引我的眼球,当然是因为我对书的喜爱。而文中以简洁的文字,幽默的画...
    可可Jane阅读 200评论 0 0
  • 交了保研复试单,心一下就静了下来,说不出来的感觉,没有很开心,也没有很激动,又刚好赶上中秋,该回家的回,该玩耍的玩...
    逗比丁阅读 266评论 0 1
  • 今天是母亲节,谨以此篇,献给我的母亲。 尽管这是一篇母亲很难看到的文章,而我还是会写出来。在这个年纪,似乎早已不太...
    茜茜的自嗨世界阅读 599评论 0 0