日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
核心代碼從Python換成Go語言,提速30倍!

Stream公司最近將其核心服務(wù)的后端從Python切換成了Go,雖然他們內(nèi)部還在使用Python,但是公司已經(jīng)決定從現(xiàn)在開始在Go中編寫所有性能密集型代碼。本文,Stream***執(zhí)行官和創(chuàng)始人Thierry Schellenbach解釋了公司的這一決定。

目前創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、鐵門關(guān)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

選擇項(xiàng)目或產(chǎn)品的編程語言會受到許多因素驅(qū)動,與所有技術(shù)決策一樣,沒有***的答案足以解決所有問題。Stream之所以這么做,是因?yàn)楦惺艿搅薌o語言的巨大好處。

這與Stream的產(chǎn)品有關(guān)。Stream是用于構(gòu)建,縮放、個(gè)性化新聞源和活動流的API。每月為3億多用戶提供約10億次API請求。因此,性能和可靠性是Stream制定每項(xiàng)技術(shù)決策的最重要原因。

Python和GO:性能對比!

Go***的賣點(diǎn)可能就是性能,無論是運(yùn)行時(shí)間還是編譯時(shí)間。它在大多數(shù)計(jì)算基準(zhǔn)測試中與Java或C ++相當(dāng)。在Stream的實(shí)際使用中,GO比Python快大約30倍。

選擇性能優(yōu)秀的工具非常重要(Stream已經(jīng)優(yōu)化了Cassandra,PostgreSQL,Redis和許多其他技術(shù))。然而,有時(shí)發(fā)現(xiàn)系統(tǒng)中的瓶頸確實(shí)是Python引起的,像序列化,排序和聚合等計(jì)算繁重的任務(wù)有時(shí)會比從網(wǎng)絡(luò)數(shù)據(jù)存儲檢索數(shù)據(jù)花費(fèi)更長的時(shí)間。

Go編譯器(本身是用Go編寫的)也非???。使用Go編寫的Stream中最復(fù)雜的微服務(wù)只需要6秒即可編譯完成,與Java和C ++等工具鏈相比,這是一個(gè)重大勝利。

此外,閱讀Go語言代碼往往非常簡單,GO干凈的風(fēng)格讓讀取和推理更容易。

本地并發(fā)

通過goroutines和channel將并發(fā)性融入到語言中。Goroutines在概念上類似于操作系統(tǒng)線程,但非常便宜——每個(gè)成本只有幾KB的堆??臻g。Go運(yùn)行時(shí)可以處理智能多路復(fù)用goroutines,這一切對程序員來說是透明的。單個(gè)程序擁有數(shù)千個(gè)goroutines并不罕見。例如,net / http軟件包中的服務(wù)器為每個(gè)傳入的HTTP請求創(chuàng)建一個(gè)goroutine。

在真正的Go語言中,goroutine非常簡單:只需在“go”關(guān)鍵字前添加一個(gè)函數(shù)調(diào)用,讓它運(yùn)行在自己的goroutine中即可。

Go世界的傳統(tǒng)觀點(diǎn)是“不通過共享內(nèi)存來交流,相反的是,通過通信來共享內(nèi)存“。在goroutines之間進(jìn)行通信的原語是channel,它們與goroutines一樣易于使用。channel有一個(gè)類型,可以通過直觀的箭頭語法輕松地在goroutine之間傳遞數(shù)據(jù)。雖然簡單,但channel非常強(qiáng)大。通過預(yù)先考慮,與傳統(tǒng)系統(tǒng)相比,制作大規(guī)模并發(fā)系統(tǒng)是一件輕而易舉的事情。

使用簡單的并發(fā)工具,可以解決那些經(jīng)常導(dǎo)致錯誤的復(fù)雜問題。Go隨附內(nèi)置競速檢測器,可以更輕松檢測異步代碼中的競爭狀態(tài)。

生態(tài)系統(tǒng)

Go仍然是編譯語言環(huán)境的新手,遠(yuǎn)比不上C ++和Java等傳統(tǒng)語言的普及程度。雖然只有大約5%的程序員知道Go,但是這個(gè)數(shù)字還在不斷增長,而且這種增長是由于語言的易用性所致。雖然語言快速且功能強(qiáng)大,但該語言只有25個(gè)保留字(與C ++ 92或Java 53相比),對于大多數(shù)開發(fā)人員來說,它只會引入很少的新概念。

