Python語言,在企業(yè)應(yīng)用方面慘遭十大誤解,Python界大牛為此發(fā)聲

語言多元化是PayPal編程文化中一個(gè)重要的組成部分。在C++和Java長期流行的同時(shí),更多的團(tuán)隊(duì)選擇了JvaScript和Scala。同時(shí),Braintree的收購也引入了一個(gè)久經(jīng)世故的Ruby社區(qū)。

Python作為一門特別的語言,在eBay和PayPal有很長的歷史。而且其流行程度依然有增不減。

eBay的開發(fā)者支持Python這個(gè)應(yīng)用于基層領(lǐng)域多年的語言。甚至在eBay管理層官方支持Python以前,技術(shù)人員就開始使用Python。我在幾年前加入PayPal并選擇Python來寫內(nèi)部應(yīng)用,然而,我卻發(fā)現(xiàn)了PayPal中將近15年以前的Python代碼。


目前,Python 支撐著?超過50個(gè)項(xiàng)目, 包括:

功能和產(chǎn)品型, 例如 eBay Now 和 RedLaser

運(yùn)營和基礎(chǔ)設(shè)施型, 從開放的 OpenStack 到專有設(shè)施

中間層服務(wù)和應(yīng)用型, 例如 PayPal 用來設(shè)定價(jià)格以及檢測用戶可用功能的那個(gè)(服務(wù)/應(yīng)用)

監(jiān)測代理和接口型, 用于涉及到部署和安全的一些用例

批處理任務(wù)型, 例如數(shù)據(jù)導(dǎo)入,價(jià)格調(diào)整,及其它項(xiàng)目

以及不計(jì)其數(shù)的開發(fā)者工具

在接下來的文章里我將詳細(xì)介紹那些使得 eBay 和 PayPal 的 Python 生態(tài)系統(tǒng)從2011年的不超過25個(gè)工程師到2014年超過260個(gè)工程師所使用的技術(shù)和舉措。對于本文,我則會(huì)專注于10個(gè)不得不予以揭露的關(guān)于 eBay 和 PayPal 的企業(yè)環(huán)境的謬誤。

誤區(qū)#1: Python 是一門新語言

伴隨著所有的初創(chuàng)公司正在使用它以及孩子們最近也在學(xué)習(xí)它的事實(shí),這個(gè)謬誤為何仍然存在是可以理解的。實(shí)際上 Python 已經(jīng) 超過23歲了, 它最初發(fā)布于1991年, 早于 HTTP 1.0協(xié)議 5年且早于 Java 4年. 目前比較有著名的很早就使用 Python 的例子是在1996年: Google 的第一個(gè)成功的網(wǎng)絡(luò)爬蟲.

如果你對于長長的 Python 歷史比較好奇,Python 的作者 Guido van Rossum 已經(jīng)為你準(zhǔn)備好整個(gè)故事了.

誤區(qū)#2: Python 沒有被編譯

不像 C++ 一樣需要一個(gè)獨(dú)立的編譯器工具鏈,Python 實(shí)際上被編譯成了字節(jié)碼,和 Java 或者許多其他的編譯型語言十分相似。更進(jìn)一步的編譯過程,如果有的話, 取決于運(yùn)行時(shí)環(huán)境, 不管是 CPython,PyPy,Jython/JVM,IronPython/CLR,或是其它的進(jìn)程式虛擬機(jī)(process virtual machine)。參考 誤區(qū)#6 來了解更多。

一條在 PayPal 以及其它地方的通用原則就是,(應(yīng)用的)安全性不能依賴于代碼的已編譯狀態(tài)。更為重要的是加強(qiáng)運(yùn)行時(shí)環(huán)境的安全,因?yàn)閷?shí)質(zhì)上每種語言都有一個(gè)解碼器,或者能被攔截并導(dǎo)出受保護(hù)的狀態(tài)。參考下一條謬誤來了解更多的 Python 安全性問題。

誤區(qū)#3: Python 不安全

