溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python語(yǔ)言在企業(yè)應(yīng)用方面可能會(huì)遇到哪些錯(cuò)誤

發(fā)布時(shí)間:2020-11-25 11:38:28 來(lái)源:億速云 閱讀:91 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下Python語(yǔ)言在企業(yè)應(yīng)用方面可能會(huì)遇到哪些錯(cuò)誤,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

Python 語(yǔ)言在企業(yè)應(yīng)用方面遭遇的十大謬誤

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

Python作為一門(mén)特別的語(yǔ)言,在eBay和PayPal有很長(zhǎng)的歷史。而且其流行程度依然有增不減。

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

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

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

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

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

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

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

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

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

謬誤 #1: Python 是一門(mén)新語(yǔ)言

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

謬誤 #2: Python 沒(méi)有被編譯

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

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

謬誤 #3: Python 不安全

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

Python 還擁有一系列可擴(kuò)展的開(kāi)源、產(chǎn)業(yè)標(biāo)準(zhǔn)化的安全庫(kù)序列. 在PayPal, 我們把安全和授信看做是重中之重, 我們發(fā)現(xiàn) hashlib, PyCrypto, 以及 OpenSSL, 通過(guò) 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ì)劃生成鍵和證書(shū)

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

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

謬誤 #4: Python 是一門(mén)腳本語(yǔ)言

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

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

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

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

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

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

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

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

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

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

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

自然語(yǔ)言處理(NLTK)

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

安全性和滲透性測(cè)試 (很多很多 以及 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工程師看起來(lái)像是有興趣致力于基于Python的web特性,比如 YouTube 和 Yelp. 如果對(duì)Python成功案例的更大清單感興趣,那就看看官方的清單吧.

謬誤 #5: Python 是弱類型的

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

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

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

謬誤 #6: Python 速度慢

首先是有一個(gè)重要區(qū)別: Python 是一門(mén)編程語(yǔ)言,而不是運(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 針對(duì)其自家的通用語(yǔ)言運(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)分派到一門(mén)編程語(yǔ)言智商. 應(yīng)該總是把該評(píng)估用在一個(gè)應(yīng)用程序運(yùn)行時(shí)上面,最好是針對(duì)一個(gè)特定的使用場(chǎng)景.

給定足夠的時(shí)間,一個(gè)循規(guī)蹈矩的開(kāi)發(fā)者只會(huì)按照下面這種經(jīng)過(guò)論證的方式來(lái)編寫(xiě)精確高效的軟件:

設(shè)計(jì)實(shí)現(xiàn)一個(gè)可以正確完成任務(wù)的軟件,包括開(kāi)發(fā)單獨(dú)的測(cè)試

測(cè)試性能,明確瓶頸

優(yōu)化,根據(jù)測(cè)試和Amdahl法則,并且利用Python與C的淵源

雖然這聽(tīng)起來(lái)很簡(jiǎn)單,但是即使是老道的工程師,這依舊是一個(gè)非常耗時(shí)的過(guò)程。Python設(shè)計(jì)之初就考慮到了這一套開(kāi)發(fā)流程。根據(jù)我們的經(jīng)驗(yàn),通常C++和Java項(xiàng)目完成一次迭代流程的時(shí)間,夠Python項(xiàng)目完成三次迭代流程。今天,PayPal和eBay中不乏有Python項(xiàng)目使用更少的代碼戰(zhàn)勝了同類C++和Java項(xiàng)目,這多虧了快速的開(kāi)發(fā)使得仔細(xì)的裁剪和優(yōu)化變得可能。

Myth #7: Python無(wú)法做到大規(guī)模

大規(guī)模有許多定義,但無(wú)論怎樣,YouTube是個(gè)大規(guī)模網(wǎng)站。每月UV超過(guò)十億,每分鐘上傳的視頻時(shí)長(zhǎng)超過(guò)100小時(shí),占用互聯(lián)網(wǎng)帶寬的20%,所有這一切都以Python作為核心技術(shù)。Dropbox,Disqus, Eventbrite, Reddit, Twilio, Instagram, Yelp, EVE Online, Second Life,,以及,是的,以及eBay和PayPal中都有Python大規(guī)模的例子,這些證明大規(guī)模不僅僅是可能:它是一種模式。

成功的關(guān)是鍵簡(jiǎn)單性且一致性。CPython,Python的主要虛擬機(jī),其最大限度地放大了這些特性,從而演變出了一個(gè)精確可測(cè)的運(yùn)行時(shí)。人們很難發(fā)現(xiàn) Python程序員關(guān)心垃圾的收集暫?;驊?yīng)用地啟動(dòng)時(shí)間。擁有強(qiáng)大的平臺(tái)和網(wǎng)絡(luò)支持,Python其本身自然而然的智能水平可擴(kuò)展,BitTorrent就是其充分的體現(xiàn)。

此外,規(guī)?;饕w測(cè)量和迭代。Python是以分析和優(yōu)化為要義建立的??碝yth #6了解更多Python如何垂直拓展的細(xì)節(jié)。

Myth #8: Python缺少好的并發(fā)支持

除了偶爾叫囂性能和規(guī)?;膯?wèn)題,有人想提的技術(shù)些,“Python缺乏并發(fā),”或者,“GIL怎么樣?“如果幾十個(gè)反例仍不足以支持Python水平及垂直拓展規(guī)模的能力,那么再更深地解釋CPython實(shí)現(xiàn)細(xì)節(jié)也不會(huì)有幫助,所以我會(huì)簡(jiǎn)短些。

