每日最新頭條.有趣資訊

解讀2018:我們處在一個什麽樣的技術浪潮當中?

作者 | 徐川

編輯 | 小智

最近經濟寒冬的說法越來越多,身邊的互聯網企業裁員的也有不少,越是寒冬,我們越需要了解趨勢,找準前進的方向。過去幾年,互聯網各種“風口”此起彼伏,到底哪些才是真正的趨勢?這篇文章裡我將試圖分析目前互聯網技術的發展,找出它們背後的原因和邏輯。

如果你長期跟進本領域的前沿技術,你會發現近十年來互聯網技術發生了非常大的變化,這種變化幾乎在每一個領域裡發生:

在軟體架構領域,經歷了從單體應用到 SOA 再到微服務;

在雲計算領域,經歷了從虛擬機到容器;

在數據庫領域,從關係數據庫到 NoSQL 再到 NewSQL;

在大數據領域,從批處理到流處理;

在運維領域,從手工運維到 DevOps、AIOps;

在前端領域,從 jQuery 到 React 等三大框架;

……

除此之外,還有一些新興的領域如 AI、區塊鏈,從不受重視到成為顯學,開啟了一波又一波的風口。

單個去看這些領域的發展,會覺得紛繁雜亂沒有頭緒,但如果從整體上去看,會發現它們相互之間有聯繫,它們的發展源於一種共同的推動力,遵循著相似的邏輯。

如果要對這個推動力、對今天這個技術浪潮起一個名字,在當前階段我覺得可以用“雲原生”,但這個短語被過度使用在各種行銷語境中,它的定義會發生偏離,所以後文我不會用這個短語,而是用真正的雲計算這句話。

我們當前技術浪潮的真實含義,就是我們正在走向真正的雲計算時代,其它領域的發展皆由此而來,如果要更具體一點,就是:

雲計算的技術逐漸發展成為它本來該有的模樣;

以及與這樣的雲所匹配的軟體架構;

以及與這樣的架構所匹配的開發流程與方法論。

下面,我會分析幾個主要的技術領域,從它們的發展歷程來論述。

1

雲計算:從虛擬化到容器到 Serverless

先從雲計算說起。

2005 年亞馬遜發布了 AWS,算是拉開了雲計算的序幕。但是,在很長一段時間裡雲計算都沒有兌現自己的“自動擴容、按使用付費”的宣傳語。

雲計算最重要的技術是分布式計算和分布式存儲,分布式計算方面,最開始的技術是虛擬化,也就是所謂的“Software defined xxx”,通過對計算 / 存儲和網絡資源的虛擬化,同時能夠給用戶任意分配資源。但這裡面一開始做的最好的只有檔案存儲這一塊,AWS S3 及類似的對象存儲產品給人們帶來了雲時代的一些實際的體驗,但雲伺服器則還是走回了賣伺服器的老路。

當然, 這裡的雲伺服器和傳統伺服器相比還是有優勢的,至少運維不需要千里迢迢跑到機房去排查問題。但和我們想要的雲服務相比還差的很遠,它只是傳統技術在過渡到雲時代的替代品。虛擬化技術新建伺服器耗時長,在擴容方面限制很大,容器技術誕生後,才終於解決了這一問題。但現在一些 MicroVM 開始出現,比如 AWS 剛剛發布的 FireCracker,試圖融合虛擬機和容器的優點,這也是當前雲計算技術的一個重要關注點。

分布式存儲方面,分為檔案和數據庫,檔案通過對象存儲的方式很早就解決了,數據庫則面臨漫長的發展過程,傳統的數據庫需要向分布式架構轉變,同時你會發現雲計算廠商成為了數據庫的研發主力,這些新數據庫天生就是分布式,或者天生就支持雲計算特性的。

在雲計算的發展過程中,有一個分支是 PaaS,最早是 2007 年推出的 Heroku,從形態上來說,它是一個 App Engine,提供應用的運行環境。PaaS 的理念被認為更貼近真正的雲計算,如果你使用虛擬化的雲伺服器,你仍然要自己負責應用分發、部署和運維,要與各種底層接口、資源打交道,在 PaaS 上,這些都不用管了,你只需要把應用上傳到雲端就行。

