Go 開發(fā)團(tuán)隊(duì) leader 批評(píng) AWS 文章對(duì) Go 存在嚴(yán)重誤導(dǎo)
事件起因是 AWS 前幾天發(fā)布的一篇博客:《Sustainability with Rust》。
在這篇文章里,AWS 舉例的時(shí)候?qū)?Rust 和 Go 進(jìn)行了對(duì)比。文章提到了早期 Discord 的一項(xiàng)關(guān)鍵 Go 服務(wù)存在問題,原本這是一個(gè)非常簡單的服務(wù),但它的尾部延遲 (Tail Latency) 非常慢。AWS 認(rèn)為原因在于 Go 是一種垃圾回收 (GC) 語言,因此當(dāng)對(duì)象被創(chuàng)建和釋放時(shí),垃圾回收器每隔一段時(shí)間就需要停止程序的執(zhí)行并運(yùn)行一次垃圾回收。當(dāng)垃圾回收器運(yùn)行時(shí),會(huì)導(dǎo)致進(jìn)程無法響應(yīng)請(qǐng)求。
為了解決此問題,Discord 決定嘗試用 Rust 重寫這個(gè)服務(wù)。測(cè)試結(jié)果顯示,使用 Rust 重寫后的速度提升超 10 倍,最慢的尾部延遲時(shí)間也降低至為原來的約 1%。
下圖是運(yùn)行過程中 CPU 和響應(yīng)時(shí)間的峰值,左邊為 Go 實(shí)現(xiàn)的版本,右邊為 Rust 實(shí)現(xiàn)的版本。
Go 開發(fā)團(tuán)隊(duì) leader Russ Cox (rsc) 認(rèn)為 AWS 在這里的比較對(duì) Go 存在嚴(yán)重的誤導(dǎo)。他認(rèn)為,AWS 的文章將兩者進(jìn)行對(duì)比時(shí),將 Go 版本的數(shù)據(jù)與在使用新的數(shù)據(jù)結(jié)構(gòu)和更多內(nèi)存后的 Rust 版本數(shù)據(jù)放在了一起,還特意圈出“ms”和“μs”時(shí)間刻度。rsc 表示,這要么是 AWS 對(duì) Discord 的原貼存在誤解,要么就是公然地說謊。
因?yàn)樵?Discord 的原文中,他們展示 Go 服務(wù)器和同級(jí)別 Rust 服務(wù)器的對(duì)比時(shí),圖表數(shù)據(jù)來源既有原始的版本,也包括重寫數(shù)據(jù)結(jié)構(gòu)和提供額外內(nèi)存后的情況。AWS 的文章卻對(duì)此進(jìn)行了故意的歪曲。
而且 AWS 引用的 Discord 數(shù)據(jù)當(dāng)時(shí)使用的 Go 版本還是 Go 1.10,但現(xiàn)在 1.18 版本很快就推出了。在這 8 個(gè)重要版本的迭代過程中,Go 團(tuán)隊(duì)改進(jìn)了許多功能,對(duì)因 GC 而引起的中斷也提供了極大的改善(這正是當(dāng)時(shí) Discord 面臨的問題)。
除了這個(gè),rsc 認(rèn)為 AWS 引用的一份“非常有趣”的研究的真實(shí)性也十分可疑。
rsc 表示,AWS 的文章對(duì) Rust 的描述公正客觀,但對(duì) Go 卻存在誤導(dǎo)性的描述。他認(rèn)為 Rust 和 Go 不是零和的博弈關(guān)系。Rust 十分優(yōu)秀,所以他更愿意關(guān)注 Go 和 Rust 相互補(bǔ)充并進(jìn)行良好合作的方式。比如這個(gè)案例:https://thenewstack.io/rust-vs-go-why-theyre-better-together/
本文轉(zhuǎn)自O(shè)SCHINA
本文標(biāo)題:Go 開發(fā)團(tuán)隊(duì) leader 批評(píng) AWS 文章對(duì) Go 存在嚴(yán)重誤導(dǎo)
本文地址:https://www.oschina.net/news/184024/rsc-critique-on-the-recent-aws