輕量級 Python 的親和力可能使他看起來不怎么可怕,但是這里直覺很大程度上是受到了誤導(dǎo)的. 安全的一個(gè)核心原則就是盡可能讓呈現(xiàn)的目標(biāo)更小. 大系統(tǒng)是違背安全原則的,因?yàn)樗麄冓呄蛴?使行為過渡集中化, 并且也 讓開發(fā)者難于理解. Python 通過倡導(dǎo)簡潔化來邊緣化這些惡心的問題. 更有甚者, CPython 通過讓自己成為一個(gè)簡單、穩(wěn)定并且易于審核的虛擬機(jī)來使這些問題得到解決. 事實(shí)上,近期 Coverity Software 的一個(gè)分析結(jié)果顯示 CPython 得到了他們的最高質(zhì)量評級.

Python 還擁有一系列可擴(kuò)展的開源、產(chǎn)業(yè)標(biāo)準(zhǔn)化的安全庫序列. 在PayPal, 我們把安全和授信看做是重中之重, 我們發(fā)現(xiàn) hashlib, PyCrypto, 以及 OpenSSL, 通過 PyOpenSSL 和我們自己的定制構(gòu)建的結(jié)合,涵蓋了 PayPal 多樣化的安全和性能需求.

這些諸多的原因,使得 Python 成為PayPal(和eBay)的應(yīng)用程序安全團(tuán)隊(duì)在某些業(yè)務(wù)中最快的選擇. 這里有把Python用在PayPal的安全第一環(huán)境中的幾個(gè)以安全為基礎(chǔ)應(yīng)用程序:

創(chuàng)建安全代理,以促進(jìn)密鑰的輪換以并鞏固加密實(shí)現(xiàn)

同業(yè)界領(lǐng)先的 HSM 技術(shù)集成

為缺乏兼容性的技術(shù)棧構(gòu)建受TLS保護(hù)的封裝代理

為我們內(nèi)部的互相認(rèn)證計(jì)劃生成鍵和證書

開發(fā)主動(dòng)的漏洞掃描器

另外,還有無數(shù)存在安全隱患的用Python構(gòu)建,面向操作的系統(tǒng), 諸如防火墻和連接管理. 未來,我們一定回去深入的整合PayPal Python的安全事項(xiàng).

誤區(qū)#4: Python 是一門腳本語言

Python 確實(shí)可以用來編寫腳本,并且因其簡單的語法、跨平臺(tái)并且無所不在于 Linux, Macs, 和其它Unix 機(jī)器而成為這個(gè)領(lǐng)域的領(lǐng)跑者之一.

事實(shí)上, Python 可能是常規(guī)用途編程語言中最靈活的技術(shù). 以下是一些實(shí)例:

電信基礎(chǔ)設(shè)施 (Twilio)

支付系統(tǒng) (PayPal, Balanced Payments)

神經(jīng)科學(xué)和心理學(xué) (許多, 許多, 例子)

數(shù)值分析和工程 (numpy, numba, 以及 更多其它)

動(dòng)畫(LucasArts, Disney, Dreamworks)

游戲后臺(tái) (Eve Online, Second Life, Battlefield, 以及 其它很多)

Email 基礎(chǔ)設(shè)施 (Mailman, Mailgun)

媒體存儲(chǔ)和處理 (YouTube, Instagram, Dropbox)

操作和系統(tǒng)管理 (Rackspace, OpenStack)

自然語言處理(NLTK)

機(jī)器學(xué)習(xí)和計(jì)算機(jī)版本 (scikit-learn, Orange, SimpleCV)

