• <acronym id="eyrpt"></acronym>
    <track id="eyrpt"></track>
    <p id="eyrpt"></p>

      <table id="eyrpt"><ruby id="eyrpt"></ruby></table>
      <table id="eyrpt"></table>

    1. 當前位置:首頁 > 短網址資訊 > 正文內容

      獨家 | 我與Go語言的這十年

      作者|FT12短網址
      編輯|短鏈接
      2007 年 9 月 20 日,關于設計一門全新語言的討論正式開始,這門全新的語言,就是后來的 Go。時至今日,Go 語言已經發布到 1.9 版本,走過了整整十年的歷程。在這十年間,Go 語言兩奪 TIOBE 年度語言大獎(2009/2016),許多初創公司在早期使用 Go 進行開發,包括現在的云計算巨頭 Docker,也由此催生出了 Kubernetes 這樣的項目。在大洋彼岸的中國,Google Trends 顯示 Go 的異?;鸨?Go 語言之父感到震驚。而這一切,跟一位名叫許式偉的技術人密不可分。

      Go 語言剛剛度過了它的十周年紀念日。而要說我與 Go 的緣分,也同樣始于十年前(2007 年)。這十年,是 Go 成長的十年,同樣也是我成長的十年。

      2007 年 2 月,我建立了金山實驗室,主攻分布式存儲方向。這是我職業生涯至關重要的一個轉折點。此前我已經做了 7 年的 WPS Office 辦公套件的研發。這對我有兩個重要的挑戰:一個是角色轉換上的,從做軟件研發的架構師到做業務的產品經理;一個是技術領域變化上的,從單機的桌面軟件開發到分布式的后端服務器開發。

      我第一個面臨的問題是技術選型。幾乎沒有作任何糾結,我們選擇了 Java 作為主體的開發語言。作為初入后端開發領域的團隊來說,這只是一個從務實角度出發的選擇。但 TrustNo1 在程序員雜志發表的《一場茶杯里的風暴》一文讓我認識了 Erlang 語言,并深深被 Erlang 的編程思想所打動。我意識到這種編程思想將會極大釋放服務端編程的生產力。為了推動服務端最佳實踐的探索,也為了進一步推動更多人了解和研究 Erlang,我發起了 ECUG 社區。ECUG 到現在已經十年。這十年我們風雨無阻,每年年底都會舉行一場 ECUG Con 大會,和來自各行各業的技術大拿們齊聚一堂,大家一起分享這一年來服務端開發的實踐心得。

      盡管我們選擇了 Java,但是隨后我們也做了小范圍使用 Erlang 進行開發的嘗試。在 2008 年我們啟動了一個用 Erlang 來編寫存儲系統(極簡版)的業余項目。這次的嘗試讓我對 Erlang 有了進一步的判斷:盡管 Erlang 的編程思想很好,但是 Erlang 語言本身并不適合大型的工程項目。

      到了 2009 年 3 月,也就是我加入盛大創新院重啟分布式存儲項目時,我面臨了第二次技術選型。這一次我選了最難的一條路:用 C++ 來開發。這是一條艱苦的路。促使我做出這一選擇的最大原因是,我很希望能夠制造一個新輪子,它應該既有 Erlang 編程思想的優勢,又可以克服 Erlang 語言的劣勢。如果這事能夠干成,它將是一件偉大的創舉,所有的服務端開發人員都將受益于此。于是,在心懷滿腔熱血之下,一個名為 CERL 的項目誕生了。在我們存儲的第一個版本期間,實際上我們花費在 CERL 庫的時間遠超過了做存儲本身,無論從代碼量還是花費的精力來說都是如此。

      CERL 項目經歷了 2 個大的版本。CERL 1.0 完全遵循 Erlang 的編程思想,主要編程范式如下:

      • 可以啟動任意多的進程(這里進程是抽象的概念,實現上是纖程 / 協程),進程數上限只受限于內存大小。

      • 每個進程有進程郵箱,相互發消息通過進程郵箱。

      • 消息分同步消息和異步消息,同步消息會阻塞等待對方返回消息。

      • 網絡服務器是單進程模型(就是大家理解的單線程模型),一次只處理一個消息。

      • 沒有鎖。

      基于 CERL 1.0 的編程模型,我們實踐中發現了這樣一些問題:

      • 在網絡服務器 A、B 相互給對方發送同步消息時會發生“死鎖”。因為雙方可能都正在處理消息中而無法及時響應,這種“死鎖”最終表現為超時(但是實際上超時更可怕,是服務器性能的殺手)。

      • 解決“死鎖”的方法是把同步消息改為異步,但是這對編程復雜性帶來很大的影響,程序語義變得晦澀。本質上,這是回到了傳統的異步編程模型,放棄了 Erlang 編程模型最大的優勢。

      • “沒有鎖”的假設代價過高:在網絡服務器的單個處理響應時間較長(存儲服務必然如此)時,必然希望啟動獨立的進程來響應單個請求。但是各個處理請求的進程之間需要共享網絡服務器的狀態,這就意味著需要有鎖(除非網絡服務器是無狀態的,但是很不幸存儲服務器必然是帶狀態的)。要么放棄性能串行化地處理請求,要么有鎖 —“沒有鎖”,想說愛你不容易。

      在發現“死鎖”問題后,我們立刻對我們整個編程模型進行了反思,決定重構整個編程模型,修改后的 CERL2.0 要點如下:

      • 可以啟動任意多的進程(這里進程是抽象的概念,實現上是纖程 / 協程),進程數上限只受限于內存大小。

      • 沒有進程郵箱。

      • 進程之間只有同步消息(要發送異步消息,用啟動一個新的進程并發送同步消息來達到同樣的效果)。

      • 網絡服務器是多進程模型,每個請求都由一個獨立的進程來處理。

      • 有鎖。

      兩個版本的編程模型的關鍵差異在于拒絕鎖還是拒絕異步消息。CERL 1.0(也就是 Erlang 編程模型)中拒絕鎖,而 CERL 2.0 拒絕異步消息?;?CERL 2.0 我們實現了分布式存儲的第二版、第三版。事實證明,完全杜絕了異步消息這個概念后,這個版本的服務器編程模型心智負擔小了很多。

      然后,如大家所知,后來 Go 語言就發布了。我們團隊一看,在服務器編程模型這一點上,CERL 2.0 和 Go 語言居然一模一樣(包括所有細節上的決策)。有一次團隊聚餐談起這事時,道哥(李道兵)說了一句:我們趕緊把 CERL 開源吧,不然等 Go 流行起來它就沒機會了。我還真和創新院院長陳大年談了 CERL 開源的事情,大年說:沒問題,你發個郵件申請吧,留個憑證。然而我最終沒有發出這封郵件。在嘗試用 Go 寫了一周的代碼后,我心里已經有了結論:我并不打算讓 CERL 面世。因為有人已經把它的目標完成了,而且遠超預期。

      于是,2011 年 6 月,我們離開盛大創新院創辦七牛云的時候,我面臨了第三次技術選型。這一次,我很堅決地選擇了 Go 語言。為此我還專門給團隊發了一封郵件,郵件中有一段是這么說的:

      在創業過程中我們會面臨很多選擇,也會有很多選擇后來會被證明是錯的,但是今天我可以確定的是,選擇 Go 將會成為我們最正確的選擇。

      在選擇了 Go 語言后,考慮到 Go 仍然是一門十分小眾的語言,我們開始有意識地培養 Go 中國社區。為了讓更多人能夠知道 Go,加入 Go 的行列,我們做了很多工作。我們啟動了《Go 語言編程》一書的編寫工作,并最終和 Go 1.0 版本同步發布。2012 年 2 月,我首次在公開場合說:Go 會超過 C、Java,成為最流行的語言。這一年我到處宣講,做了不下十場的 Go 語言講座,平均每個月有一場。講得最多的一個 PPT 是《Go,Next C》這篇,它基本上算我對 Go 的革命性到底在哪里的一個總結。對于一個初創公司來說,為一個并不屬于自己業務的技術這么花時間去宣傳,有些人可能會覺得比較不可理解。但是實際上有三個理由支撐我們這么做:

      • Go 真的是一門革命性的語言,它的流行將對產業發展具重大意義。

      • Go 仍然是一門小眾語言,而我們不止要招 Go 程序員,更重要的是要說服他們相信 Go 語言是有遠大前景的專業技能方向。

      • 七牛的用戶是程序員,我們需要建立在用戶心目中的專家形象。

      七牛云的起步第一個業務是云存儲,我們選擇了完全用 Go 來實現我們的存儲系統。這是全球第一個用 Go 寫的云存儲,也是第一個用 Go 寫的云服務。而到了 2014 年,在我們決定進入大數據領域時,我們再一次面臨技術選型問題。坦白說,我們還是糾結了一段時間的。從生態來說,選擇 Java,或者某種 JVM 平臺的語言(比如 Scala)有非常顯著的優勢。尤其對于我們大數據業務的負責人陳超這個 Scala 的狂熱粉絲(八卦一下:陳超的網絡 id 是 CrazyJVM),選擇 JVM 平臺似乎更加是毋庸置疑的選擇。那么我們糾結什么呢?我們認為未來 Go 會占領整個基礎設施領域,而大數據無疑是其中極具關鍵意義的一個領域。所以面向現在做選型,還是面向未來做選型,這是一個問題。

      說到這里我提一個有意思的細節。在陳超剛加入七牛的時候,我對他說:“不管未來你會用什么語言,但是進入七牛必須要會寫 Go?!庇谑撬晃冶浦鴮懥艘粋€月的 Go 代碼。一個月后我問他感覺如何,他說:“能夠理解為什么你推薦 Go 了,寫了 Go 代碼后不想回去寫 Scala 代碼?!辈痪弥?,在他啟動 Pandora 大數據平臺項目時,就碰到了我說的選型問題。在做了非常細致的思考之后,他決定用 Go 做 Pandora。這對我來說是一個意料之外的決策。因為我自己在這個事情上并沒有傾向性,而陳超我覺得他很可能還是會優先選 Scala。就在最近(國慶節前)某次聊天中,陳超回顧起這件事,總結了一下他為什么選擇了 Go:極低的學習成本,極低的心智負擔。如果用 Scala,新人入職要培訓,還要擔心寫出糟糕的 Scala 代碼。但是用 Go 新人不培訓直接上崗,幾次 Code Review 完后基本就能夠知道怎么寫出質量不錯的 Go 代碼了。

      十年過去,Go 已經不再是一門小眾語言。越來越多人在用 Go,喜歡上 Go。不記得是什么時候了,但是某一天通過 Google Trends 搜索 golang 發現全世界 Go 最火的地區是在中國時,那一刻真的很開心。

      下一個十年會怎樣?我知道有一些人很期望 Go 語言特性的迭代。但是如果你抱有這種想法可能會失望,因為下一個十年 Go 不會發生太大的變化。對遠期需求變化的預測和把控能力,是 Go 的最大魅力之一。這一點上能夠和 Go 相比的是 C 語言(C 語言不同版本的規范差異極少),但因為 Go 要解決的問題更多,做到這一點實際上也更難。下一個十年 Go 仍然會繼續深耕服務端開發的生態,同時積極探索其他潛在的應用市場。

      延展閱讀

      在 QCon 2015 上海站上,許式偉曾經做過《Go 語言發展狀況》的主題分享。對于 Go 語言,他提到過三個預測:

      • 第一個預測,我最早在 2012 年新浪微博里提過,Go 語言 10 年內一定會超過 C 和 Java,變成排行榜第一的語言。今天大家可能會略相信,但在 2012 年的時候沒有多少人會相信,即使今天講出來,絕大部分人都會覺得太早,畢竟它還沒有排進前五。

      • 第二個預測,Go 語言將在兩年內制霸云計算領域。

      • 第三個預測,Go 將統治下一個 10 年。(來自于 Deferpanic 創始人 Lan Eyberg)。

      更多相關信息,請點擊以下標題閱讀:

      《Go 將統治下一個 10 年?Go 語言發展現狀分析》

       延展實踐

      文中提到的 Scala 狂魔陳超老師和他啟動的 Pandora 大數據平臺項目,在這次 QCon 上海站上,我們有幸邀請到陳超老師分享其中的的技術選型,組件設計、系統調優及架構演進過程,歡迎點擊【閱讀原文】探索更多技術分享。

      除此之外,Google、Uber、Paypal、LinkedIn、Airbnb 等頂尖技術專家也會前來分享前沿實踐經驗。大會報名最后一周,下一個高性能更便捷的前瞻技術請鎖定 QCon 上海 2017。有問題歡迎聯系購票經理 Hanna,電話:15110019061,微信:qcon-0410。

      掃描二維碼推送至手機訪問。

      版權聲明:本文由短鏈接發布,如需轉載請注明出處。

      本文鏈接:http://www.virginiabusinesslawupdate.com/article_525.html

      分享給朋友:

      相關文章

      微盟被收購!天馬股份12億收購微盟60%股份

      微盟被收購!天馬股份12億收購微盟60%股份

      【FT12短網址資訊】7月21日音訊,今日,天馬股份發布布告,公司將以總價11.997214億的報價收買微盟60.4223%股份。布告稱,根據協議,買賣進行前,微盟需剝離別的部屬子公司財物,變更為有限責任公司。這次買賣將以現金方法進行,買賣...

      京東年底前將投資泰國,海外擴張野心顯性

      京東年底前將投資泰國,海外擴張野心顯性

      【FT12短網址資訊】據路透社報導,京東方案在今年年底曾經對泰國進行投資,擴展海外業務。京東創始人兼CEO劉強東表示,公司方案以泰國為中心,為越南、馬來西亞等別的東南亞國家提供服務,但并未透露將對泰國投資金額。近期,京東好像在有意加碼東南亞...

      拿了就走!阿里“無人零售店”體驗:全程黑科技

      未來新零售是什么樣的?全球首個“無人零售店”天貓淘咖啡,為消費者帶來了真正身臨其境的帶來的極致購物體驗?! 》Q之為“無人零售”,是因為用戶登陸淘寶賬號,輸入支付密碼后,便可以進店點餐購物,無需排隊收銀,拿了然后走人?! ∫簿褪钦f,你需要的,...

      生成的短鏈接的后面幾位字母忘了怎么辦?

       在短鏈接的日常使用中,經常會發生一件很尷尬的事情:當你想要打開一個自己以前生成的短連接的時候,發現最后幾位字母忘了,特別是短連接最后幾位還是區分大小的。如果大小寫記不清楚,仍然無法打開正確的網址。那么這個時候該怎么辦呢?小編這里...

      短網址開源程序后起之秀FT12短網址的部署實踐

      短網址開源程序后起之秀FT12短網址的部署實踐

      短網址的開源程序有很多,從早期的phurl,到后來yourls(chef, puppet, saltstack, ansible等)的出現,再到如今ourls的盛行,短網址服務越來越多的被人部署并應用在了移動互聯網中,CD(持續部署)已經成...

      YouTube從Echo Show上下架 亞馬遜谷歌又不和?

      【FT12短網址】小編獲悉,當地時間周二,亞馬遜將YouTube從應用商店下架,其理由是Echo Show設備無法播放YouTube上的視頻了,因為該網站的母公司谷歌停止支持該服務。在一份聲明中,亞馬遜表示:“截至今天下午,谷歌決定不向Ec...

      發表評論

      訪客

      ◎歡迎參與討論,請在這里發表您的看法和觀點。
      一本色综合网久久
    2. <acronym id="eyrpt"></acronym>
      <track id="eyrpt"></track>
      <p id="eyrpt"></p>

        <table id="eyrpt"><ruby id="eyrpt"></ruby></table>
        <table id="eyrpt"></table>