Python 语言在企业应用方面遭遇的十大谬误

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

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

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

目前,Python 支撑着 超过50个项目, 包括:

  • 功能和产品型, 例如 eBay NowRedLaser
  • 运营和基础设施, 从开放的 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, 我们把安全和授信看做是重中之重, 我们发现 hashlibPyCrypto, 以及 OpenSSL, 通过 PyOpenSSL 和我们自己的定制构建的结合,涵盖了 PayPal 多样化的安全和性能需求.

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

  • 创建安全代理,以促进密钥的轮换以并巩固加密实现
  • 同业界领先的 HSM 技术集成
  • 为缺乏兼容性的技术栈构建受TLS保护的封装代理
  • 为我们内部的互相认证计划生成键和证书
  • 开发主动的漏洞扫描器

另外,还有无数存在安全隐患的用Python构建,面向操作的系统, 诸如防火墙和连接管理. 未来,我们一定回去深入的整合PayPal Python的安全事项.

谬误 #4: Python 是一门脚本语言

Python 确实可以用来编写脚本,并且因其简单的语法、跨平台并且无所不在于 Linux, Macs, 和其它Unix 机器而成为这个领域的领跑者之一.

事实上, Python 可能是常规用途编程语言中最灵活的技术. 以下是一些实例:

  1. 电信基础设施 (Twilio)
  2. 支付系统 (PayPalBalanced Payments)
  3. 神经科学和心理学 (许多许多例子)
  4. 数值分析和工程 (numpynumba, 以及 更多其它)
  5. 动画(LucasArtsDisneyDreamworks)
  6. 游戏后台 (Eve OnlineSecond LifeBattlefield, 以及 其它很多)
  7. Email 基础设施 (MailmanMailgun)
  8. 媒体存储和处理 (YouTubeInstagramDropbox)
  9. 操作和系统管理 (RackspaceOpenStack)
  10. 自然语言处理(NLTK)
  11. 机器学习和计算机版本 (scikit-learnOrangeSimpleCV)
  12. 安全性和渗透性测试 (很多很多 以及 eBay/PayPal
  13. 大数据 (DiscoHadoop support)
  14. 如理 (Calendar Server, 它 驱动了 Apple iCal)
  15. 搜索系统 (ITAUltraseek, 还有 Google)
  16. 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 拥有几个实现:

  1. CPython 是参考实现, 且也是广泛发布和使用的实现.
  2. Jython 是Python用于JVM的是一个成熟的实现.
  3. IronPython 是 Microsoft 针对其自家的通用语言运行时——又名 .NET,实现的Python .
  4. PyPy 是一个正在日趋成熟的Python实现,拥有JIT编译,增量垃圾收集诸多先进的特性.

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

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

  1. 把 NumPy 用作 Intel 的 MKL SIMD接口
  2. PyPy的 JIT 编译能 达到比C还快的性能
  3. Disqus 能在同样的100个盒子上容纳两亿五千万到5亿用户

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

cpp_py_medium

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

1 3 收藏 评论

可能感兴趣的话题



直接登录
跳到底部
返回顶部