安全性和滲透性測試 (很多很多 以及 eBay/PayPal

大數(shù)據(jù) (Disco, Hadoop support)

如理 (Calendar Server, 它 驅(qū)動(dòng)了 Apple iCal)

搜索系統(tǒng) (ITA, Ultraseek, 還有 Google)

Internet 基礎(chǔ)設(shè)施 (DNS) (BIND 10)

更別提網(wǎng)站和web服務(wù)了,那些都不在少數(shù). 事實(shí)上,PayPal工程師看起來像是有興趣致力于基于Python的web特性,比如 YouTube 和 Yelp. 如果對Python成功案例的更大清單感興趣,那就看看官方的清單吧.

誤區(qū)#5: Python 是弱類型的

Python 類型系統(tǒng)的特點(diǎn)是擁有強(qiáng)大、靈活的類型操作. 維基百科上對此作出的闡述.

而存在一個(gè)不爭而有趣的事實(shí)是, Python 是比Java更加強(qiáng)類型的. Java 對于原生類型和對象區(qū)分了類型系統(tǒng),它讓null存在于一個(gè)灰色地帶. 另一方面,現(xiàn)代的 Python 擁有一個(gè)統(tǒng)一的強(qiáng)類型系統(tǒng), 其中什么都沒有(None) 的類型是明確指定的. 更進(jìn)一步的,JVM自身也是動(dòng)態(tài)類型的,因?yàn)榭梢园阉?根源 追溯到由Sun所收購的Smalltalk VM的一個(gè)實(shí)現(xiàn).

Python的類型系統(tǒng) 很棒,但要提供給企業(yè)級使用,目前仍然還有許多更重大的事項(xiàng)需要關(guān)注.

誤區(qū)#6: Python 速度慢

首先是有一個(gè)重要區(qū)別: Python 是一門編程語言,而不是運(yùn)行時(shí)環(huán)境. Python 擁有幾個(gè)實(shí)現(xiàn):

CPython?是參考實(shí)現(xiàn), 且也是廣泛發(fā)布和使用的實(shí)現(xiàn).

Jython?是Python用于JVM的是一個(gè)成熟的實(shí)現(xiàn).

IronPython?是 Microsoft 針對其自家的通用語言運(yùn)行時(shí)——又名 .NET,實(shí)現(xiàn)的Python .

PyPy?是一個(gè)正在日趨成熟的Python實(shí)現(xiàn),擁有JIT編譯,增量垃圾收集諸多先進(jìn)的特性.

每一個(gè)運(yùn)行時(shí)都有其自己的性能特點(diǎn), 而且他們本身也不慢. 這里更重要的地方在于不能錯(cuò)誤地把一個(gè)性能指標(biāo)分派到一門編程語言智商. 應(yīng)該總是把該評估用在一個(gè)應(yīng)用程序運(yùn)行時(shí)上面,最好是針對一個(gè)特定的使用場景.

清楚了那些事項(xiàng)之后,下面就是一些有Python提供的小項(xiàng),體現(xiàn)其重要的性能優(yōu)勢:

把 NumPy 用作 Intel 的 MKL SIMD接口

PyPy的 JIT 編譯能 達(dá)到比C還快的性能

Disqus 能在同樣的100個(gè)盒子上容納兩億五千萬到5億用戶

誠然,這些都不是最新的列子,只是我個(gè)人的最愛罷了. 這將很容易扯到高性能Python以及獨(dú)立提供的運(yùn)行時(shí)這些廣闊的領(lǐng)域. 我們不應(yīng)只是專注于解決單個(gè)特殊的案例, 而是應(yīng)該把注意力放在對開發(fā)人員在 最終產(chǎn)品性能 方面的生產(chǎn)力的普遍影響上面, 特別是在一種企業(yè)級環(huán)境之下.

C++ vs Python,. 兩種語言在同一個(gè)輸出下的對比.

誤區(qū)#7:Python無法擴(kuò)展

規(guī)模有很多定義,但按照任何定義,YouTube都是一個(gè)大規(guī)模的網(wǎng)站。每月超過10億的獨(dú)立訪問者,每分鐘上傳的視頻超過100小時(shí),以及20%的峰值互聯(lián)網(wǎng)帶寬,所有這些都以Python為核心技術(shù)。Dropbox,Disqus,Eventbrite,Reddit,Twilio,Instagram,Yelp,EVE Online,Second Life,以及,是的,eBay和PayPal都有Python縮放故事,證明規(guī)模不僅僅是可能的:它是一種模式。