建立一個(gè)Go開發(fā)團(tuán)隊(duì)比大多數(shù)語言更容易,因?yàn)樗菀讓W(xué)習(xí)。

隨Go提供的內(nèi)置庫在開箱即用,功能強(qiáng)大。使用`net / http`包制作HTTP服務(wù)只需要幾行代碼,并且本地支持http / 2,TLS和websocket等。社區(qū)軟件包的生態(tài)系統(tǒng)也很出色,適用于Redis,RabbitMQ,PostgreSQL和RocksDB等。

其他福利

Go節(jié)省時(shí)間的另一種方式是使用Gofmt。它是一個(gè)命令行工具,可與大多數(shù)編輯器集成并自動將代碼格式化為事實(shí)標(biāo)準(zhǔn)。如果格式不正確,代碼仍會編譯,但除非通過gofmt運(yùn)行代碼以保持整個(gè)代碼庫格式一致,否則將不會查看pull請求。這使代碼審查人員能夠?qū)W⒂诖a而不是花時(shí)間挑剔格式。

Go有助于開發(fā)微服務(wù)架構(gòu),gRPC和Google的協(xié)議緩沖區(qū)是管理微服務(wù)之間通信的好方法,Go有***的支持。

Python與Go

Stream服務(wù)中的一個(gè)強(qiáng)大功能是排名提要。排名提要允許用戶為提要指定一個(gè)評分函數(shù),以便控制提取時(shí)的排序方式。評分算法可以提供很多變量來確定排名,但基于流行度的一個(gè)很好的例子可能是這樣的:

  1. 要支持這種排名方法,Python和Go代碼都需要:解析分?jǐn)?shù)的表達(dá)式。在這種情況下,我們想將字符串“simple_gauss(time)* popular”變成一個(gè)函數(shù),它將一個(gè)活動作為輸入并返回一個(gè)分?jǐn)?shù)作為輸出。
  2. 根據(jù)JSON配置創(chuàng)建部分函數(shù)。例如,我們希望“simple_gauss”以五天的刻度,一天的偏移量和0.3的衰減因子來調(diào)用“decay_gauss”。
  3. 如果在活動中沒有定義某個(gè)字段,則應(yīng)對“默認(rèn)值”配置進(jìn)行壓縮,以便進(jìn)行回退。
  4. 使用步驟1中的功能對Feed中的所有活動進(jìn)行評分。

開發(fā)Python版本的示例花了大約三天的時(shí)間編寫代碼,單元測試和文檔。接下來,團(tuán)隊(duì)花了大約兩周的時(shí)間來優(yōu)化代碼。其中一項(xiàng)優(yōu)化是將分?jǐn)?shù)表達(dá)式(simple_gauss(time)* popular)轉(zhuǎn)換為抽象語法樹。該團(tuán)隊(duì)還實(shí)施了高速緩存邏輯,預(yù)先計(jì)算了將來某些時(shí)間的分?jǐn)?shù)。

相比之下,開發(fā)此代碼的Go版本需要大約四天的時(shí)間,并且性能不需要任何進(jìn)一步的優(yōu)化。雖然Python的開發(fā)初期看來更快,但Go版本最終需要的工作量大大減少。

在優(yōu)化代碼庫時(shí)節(jié)省的時(shí)間歸功于Go語言的特點(diǎn)。使用Python,程序員不得不將表達(dá)式解析為抽象語法樹,并優(yōu)化/剖析通過排名公開的每個(gè)函數(shù)。

結(jié)論

Go是編寫微服務(wù)的偉大語言。它的速度非常快,具有原生并發(fā)原語,對現(xiàn)有工具的卓越支持,并且開發(fā)起來非常有趣。與Ruby或Python等腳本語言相比,Go語言可能需要更長的時(shí)間,但維護(hù)成本要低得多,而且將節(jié)省大量時(shí)間優(yōu)化代碼。

重要的是,Stream仍然在使用Python,它是有意義的。例如,儀表板,網(wǎng)站和個(gè)性化訂閱源的機(jī)器學(xué)習(xí)使用Python,因?yàn)楣ぞ吒?。Stream不會馬上告別Python,但是今后會在Go中編寫所有性能密集型代碼。


本文標(biāo)題:核心代碼從Python換成Go語言,提速30倍!
分享URL:http://www.dlmjj.cn/article/djccgso.html