Google 的使命是「整理全球資訊,並讓資訊普遍易於取得且有用」。負責整理這些資訊的團隊之一是 Google 的核心資料解決方案團隊。該團隊負責維護全球網頁索引服務等服務。這些網路索引服務透過保持搜尋結果更新且全面,協助支援 Google 搜尋等產品,而且這些服務都是以 Go 編寫的。
2015 年,為了跟上 Google 的規模,我們的團隊需要將我們的索引堆疊從以 C++ 編寫的單一巨型二進制檔改寫為微服務架構中的多個元件。我們決定以 Go 改寫許多索引服務,而我們現在使用這些服務來強化我們的架構。
「Go 的內建並行處理很自然,因為團隊中的工程師會受到鼓勵使用並行處理和平行演算法。」
在選擇語言時,我們的團隊發現 Go 的幾個功能使其特別適合。例如,Go 的內建並行處理很自然,因為團隊中的工程師會受到鼓勵使用並行處理和平行演算法。工程師也發現「Go 程式碼更自然」,讓他們可以專注於業務邏輯和分析,而不是管理記憶體和最佳化效能。
使用 Go 編寫程式碼簡單許多,因為它有助於在開發過程中減輕認知負擔。例如,在使用 C++ 時,精密的 IDE 可能會「顯示原始碼沒有編譯錯誤,但實際上是有錯誤的」,而「在 Go 中,[程式碼] 會在 [IDE] 顯示程式碼沒有編譯錯誤時,永遠編譯」,核心資料解決方案團隊的軟體工程師 MinJae Hwang 表示。在開發過程中減少小摩擦點,例如縮短修正編譯錯誤的循環,有助於我們的團隊在最初的改寫過程中更快地出貨,並有助於降低我們的維護成本。
「當我在 C++ 中,且想要使用更多套件時,我必須撰寫標頭等部分。當我在 Go 中撰寫時,內建工具讓我能更輕鬆地使用套件。我的開發速度快上許多,」黃先生也分享。
我們的團隊有幾位成員發現,有了 Go 工具的支援,以及簡潔的語言語法,撰寫 Go 程式碼變得容易許多。我們也發現 Go 在靜態型別檢查方面做得非常好,而且某些 Go 基本原則,例如 godoc 指令,已協助團隊建立更嚴謹的撰寫文件文化。
「…Google 的網路索引在一年內重新建構。更令人印象深刻的是,團隊中的大多數開發人員在改寫 Go 時,也同時學習 Go。」
開發一款在全球廣泛使用的產品並非小事,而我們的團隊決定使用 Go 也並非易事,但這麼做確實幫助我們加快進度。因此,Google 的網路索引在一年內重新建構。更令人印象深刻的是,團隊中的大多數開發人員在改寫 Go 時,也同時學習 Go。
除了核心資料解決方案團隊之外,Google 各地的工程團隊已在開發流程中採用 Go。閱讀 Chrome 和 Firebase Hosting 團隊如何使用 Go 來建置快速、可靠且有效率的大規模軟體。
關於核心資料
Google 是一家科技公司,其使命是整理全球資訊,並讓這些資訊普遍且有用。
在此個案研究中,Google 的核心資料解決方案團隊分享他們使用 Go 的歷程,包括他們決定改用 Go 重新撰寫網路索引服務,利用 Go 的內建並行處理,以及觀察 Go 如何協助改善開發流程。