但是,之前的 PaaS 體驗較差,容易造成平台綁定,難以支持大型應用,所以並沒有成為主流。這些問題直到 Kubernetes 出現後才得以解決。

在 2015 年之前,OpenStack 是雲計算的主流技術,很多公司包括 IBM/ 紅帽都在它身上投入重注。然而,隨著曾經過分天真樂觀的一些公司如思科,它們試圖基於 OpenStack 進入公有雲市場,但在現實面前迅速敗退,以及主要參與者 Nebula 的關閉,市場的信心遭遇重挫。再加上 Docker 和 Kubernetes 的快速崛起,OpenStack 的聲勢已經大不如前了。

然而在這麽多廠商的支持下 OpenStack 是否就無敵了呢?看似緊密的社區與廠商之間的關係,在容器這個新的技術熱點面前被輕鬆擊破。廠商不再是 Pure Play OpenStack,社區貢獻排名也不再提及。

——唐亞光 《OpenStack 七年盤點,熱潮褪去後的明天在哪?》

但是,Kubernetes 還是太底層了,真正的雲計算並不應該是向用戶提供的 Kubernetes 集群。

2014 年 AWS 推出 Lambda 服務,Serverless 開始成為熱詞,從理論上說,Serverless 可以做到 NoOps、自動擴容和按使用付費,也被視為雲計算的未來。但是,Serverless 本身有一些問題,比如難以解決的冷啟動性能問題,因此,圍繞 Serverless 的研發,以及將 Serverless 和容器技術融合也是當前的前沿課題。

Serverless 是我們過去 25 年來在 SaaS 中走的最後一步,因為我們已經漸漸將越來越多的職責交給了服務提供商。

——Joe Emison 《為什麽 Serverless 比其他軟體開發方法更具優勢》

2

架構:微服務、Service Mesh 和 Serverless

雲計算為應用打造了分布式的基礎設施,但是,如果應用還是以傳統的單體應用的思路開發,則雲計算意義並不大。

這些年裡,軟體架構逐漸從 SOA 進化到微服務,很多人認為微服務是一種細粒度的 SOA,在去掉了 SOA 中的 ESB 之後,微服務變得更加靈活、性能更強。但是,實施微服務需要一些前提。

Martin Fowler 曾經總結過微服務實施的前提包括:

計算資源的快速分配

基本的監控

快速部署

這基本就是 Kubernetes 所起到的主要作用,雖然如 Spring Cloud、Dubbo 微服務框架在各方面已經非常完善,但隨著雲原生計算基金會的壯大,基於 Kubernetes 的微服務在社區中的熱度越來越高,也開始有很多公司開始利用這一套技術棧來構建微服務。

到 2016 年,Service Mesh 開始引起社區的注意,Kubernetes 加上 Service Mesh,再加上 CNCF 的一些開源項目,基於 k8s 的微服務技術棧基本就完善了。2018 年 Istio 1.0 發布,更是為這股浪潮加了一把火,未來的微服務將是 k8s 和 Service Mesh 的天下。

微服務正在逐漸走向巔峰的過程中,但它的挑戰者已經出現。Serverless 或者說 FaaS 最開始只是 AWS 推出的一個功能,但隨著社區和業界的跟進,逐漸有人將其認為是微服務的進化。其邏輯也很簡單,從 SOA 到微服務是一個服務粒度逐漸拆分得更小的過程,FaaS 裡的 Function 可以視為更小的、原子化的服務,它天然的契合微服務裡面的一些理念。

當然,關於 Serverless 如何融入到現有架構,目前並沒有成熟的經驗,Serverless 本身也存在一些問題,但毫無疑問這是業界關注的重點。

3

數據庫:從 NoSQL 到 NewSQL

在過去幾年,數據庫的發展同樣令人矚目。

2009 年 MongoDB 開源,掀開了 NoSQL 的序幕,一時之間 NoSQL 的概念受人追捧,MongoDB 也因為其易用性迅速在社區普及。NoSQL 拋棄了傳統關係數據庫中的事務和數據一致性,從而在性能上取得了極大提升,並且天然支持分布式集群。

