Python语言在互联网企业应用上的十大谬误

时间:2019-07-21 来源:www.bxpkqnwz2nrlw4y7ay.com

金沙网站注册

目前,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还是其他进程虚拟机。请参阅谬误#6了解更多信息。

落入PayPal以了解有关Python安全问题的更多信息。

谬误#3: Python不安全

轻量级Python的亲和力可能会使他看起来不那么可怕,但直觉在很大程度上是误导性的。安全的核心原则是使目标尽可能小。大系统违反了安全原则。因为他们倾向于集中行为转变并使他们难以理解。 Python通过提倡简化来边缘化这些令人作呕的问题。更重要的是,CPython使自己成为一个简单,稳定且易于查看的虚拟机来解决这些问题。事实上,Coverity Software最近的一项分析表明,CPython获得了最高质量的评级。

Python还有一组可扩展的开源,行业标准安全库序列。在PayPal,我们将安全和信用视为首要任务。我们发现了使用PyOpenSSL和我们自己的自定义构建的hashlib,PyCrypto和OpenSSL。该组合涵盖了PayPal的各种安全性和性能需求。

这些原因使得Python成为某些企业中PayPal(和eBay)应用安全团队的最快选择。以下是一些基于安全性的应用程序,它们在PayPal的安全第一环境中使用Python。

创建安全代理以促进密钥轮换和合并加密实现

与业界领先的HSM技术集成

为缺乏兼容性的技术堆栈构建受TLS保护的封装代理

为我们的内部相互身份验证程序生成密钥和证书

开发一个活跃的漏洞扫描程序

此外,还有无数安全构建的基于Python的,面向操作的系统,例如防火墙和连接管理。在未来,我们肯定会回归并整合PayPal Python的安全性。

Python确实可以用来编写脚本,并且因其简单的语法,跨平台和无所不在的Linux,Mac和其他Unix机器而成为该领域的领导者之一。

事实上,Python可能是通用编程语言中最灵活的技术。以下是一些示例:

电信基础设施(Twilio)

支付系统(PayPal,平衡付款)

神经科学和心理学(很多很多例子)

数值分析和工程(numpy,numba等)

动画(LucasArts,迪士尼,梦工厂)

游戏后台(Eve Online,Second Life,Battlefield等等)

电子邮件基础设施(Mailman,Mailgun)

媒体存储和处理(YouTube,Instagram,Dropbox)

操作和系统管理(Rackspace,OpenStack)

自然语言处理(NLTK)

机器学习和计算机版本(scikit-learn,Orange,SimpleCV)

