阿布云

你所需要的,不仅仅是一个好用的代理。

Python在开发中使用的10大误解(一)

阿布云 发表于

1.png

在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 OnlineSecond LifeBattlefield和很多其它例子)
  7. 电子邮件基础设施(Mailman, Mailgun)
  8. 媒体存储和处理(YouTube, Instagram, Dropbox)
  9. 运营和系统管理(RackspaceOpenStack
  10. 自然语言处理(NLTK)
  11. 机器学习和计算机视觉(scikit-learnOrangeSimpleCV
  12. 安全和渗透测试(太多了,包括eBay/Paypal/)
  13. 大数据(DiscoHadoop support
  14. 日历(Calendar Server, which powers Apple iCal
  15. 搜索系统(ITAUltraseek, and Google
  16. 互联网基础设施(DNS) (BIND 10)

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

误解 5: Python是弱类型的

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

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

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