Dropbox公司的Go語言探索之路

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Tammy援引Rob Pike於2012年撰寫的《GoogleGo語言:專為軟體工程服務設計的程式設計語言》中的說法,解釋了Go語言為何能夠在Dropbox公司當中發揮重要作用:

“Go語言高效、可擴充且極具生產能力。一部分程式員樂於加以運用,但也有一些人認為其難以理解甚至非常無聊。在這篇文章中,我們將解釋為什麼這些立場本身並不矛盾。Go語言旨在協助Google公司解決其在軟體開發方面面臨的各類問題,這意味著其儘管不能算是一種突破性的研究型語言,但仍然成為大型軟體工程項目當中的出色工具。” — Rob Pike, 2012

Dropbox公司擁有龐大的業務規模:

  • 超過5億名使用者;
  • 20萬商業客戶;
  • 500 PB使用者資料;
  • 資料EB GO儲存系統。

正因為如此,Dropbox公司對自身系統、語言以及工程師提出了極高要求。其指導原則與要求包括:

  •  構建高可靠性系統;
  • 構建安全系統;
  • 將可靠性與安全性納入初始設計;
  • 可靠性需要達到 99.9999999999% (12個9);
  • 可用性需要達到 99.99%。

Dropbox公司對Go語言的應用

目前,Dropbox公司的大部分基礎設施以Go語言編寫而成,具體包括:

  • Go伺服器庫擁有150名貢獻者(來自總計500名工程師);
  • Dropbox公司內超過15個團隊負責構建及運行Go服務;
  • Dropbox公司內部擁有130萬行Go代碼;

另有一部分關鍵性系統亦由Go語言編寫而成:

  • RAT: 限速與限流工具。
  • HAT: memcached的替代方案。
  • AFS: 一套用於替代全域Zookeeper的檔案系統。
  • Edgestore: 分散式資料庫。
  • Bolt: 用於訊息收發。
  • DBmanager: 用於對Dropbox內超過6000套資料庫進行自動化管理與監控。
  • “Jetstream”、“Telescope” 、分塊路由以及更多……

其中相當一部分都繼承自原本的非Go系統。

Dropbox公司當初為何選擇使用Go?

Tammy亦分享了Dropbox公司一步步增加Go語言使用量的軼聞趣事。

Hack技術周成就Go速率限制器原型設計

在某一年的Hack技術周之前,Dropbox的工程師們計劃針對各項服務分別進行限速與限流。因此,一位工程師決定在接下來的Hack技術周內構建一項泛型服務以實現上述目標——而RAT也就此誕生。

RAT的初始原型設計在4天之內即構建完成,並在第5天發布了示範。短短几周之後,RAT的大名在公司內部迅速擴散。另一位Dropbox工程師通過電子郵件與Tammy團隊取得了聯絡,希望瞭解其如何在Python項目當中使用RAT。整個整合進程進展順利,RAT的採用率不斷提高,實用性也快速增強。目前,Dropbox公司內已經有多個團隊在使用RAT。

DBmanager

Dropbox公司擁有超過6000套資料庫,這樣的大型系統自然需要自動化管理與監控措施與之配合。事實上,這些資料庫隨時隨地都在進行複製、容錯移轉以及通過副本進行主體升級等等。

為了管理這一切,Dropbox公司的一名工程師開發出DBmanager——這是一套Web UI,能夠協助管理員快速查看全部6000多套資料庫中發生的狀況。另外,其還能夠將狀態資訊發布至其它系統。

Dropbox公司中的Go版本升級之路

在數百名工程師的配合下,Dropbox公司小心翼翼地協調著Go語言各主要版本的升級工作。不過Tammy並沒有提到任何由升級帶來的問題,這表明整個過程應該相當順利!

下面來看一些有趣的事實:

  • Dropbox 公司最近剛剛完成生產服務當中由Go 1.5到1.6版本的升級;
  • 為了追蹤升級流程,工作人員建立了一份簡單的Dropbox Paper文檔,同時要求每位服務。

持有人報告進度並在必要時申請協助。

Dropbox 公司決定在1.6版本遷移完成之後(包括各非生產服務),跳過Go 1.7並直接升級至1.8版本。

Dropbox公司如何引導新晉工程師們使用Go語言

每一位Dropbox工程師都需要經曆同樣嚴格的Go語言培訓流程,具體包括:

  • 閱讀基礎設施拓撲資料、Go語言風格指南以及Protobuf風格指南。
  • 嚴格但友好的代碼審查。
  • 利用Go語言構建一款娛樂性質的應用程式(一套市集)。
  • 學習利用Bazel構建並測試Go代碼。

經驗豐富的工程師大約需要一周時間以完成上述培訓。

Go語言為Dropbox公司帶來哪些收益?又存在哪些不足?

總體而言,Dropbox公司的Go應用之路非常成功。

  • 易於在Go語言環境下進行生產。
  • 易於在Go語言環境下編寫並消費服務。(人們也熱衷於此!)
  • Go語言標準庫非常出色。
  • 調試工具(總體上)運作良好。

其中的關鍵在於,Dropbox公司並沒有費力將Go編寫成的服務重寫為其它語言版本,這表明人們對其相當滿意。(有趣的是,Tammy表示Dropbox公司也在部分使用Rust,但其並不屬於Go的替代品。)

Dropbox公司在使用Go語言時遇到哪些困難?

Tammy證實稱,Go語言最大的問題在於處理競態條件。

  • 資料競態類bug給調試、查詢與修複等工作帶來挑戰。
  • 一部分Dropbox工程師特別擅長處理Go語言的查詢機制,而另一部分工程師則選擇發揮自己的專長。
  • Go資料競態檢測器有時候不起作用。確定這種不起作用的情況非常重要。
  • 必須以審慎的態度設計需要對資料進行並發訪問的Go程式。

Dropbox公司重視工程師對於可靠性及持久性的關注度,因此他們亦應當有能力解決上述問題(事實上,這種並發處理問題在任何語言環境下都相當困難)。

查看原文連結:https://about.sourcegraph.com/go/go-reliability-and-durability-at-dropbox-tammy-butow

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.