當前位置:
首頁 > 科技 > Dropbox的GO語言之旅:可靠性和持久性

Dropbox的GO語言之旅:可靠性和持久性

技術資訊,第一時間送達!

作者丨Tammy Butow

翻譯丨Diwei

譯者註:作者在本文介紹了Dropbox公司是如何開啟探索使用Go語言之路的,在探索的過程中遇到了哪些問題,從結果來看證明了Go語言的可靠性和持久性。以下為譯文。

Tammy Butow(@tammybutow)是Dropbox基礎架構開發團隊的工程經理。Tammy管理著代碼工作流——包括了Dropbox內使用Go從編碼到上線的整個過程。她在2017年的GopherCon大會上談到了Dropbox的工程師是如何使用Go語言建立和運行大型服務。

注意:這篇文章記錄了大會上的演講內容。如果遺漏了什麼,請在Twitter上告訴我(@sqs)。如果有錯誤,肯定是我描述的有問題;因為Tammy的演講太棒了!

Dropbox探索使用Go語言之旅

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

「Go語言非常高效,支持擴展,而且還能提高生產。一些程序員覺得使用Go進行工作很有趣;另一些人則認為它缺乏想像力,甚至枯燥乏味。本文我們將解釋為什麼這些對立的觀點是不成立的。Go語言旨在解決谷歌在軟體開發中所面臨的問題,導致了這門語言並不是一門突破性的研究語言,但對於大型軟體項目來說,它還是一個很優秀的工具。」——Rob Pike,2012年

Dropbox的規模非常龐大:

超過5億個用戶

200000個商業客戶

500PB的用戶數據

數據EB GO存儲系統

因此,Dropbox對它們的系統、語言和工程師們有很高的要求。指導原則以及要求是:

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的工程師們針對各項服務分別進行限速與限流。所以Dropbox的一位工程師決定為這些事情建立一個公共服務的實現,因此RAT誕生了。

最初的RAT原型是在4天內完成的,並在第5天進行演示。短短几周之後,RAT的大名在公司內部迅速擴散。另一位Dropbox工程師給Tammy的團隊發了電子郵件,看看他們時如何在Python項目中使用RAT。整合過程進展的很順利,採用率也逐漸在提升,RAT也變得越來越實用。現在,Dropbox的好幾個團隊都使用了RAT。

DBmanager

Dropbox公司擁有6000多個資料庫,這樣一個龐大的系統需要自動化和監控。在任意給定的時刻,資料庫都在進行複製、故障轉移以及通過副本進行主體升級等。

為了管理這些問題,Dropbox的工程師建立了DBmanager,它是一套Web UI,可以快速查看所有6000多個資料庫中發生的事情。它還將這些狀態信息發布到其它系統中。

Go語言升級版

有了成百上千的工程師,Dropbox小心翼翼地進行Go語言各主要版本的升級工作。Tammy表示升級過程沒有產生任何問題,過程非常順利!

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

Dropbox最近完成了從1.5版升級到1.6版的生產服務。

為了追蹤升級過程,他們創建了一個簡單的Dropbox文件文檔,並讓每個服務負責人彙報進展,並在必要時向他們尋求幫助。

Dropbox將會跳過1.7版本,在1.6遷移完全完成(包括非生產服務)的情況下直接升級到1.8。

Dropbox如何培訓新工程師使用Go

每個Dropbox工程師都經歷了同樣嚴格的培訓過程,包括:

閱讀基礎設施拓撲資料、Go語言風格指南以及Protobuf風格指南

嚴格但友好的代碼審查

在Go中構建一個娛樂性質應用程序(應用程序商店)

學習Bazel的構建和代碼測試

對於有經驗的工程師來說,這個過程需要一個星期左右的時間。

Dropbox的Go語言發展情況如何?有哪些缺點呢?

總的來說,Dropbox的Go應用之路非常成功。

使用Go語言以後富有成效。

編寫和使用服務變得很容易了。(人們喜歡做這兩種事情!)

Go語言標準庫非常出色。

調試工具(總體上)運行很好。

一個關鍵的數據點是,Dropbox沒有努力將服務從另一種語言改寫為另一種語言,這表明人們對其相當滿意。(Tammy確實拋出了一份有趣的信息:Dropbox公司也在部分使用Rust,但其並不屬於Go的替代品。)

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

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

數據競態類bug給調試、查詢與修復等工作帶來挑戰。

一些Dropbox的工程師特別善於發現這些,而其他工程師則依賴於他們的專業技能。

Go數據競賽檢測器並不總是有用的。確定這種不起作用的情況非常重要。

必須以審慎的態度設計需要對數據進行並發訪問的Go程序。

Dropbox僱傭了那些關心可靠性和持久性的工程師,因此他們亦應當有能力解決上述問題(儘管在任何地方,並發性都是非常困難的)。

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

為保iPhone默認搜索引擎地位 谷歌需給蘋果30億美元
我們是誰?程序員!
回顧十個 Web 開發者熟悉的經典開源項目和工具,一個都不知道的算我輸!
程序員的一些強迫症,你中招了嗎?
深情凝望區塊鏈的史前紀事、中本魔咒、以太野望、滄海橫流,那些我們必須和必將知道的

TAG:CSDN |

您可能感興趣

seq2seq強化學習中Human Bandit反饋的可靠性
對話RoboCup 2019主席Claude Sammut教授:系統的可靠性比單一的卓越零件更為重要
iPhone 9/iPhoneX Plus模型保護殼曝光 可靠性高
蘋果拯救新MacBook Pro:提高穩定性可靠性
Microchip新型汽車級MEMS振蕩器問世——有效改善惡劣環境下的可靠性及性能
HTTP / 3用UDP替換TCP以提高網路速度和可靠性-thenewstack
Kafka的存儲機制以及可靠性
ctDNA可靠性遭質疑?ASCO&CAP聯合評審提建議
Hornet的主要特點是可靠性和維護性好,生存能力強
Rescuecom修複數據顯示蘋果電腦可靠性第一
過分追求極致的設計,正在削弱MacBook的可靠性
Littelfuse宣布推出汽車用瞬態抑制二極體陣列,可在最惡劣的環境中確保最高的可靠性能
零壹新金融日報:MSCI密切關注科創板;特朗普認為FB的Libra沒有可靠性
布局新穎 可靠性高 OPPO Find X天線信號實測
Backblaze公布2017年HDD可靠性報告,希捷4TB系列故障率最高
美國總統特朗普:加密貨幣不是貨幣,Libra沒有可靠性需接受監管
【品位】CARL F. BUCHERER專業可靠性能,時尚運動外觀
寶格麗BVLGARI BVLGARI系列LOGO獨有風采可靠性十足
LED熱特性及可靠性
QLC閃亮登場:性能低、可靠性渣?但取代HDD的必定是它