為什麼 SoundCloud 要使用 Go 語言以及如何使用

2021-01-09 開源中國

我們SoundCloud是一個使用多種程式語言的公司,雖然我們的技術架構最外層一直使用的是Ruby on Rails,但是在後端,各種各樣的程式語言都有涉及。在這裡我想多講一下為什麼要使用和如何使用Go這樣一種開源的、剛剛發布其1.0版本的程式語言的。

在我們的公司裡,所有的技術人員都是全能選手,而不是專才,這是根植於公司基因文化裡的特徵。我們希望每個人都能對公司的基礎架構中每一部分都至少 有相當的了解。更進一步,我們鼓勵技術人員在個開發團隊間調換,甚至組成新的團隊,使成員跟各團隊的衝突和摩擦儘量減少。在這樣一種代碼共產共有的環境 中,非常需要一種表達性強,效率高的語言來降低實施的困難,Go語言證明了它是一種非常適合的語言。

我們已經有好幾個程式設計師都把Go語言描述為是一種所見即所得(WYSIWYG)的程式語言。這是說,代碼要做的事和它在字面上表達的意思是完全一致的。這種特徵對於使軟體無歧義和可維護有著巨大的幫助。Go語言明確的拒絕「helper」習慣用法以及諸如統一訪問原則(Uniform Access Principle)、 操作符重載、預設參數、甚至異常等特徵,基本上,這些特徵相較於能產生更豐富的表達,它們的歧義性會帶來更大的問題。不否認,這樣的策略會帶來更多的鍵盤 敲擊——尤其是,正如大多數參與Go語言項目的新手程式設計師痛斥的,在異常處理時最麻煩——但是,換來的報答是,還是這些新手程式設計師,他們能輕易的、迅速的 將應用在腦海裡形成一個完整的模型。我可以很有信心的告訴大家,從項目開始到提交代碼,Go是我們使用過的效率最高的語言。

Go語言嚴格的結構原則和它的「一種事情有且只有一種方法完成」的思想意味著我們無需在風格問題上糾纏不休。在針對Go語言程序的代碼審查上,審查會變得更針對問題,而不是針對語言上的錯綜複雜,這是每個人都願意看到的。

更值得一提的是,一旦一個程式設計師對Effective Go有 了一個基本掌握,你會發現他們的關注點能非常自然的從「應用目前應該怎樣運行」過度到「應用在理想狀況下應該如何的運行」。是否是後臺的響應緩慢致使整個 請求失敗?是否應該只重試一次,不成功就只提供部分的結果?瀏覽器表現異常,我們是否要設置一個250毫秒的超時限制?系統中任何一個外層的行為場景都能 用一種直接的、理想化的實現來表示,不需要類庫或框架的支持。去掉抽象層降低了複雜性;直白陳述式、簡單的代碼是更好的代碼。

Go語言還有其它一些非常好的特徵,讓我們受益不少。靜態類型和快速編譯使我們能夠在開發過程中做幾乎實時的靜態檢查和單元測試。這也意味我們開發的基於Go語言的系統中的編譯,測試和發布幾乎是一起完成的。

事實上,快速的編譯,快速的測試,快速的相互審查和快速的部署意味著你的一些想法能在一個小時內從白板上的設計變成產品中可運行的程序。例如,Next軟體中的搜索基本功能是由Elastic Search驅 動的,但是它接受SoundCloud的管理和交換幾乎全部是Go服務來完成。在驗證過程中,我們認識的,我們需要一種能在某個特殊環境中把索引標誌為只 讀狀態的方法,需要索引系統能知道並順從這種狀態。在代碼中加入抽象層,開發一個新的入口點正確的檢測這種狀態,修改跟索引相關的行為,為它們寫測試代 碼,這一切只用了半個下午的時間。晚上時,這些修改已經部署並運行了好幾個小時了。這樣的速度,尤其是對一種靜態類型的,本地編譯的語言,簡直沒得說了。

我說到了我們的編譯和部署系統。它叫Bazooka,它被設計成一個平臺,用來管理內部服務的部署。(我們很快就會把它開源;關注我們,不要走開!)我們曾通過一個情況複雜的網絡環境升級12-Factor應用, 你可以把它當成一個巨大的、複雜的狀態機,隨時都有可能造成數據汙染和相互競爭的狀態。對於這種工作,Go語言是最自然的選擇。Go語言很獨特,它有天生 的並行安全特徵。Bazooka系統的開發人員能夠分析出問題的複雜性而不需要使用那些複雜的輔助工具。Bazooka利用Doozer來協調它的共享狀態,Doozer是世界上唯一一個Paxos開源實現軟體(就我們所知)——它也是用Go語言開發的。

總之,我們在SoundCloud公司維護著都是用Go語言寫成的十幾種服務和十幾種知識庫。當有新的後臺項目時,我慢慢的都會選擇使用Go語言來完成。

你對使用Go語言解決真正問題和開發真正產品感興趣嗎?我們很樂意聽到你的聲音!

[本文英文原文連結:Go at SoundCloud ]

相關焦點

  • 聊聊2020年soundcloud場景的12佳新人吧
    我長期保持對soundcloud場景的關注,或多或少都能夠感知soundcloud聽眾當下喜歡什麼樣的音樂、什麼樣的音樂人很火熱以及整個地下音樂場景的趨勢。如果你對2020真正有趣的soundcloud音樂感興趣,那麼你務必得看完我的這篇文章。
  • 你會正確使用 SoundCloud 嗎?連DJ可能都不知道的實用技巧
    如果你知道如何正確的「網上衝浪」,那麼喜愛電音的你一定會使用 Soundcloud,許多音樂藝人都會通過 Soundcloud 來發布自己的歌曲
  • 劇情翻轉:從Go1.15開始,使用make+copy來克隆切片變得總是比使用append克隆要快
    本公眾號曾發表過一篇文章:使用append來克隆切片常常比使用copy高效得多。
  • 蘋果改變音樂流媒體格局:soundcloud陷困境
    蘋果改變音樂流媒體格局:soundcloud陷困境(圖片來自於Engadget)   有媒體指出,如果在今年無法引入大量資金,那麼SoundCloud公司將無法維持,即將面臨倒閉的危險本文屬於原創文章,如若轉載,請註明來源:蘋果改變音樂流媒體格局:soundcloud陷困境http://news.zol.com.cn/623/6232741.html http://news.zol.com.cn/623/6232741.html news.zol.com.cn true 中關村在線 http:
  • 如何使用正式和非正式英語 Formal and Informal English
    為什麼我要歡迎大家三次?In this lesson, you can learn about formal and informal English.過於禮貌的語言會讓你和你交談的人之間產生距離。At best, this will sound awkward and unnatural.At worst, you can sound cold and unfriendly if you use language which is too formal.
  • Go 語言實戰(1): 初識
    為什麼是 Go 主流的語言主流程式語言的排名,根據不同的統計口徑略有差異,但前幾名基本逃脫不了:C、C++、Java、Python、JavaScript。在各種內部使用場景,或者是用戶不多的小型服務,性能根本不重要;相反快速落地跑起來特別重要。Python 語法簡潔直觀,表達能力強,類庫也相當豐富(尤其是數據處理、機器學習這一塊),大幅降低了非計算機科學科班人員(統計學家、數學家、AI 研究員)的編程門檻,成為了計算機與其他學科交叉領域以及快速原型的第一語言。JavaScript 比較特殊。
  • Soundcloud 跨足線上母帶後期市場—將 demo 交給 Soundcloud 線上 mastering
    與 Dolby 合作催生的全新工具每一個製作人、樂隊在發表作品前,都希望每一首作品以最佳的聆聽體驗呈現給眾人,因此良好的母帶後期製作絕對是歌曲表現的一大關鍵,線上歌曲串流平臺 Soundcloud 近日與大廠 Dolby 即針對渴望以良好技術製作 mastering 的人們合作推出了新的服務 - mastering on Soundcloud, powered
  • 英語縮略形式的正確使用方法
    今天我們要學習縮略形式的使用、構成和發音。This is something that many of you have requested and also, many people get wrong.
  • 如何正確使用英文常用標點符號
    如何正確使用英文常用標點符號漢語中的標點符號是根據英文的標點而制定的。對於一個普通的英語學習者來說,常用的標點符號不外乎四個:逗號,句號,問號和感嘆號。此外,某些符號在漢英兩種語言中的形式不同。例如,中文的句號是空心圈(。)而英文的句號是實心點(.);英文的省略號是三個點(...)且位置在行底而中文的省略號為六個點(……)並且居於行中。以下為英文中常用標點符號的作用及例子。
  • 如何用Spring Boot和Cloud實現微服務
    如上圖所示,我用到了Spring Cloud所提供的各種產品。有關如何使用Spring Cloud來構建Gateway的內容,請訪問https://spring.io/projects/spring-cloud-gateway。
  • 2020年Go語言盤點:新冠大流行阻擋不了Go演進的步伐
    /RPC 服務和 CLI,和他們工作的組織規模大小關係不大;大多數團隊試圖快速更新到最新的 Go 版本;當第三方供應商遲遲不支持當前的 Go 版本時,就會給開發者造成採用障礙;現在 Go 生態系統中幾乎所有人都在使用go module,但圍繞包管理的一些混亂仍然存在;需要改進的高優先級領域包括調試、go module 使用以及與雲服務交互的體驗改善;VS Code 和 GoLand 的使用量持續增加
  • SpringCloud Feign:使用ApacheHttpClient代替默認client
    ApacheHttpClient和默認實現的比較ApacheHttpClient 使用maven 依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId
  • 一文搞懂Go語言中的切片排序
    sort.Sort函數不保證排序是穩定的,要想使用穩定排序,需要使用sort.Stable函數。2. sort包的「語法糖」排序函數我們看到,直接使用sort.Sort函數對切片進行排序是比較繁瑣的。如果僅僅排序一個原生的整型切片都這麼繁瑣(要實現三個方法),那麼sort包是會被「詬病」慘了的。
  • 狗狗為什麼要使用航空箱?
    為什麼要使用航空箱?航空箱的使用有多個有效的好處,能用作訓練、運輸、旅行或當你沒有能力監視犬時可以限制它的活動(為了安全)。幼犬訓練:使用航空箱作家居訓練。使用航空箱可以防止破壞性的亂咬。所有幼犬都會有亂咬東西的行為,例如:當它們牙癢時,當它們感覺無聊時,當它們需要遊戲時,當它們感覺恐懼時,或當它們只不過就只想亂咬時。運輸:已訓練好住在航空箱的犬能經常容易地陪你去旅行,因為你能經常把它的房間帶在一起。如果犬需要經常空運,那使用航空箱是必須的。當乘坐汽車時,航空箱對於犬來說也是一個安全的地方。
  • 英國學者:漢語是伊甸園最初使用語言
    表達了這樣一個觀點:"中國書面語言是上帝賜予人類的原初語言,也是亞當和夏娃在伊甸園裡最初使用的語言。"與韋伯同時的德國學者基爾謝也認為:漢語是初民語言後裔的一支。更有意思的是1668年,英國皇家協會召開了一次會議,討論英語文字改革的問題,皇家協會首任主席威爾斯金提供了一份報告《真正的字與哲學語言》,主要議題有3個:第一,能否使用漢字作為歐洲的科學和通用語言?
  • 牛津大學- 如何使用感嘆詞 How to Use Interjections in English
    You'll learn how to use them and how you can use them to sound more natural in English.本節課,我們講學習如何針對不同的情境使用感嘆詞。你將學習如何使用它們以及如何在讓它們聽起來更自然。
  • Emma英語- 如何使用強調成分 Upgrade Your English Conversation
    那我們到底要怎麼辦呢?我們要使用強調成分。We're gonna use intensifiers to make your language more powerful when you're talking about extremes.
  • 男女對語言的使用,真的存在差異嗎?
    喬治華盛頓大學的副教授艾德麗安·漢考克(Adrienne Hancock)發現,大多數「性別化語言」的研究認為,女性在說話時更傾向於表達感情,如分享經驗和表達情感,即更多地使用描述情緒的詞語和強調或加強語氣;男性則更傾向於使用語言傳達信息,如會使用更長的句子,並對句子中涉及的內容進行更多的補充說明。
  • 你使用哪種語言與自己對話?
    那麼你是否思考過,意識是如何在腦海中流淌的呢?假使真的存在會讀心術的人,正在窺探你此刻的想法,他會聽到什麼呢?「即使獅子會說話,我們也無法理解它。」事實是,自己腦海裡的聲音,別人還真不一定聽得懂。那麼你是否思考過,意識是如何在腦海中流淌的呢?假使真的存在會讀心術的人,正在窺探你此刻的想法,他會聽到什麼呢?「即使獅子會說話,我們也無法理解它。」事實是,自己腦海裡的聲音,別人還真不一定聽得懂。一方面來言,有一些思考並不依託語言而存在。許多人認同思考是需要語言承載的,甚至需要具體選擇使用哪種語言來思考;但是同時,我們的很多思考並不具有明顯的語言特徵。
  • 馬桶如何使用 使用馬桶要注意什麼
    馬桶大家都知道的吧,是衛浴產品中很重要的一種,在使用馬桶的時候需要知道馬桶如何使用這個問題,因為正確的使用馬桶方法可以提高馬桶的使用年限,而且也可以減少很多問題的發生。那麼使用馬桶要注意什麼,來看看相關的內容和介紹吧,對於馬桶等相關的問題都可以有很好的參考。