全球數(shù)據(jù)中心的數(shù)量在不斷增加,它們的電力消耗也在不斷增加。提高能效的一種方法當(dāng)然是不斷開(kāi)發(fā)更好的硬件,但作為軟件開(kāi)發(fā)人員,我們也應(yīng)該盡自己的一份力量。
根據(jù)國(guó)際能源署(IEA)的數(shù)據(jù),2022年全球數(shù)據(jù)中心的用電量估計(jì)為240 - 340太瓦時(shí)。這相當(dāng)于總電力需求的1.0%至1.3%。這些數(shù)字不包括加密貨幣挖礦,后者可能額外消耗了110太瓦時(shí)的電力,占全球電力需求的0.4%。
這篇文章展示了用Rust編碼如何幫助更有效地利用現(xiàn)有資源,幫助保護(hù)我們的星球——至少是一點(diǎn)點(diǎn)。
一般來(lái)說(shuō),比較編程語(yǔ)言的效率是不容易的,因?yàn)榻Y(jié)果受到很多因素的影響。然而,R. Pereira等人的一篇論文比較了27種編程語(yǔ)言的能耗和內(nèi)存效率以及速度。為了獲得盡可能客觀的結(jié)果,他們使用了各種基準(zhǔn)測(cè)試進(jìn)行比較。
該論文指出,Rust在能耗和執(zhí)行時(shí)間方面排名第二,僅比第一名c多消耗約3%的能量,執(zhí)行速度僅慢4%。根據(jù)這些測(cè)量結(jié)果,Rust非常節(jié)能,特別是如果你將其與PHP的能耗進(jìn)行比較,PHP的能耗是Rust的28倍,Python的能耗是Rust的74倍。
論文鏈接:https://www.sciencedirect.com/science/article/abs/pii/S0167642321000022?via%3Dihub
在Tweede golf,最近在重寫(xiě)一個(gè)項(xiàng)目時(shí)體驗(yàn)了Rust的高效率和速度。他們用Rust構(gòu)建了一個(gè)圖書(shū)俱樂(lè)部管理應(yīng)用程序,它之前是用PHP編寫(xiě)的,具有相同的功能。這個(gè)應(yīng)用程序允許讀書(shū)俱樂(lè)部借書(shū),并根據(jù)圖書(shū)館的等級(jí)體系來(lái)管理這些書(shū)的預(yù)訂、分發(fā)和發(fā)票。
圖片
圖片
老實(shí)說(shuō),節(jié)省CPU和內(nèi)存并不是重寫(xiě)的主要原因,維護(hù)才是。Rust應(yīng)用程序更容易維護(hù),Rust編譯器或依賴(lài)項(xiàng)的版本升級(jí)不太可能破壞應(yīng)用程序。此外,使用Rust的效率更高。這是因?yàn)橛辛己玫纳鷳B(tài)系統(tǒng)和工具鏈,例如編譯器提供了非常有用的錯(cuò)誤消息,嚴(yán)格的類(lèi)型系統(tǒng)也有助于編寫(xiě)正確的軟件。
在他們的示例中,Rust重寫(xiě)只花費(fèi)了原始PHP實(shí)現(xiàn)一半的開(kāi)發(fā)時(shí)間,這還不包括任何新加需求。當(dāng)然,重新實(shí)現(xiàn)現(xiàn)有的實(shí)現(xiàn)通常比構(gòu)建原始實(shí)現(xiàn)更容易和更快,但是沒(méi)有預(yù)料到開(kāi)發(fā)時(shí)間的差異會(huì)如此之大。
讓我們看一下性能比較。對(duì)于測(cè)試,使用了開(kāi)源HTTP基準(zhǔn)測(cè)試工具Siege和25個(gè)并發(fā)用戶。這些應(yīng)用程序在一臺(tái)Ubuntu筆記本電腦上本地運(yùn)行,該筆記本電腦配備了第12代英特爾?酷睿?i7-12700H和32gb內(nèi)存。由于應(yīng)用程序是作為容器運(yùn)行的,使用docker stats命令來(lái)估計(jì)資源消耗,并使用docker Compose命令在需要的地方限制資源。
執(zhí)行的最直接的基準(zhǔn)測(cè)試沒(méi)有對(duì)PHP或Rust應(yīng)用程序或Siege施加任何限制。針對(duì)預(yù)訂概覽頁(yè)面執(zhí)行了測(cè)試,因?yàn)檫@會(huì)給應(yīng)用程序和數(shù)據(jù)庫(kù)帶來(lái)一些計(jì)算負(fù)載。Rust版本由一個(gè)應(yīng)用程序容器和一個(gè)DB容器組成。
PHP版本還包含一個(gè)nginx,它負(fù)責(zé)提供所有的靜態(tài)文件,如CSS, JS和圖標(biāo)。Rust應(yīng)用程序自己為它們服務(wù)。總的CPU使用情況是所有容器的總和,而App CPU和內(nèi)存使用情況只涉及Rust或PHP容器。
首先,在PHP和Rust應(yīng)用程序上分別加載全部負(fù)載20秒。
Total CPU | App CPU | Memory Usage | Hits | |
PHP | 121 % | 37 % | 276 MiB | 283 |
Rust | 212 % | 57 % | 31 MiB | 11,297 |
可以看到,Rust在點(diǎn)擊次數(shù)(即在20秒內(nèi)加載的頁(yè)面數(shù)量)上比PHP高出近4000 %。此外,我們看到PHP需要的內(nèi)存幾乎是Rust應(yīng)用程序的9倍。
你可能會(huì)認(rèn)為這是一種不公平的比較,因?yàn)镽ust能夠利用更多的CPU資源。因此,將每個(gè)應(yīng)用容器的CPU使用率限制在20%,并執(zhí)行相同的測(cè)試。
Total CPU | App CPU | Memory Usage | Hits | |
PHP | 44 % | 20 % | 96.3 MiB | 69 |
Rust | 55 % | 20 % | 10.8 MiB | 2,275 |
Rust應(yīng)用程序的總CPU使用量仍然更高,這與Rust能夠處理33倍以上的請(qǐng)求這一事實(shí)有關(guān),因此給數(shù)據(jù)庫(kù)帶來(lái)了更高的負(fù)載。同樣,我們可以看到PHP使用了大約9倍的內(nèi)存。
這些雖然意義重大,但都是非常理論化的測(cè)試。在實(shí)踐中,頁(yè)面上不會(huì)有這么多用戶,而且在加載下一個(gè)頁(yè)面之前,他們也會(huì)花幾秒鐘的時(shí)間對(duì)一個(gè)頁(yè)面的加載做出反應(yīng)。為了更真實(shí)地測(cè)試這一點(diǎn),我們?yōu)镾iege提供了9個(gè)不同的url,這些url在頁(yè)面加載后0到10秒之間隨機(jī)訪問(wèn)。為了獲得更好的概述,我們讓這個(gè)測(cè)試運(yùn)行60秒而不是20秒。
Total CPU | App CPU | Memory Usage | Hits | |
PHP | 41 % | 13 % | 108.6 MiB | 285 |
Rust | 2.6 % | 1 % | 12.1 MiB | 315 |
在這里,我們可以真正看到Rust在資源消耗方面的好處。PHP應(yīng)用程序需要13%的CPU來(lái)處理請(qǐng)求,而Rust容器只需要1%。同樣,在內(nèi)存使用方面,Rust的性能也是PHP的九倍。
事實(shí)證明,Rust不僅對(duì)開(kāi)發(fā)人員來(lái)說(shuō)更有趣,而且對(duì)資源也非常友好。我們已經(jīng)看到新的Rust應(yīng)用程序比舊的PHP實(shí)現(xiàn)快40倍。在集群中,我們觀察到資源使用的顯著減少。
本文鏈接:http://www.www897cc.com/showinfo-26-93372-0.html提高能效,用Rust寫(xiě)代碼
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: Next.js 15 來(lái)了,全新的編譯器、700倍的構(gòu)建速度提升
下一篇: 一個(gè)巧妙設(shè)計(jì),解鎖 React19 初始化接口優(yōu)秀實(shí)踐,徹底摒棄 useEffect