安全性和渗透性测试(许多批次和eBay/PayPal

大数据(Disco,Hadoop支持)

喜欢(Calendar Server,它驱动Apple iCal)

搜索系统(ITA,Ultraseek和Google)

互联网基础设施(DNS)(BIND 10)

更不用说网站和网络服务,这些不是少数。实际上,PayPal工程师似乎对开发基于Python的Web功能(如YouTube和Yelp)感兴趣。如果您对更大的Python成功案例列表感兴趣,那么请查看官方列表。

谬误#5: Python是弱类型的

Python类型系统的特点是强大而灵活的类型操作。这在维基百科上有解释。

有一个无可争辩和有趣的事实是Python比Java更强类型。 Java将类型系统与本机类型和对象区分开来,这使得null存在于灰色区域中。另一方面,现代Python具有统一的强类型系统,其中没有明确指定任何(无)。此外,JVM本身是动态类型的,因为它的根可以追溯到Sun获得的Smalltalk VM的实现。

Python的类型系统很棒,但是对于企业级使用,还有许多重要的事情需要遵循。

谬误#6: Python很慢

首先是存在重要差异。 Python是一种编程语言,而不是运行时环境。 Python有几个实现:

CPython是一个参考实现,也被广泛实现和使用。

Jython是JVM的Python的成熟实现。

IronPython是Microsoft针对其自己的公共语言运行库 aka .NET的实现。

PyPy是一个日益成熟的Python实现,具有JIT编译和许多高级功能的增量垃圾收集。

每个运行时都有自己的性能特征,它们本身并不慢。更重要的是,您不能错误地将性能指标分配给编程语言IQ。您应该始终在应用程序中使用此评估。在程序运行时之上,最好以特定的使用场景为目标。

清除这些内容后,以下是Python提供的一些小项目,反映了它的重要性能优势。

使用NumPy作为Intel的MKL SIMD接口

PyPy的JIT编译可以实现比C

更快的性能

Disqus可以容纳相同的100个盒子中的2.5亿到5亿用户

不可否认,这些不是最新的专栏,只是我个人的最爱。很容易进入高性能Python的广泛领域和独立提供的运行时。我们不应该只关注解决一个特殊情况,而应该关注开发人员生产力在最终产品性能方面的一般影响,特别是在企业环境中。

C ++与Python,在相同输出下比较两种语言。

如果有足够的时间,一个结构良好的开发人员只能通过以下方式编写准确有效的软件:

设计并实现可以正确执行任务的软件,包括开发单独的测试

测试性能并识别瓶颈

优化,基于测试和Amdahl定律,并利用Python和C的起源

虽然这听起来很简单,但即使是经验丰富的工程师仍然是一个非常耗时的过程。 Python的设计考虑了这一发展。根据我们的经验,C ++和Java项目通常可以完成迭代的处理时间,足以让Python项目完成三个迭代过程。今天,PayPal和eBay中的Python项目使用较少的代码来击败类似的C ++和Java项目,这得益于快速开发,可以进行仔细的裁剪和优化。

神话#7: Python不能很大

大规模有很多定义,但无论如何,YouTube都是一个大型网站。每月有超过10亿的紫外线,每分钟上传的视频超过100小时,消耗20%的互联网带宽,所有这些都使用Python作为核心技术。 Dropbox,Disqus,Eventbrite,Reddit,Twilio,Instagram,Yelp,EVE Online,Second Life,以及是,eBay和PayPal都有大规模的Python示例,这证明了大规模不仅仅是可能的:它是A模式。

成功的关键是密钥的简单性和一致性。 CPython是Python的主要虚拟机,可以最大化这些功能并演变出精确可测量的运行时。很难发现Python程序员关心垃圾收集暂停或应用程序启动时间。凭借强大的平台和网络支持,Python的自然智能水平是可扩展的,BitTorrent是一个完整的表达。

此外,规模主要包括测量和迭代。 Python建立在分析和优化的基础之上。有关Python如何垂直扩展的更多详细信息,请参阅神话#6。

神话#8: Python缺乏良好的并发支持

除了偶尔要求性能和规模的喧嚣之外,有些人还想提到技术,“Python缺乏并发性”,或者“GIL怎么样?”如果数十个反例还不足以支持Python水平和垂直扩展的能力,那么更深入地解释CPython实现细节也无济于事,所以我会更短。

Python具有强大的并发原语,包括生成器,greenlet,Deferreds和future。 Python具有出色的并发框架,包括eventlet,gevent和Twisted。 Python已经在定制运行方式上投入了大量的工作,包括Stackless和PyPy。令人烦恼的是这些以及更多表明Python并发编程中不缺工程师。同时,所有这些都在企业生产环境中得到官方支持或使用。例如,请参考神话#7。

全局解释器锁(GIL)是Python在大多数应用程序场景中的性能优化,是几乎所有CPython实现代码开发的基本优化。 GIL使Python易于使用操作系统线程或轻型线程(通常称为greenlet),而不会影响多个进程的使用。有关更多信息,请参阅本主题的Q& A列表,以及Python文档中的介绍。

在PayPal中,典型服务的部署需要多台机器,多个进程,多个线程和大量的greenlet,这相当于一个非常强大且可扩展的并行环境(参见下图)。在大多数企业环境中,团队更倾向于超越更高级别,谨慎并专注于灾难恢复。但是,在某些情况下,每台计算机仍然每天处理数百万个请求,并且易于处理。

PayPal Python服务器工作者的草图

基于单个工作者的协作异步架构草图。最外面的框是进程,下一级是线程,其中这些线程都是轻线程。操作系统处理线程之间的抢占,而I/O异步协作。

谬误#9: Python程序员很少

事实上,现在使用Python的Web开发人员没有太多使用PHP或Java的Web开发人员。这可能主要是由于业务需求与教育之间的相互作用,但教育趋势(教学中使用的编程语言)使情况发生变化。

换句话说,使用Python的开发人员并不稀缺。全世界有数百万开发人员使用Python。有许多Python技术会议,StackOverflow上的数千个Python内容测验,以及雇用使用大量Python的开发人员的大公司,如YouTube,美国银行和LucasArts/Dreamworks。这证实了这一点。在eBay和PayPal上,我们已经让数百名官方开发人员使用Python。你怎么做到这一点?

那么为什么在创建项目时会被推送?对于孩子,大学生和教授来说,Python作为第一种编程语言非常容易学习。在eBay上,一个新的Python程序员只需要一个星期的时间来展示真实的结果,并且他们通过互联网宝藏(互动教程,书籍,文档和开源代码库)开始亮相2-3个月。一切都是可能。

另一个重要的考虑因素是使用Python的项目要简单得多,并且它们不需要像其他项目那样多的开发人员。正如Fallacy 6和Fallacy 9中所提到的,学习像Instagram这样有效的团队是Python项目中的一个常见比喻,这实际上是我们在eBay和PayPal上的体验。

神话#10: Python不适合大型项目

神话#7讨论了一个大规模运行Python的项目,但是为Python开发一个大型项目呢?正如神话#9中提到的,大多数Python并不乐观。然而,Instagram在被1亿美元收购的那天达到了1000万次点击,整个公司只有十几个人。 Dropbox在2011年只有70名工程师,而其他团队则更少。那么,Python适合大型团队吗?

美国银行实际上拥有超过5,000名Python开发人员,一个拥有超过1000万行Python代码的项目。摩根大通也经历了类似的转型。 YouTube还拥有数千名开发人员和数百万行代码。大型产品和团队每天都使用Python,因为它具有良好的模块化和打包功能,许多大型开发建议在特定领域都是一致的。工具,强大的实践和代码审查激发了项目规模管理的现实。

幸运的是,Python已经从上面提到的良好基础发展而来。我们正在使用pyflakes和其他工具检查Python代码的静态分析,就像我们遵循PEP8 Python语言的基本样式指南一样。

最后,应该注意的是,除了神话#6和#7中提到的调度加速之外,使用Python的项目通常需要更少的开发人员。在我们共同的成功案例中,使用Java或C ++的项目通常有3-5名开发人员需要2-6个月,最终单个开发人员在2-6周(或几小时,因为这些原因)完成项目。

这有点像奇迹,但它是现代发展的事实,但它通常来自竞争激烈的行业。

干净的状态

这些谬论可能只是逍遥时光。讨论这些谬误仍然非常活跃,并且受到内部和外部的启发,因为每个谬误都隐含着对Python优势的认可。此外,请记住,这些看似无聊的表现和麻烦的问题是稳定增长的表现,并且对促进教育和继续工作的兴趣不断增加。在这里,我希望发动一场充满火焰的战争,并真正谈论Python的工作和实现。

每个人在学习python时都会遇到很多问题,以及对新技术的追求,这里我们推荐我们的Python学习演绎qun:784758214,这里是python学习者的聚集地!同时,我是一名高级Python开发工程师,从基本的python脚本到Web开发,爬行,django,数据挖掘等,从零基础到面向项目的数据。给每个python合作伙伴!分享一些每天需要关注的学习方法和小细节

点击:python技术共享交换