阿布云

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

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 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的类型系统非常友好,但对于企业的使用,还有更需要关注的问题。