【Docker】GO語言、DOCKER 和新技術

轉載自:https://coolshell.cn/articles/18190.html   酷 殼 – CoolShell   2017年10月30日  陳皓 

 

上個月,作爲 Go 語言的三位創始人之一,Unix 老牌黑客羅勃·派克(Rob Pike)在新文章“Go: Ten years and climbing”中,回顧了一下 Go 語言的發展過程。其中提到,Go 語言這十年的迅猛發展大到連他們自己都沒有想到,並且還成爲了雲計算領域中新一代的開發語言。還提到了,中國程序員對 Go 語言的熱愛完全超出了他們的想象,甚至他們都不敢相信是真的。

 

這讓我想起,我在 2015 年 5 月份拜訪 Docker 公司在灣區的總部時,Docker 負責人也和我表達了相似的感嘆:他們完全沒有想到居然中國有那麼多人喜歡 Docker,而且還有這麼多人在爲 Docker 做貢獻,這讓他們感到非常意外。此外,還跟我說,中國是除了美國本土之外的另一個如此喜歡 Docker 技術的國家,在其它國家都沒有看到。

的確如他們所說,Go 語言和 Docker 這兩種技術已經成爲新一代的雲計算技術,而且可以看到其發展態勢非常迅猛。而中國也成爲了像美國一樣在強力推動這兩種技術的國家。這的確是一件讓人感到非常高興的事,因爲中國在跟隨時代潮流這件事上已經做得非常不錯了。

然而,從 2014-2015 年我在阿里推動 Docker 和 Go 語言的痛苦和失敗過程中,以及這許多年來,有很多很多人問我是否要學 Go 語言,是否要學 Docker,Go 和 Docker 是否能用在生產線上,這些問題看來,對於 Go 語言和 Docker 這兩種技術,在國內的技術圈中有相當大的一部分人和羣體還在執觀望或是不信任的態度。

所以,我想寫這篇文章,從兩個方面來論述一下我的觀點和看法。

  • 一個方面,爲什麼 Go 語言和 Docker 會是新一代的雲計算技術。
  • 另一個方面,作爲技術人員,我們如何識別什麼樣的新技術會是未來的趨勢。

這兩個問題是相輔相成的,所以我會把這兩個問題揉在一起談。

 

雖然 Go 語言是在 2009 年底開源的,但我是從 2012 年纔開始接觸和學習 Go 語言的。我只花了一個週末兩天的時間就學完了,而且在這兩天,我還很快地寫出了一個能工作很好的網頁爬蟲程序,以及一個簡單的高併發文件處理服務,用於提取前面抓取的網頁的關鍵內容。這兩個程序都很簡單,總共才寫了不到 500 行代碼。

我當時對 Go 語言有幾點體會。

第一,語言簡單,上手快。Go 語言的語法特性簡直是太簡單了,簡單到你幾乎玩不出什麼花招,直來直去的,學習曲線很低,上手非常快。

第二,並行和異步編程幾乎無痛點。Go 語言的 Goroutine 和 Channel 這兩個神器簡直就是併發和異步編程的巨大福音。像 C、C++、Java、Python 和 JavaScript 這些語言的併發和異步方式太控制就比較複雜了,而且容易出錯,而 Go 解決這個問題非常地優雅和流暢。這對於編程多年受盡併發和異步折磨的我來說,完全就是讓我眼前一亮的感覺。

 