然而,不支持事務始終是 NoSQL 的痛點,讓它無法在關鍵系統中使用。2012 年,Google 發布了 Spanner 論文,從此既支持分布式又支持事務的數據庫逐漸誕生,以 TiDB、蟑螂數據庫等為代表的 NewSQL 身兼傳統關係數據庫和 NoSQL 的優點,開始嶄露頭角。

從目前已有的 SQL 數據庫實現方案來看,NewSQL 應該是最貼近於雲數據庫理念的實現。NewSQL 本身具有 SQL、ACID 和 Scale 的能力,天然就具備了雲數據庫的一些特點。但是,從 NewSQL 到雲數據庫,依然有很多需要挑戰的難題,比如多租戶、性能等。

本來事情發展到這裡就結束了,但 2014 年亞馬遜又推出一個重磅炸彈:基於新型 NVME SSD 虛擬存儲層的 Aurora,它實現了完全兼容 MySQL(甚至連 bug 都兼容)的超大單機數據庫,同時在性能上高出 5 倍以上。

Amazon Aurora 讀後感:

https://zhuanlan.zhihu.com/p/30159571

另外,各種不同用途的數據庫也紛紛誕生並取得了較大的發展,比如用於 LBS 的地理資訊數據庫,用於監控和物聯網的時序數據庫,用於知識圖譜的圖數據庫等。

可以說,數據庫目前處於一個百花齊放的階段,而由於雲廠商的努力,基本上新的數據庫都支持自動擴容、按使用付費的雲計算特徵。

4

大數據:從批處理到流處理

Google 在 03-06 年發布了關於 GFS、BigTable、MapReduce 的三篇論文,開啟了大數據時代。在發展的早期,就誕生了以 HDFS/HBase/MapReduce 為主的 Hadoop 技術棧,並一直延續到今天。在這當中,不少組件都是可替換的,甚至有的發生了換代。這其中,最重要的換代就是處理引擎。

最開始大數據的處理大多是離線處理,MapReduce 理念雖然好,但性能捉急,新出現的 Spark 抓住了這個機會,依靠其強大而高性能的批處理技術,順利取代了 MapReduce,成為主流的大數據處理引擎。

隨著時代的發展,實時處理的需求越來越多,雖然 Spark 推出了 Spark Streaming 以微批處理來模擬準實時的情況,但在延時上還是不盡如人意。2011 年,Twitter 的 Storm 吹響了真正流處理的號角,而 Flink 則將之發揚光大。

到現在,Flink 的目光也不再將自己僅僅視為流計算引擎,而是更為通用的處理引擎,開始正面挑戰 Spark 的地位。

Apache Flink 已經被業界公認是最好的流計算引擎。然而 Flink 的計算能力不僅僅局限於做流處理。Apache Flink 的定位是一套兼具流、批、機器學習等多種計算功能的大數據引擎。在最近的一段時間,Flink 在批處理以及機器學習等諸多大數據場景都有長足的突破。

——王紹翾(大沙)《不僅僅是流計算:Apache Flink實踐》序

Hadoop 本身也遭遇了 Kubernetes 的挑戰。Hadoop 本身包括專用於處理大數據的編排系統如 Yarn 等,但如 Spark/Presto/Kafka 等最重要的 Hadoop 技術已經可以在 Kubernetes 上運行,使用 Kubernetes 來運行大數據技術棧,可以更好的與其它業務集成。遭遇挑戰的表現之一就是 Hadoop 技術棧的兩家主要提供商,Cloudera 和 Hortonworks 最近決定合並,緩慢的增長表明市場上已經容不下兩家提供商了。

Will Kubernetes Sink the Hadoop Ship?:

https://thenewstack.io/will-kubernetes-sink-the-hadoop-ship/

5

運維:從手工運維到 DevOps

運維在過去幾年遭遇了雲計算技術的強烈衝擊。那些依賴雲計算提供商的公司,它們的運維的職責大大削弱,而自研雲技術的公司裡的運維則要求大大提高,過去的經驗已經難以適用了。

這其中最重要的變化就是 DevOps 的出現,運維的身份職責發生了轉變,它不再是專門跑任務腳本或者與機器打交道的人,而是變成了 OpenStack 或者 Kubernetes 的專家,通過搭建 / 管理相關的分布式集群,為研發提供可靠的應用運行環境。

DevOps 更重要的方面還是改變了應用交付的流程,從傳統的搭火車模式走向持續交付,應用的架構和形態改變了,其方法論也隨之而改變。DevOps 和持續交付也被認為是雲原生應用的要素。

至於 AIOps 是 DevOps 在實踐 AI 過程中的一些應用,稱不上是範式的改變,AI 在運維領域還遠遠取代不了人的作用。

6

前端:前後端分離

前端在過去幾年的變化同樣稱得上是翻天覆地,2008 年 Nodejs 的出現徹底激發了前端的生態,將 JavaScript 的疆域拓展到服務端和桌面,最終催生出大前端的概念。

如果純粹看傳統的前端開發的變化,不僅主流技術從 jQuery 轉移到三大框架,更重要的是 SPA 和前後端分離的出現。

SPA 代表著前端的應用化,也就意味著胖客戶端,部分業務邏輯可以從服務端轉移到客戶端完成。前後端分離更是將前端從後端獨立出來,劃定了領域邊界。後端對前端來說,成為了數據層,只要接口能夠正確返回數據,前端並不關心後端是如何做到的。

事實上,胖客戶端的轉變正好與後端的進化方向吻合。無論是微服務還是 Serverless,都強調無狀態,這意味著你不應該用後端去生成有狀態的 UI,而是讓客戶端自行處理狀態。

為了應對越來越大型的客戶端代碼,前端發展出的技術包括 TypeScript、Redux/MobX、WebAssembly、WebWorker 等,這些也是前端重點關注的技術。

7

AI:互聯網的新基礎設施

現代的 AI 是基於大數據和機器學習的,在很多公司裡大數據和 AI 屬於同一個數據科學的團隊。在過去兩年,AI 已經用各方面的成績證明它可以成為整個互聯網的基礎設施之一,幫助讓我們的互聯網更加的智能化。

如果把 2016 年的 AlphaGo 當做現代 AI 的起點,那麽 AI 發展的歷史其實很短。學術界還在研究怎麽提升 AI 的算法,各個公司則是急於將 AI 應用到生產環境。

AI 從感知層大致分為兩大塊,一塊是電腦視覺,這一塊已經比較成熟,無論是人臉識別、物體檢測、運動檢測都已經能用於實際場景中。另一塊則是 NLP,雖然微軟、Google 等宣稱它們的 AI 翻譯準確率已經極高,但實際上仍然不太好用,而多輪會話的問題沒有解決,Chatbot 還是難以與人展開正常對話。

總之,真正的通用人工智能 AGI 離我們還遠,至少現在還看不到頭緒。AI 雖然在炒作中顯得有些過熱,但其技術和應用是真實的。

值得注意的是,在 2018 年,國內幾家涉及公有雲業務的公司紛紛調整架構,將之前的雲計算部門更新為智能雲計算部門:

9 月 30 日,騰訊架構調整,新成立雲與智慧產品事業群;

11 月 26 日,阿里集團架構調整,阿里雲事業群更新為阿里雲智能事業群;

12 月 18 日,百度調整架構,將之前的智能雲事業部更新為智能雲事業群。

雲廠商們之所以將 AI 作為它們的頂級戰略並與雲計算放在一起,是因為 AI 本身需要強大的、專門定製的基礎設施,是雲的一個非常適合的場景;同時也因為 AI 技術有一定門檻,可以作為自身雲計算差異化的一個點。總之,這些雲廠商通過 AI 來賣它們的雲服務。

8

區塊鏈:不確定性

2018 年的區塊鏈無疑是最有爭議的話題,這裡拋開那些炒作與騙局,可以看到區塊鏈技術在 2018 年有很大的發展。

具體可分為兩方面:

一方面是公鏈上一些痛點解決方案的探索和突破。包括比 POW 更好的共識機制、並發交易性能、數據存儲和處理、跨鏈交易等等。當然,問題還遠遠沒有得到解決。由於利益牽扯太多,這一領域也沒有公認的主流解決方案。

另一方面是聯盟鏈的逐漸成熟,其中代表技術為超級账本,一部分早期採用者在探索聯盟鏈的適用場景,一部分則是做起賣水的生意,推出 BlockChain as a Service。

在現在這個時刻,區塊鏈的未來有太多的不確定性了,無法進行預測,所以這裡不再多談。

9

物聯網與邊緣計算:為何發展不起來

物聯網在過去幾年一直不溫不火,似乎一直在炒作中,但真正有影響力的產品和應用比較少。曾經炒過一陣的開發板最終回歸為極客的玩具。物聯網本身的技術,除了各種通信協定和嵌入式作業系統和開發框架之外,近兩年炒的最火的就是邊緣計算了,然而,邊緣計算也是炒作的重災區。

事實上,邊緣計算的定義並沒有清晰,甚至連邊緣是什麽都沒有共識。有的說終端節點、智能設備是邊緣,有的說 CDN 是邊緣,有的說路由器、交換機是邊緣,還有的說未來的 5G 基地台是邊緣。

邊緣計算的技術目前只看到一個 EdgeX Foundry,然而在該項目裡目前還看不到一個有代表性的重量級的技術,更多是一些廠商搶佔風口的佔位行為。

為什麽會這樣呢?其實好理解,因為物聯網是一個很好預測的未來趨勢。

從互聯網到移動互聯網,是一個不斷擴張的過程,不但終端節點大量增加,而且每時每刻都在線,如果將這個邏輯延伸一下就是物聯網了,終端從智能手機變成任何可聯網的設備。

正因為這是大家都看得到的趨勢,所以所有的廠商都提前在物聯網布局,試圖成為下一個領先者。

但互不退讓的結果,就是陷入三個和尚沒水吃的境地。歷史上,NFC 移動支付和物聯網通信協定都有這種遭遇:

NFC 方面,在中國,銀聯主推 miniSD 卡的 NFC 方案,而運營商主推帶 NFC 的 sim 卡,而手機廠商更願意將 NFC 功能直接集成至手機中。在國外,美國三大運營商推出基於 NFC 的移動支付功能 Isis,蘋果谷歌各自有自己的 NFC 錢包,而 Android 陣營的手機也多半將 Android Pay 功能替換為自家的支付功能。

物聯網通信協定方面,WiFi、藍牙、RFID、ZigBee,背後代表了不同的利益方,而在包括工業物聯網等行業之後,各種私有通信協定多達數十種。到現在我們都沒有辦法簡單的將兩個任意兩個支持聯網的設備相互連接,可以想象,物聯網的發展還任重而道遠。

智慧城市是物聯網之集大成者,然而其概念從誕生到現在數十年了,我們沒能看到一個成功的落地案例。

所以,物聯網的發展不會像移動互聯網一樣一蹴而就,而是通過在共享單車上的應用,這樣一個個案例積累起來逐漸進入我們的生活。

10

從當下的技術看未來

看了上面的盤點,你會發現雲原生或者說真正的雲計算是我們當下互聯網技術發展的大趨勢,在這個大趨勢之下,推動不同的領域進行相應的發展。

其中的代表技術,就是機器學習、Kubernetes、Serverless,它們是當下這個時代技術發展的主旋律,如果你認同這個觀點,你可以得出這樣一個預測:

傳統的應用開發將走向以容器、Serverless 為代表的真正的雲計算,而隨著終端和雲的更深度的集成、物聯網的發展、智能化的提升,雲和端的界限會變得模糊,我們和理想中的互聯網會更加接近。

資訊技術的革命將把受製於鍵盤和顯示器的電腦解放出來,使之成為我們能夠與之交談,與之一道旅行,能夠撫摸甚至能夠穿戴的對象。這些發展將變革我們的學習方式、工作方式、娛樂方式—一句話,我們的生活方式。

——尼葛洛龐帝《數字化生存》

《數字化生存》是 1996 年出版的,對於理想的互聯網以前我們只是憑空的想象,而現在我們知道通過怎樣的技術發展路徑能抵達這個理想。

11

技術的本質與技術發展的邏輯

技術在不斷的推陳出新,令人眼花繚亂,但如果抓住了這些技術的本質,會發現太陽底下並沒有新鮮事。

如果將上面的各個領域的重要技術變革提煉一下,會發現其中的一些有共同點:

虛擬化:將硬體資源虛擬為軟體資源,然後進行統一調度和管理。

隔離:從虛擬機到容器,再到虛擬機與容器融合,隔離的技術定義了雲的形態。

解耦:無論是後端的微服務、前端的前後端分離、組件化等等,都是將關注點分離,解耦合的過程。

編排:大量不同的服務、任務,讓他們組成一個整體,相互間能良好的協作。

智能化:讓服務個性化,或者讓自動化替代以前需要人工完成的事情。

實時化:計算和處理在極短時間內完成,從而實時的給予反饋。

當然,其中會有一些遺漏,或者有些你並不認同,但我想表達的是,這些技術存在一些共同的本質,它們是不同的領域技術發展的共同邏輯。

12

再進一步:是什麽在推動軟體的發展?

上面我們已經知道了軟體的常規發展趨勢,可是,如何預測軟體的顛覆式創新?要預測這個,我們需要更加深入去挖掘軟體進步的源頭。

軟體並不是憑空發展起來的,它必須要運行在各種硬體上,軟體的發展,也離不開硬體的支持。

或者說,正是硬體的不斷更新和變革,支撐了軟體的發展進步。雲計算的誕生,正是源於大型機已經無法支撐高並發,才讓人們轉而採用一般硬體和虛擬化、分布式的軟體技術。

軟體的顛覆式創新,一定是在硬體支持的基礎上,隨著現有的軟體架構對現有硬體能力的挖掘,再發生顛覆的可能性已經較小了。

當然,這並不是說不存在,如 Docker 和比特幣的誕生,都沒有利用特別新的硬體能力,更多的是現有軟體發展積累到一定程度的質變。

但軟體創新更多的可能性,則在於硬體的顛覆上。

AWS 推出的 Aurora 數據庫就是一個很好的例子,它的誕生正是基於非易失性存儲技術的重大進步。現在的趨勢是,硬體的創新體現在軟體上的時間會越來越短。

英特爾、NVIDIA研發的最新芯片,也都會被雲廠商第一時間訂購,充分利用硬體更新帶來的性能提升。

最近,還有一個新趨勢是軟體廠商反過來驅動硬體的進步,谷歌、阿里、華為等都開始自研用於雲和終端的芯片。

如果要預測軟體的發展,我們不能不去看硬體可能帶來的提升,這裡我們從軟體運行需要的三大資源入手:

計算:AI 對於計算的特殊需求,催生了相關芯片的研發。而更多非通用性芯片將推動物聯網和邊緣計算的發展。而在遠處忽隱忽現的量子計算,一旦能普及,也必將產生顛覆。

存儲:Nano Flash 類非易失性存儲還有提升的空間,在雲和端的利用也沒有普及。如果非易失性存儲能在記憶體領域有所突破,對於軟體架構必將帶來另一次顛覆。

網絡:網絡方面,WiFi 技術即將進入第六代,帶來擁擠場合的大幅性能提升;藍牙進入第五代,連接距離將提升至 300 米;更重要的則是 5G,相較於 4G 數百倍的數據傳輸速度和低至幾毫米的延時,讓很多應用都有了更大的想象空間。

對於技術發展的總結基本就到這裡了。

選擇技術是有風險的,如果是一家做 To B 或者 To C 的公司,選擇了非主流的技術,只是會演變成長期的技術負債,但如果是一家面向開發者的雲計算公司,選擇錯了技術則幾乎注定了之後的衰落,無論是堅持下去還是切換成主流技術,都會因為錯過最佳時機而步步艱難。這也是近年來新技術受到追捧的一個原因。

這種現象也導致了技術迭代的速度越來越快,開發者只要幾年不關注新技術,就有一種被世界拋棄的錯覺,於是每個人都很焦慮。

我希望用這篇文章,幫助你梳理技術的發展,知道正在發生什麽,以及將會發生什麽。只要知道了這些,想必不會那麽焦慮了。

當然,由於個人能力所限,文章中不免有錯漏之處,歡迎討論交流。

對於當下的技術發展以及未來的技術趨勢,你有什麽可以分享的嗎?歡迎留言告訴我們!

獲得更多的PTT最新消息
按讚加入粉絲團