2017-06-09 13:10:53 2461瀏覽
在C++和Java長期流行的同時,更多的團(tuán)隊選擇了JvaScript和Scala。同時,Braintree的收購也引入了一個久經(jīng)世故的Ruby社區(qū)。
Python作為一門特別的語言,在eBay和PayPal有很長的歷史。而且其流行程度依然有增不減。
eBay的開發(fā)者支持Python這個應(yīng)用于基層領(lǐng)域多年的語言。甚至在eBay管理層官方支持Python以前,技術(shù)人員就開始使用Python。我在幾年前加入PayPal并選擇Python來寫內(nèi)部應(yīng)用,然而,我卻發(fā)現(xiàn)了PayPal中將近15年以前的Python代碼。
目前,Python 支撐著 超過50個項目, 包括:
1. 功能和產(chǎn)品型, 例如 eBay Now 和 RedLaser
2. 運營和基礎(chǔ)設(shè)施型, 從開放的 OpenStack 到專有設(shè)施
3. 中間層服務(wù)和應(yīng)用型,例如 PayPal用來設(shè)定價格以及檢測用戶可用功能的那個(服務(wù)/應(yīng)用)
4. 監(jiān)測代理和接口型, 用于涉及到部署和安全的一些用例
5. 批處理任務(wù)型, 例如數(shù)據(jù)導(dǎo)入,價格調(diào)整,及其它項目
6. 以及不計其數(shù)的開發(fā)者工具
在接下來的文章里將詳細(xì)介紹那些使得 eBay 和 PayPal 的 Python 生態(tài)系統(tǒng)從2011年的不超過25個工程師到2014年超過260個工程師所使用的技術(shù)和舉措。對于本文,則會專注于6個不得不予以揭露的關(guān)于 eBay 和 PayPal 的企業(yè)環(huán)境的誤解。
誤解1: Python 是一門新語言
子是伴隨著所有的初創(chuàng)公司正在使用它以及孩子們最近也在學(xué)習(xí)它的事實,這個誤解為何仍然存在是可以理解的。實際上 Python 已經(jīng) 超過23歲了, 它最初發(fā)布于1991年, 早于 HTTP 1.0協(xié)議 5年且早于 Java 4年. 目前比較有著名的很早就使用 Python 的例在1996年: Google 的第一個成功的網(wǎng)絡(luò)爬蟲.
如果你對于長長的 Python 歷史比較好奇,Python 的作者 Guido van Rossum 已經(jīng)為你準(zhǔn)備好整個故事了.
誤解2: Python 沒有被編譯
不像 C++ 一樣需要一個獨立的編譯器工具鏈,Python 實際上被編譯成了字節(jié)碼,和 Java 或者許多其他的編譯型語言十分相似。更進(jìn)一步的編譯過程,如果有的話, 取決于運行時環(huán)境, 不管是 CPython,PyPy,Jython/JVM,IronPython/CLR,或是其它的進(jìn)程式虛擬機(jī)(process virtual machine)。參考 誤解#6 來了解更多。
一條在 PayPal 以及其它地方的通用原則就是,(應(yīng)用的)安全性不能依賴于代碼的已編譯狀態(tài)。更為重要的是加強(qiáng)運行時環(huán)境的安全,因為實質(zhì)上每種語言都有一個解碼器,或者能被攔截并導(dǎo)出受保護(hù)的狀態(tài)。參考下一條謬誤來了解更多的 Python 安全性問題。
誤解3:Python 不安全
輕量級 Python 的親和力可能使他看起來不怎么可怕,但是這里直覺很大程度上是受到了誤導(dǎo)的. 安全的一個核心原則就是盡可能讓呈現(xiàn)的目標(biāo)更小. 大系統(tǒng)是違背安全原則的,因為他們趨向于 使行為過渡集中化, 并且也 讓開發(fā)者難于理解. Python 通過倡導(dǎo)簡潔化來邊緣化這些惡心的問題. 更有甚者, CPython 通過讓自己成為一個簡單、穩(wěn)定并且易于審核的虛擬機(jī)來使這些問題得到解決. 事實上,近期 Coverity Software 的一個分析結(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)隊在某些業(yè)務(wù)中最快的選擇. 這里有把Python用在PayPal的安全第一環(huán)境中的幾個以安全為基礎(chǔ)應(yīng)用程序:
1. 創(chuàng)建安全代理,以促進(jìn)密鑰的輪換以并鞏固加密實現(xiàn)
2. 同業(yè)界領(lǐng)先的 HSM 技術(shù)集成
3. 為缺乏兼容性的技術(shù)棧構(gòu)建受TLS保護(hù)的封裝代理
4. 為我們內(nèi)部的互相認(rèn)證計劃生成鍵和證書
5. 開發(fā)主動的漏洞掃描器
另外,還有無數(shù)存在安全隱患的用Python構(gòu)建,面向操作的系統(tǒng), 諸如防火墻和連接管理. 未來,我們一定回去深入的整合PayPal Python的安全事項.
誤解4: Python 是一門腳本語言
Python 確實可以用來編寫腳本,并且因其簡單的語法、跨平臺并且無所不在于 Linux, Macs, 和其它Unix 機(jī)器而成為這個領(lǐng)域的領(lǐng)跑者之一.
事實上, Python 可能是常規(guī)用途編程語言中最靈活的技術(shù). 以下是一些實例:
1. 電信基礎(chǔ)設(shè)施 (Twilio)
2. 支付系統(tǒng) (PayPal, Balanced Payments)
3. 神經(jīng)科學(xué)和心理學(xué) (許多, 許多, 例子)
4. 數(shù)值分析和工程 (numpy, numba, 以及 更多其它)
5. 動畫(LucasArts, Disney, Dreamworks)
6. 游戲后臺 (Eve Online, Second Life, Battlefield, 以及 其它很多)
7. Email 基礎(chǔ)設(shè)施 (Mailman, Mailgun)
8. 媒體存儲和處理 (YouTube, Instagram, Dropbox)
9. 操作和系統(tǒng)管理 (Rackspace, OpenStack)
10. 自然語言處理(NLTK)
11. 機(jī)器學(xué)習(xí)和計算機(jī)版本 (scikit-learn, Orange, SimpleCV)
12. 安全性和滲透性測試 (很多很多 以及 eBay/PayPal
13. 大數(shù)據(jù) (Disco, Hadoop support)
14. 如理 (Calendar Server, 它 驅(qū)動了 Apple iCal)
15. 搜索系統(tǒng) (ITA, Ultraseek, 還有 Google)
16. Internet 基礎(chǔ)設(shè)施 (DNS) (BIND 10)
更別提網(wǎng)站和web服務(wù)了,那些都不在少數(shù). 事實上,PayPal工程師看起來像是有興趣致力于基于Python的web特性,比如 YouTube 和 Yelp. 如果對Python成功案例的更大清單感興趣,那就看看官方的清單吧.
誤解5: Python 是弱類型的
Python 類型系統(tǒng)的特點是擁有強(qiáng)大、靈活的類型操作.維基百科上對此作出的闡述.
而存在一個不爭而有趣的事實是, Python 是比Java更加強(qiáng)類型的. Java 對于原生類型和對象區(qū)分了類型系統(tǒng),它讓null存在于一個灰色地帶. 另一方面,現(xiàn)代的 Python 擁有一個統(tǒng)一的強(qiáng)類型系統(tǒng), 其中什么都沒有(None) 的類型是明確指定的. 更進(jìn)一步的,JVM自身也是動態(tài)類型的,因為可以把它的 根源 追溯到由Sun所收購的Smalltalk VM的一個實現(xiàn).
Python的類型系統(tǒng)很棒,但要提供給企業(yè)級使用,目前仍然還有許多更重大的事項需要關(guān)注.
誤解6: Python 速度慢
首先是有一個重要區(qū)別: Python 是一門編程語言,而不是運行時環(huán)境. Python 擁有幾個實現(xiàn):
1. CPython 是參考實現(xiàn), 且也是廣泛發(fā)布和使用的實現(xiàn).
2. Jython 是Python用于JVM的是一個成熟的實現(xiàn).
3. IronPython 是 Microsoft 針對其自家的通用語言運行時——又名 .NET,實現(xiàn)的Python .
4. PyPy 是一個正在日趨成熟的Python實現(xiàn),擁有JIT編譯,增量垃圾收集諸多先進(jìn)的特性.
每一個運行時都有其自己的性能特點, 而且他們本身也不慢. 這里更重要的地方在于不能錯誤地把一個性能指標(biāo)分派到一門編程語言智商. 應(yīng)該總是把該評估用在一個應(yīng)用程序運行時上面,最好是針對一個特定的使用場景.
清楚了那些事項之后,下面就是一些有Python提供的小項,體現(xiàn)其重要的性能優(yōu)勢:
1. 把 NumPy 用作 Intel 的 MKL SIMD接口
2. PyPy的 JIT 編譯能 達(dá)到比C還快的性能
3. Disqus 能在同樣的100個盒子上容納兩億五千萬到5億用戶
誠然,這些都不是最新的列子,只是我個人的最愛罷了. 這將很容易扯到高性能Python以及獨立提供的運行時這些廣闊的領(lǐng)域. 我們不應(yīng)只是專注于解決單個特殊的案例, 而是應(yīng)該把注意力放在對開發(fā)人員在 最終產(chǎn)品性能 方面的生產(chǎn)力的普遍影響上面, 特別是在一種企業(yè)級環(huán)境之下.
C++ vs Python,. 兩種語言在同一個輸出下的對比.
只要有足夠的時間,一個受過訓(xùn)練的開發(fā)人員可以執(zhí)行唯一行之有效的方法,從而獲得準(zhǔn)確的高性能的軟件:
1. 工程師的正確行為,包括相應(yīng)的測試開發(fā)
2. 概括和測量性能,識別瓶頸
3. 優(yōu)化,適當(dāng)考慮測試套件和阿姆達(dá)爾定律,同時利用Python在C語言方面強(qiáng)大的根源關(guān)系。
這也許聽起來簡單,但即使對于經(jīng)驗豐富的工程師,這也是一個非常耗時的過程。Python從設(shè)計之初就充分考慮過開發(fā)者的時間表。根據(jù)我們的經(jīng)驗,Python項目經(jīng)受3次甚至更多的迭代并不稀罕,而同樣的時間,C++或Java項目只需要做一次。今天,PayPal和eBay已經(jīng)看到了多個成功的案例,Python項目超越了C++和Java的同行,使用更少的代碼,這一切都得益于快的開發(fā)時間可以進(jìn)行仔細(xì)的裁剪和優(yōu)化。你應(yīng)該知道這些有趣的內(nèi)容。
http://m.dionly.net.cn/course/246