(圖片來自 Medium:Why should you learn Go?

第三,Go 語言的 lib 庫麻雀雖小五臟俱全。Go 語言的 lib 庫中基本上有絕大多數常用的庫,雖然有些庫還不是很好,但我覺得不是問題,因爲我相信在未來的發展中會把這些問題解決掉。

第四,C 語言的理念和 Python 的姿態。C 語言的理念是信任程序員,保持語言的小巧,不屏蔽底層且底層友好,關注語言的執行效率和性能。而 Python 的姿態是用盡量少的代碼完成儘量多的事。於是我能夠感覺到,Go 語言想要把 C 和 Python 統一起來,這是多棒的一件事啊。

(圖片來自 Medium:Why should you learn Go?

所以,即便 Go 語言存在諸多的問題,比如垃圾回收、異常處理、泛型編程等,但相較於上面這幾個優勢,我認爲這些問題都是些小問題。於是就毫不猶豫地入坑了。

當然,一個技術能不能發展起來,關鍵還要看三點。

  • 有沒有一個比較好的社區。像 C、C++、Java、Python 和 JavaScript 的生態圈都是非常豐富和火爆的。尤其是有很多商業機構參與的社區那就更爲人氣爆棚了,比如 Linux 的社區。
  • 有沒有一個工業化的標準。像 C、C++、Java 都是有標準化組織的。尤其是 Java,其在架構上還搞出了像 J2EE 這樣的企業級標準。
  • 有沒有一個或多個殺手級應用。C、C++ 和 Java 的殺手級應用不用多說了,就算是對於 PHP 這樣還不能算是一個好的編程語言來說,因爲是 Linux 時代的第一個殺手級解決方案 LAMP 中的關鍵技術,所以,也發展起來了。

上述的這三點是非常關鍵的,新的技術只需要佔到其中一到兩點就已經很不錯了,何況有的技術,比如 Java,是三點全佔到了,所以,Java 的發展是如此好。當然,除了上面這三點重要的,還有一些其它的影響因素,比如:

  • 學習曲線是否低,上手是否快。這點非常重要,C++ 在這點上越做越不好了。
  • 有沒有一個不錯的提高開發效率的開發框架。如:Java 的 Spring 框架,C++ 的 STL 等。
  • 是否有一個或多個巨型的技術公司作爲後盾。如:Java 和 Linux 後面的 IBM、Sun……
  • 有沒有解決軟件開發中的痛點。如:Java 解決了 C 和 C++ 的內存管理問題。

用這些標尺來量一下 Go 語言,我們可以清楚地看到:

  • Go 語言容易上手;
  • Go 語言解決了併發編程和寫底層應用開發效率的痛點;
  • Go 語言有 Google 這個世界一流的技術公司在後面;
  • Go 語言的殺手級應用是 Docker,而 Docker 的生態圈在這幾年完全爆棚了。

所以,Go 語言的未來是不可限量的。當然,我個人覺得,Go 可能會吞食很多 C、C++、Java 的項目。不過,Go 語言所吞食主要的項目應該是中間層的項目,既不是非常底層也不會是業務層。

也就是說,Go 語言不會吞食底層到 C 和 C++ 那個級別的,也不會吞食到高層如 Java 業務層的項目。Go 語言能吞食的一定是 PaaS 上的項目,比如一些消息緩存中間件、服務發現、服務代理、控制系統、Agent、日誌收集等等,沒有複雜的業務場景,也到不了特別底層(如操作系統)的中間平臺層的軟件項目或工具。而 C 和 C++ 會被打到更底層,Java 會被打到更上層的業務層。這是我的一個判斷。

好了,我們再用上面的標尺來量一下 Go 語言的殺手級應用 Docker,你會發現基本是一樣的。

  • Docker 上手很容易。
  • Docker 解決了運維中的環境問題以及服務調度的痛點。
  • Docker 的生態圈中有大公司在後面助力。比如 Google。
  • Docker 產出了工業界標準 OCI。
  • Docker 的社區和生態圈已經出現像 Java 和 Linux 那樣的態勢。
  • ……

所以,早在 3、4 年前我就覺得 Docker 一定會是未來的技術。雖然當時的坑兒還很多,但是,相對於這些大的因素來說,那些小坑兒都不是問題。只是需要一些時間,這些小坑兒在未來 5-10 年就可以完全被填平了。

同樣,我們可以看到 Kubernetes 作爲服務和容器調度的關鍵技術一定會是最後的贏家。這點我在去年初就能夠很明顯地感覺到了。

關於 Docker 我還想多說幾句,這是雲計算中 PaaS 的關鍵技術,雖然,這世上在出現 Docker 之前,幾乎所有的要玩公有 PaaS 的公司和產品都玩不起來,比如:Google 的 GAE,國內的各種 XAE,如淘寶的 TAE,新浪的 SAE 等。但我還是想說,PaaS 是一個被世界或是被產業界嚴重低估的平臺。

PaaS 層是承上啓下的關鍵技術,任何一個不重視 PaaS 的公司,其技術架構都不可能讓這家公司成長爲一個大型的公司。因爲 PaaS 層的技術主要能解決下面這些問題。

  • 軟件生產線的問題。持續集成和持續發佈,以及 DevOps 中的技術必需通過 PaaS。
  • 分佈式服務化的問題。分佈式服務化的服務高可用、服務編排、服務調度、服務發現、服務路由,以及分佈式服務化的支撐技術完全是 PaaS 的菜。
  • 提高服務的可用性 SLA。提高服務可用性 SLA 所需要的分佈式、高可用的技術架構和運維工具,也是 PaaS 層提供的。
  • 軟件能力的複用。軟件工程中的核心就是軟件能力的複用,這一點也完美地體現在 PaaS 平臺的技術上。

老實說,這些問題的關鍵程度已經到了能判斷一家依託技術的公司的研發能力是否靠譜的程度。沒有這些技術,依託技術拓展業務的公司幾乎沒有可能發展得規模很大。

在後面,我會在“極客時間我的付費專欄裏另外寫幾篇文章詳細地講一下分佈式服務化和 PaaS 平臺的重要程度。

最後,我還要說一下,爲什麼要早一點地進入這些新技術,而不是等待這些技術成熟了後再進入。原因有這麼幾個。

技術的發展過程非常重要。我進入 Go 和 Docker 的技術不能算早,但也不算晚,從 2012 年學習 Go,到 2013 年學習 Docker 到今天,我清楚地看到了這兩種技術的生態圈發展過程。讓我收穫最大的並不是這些技術本身,而是一個技術的變遷和行業的發展。

從中,我看到了非常具體的各種思潮和思路,這些東西比起 Go 和 Docker 來說更有價值。因爲,這不但讓我重新思考我已掌握的技術以及如何更好地解決已有的問題,而且還讓我看到了未來。我不但有了技術優勢,而且這些知識還讓我的技術生涯多了很多的可能性。

這些關鍵新技術,可以讓你拿到技術的先機。這些對一個需要技術領導力的個人或公司來說都是非常重要的。

一個公司或是個人能夠佔有技術先機,就會比其它公司或個人有更大的影響力。一旦未來行業需求引爆,那麼這個公司或是個人的影響力就會形成一個比較大的護城河,並可以快速地產生經濟利益。

近期,在與中國移動、中國電信以及一些股份制銀行進行交流的過程中,我已看到通訊行業、金融行業對於 PaaS 平臺的理解已經超過了互聯網公司,而我近 3 年來在這些技術上的研究讓我也從中受益非淺。

所以,Go 語和 Docker 作爲 PaaS 平臺的關鍵技術前途是無限的,我很慶幸趕上了這個浪潮,也很慶幸在 3 年前我就看到了這個趨勢,現在我也在用這些技術開發相關的技術產品,助力於爲高速成長的公司提供這些關鍵技術。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章