成功的關(guān)鍵是簡單性和一致性。CPython是主要的Python虛擬機(jī),可以最大化這些特性,從而實(shí)現(xiàn)非??深A(yù)測的運(yùn)行時(shí)。人們很難找到關(guān)注垃圾收集暫?;驊?yīng)用程序啟動(dòng)時(shí)間的Python程序員。憑借強(qiáng)大的平臺(tái)和網(wǎng)絡(luò)支持,Python自然適用于智能水平可伸縮性,如BitTorrent等系統(tǒng)所體現(xiàn)的那樣。

誤區(qū)#8:Python缺乏良好的并發(fā)支持

偶爾揭穿性能和擴(kuò)展,有人試圖獲得技術(shù),“Python缺乏并發(fā)性”,或者“GIL怎么樣?”如果有數(shù)十個(gè)反例不足以增強(qiáng)人們對Python垂直和水平擴(kuò)展能力的信心,那么對CPython實(shí)現(xiàn)細(xì)節(jié)的擴(kuò)展解釋可能無濟(jì)于事,所以我會(huì)簡短地介紹一下。

Python有很大的并發(fā)原語,包括發(fā)電機(jī),greenlets,Deferreds,和期貨。Python有很好的并發(fā)框架,包括eventlet,gevent和Twisted。Python在為并發(fā)運(yùn)行時(shí)定制運(yùn)行時(shí)方面做了一些了不起的工作,包括Stackless和PyPy。所有這些以及更多表明,使用Python進(jìn)行并發(fā)編程時(shí),工程師并不缺乏有效和毫無歉意的工作。此外,所有這些都是正式支持和/或在企業(yè)級生產(chǎn)環(huán)境中使用。例如,請參考誤區(qū)7。

Global Interpreter Lock或GIL是針對大多數(shù)Python用例的性能優(yōu)化,并且?guī)缀鯇λ蠧Python代碼都進(jìn)行了開發(fā)簡易優(yōu)化。GIL使得使用OS線程或綠色線程(通常是greenlet)變得更加容易,并且不會(huì)影響使用多個(gè)進(jìn)程。有關(guān)更多信息,請參閱Python文檔中有關(guān)該主題和此概述的精彩問答。

在PayPal,典型的服務(wù)部署需要多臺(tái)機(jī)器,具有多個(gè)進(jìn)程,多個(gè)線程和大量的greenlet,相當(dāng)于一個(gè)非常強(qiáng)大和可擴(kuò)展的并發(fā)環(huán)境。在大多數(shù)企業(yè)環(huán)境中,各方傾向于選擇相當(dāng)高度的過度配置,以實(shí)現(xiàn)一般審慎和災(zāi)難恢復(fù)。盡管如此,在某些情況下,Python服務(wù)每天仍然會(huì)看到每臺(tái)機(jī)器數(shù)百萬的請求,并且易于處理。

誤區(qū)#9:Python程序員很少

這個(gè)神話有一些道理。沒有像PHP或Java Web開發(fā)人員那樣多的Python Web開發(fā)人員。這可能主要是由于行業(yè)需求和教育的相互作用,盡管教育趨勢表明這可能會(huì)發(fā)生變化。

也就是說,Python開發(fā)人員遠(yuǎn)非稀缺。數(shù)十個(gè)Python會(huì)議,數(shù)以萬計(jì)的StackOverflow問題以及像YouTube,美國銀行和LucasArts / Dreamworks這樣的公司在全球范圍內(nèi)有數(shù)百萬人使用Python開發(fā)人員成千上萬。在eBay和PayPal,我們有數(shù)百名開發(fā)人員定期使用Python,那么訣竅是什么?

好吧,為什么一個(gè)人可以創(chuàng)造清除?Python非常容易學(xué)習(xí),是兒童,大學(xué)生和專業(yè)人士的第一種編程語言。在eBay上,只需要一周的時(shí)間就可以顯示一位新的Python程序員的真實(shí)結(jié)果,而且他們通常會(huì)在2-3個(gè)月內(nèi)開始大放異彩,所有這一切都可以通過互聯(lián)網(wǎng)豐富的交互式教程,書籍,文檔和開源代碼庫。

另一個(gè)需要考慮的重要因素是使用Python的項(xiàng)目不需要像其他項(xiàng)目那樣多的開發(fā)人員。正如誤區(qū)6和誤區(qū)9中所提到的,像Instagram這樣精益有效的團(tuán)隊(duì)是Python項(xiàng)目中的常見比喻,這肯定是我們在eBay和PayPal上的經(jīng)驗(yàn)

誤區(qū)#10:Python不適用于大型項(xiàng)目

誤區(qū)7討論了大規(guī)模運(yùn)行Python項(xiàng)目,但是如何大規(guī)模開發(fā) Python項(xiàng)目呢?正如神話誤區(qū)9中提到的,大多數(shù)Python項(xiàng)目往往不會(huì)讓人滿意。雖然Instagram在收購數(shù)十億美元時(shí)每天達(dá)到數(shù)億次點(diǎn)擊,但整個(gè)公司仍然只有十幾個(gè)人。Dropbox在2011年只有70名工程師,而其他團(tuán)隊(duì)同樣精益求精。那么,Python可以擴(kuò)展到大型團(tuán)隊(duì)嗎?

美國銀行實(shí)際上擁有超過5,000名Python開發(fā)人員,僅在一個(gè)項(xiàng)目中就有超過1000萬行Python。摩根大通經(jīng)歷了類似的轉(zhuǎn)變。YouTube還擁有成千上萬的代碼工程師和數(shù)百萬行代碼。大型產(chǎn)品和大型團(tuán)隊(duì)每天都在使用Python,雖然它具有出色的模塊化和封裝特性,但在某一點(diǎn)上,大多數(shù)通用開發(fā)擴(kuò)展建議都保持不變。工具,強(qiáng)大的約定和代碼審查使大項(xiàng)目成為可管理的現(xiàn)實(shí)。

幸運(yùn)的是,Python在這些方面也有良好的基線。我們使用PyFlakes和其他工具在簽入之前對Python代碼進(jìn)行靜態(tài)分析,并遵循PEP8,Python的語言范圍基本風(fēng)格指南。

最后,應(yīng)該注意的是,除了誤區(qū)#6和誤區(qū)#7中提到的調(diào)度加速之外,使用Python的項(xiàng)目通常也需要更少的開發(fā)人員。我們最常見的成功故事始于一個(gè)Java或C ++項(xiàng)目,該項(xiàng)目計(jì)劃在2-6 個(gè)月內(nèi)將3-5名開發(fā)人員帶到一個(gè)團(tuán)隊(duì),并以一個(gè)有動(dòng)力的開發(fā)人員在2-6 周(或幾小時(shí)內(nèi)完成)完成該項(xiàng)目。物)。

對某些人來說是一個(gè)奇跡,但這是現(xiàn)代發(fā)展的事實(shí),而且往往是競爭性企業(yè)的必需品。

喜歡的話 轉(zhuǎn)發(fā) 在下方留言我們可以一起探討技術(shù)相關(guān)的知識。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,932評論 25 709
  • 本節(jié)內(nèi)容 Python介紹 發(fā)展史 Python 2 or 3? 安裝 Hello World程序 變量 用戶輸入...
    小小不懂11閱讀 3,541評論 2 30
  • 02228木可可 看到這個(gè)繪本的名字和封面就無限吸引我的眼球,當(dāng)然是因?yàn)槲覍南矏?。而文中以簡潔的文字,幽默的?..
    可可Jane閱讀 244評論 0 0
  • 交了保研復(fù)試單,心一下就靜了下來,說不出來的感覺,沒有很開心,也沒有很激動(dòng),又剛好趕上中秋,該回家的回,該玩耍的玩...
    逗比丁閱讀 293評論 0 1
  • 今天是母親節(jié),謹(jǐn)以此篇,獻(xiàn)給我的母親。 盡管這是一篇母親很難看到的文章,而我還是會(huì)寫出來。在這個(gè)年紀(jì),似乎早已不太...
    茜茜的自嗨世界閱讀 674評論 0 0

友情鏈接更多精彩內(nèi)容