Python擁有強(qiáng)大的并發(fā)原語(yǔ),包括generators, greenlets, Deferreds, 和futures.。Python有優(yōu)秀的并發(fā)框架,包括eventlet, gevent,和Twisted。Python在定制運(yùn)行時(shí)尚投入了驚人的工作量,包括Stackless和 PyPy。所有煩人這些和更多表明,根本不存工程師們?cè)赑ython并發(fā)編程方面的缺憾。同時(shí),所有這些都正在被正式的在企業(yè)生產(chǎn)環(huán)境中支持或使用。例如,請(qǐng)參考Myth #7。

全局解釋器鎖,或稱GIL,是Python在大多數(shù)應(yīng)用場(chǎng)景下的性能優(yōu)化,也是幾乎所有CPython實(shí)現(xiàn)代碼的開(kāi)發(fā)上的基礎(chǔ)優(yōu)化。GIL使得Python可以很便利地使用操作系統(tǒng)的線程或輕線程(通常指greenlets),且不影響使用多進(jìn)程。更多相關(guān)信息,請(qǐng)看該主題的Q&A列表,以及Python文檔中的介紹。

在PayPal中,一個(gè)典型服務(wù)的部署需要多臺(tái)機(jī)器,多個(gè)進(jìn)程,多個(gè)線程,以及一個(gè)數(shù)字非常龐大的greenlets,相當(dāng)于一個(gè)非常強(qiáng)大可擴(kuò)展的并行環(huán)境(見(jiàn)下圖)。在大多數(shù)的企業(yè)環(huán)境中,團(tuán)隊(duì)更傾向于往更高層次過(guò)度,謹(jǐn)慎并注重災(zāi)難恢復(fù)。然而,在某些情況下,每臺(tái)機(jī)器每天Python服務(wù)仍然處理數(shù)以百萬(wàn)計(jì)的請(qǐng)求,而且輕松處理。

Sketch of a PayPal Python server worker

一個(gè)基于單一worker的協(xié)同異步架構(gòu)草圖。最外層的盒子是進(jìn)程,下一個(gè)層次為線程,這里這些線程都是輕線程。操作系統(tǒng)處理線程間的搶占,而I/O異步協(xié)同合作。

謬誤 #9: Python 程序員很稀缺

事實(shí)上,現(xiàn)在使用 Python 的 web 開(kāi)發(fā)者的確沒(méi)有使用 PHP 或者 Java 的 web 開(kāi)發(fā)者多。這可能主要是由于企業(yè)需求和教育之間的相互作用導(dǎo)致的,不過(guò) 教育領(lǐng)域(教學(xué)所使用的編程語(yǔ)言)的趨勢(shì)使得情況可能產(chǎn)生變化 。

也就是說(shuō),使用 Python 的開(kāi)發(fā)者并不稀缺?,F(xiàn)在全世界有數(shù)百萬(wàn)使用 Python 的開(kāi)發(fā)者。已有幾十個(gè)Python 技術(shù)大會(huì)、 StackOverflow 上成千上萬(wàn)的 Python 內(nèi)容問(wèn)答、雇傭大量使用 Python 的開(kāi)發(fā)者的大企業(yè)比如 YouTube 、 美國(guó)銀行( Bank of American )和 LucasArts/Dreamworks 等等,這些都顯而易見(jiàn)地證實(shí)了這一點(diǎn)。在 eBay 和 PayPal 我們一直保持擁有幾百位使用 Python 的正式開(kāi)發(fā)者,這是怎么做到的呢?

