Python语言,在企业应用方面惨遭十大误解,Python界大牛为此发声

语言多元化是PayPal编程文化中一个重要的组成部分。在C++和Java长期流行的同时,更多的团队选择了JvaScript和Scala。同时,Braintree的收购也引入了一个久经世故的Ruby社区。

Python作为一门特别的语言,在eBay和PayPal有很长的历史。而且其流行程度依然有增不减。

eBay的开发者支持Python这个应用于基层领域多年的语言。甚至在eBay管理层官方支持Python以前,技术人员就开始使用Python。我在几年前加入PayPal并选择Python来写内部应用,然而,我却发现了PayPal中将近15年以前的Python代码。


Python语言,在企业应用方面惨遭十大误解,Python界大牛为此发声_第1张图片

目前,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 以及其它地方的通用原则就是,(应用的)安全性不能依赖于代码的已编译状态。更为重要的是加强运行时环境的安全,因为实质上每种语言都有一个解码器,或者能被拦截并导出受保护的状态。参考下一条谬误来了解更多的 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)

更别提网站和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以及独立提供的运行时这些广阔的领域. 我们不应只是专注于解决单个特殊的案例, 而是应该把注意力放在对开发人员在 最终产品性能 方面的生产力的普遍影响上面, 特别是在一种企业级环境之下.

Python语言,在企业应用方面惨遭十大误解,Python界大牛为此发声_第2张图片

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虚拟机,可以最大化这些特性,从而实现非常可预测的运行时。人们很难找到关注垃圾收集暂停或应用程序启动时间的Python程序员。凭借强大的平台和网络支持,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 周(或几小时内完成)完成该项目。物)。

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

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

你可能感兴趣的:(Python语言,在企业应用方面惨遭十大误解,Python界大牛为此发声)