啟動 Google 生產:Google 的網站可靠性工程團隊如何使用 Go
谷歌經營著少量非常龐大的服務。這些服務由一個覆蓋開發者所需一切的全球基礎設施提供支援:儲存系統、負載均衡器、網路、日誌記錄、監控等等。然而,它不是一個靜態系統,它不可能是。架構演化,新產品和想法不斷產生,新版本必須推出,配置推送,資料庫模式更新等等。我們最終會以每秒數十次的速度將更改部署到系統中。
由於規模如此之大,以及對可靠性的迫切需求,谷歌開創了網站可靠性工程(SRE)的先河,此後許多其他公司都採用了這一角色。“SRE 是當你把操作當作軟體問題來對待時得到的結果。我們的使命是保護、提供和改進谷歌所有公共服務背後的軟體和系統,時刻關注它們的可用性、延遲、效能和容量。”-站點可靠性工程(SRE)。
2013-2014 年,谷歌的 SRE 團隊意識到,我們的生產管理方法在很多方面都不再有效。我們已經遠遠超越了 shell 指令碼,但是我們的規模有太多的變動部分和複雜性,所以我們需要一種新的方法。我們確定我們需要朝著生產的宣告模型(稱為 “ Prodspec
”)前進,它驅動一個專用的控制平面(稱為 “Annealing
”)。
當我們開始這些專案時,Go
只是谷歌關鍵服務的一個可行選擇。大多數工程師更熟悉Python
和C++
,這兩者都是有效的選擇。儘管如此,Go
還是吸引了我們的興趣。新奇的吸引力當然是一個因素。但是,更重要的是,Go
承諾了在效能和可讀性之間的最佳平衡點,這是其他語言都無法提供的。我們開始了一個小實驗, 用 Go 實現了Annealing
和Prodspec
的一些初始部分。隨著專案的進展,最初用Go
編寫的部分成為了核心。我們對Go
很滿意——它的簡單性越來越好,效能也很好,併發原語很難被替代。
從來沒有使用Go
的命令或要求,但是我們不想回到Python
或C++
。Go
在Annealing
和Prodspec
中有機成長。這是正確的選擇,因此現在是我們的語言選擇。現在,大部分谷歌產品是由我們用 Go 編寫的系統管理和維護的。
在這些專案中擁有一門簡單語言的力量是難以言表的。有些情況下確實缺少了某些特性,例如在程式碼中強制某些複雜結構不應發生變化的能力。但是對於每一個例子來說,毫無疑問,有幾十個或上百個例子,簡單性是有用的。
例如,Annealing
影響各種各樣的團隊和服務,這意味著我們嚴重依賴於整個公司的貢獻。Go 的簡單性使我們團隊之外的人能夠看到為什麼某些部分或其他部分不適合他們,並經常自己提供修復或特性。這讓我們得以迅速成長。
Prodspec
和Annealing
負責一些相當關鍵的部件。Go
的簡單性意味著程式碼易於遵循,無論是在review
期間發現bug
,還是試圖確定在服務中斷期間究竟發生了什麼。
Go
的效能和併發性支援也是我們工作的關鍵。由於我們的產品模型是宣告式的,所以我們傾向於操作大量結構化資料,這些資料描述了產品是什麼以及它應該是什麼。我們擁有大型服務,因此資料可能會越來越大,這種情況下通常會使純粹的順序處理效率不高。
我們在很多地方用很多方式操縱這些資料。 這不是讓一個聰明人想出我們演算法的並行版本的問題。 這是一個偶然的並行性問題,即找到下一個瓶頸並對程式碼部分進行並行處理。Go
可以做到這一點。
由於Go
的成功,我們現在將 Go 用於Prodspec
和Annealing
的每個新開發中。除了 SRE 團隊,谷歌的工程團隊也在他們的開發過程中採用了Go
。瞭解Core Data Solutions,Firebase Hosting和Chrome團隊如何使用Go
來大規模構建快速,可靠和高效的軟體。
站點可靠性工程師 Pierre Palatin 撰寫
References
- 站點可靠性工程(SRE)https://sre.google/
- Core Data Solutions https://go.dev/solutions/google/coredata/
- Firebase Hosting https://go.dev/solutions/google/firebase/
- Chrome https://go.dev/solutions/google/chrome/
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 網友:Go 你是 Google 的,Go:我不是Go
- 如何使用Google服務Go
- Google 開發者網站常用網址Go網站
- 在 Angular 網站部署 Google 廣告Angular網站Go
- Google Colab的使用Go
- 個人網站接入Google Ads的一點心得網站Go
- Go中使用Google Wire實現依賴注入Go依賴注入
- 海外網站title標題,防止Google重寫網站Go
- 啟動google 瀏覽器允許跨域Go瀏覽器跨域
- Google Drive無限容量+網頁網站式目錄索引網盤Go網頁網站索引
- 五種方法CRM提高團隊生產力
- Google建立 Web3 團隊提供加密服務!將挖掘市場的“巨大潛力”!GoWeb加密
- 正確高效使用 GoogleGo
- PageRank 演算法-Google 如何給網頁排名演算法Go網頁
- Google Chrome將不再允許網站劫持後退按鈕GoChrome網站
- 一鍵訪問Google和YouTube等國外知名網站Go網站
- 如何在C#中使用Google.Protobuf工具C#Go
- Mac上如何讓Bootstrap Studio中使用Google MapsMacbootGo
- 如何使用DTM將App事件傳送到Google AnalyticsAPP事件Go
- Google釋出網頁體驗新演算法,網站該如何最佳化調整Go網頁演算法網站
- Ten Tips for Smarter Google Searches (十個更聰明使用 Google 搜尋的技巧)Go
- 我所使用的生產 Java 17 啟動引數Java
- Pipefy如何使用團隊拓撲方法建設敏捷團隊?敏捷
- 在 Google Colab 中使用 JuiceFSGoUI
- 使用Google Fonts注意事項Go
- Google:全球使用Android驅動的裝置達30億臺GoAndroid
- Google:2018年Android 生態安全報告GoAndroid
- 這家被Google收入麾下的獨立遊戲團隊,我們在深圳跟他們聊了聊Go遊戲
- 根據google的outline科學上網Go
- 分享一些常關注的前端團隊網站前端網站
- Go是Google的語言,而不是我們的語言Go
- 刪除google網頁快照方法Go網頁
- Google guava工具類的介紹和使用GoGuava
- 如何下載 Google Play 應用的apkGoAPK
- google chromeGoChrome
- 前Google員工推雲安全服務檢測網站掛馬Go網站
- 使用 Flutter 開發 Google Translate 程式FlutterGo
- Google AdMob 官方變現團隊邀請專家解析博彩類手遊變現機遇Go