那么,當(dāng)一個(gè)項(xiàng)目被創(chuàng)建時(shí)為什么它會(huì)被首推?對(duì)于孩子來(lái),大學(xué)生和教授們來(lái)說(shuō),Python作為第一門(mén)程序設(shè)計(jì)語(yǔ)言是非常易于學(xué)習(xí)的。在eBay,僅僅需要一個(gè)星期,一個(gè)新的Python程序員就能展示一個(gè)真正的成果,并且他們開(kāi)始散發(fā)光芒常常只要2-3個(gè)月,通過(guò)Internet的寶藏(互動(dòng)式教程,書(shū),文檔和開(kāi)源代碼庫(kù))一切皆有可能。

另外一個(gè)重要的考慮因素是,項(xiàng)目使用Python會(huì)更簡(jiǎn)單,它不會(huì)像其他項(xiàng)目那樣需要那么多的開(kāi)發(fā)者。在謬誤6和謬誤9中提到的那樣,在Python項(xiàng)目中,學(xué)習(xí)像Instagram那樣的高效團(tuán)隊(duì)是一個(gè)常見(jiàn)的比喻,并且這確實(shí)是我們?cè)趀Bay和PayPal的經(jīng)驗(yàn)。

Myth #10: Python不適應(yīng)于大項(xiàng)目

Myth #7 討論了大規(guī)模運(yùn)行Python的項(xiàng)目,但開(kāi)發(fā)Python大規(guī)模項(xiàng)目是什么情況呢?正如在Myth #9中提到的,大多數(shù)Python不被人看好。 然而Instagram在其被億元美金收購(gòu)當(dāng)天達(dá)到千萬(wàn)的點(diǎn)擊量,而整個(gè)公司只有十幾個(gè)人。Dropbox在2011年只有70個(gè)工程師,其他團(tuán)隊(duì)更少。所以,Python適合大規(guī)模團(tuán)隊(duì)嗎?

美國(guó)銀行實(shí)際上有超過(guò)5000的Python開(kāi)發(fā)者,一個(gè)單獨(dú)的項(xiàng)目超過(guò)一千萬(wàn)行Python代碼。JP摩根也經(jīng)歷了類似的轉(zhuǎn)變。YouTube也有數(shù)千的開(kāi)發(fā)者和數(shù)百萬(wàn)行的代碼。大規(guī)模產(chǎn)品和團(tuán)隊(duì)每天都在使用Python,因?yàn)樗哂辛己玫哪K化和封裝特性,在特定方面許多的大規(guī)模開(kāi)發(fā)建議是一致的。工具,強(qiáng)大的慣例以及代碼審查促使了項(xiàng)目規(guī)?;芾淼默F(xiàn)實(shí)。幸運(yùn)的是,Python發(fā)展于上面所提到的好的奠基。我們?cè)跈z查執(zhí)行使用pyflakes以及其他工具進(jìn)行Python代碼的靜態(tài)分析,正如堅(jiān)持PEP8——Python語(yǔ)言的基礎(chǔ)風(fēng)格指南。

最后,應(yīng)該指出的是,除了調(diào)度加速M(fèi)yth #6以及#7中所提到的,使用Python的項(xiàng)目通常需要更少的開(kāi)發(fā)者。我們常見(jiàn)的成功案例中,使用Java或C++的項(xiàng)目通常有3-5開(kāi)發(fā)者耗時(shí)2-6個(gè)月,最終由單一的開(kāi)發(fā)者在2-6周(或小時(shí),因?yàn)檫@些原因)完成項(xiàng)目。

有點(diǎn)像奇跡,但卻是現(xiàn)代發(fā)展的事實(shí),但其往往出自一個(gè)競(jìng)爭(zhēng)激烈的行業(yè)。

一種干凈的狀態(tài)

這些謬誤可能只是消遣。討論這些謬誤仍然很活躍的和受啟發(fā)的,包括內(nèi)部和外部, 因?yàn)殡[含在每一個(gè)謬誤里的都是一個(gè)Python的優(yōu)勢(shì)的認(rèn)識(shí)。 而且, 記住這些看似乏味的表現(xiàn)和麻煩的問(wèn)題是穩(wěn)步成長(zhǎng)的表露, 并穩(wěn)定地增長(zhǎng)興趣促進(jìn)教育和持續(xù)地工作。 在這里,希望能撲滅一場(chǎng)充滿火焰的戰(zhàn)爭(zhēng),并且使得能真正去談?wù)摴ぷ髋cPython的實(shí)現(xiàn)。

看完了這篇文章,相信你對(duì)Python語(yǔ)言在企業(yè)應(yīng)用方面可能會(huì)遇到哪些錯(cuò)誤有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI