您的位置: 首頁(yè) >科技 >

編程語(yǔ)言 Instagram如何馴服數(shù)百萬(wàn)行的Python怪物

2022-07-15 19:10:02 編輯:向嵐春 來(lái)源:
導(dǎo)讀 Facebook擁有的Instagram已詳細(xì)說(shuō)明了其解決方案,以增強(qiáng)Python的優(yōu)勢(shì)并減輕該語(yǔ)言在大型項(xiàng)目中影響生產(chǎn)力的方式來(lái)改進(jìn)該應(yīng)用程序。 在Ins...

Facebook擁有的Instagram已詳細(xì)說(shuō)明了其解決方案,以增強(qiáng)Python的優(yōu)勢(shì)并減輕該語(yǔ)言在大型項(xiàng)目中影響生產(chǎn)力的方式來(lái)改進(jìn)該應(yīng)用程序。

在Instagram上所有過(guò)于完美的自拍照的背后,F(xiàn)acebook擁有的社交網(wǎng)絡(luò)是基于流行的編程語(yǔ)言Python建立的。

正如Instagram工程師最近詳細(xì)介紹的那樣,Instagram服務(wù)器是數(shù)百萬(wàn)千禧一代用于共享朋友和自己的照片的智能手機(jī)應(yīng)用程序的后端,幾乎完全由Python(僅次于Java和JavaScript的第三流行語(yǔ)言)提供動(dòng)力。

SEE: 六種按需編程語(yǔ)言:入門(免費(fèi)PDF)

為了提高開(kāi)發(fā)人員的工作效率,F(xiàn)acebook工程師開(kāi)發(fā)了開(kāi)源工具,例如Python靜態(tài)類型檢查器Pyre,Instagram用來(lái)分析其服務(wù)器代碼庫(kù)。Instagram工程師還創(chuàng)建了開(kāi)發(fā)人員工具,例如LibCST,用于分析Python代碼。

Instagram工程師的主要目標(biāo)是在大規(guī)模使用Python時(shí)盡可能地提高生產(chǎn)力,他們已經(jīng)揭示了使用該語(yǔ)言時(shí)如何克服“一些痛點(diǎn)”。

該公司還希望吸引新的人才,即使編碼人員不一定是Python專家,這也是為什么它想向編碼候選人解釋其如何創(chuàng)建工具來(lái)幫助他們提高生產(chǎn)力。

它還希望讓喜歡使用Python的開(kāi)發(fā)人員滿意,因此該公司正在將Python推向極限。這就是Instagram工程師為Python開(kāi)發(fā)“嚴(yán)格模塊”的原因。

“一個(gè)合理的選擇可能是,我們將Python擴(kuò)展到了預(yù)期之外。它對(duì)于較小的代碼庫(kù)上的小型團(tuán)隊(duì)非常有用,這些團(tuán)隊(duì)可以圍繞如何使用它保持良好的紀(jì)律,而我們應(yīng)該改用一種不太動(dòng)態(tài)的語(yǔ)言。” Instagram工程師卡爾梅耶(Carl Meyer)寫(xiě)道。

“但是我們已經(jīng)超出了甚至可以進(jìn)行重寫(xiě)的代碼庫(kù)大小的角度。更重要的是,盡管有這些痛點(diǎn),但我們?nèi)匀幌M鸓ython擁有更多優(yōu)勢(shì),并且總體上,我們的開(kāi)發(fā)人員喜歡在Python中工作。我們要弄清楚如何使Python在如此規(guī)模下工作,并隨著我們的成長(zhǎng)而繼續(xù)工作。” Meyer寫(xiě)道。

他解釋說(shuō)Python非常適合快速迭代,因?yàn)槟梢赃M(jìn)行更改并查看結(jié)果,而無(wú)需編譯代碼。

他寫(xiě)道:“但是,有了幾百萬(wàn)行代碼(以及混亂的依賴圖),這種優(yōu)勢(shì)就開(kāi)始變?cè)懔恕?rdquo;

Instagram服務(wù)器最多需要一分鐘才能啟動(dòng),這在測(cè)試新功能時(shí)轉(zhuǎn)化為嚴(yán)重的延遲,并且足夠長(zhǎng)的時(shí)間使開(kāi)發(fā)人員無(wú)法完成另一項(xiàng)工作而無(wú)法完成任務(wù)。

盡管Python可以加快開(kāi)發(fā)速度,但要在Instagram規(guī)模上使用它仍然存在挑戰(zhàn)。

“由于導(dǎo)入可能會(huì)產(chǎn)生任意副作用,因此沒(méi)有安全的方法(在Python中)遞增地重新加載服務(wù)器。無(wú)論更改有多小,我們每次都必須從頭開(kāi)始,導(dǎo)入所有這些模塊,然后重新創(chuàng)建所有這些模塊。類和函數(shù),重新編譯所有這些正則表達(dá)式,等等。”

“通常,自從上次重新加載服務(wù)器以來(lái),99%的代碼都沒(méi)有更改,但是無(wú)論如何我們都必須重做所有緩慢的工作。”

Instagram在大規(guī)模使用Python方面的挑戰(zhàn)反映了Salesforce在其Einstein Analytics產(chǎn)品上遇到的一些困難。Salesforce最近取消了Python代碼,轉(zhuǎn)而支持Google支持的Go或Golang。

Salesforce架構(gòu)師解釋說(shuō):“ Python非常適合快速編寫(xiě)更高級(jí)別的應(yīng)用程序,但并不總是能夠提供企業(yè)級(jí)所需的高性能。”

SEE:Salesforce:為什么我們?cè)贓instein Analytics中放棄Google的Go語(yǔ)言使用Python

就Instagram而言,Meyer補(bǔ)充說(shuō),這不僅會(huì)損害開(kāi)發(fā)人員的工作效率,而且會(huì)導(dǎo)致“大量生產(chǎn)中的計(jì)算浪費(fèi)”,因?yàn)镮nstagram不斷在生產(chǎn)服務(wù)器上部署和重新加載網(wǎng)站。

Meyer將“嚴(yán)格模塊”描述為Instagram在大規(guī)模生產(chǎn)環(huán)境中使用時(shí)對(duì)Python弱點(diǎn)的回答

“嚴(yán)格的模塊對(duì)模塊頂層可能發(fā)生的事情施加了一些限制。所有模塊級(jí)代碼,包括在模塊級(jí)調(diào)用的裝飾器和函數(shù)/初始化程序,必須是純凈的(無(wú)副作用,無(wú)I / O)。這已驗(yàn)證通過(guò)抽象解釋器靜態(tài)地在編譯時(shí)進(jìn)行,”他說(shuō)。

“這意味著嚴(yán)格的模塊在導(dǎo)入時(shí)沒(méi)有副作用:導(dǎo)入時(shí)副作用之間的不良相互作用不再可能。”


免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!

最新文章

精彩推薦

圖文推薦

點(diǎn)擊排行

2016-2022 All Rights Reserved.平安財(cái)經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082   備案號(hào):閩ICP備19027007號(hào)-6

本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。