谷歌內(nèi)部 Go 使用案例:核心數(shù)據(jù)解決方案團(tuán)隊(duì)是如何使用 Go 的?
關(guān)于 Google 的核心數(shù)據(jù):
Google 是一家技術(shù)公司,其使命是組織全世界的信息,并使其普遍可訪問和有用。
在這個(gè)案例研究中,Google 的核心數(shù)據(jù)解決方案團(tuán)隊(duì)分享了他們的 Go 旅程,包括他們決定在 Go 中重寫 web 索引服務(wù),利用 Go 的內(nèi)置并發(fā)性,并觀察 Go 如何幫助改進(jìn)開發(fā)過程。

Google 的使命是“組織世界各地的信息,并使其普遍可訪問和有用。” Google 的核心數(shù)據(jù)解決方案團(tuán)隊(duì)是負(fù)責(zé)組織該信息的團(tuán)隊(duì)之一。除此之外,該團(tuán)隊(duì)維護(hù)服務(wù)以索引全球的網(wǎng)頁。這些網(wǎng)絡(luò)索引服務(wù)通過保持搜索結(jié)果的更新和全面來幫助支持諸如 Google 搜索之類的產(chǎn)品,這些產(chǎn)品都是用 Go 語言編寫的。
2015 年,為了跟上 Google 的規(guī)模,我們的團(tuán)隊(duì)需要我們將索引堆棧從用 C++ 編寫的單個(gè)整體二進(jìn)制代碼重寫為微服務(wù)架構(gòu)中的多個(gè)組件。我們決定使用 Go 重寫許多索引服務(wù),現(xiàn)在我們將其用于支持大多數(shù)架構(gòu)。
“ 因?yàn)楣膭?lì)團(tuán)隊(duì)中的工程師使用并發(fā)和并行算法,所以 Go 的內(nèi)置并發(fā)是很自然的選擇。” —Minjae Hwang, 軟件工程師
選擇語言時(shí),我們的團(tuán)隊(duì)發(fā)現(xiàn) Go 的多種特性特別適合。例如,因?yàn)楣膭?lì)團(tuán)隊(duì)中的工程師使用并發(fā)和并行算法,所以 Go 的內(nèi)置并發(fā)是很自然的選擇。工程師還發(fā)現(xiàn),“ Go 代碼更為自然”,使他們可以將時(shí)間花在業(yè)務(wù)邏輯和分析上,而不是在管理內(nèi)存和優(yōu)化性能上。
使用 Go 時(shí),編寫的代碼要簡單的多,因?yàn)樗兄跍p輕開發(fā)過程中的認(rèn)知負(fù)擔(dān)。例如,當(dāng)使用 C++ 時(shí),復(fù)雜的 IDE 可能“顯示出源代碼沒有編譯錯(cuò)誤實(shí)際上確實(shí)有錯(cuò)誤”,而“在 Go 中,當(dāng) IDE 指出代碼沒有錯(cuò)誤時(shí),代碼總是會(huì)編譯。” Core Data Solutions 團(tuán)隊(duì)的軟件工程師 MinJae Hwang 說。減少開發(fā)過程中的小摩擦點(diǎn),例如縮短修復(fù)編譯錯(cuò)誤的周期,有助于我們的團(tuán)隊(duì)在原始重寫期間更快地發(fā)布,并有助于保持較低的維護(hù)成本。
“當(dāng)我使用 C++ 并想使用更多軟件包時(shí),必須寫一些 header 文件。當(dāng)我用 Go 語言時(shí),內(nèi)置工具使我可以更輕松地使用軟件包。我的開發(fā)速度要快得多。
通過簡單的語言語法和 Go 工具的支持,我們團(tuán)隊(duì)中的一些成員發(fā)現(xiàn)用 Go 編寫代碼要容易的多。我們還發(fā)現(xiàn) Go 在靜態(tài)類型檢查方面做得非常好,并且某些 Go 基礎(chǔ)知識(shí)(例如 godoc 命令)已幫助團(tuán)隊(duì)圍繞編寫文檔建立了更規(guī)范的規(guī)則。
“…在一年內(nèi)重新設(shè)計(jì)了 Google 的網(wǎng)絡(luò)索引。更令人印象深刻的是,團(tuán)隊(duì)中的大多數(shù)開發(fā)人員在學(xué)習(xí) Go 的同時(shí)也用 Go 進(jìn)行了重寫。”— Prasanna Meda,軟件工程師
研發(fā)在全球范圍內(nèi)被廣泛使用的產(chǎn)品絕非易事,而我們團(tuán)隊(duì)使用 Go 的決定并不是一件容易的事,但是這樣做有助于我們更快地行動(dòng)。結(jié)果,在一年內(nèi)重新設(shè)計(jì)了 Google 的網(wǎng)絡(luò)索引。更令人印象深刻的是,該團(tuán)隊(duì)中的大多數(shù)開發(fā)人員在學(xué)習(xí) Go 的同時(shí)就用 Go 完成重寫。
除了核心數(shù)據(jù)解決方案團(tuán)隊(duì)外,Google 的工程團(tuán)隊(duì)在開發(fā)過程中也采用了Go。了解 Chrome[1] 和 Firebase 托管[2]團(tuán)隊(duì)如何使用 Go 來大規(guī)模構(gòu)建快速,可靠和高效的軟件。關(guān)于他們的下次分享。
原文鏈接:https://go.dev/solutions/google/coredata/
作者:Prasanna Meda, Software Engineer, Core Data Solutions
翻譯:polarisxu
參考資料
Chrome: https://go.dev/solutions/google/chrome/
[2]Firebase 托管: https://go.dev/solutions/google/firebase/
推薦閱讀
xxx

