拜拜 HTTP,哈嘍 Reactive:解決云端的大問題
作者:Mahendra Ramsinghani 是總部位于硅谷的網(wǎng)絡(luò)安全種子基金 Secure Octane 的創(chuàng)始人。
阿里巴巴、Pivotal 和 Lightbend 加持,Reactive 大秀其在微服務(wù)界的投資回報!
Linux 基金會最近宣布設(shè)立 Reactive 基金會。該基金會的創(chuàng)始成員有阿里巴巴、Lightbend、Pivotal 和 Netifi。那么,這個 Reactive Kool-Aid 到底是什么?為什么所有這些公司都紛紛追捧它?
如果你認(rèn)可開發(fā)人員置身于云原生微服務(wù)世界這個前提,你就明白大多數(shù)應(yīng)用程序是分布式、有彈性的。計算分布在集群上,所有數(shù)據(jù)也是如此??赡苁菐讉€用戶,峰值狀態(tài)也可能是成千上萬個用戶。設(shè)計的系統(tǒng)其架構(gòu)需要應(yīng)對這種峰值情況。不過,微服務(wù)的秘密在于復(fù)雜性——資源、成本、性能和延遲的管理仍是個挑戰(zhàn)。
如果我們將任何應(yīng)用程序分解成數(shù)百個基本模塊(比如容器和微服務(wù)),那么最好有一種優(yōu)雅的方法來管理這些基本模塊。這些服務(wù)需要始終彼此聯(lián)系、交互數(shù)據(jù)并確??傮w性能很可靠。說起來容易做起來難。
“云端未解決的大問題”
據(jù) IBM 云的杰出工程師 Daniel Berg 聲稱:“網(wǎng)絡(luò)是云端未解決的問題……我們需要網(wǎng)絡(luò)成為云系統(tǒng)的一等公民。”為什么網(wǎng)絡(luò)仍是個問題?是因為我們需要重新思考新事物時,沿用舊方法嗎?我們曾經(jīng)設(shè)計的汽車裝有四輪單馬輕便馬車那又大又笨拙的輪子。從概念上來講,這聽起來不錯,但坐起來很不舒服。
在網(wǎng)絡(luò)協(xié)議的分層體系中,中間層是傳輸(傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議即 TCP/IP),而最頂層是應(yīng)用程序?qū)?。我們使用一種名為超文本傳輸?6?7?6?7 協(xié)議(或 HTTP)的協(xié)議來確保 Web 應(yīng)用程序可以彼此聯(lián)系。TCP 誕生于 1974 年,被稱為“繁瑣的協(xié)議”(chatty protocol)——就為了做一些基本的事情它要來回往返多次。一則坊間盛傳的 TCP 笑話證明了這一點。
HTTP 笑話
HTTP 誕生于 15 年后的 1989 年,用于在客戶端/服務(wù)器時代提供文檔。那個年代,我們所有人都用旋轉(zhuǎn)風(fēng)扇給臺式機(jī)散熱。我們會使用 Netscape 瀏覽器來打開網(wǎng)頁(超文本),Web 服務(wù)器會說:“等一下,讓我為你獲取該內(nèi)容。”
三十年后,計算層呈爆炸之勢,我們試圖用 HTTP 來應(yīng)對。在機(jī)器對機(jī)器通信大行其道、交互瞬間達(dá)數(shù)百萬次的時代,HTTP 是否適用?我們的移動設(shè)備、物聯(lián)網(wǎng)設(shè)備和邊緣設(shè)備并沒有頻繁請求大段大段的文本。而且,客戶端/服務(wù)器交互不如對點對交互來得多。但是網(wǎng)絡(luò)層一直困擾著我們,我們在努力確保:使用某些過時的方法,這些微服務(wù)可以留在原處。Pivotal 的首席軟件工程師 Stéphane Maldini 說:“多達(dá) 89% 的微服務(wù)架構(gòu)都基于 HTTP。”Pivotal 是 Reactive 基金會的創(chuàng)始成員之一。在此過程中,我們在效率方面做出很大的妥協(xié)。我們應(yīng)使用下一代 iPhone,卻仍使用兩個罐子和一根繩子進(jìn)行通信。
HTTP 不適合微服務(wù)
如果我們在微服務(wù)時代使用 HTTP,會面臨根本性的挑戰(zhàn)。首先,沒有流量控制——“這意味著數(shù)據(jù)如同從消防水帶噴涌出來,”Netifi 的聯(lián)合創(chuàng)始人 Robert Roeser 說。由于可以迅速傳輸數(shù)據(jù)、打開多個線程,我們最終構(gòu)建了控制功能,以確保應(yīng)用程序不會崩潰。
反應(yīng)式編程是架構(gòu)層面的根本性改變。它注重速度和性能。
需要有效地管理諸多方面,比如斷路器、重試邏輯和線程驚群(thundering herd,指大量進(jìn)程被喚醒,但只有一個進(jìn)程享有資源,常常導(dǎo)致系統(tǒng)凍結(jié))。在 HTTP 中,一切都是請求/響應(yīng),但是如果我們看一下應(yīng)用程序的簡單通知,我們不需要一直保持輪詢狀態(tài)。請求好比剛上路,急不可耐的孩子坐在后座上嚷個不停“我們到了嗎?”
如果我們使用錯誤的協(xié)議,這種低效的機(jī)制會導(dǎo)致計算資源嚴(yán)重浪費(fèi)。IBM 記錄下了微服務(wù)的低效率:
得出這個結(jié)論:微服務(wù)的性能比傳統(tǒng)的整體式模型低 79% 左右。研究人員總結(jié)道:“我們發(fā)現(xiàn),用于處理 HTTP 通信的 Node.js 和 Java EE 運(yùn)行時庫在微服務(wù)模型中消耗的 CPU 周期比在整體式模型中多很多。”
拜拜 HTTP,哈嘍 Reactive
Reactive 基金會隸屬 Linux 基金會,旨在加速下一代網(wǎng)絡(luò)技術(shù)。它采納反應(yīng)式編程框架(Reactive Programming Frameworks)的優(yōu)點,建立了社區(qū)。Reactive 基金會主席兼 Netifi 聯(lián)合創(chuàng)始人 Ryland Degnan 還是 Netflix 邊緣平臺會員的時候?qū)?HTTP 帶來的痛苦深有體會。
Ryland 比大多數(shù)人更了解規(guī)模、延遲和用戶體驗。Netflix 平臺會收到來自數(shù)億會員的數(shù)十億個請求。他說:“我們生活在多維世界中,用戶體驗至關(guān)重要。開發(fā)人員必須處理以下三個方面:(a)部署(b)框架和(c)協(xié)議。時斷時續(xù)的連接不可接受。為什么我們不能從上次停止的地方繼續(xù)下去呢?如果我們單單做到這一點,可以減少我們基礎(chǔ)設(shè)施 90% 的部分。”
的確,F(xiàn)acebook 已采用 RSocket 來減少移動網(wǎng)絡(luò)中繼段(hop)上的斷開連接,并大大精簡邊緣基礎(chǔ)設(shè)施。Facebook 的軟件工程師 Steve Gury 在 SpringOne Platform 上發(fā)言時稱:“未來是R-Socket 的天下。”
反應(yīng)式編程(Reactive programming)是架構(gòu)層面的根本性改變。它注重速度和性能。Reactive 的主要優(yōu)勢之一是異步I/O,這可以將邊緣基礎(chǔ)設(shè)施精簡幾個數(shù)量級。
阿里云的開發(fā)倡導(dǎo)者 Andy Shi 是 Reactive 基金會的創(chuàng)始成員之一。他說:“阿里巴巴有數(shù)千名開發(fā)人員,我們是世界上最大的電子商務(wù)平臺之一。我們采用微服務(wù)時看到計算的使用率只有 10% 左右,因此往服務(wù)網(wǎng)格投入更多的基礎(chǔ)設(shè)施不是解決之道。pod 使用 REST API 彼此聯(lián)系,這不是出路。”
REST API 需要多個端點和多趟往返才能獲取數(shù)據(jù)。十多年來,Reactive 基金會的另一位創(chuàng)始成員、Lightbend 的代理首席技術(shù)官 Viktor Klang 一直在大力宣傳 Reactive,他感覺現(xiàn)在時機(jī)終于到來。他說:“我們的系統(tǒng)需要在所需的時間段內(nèi)獲得結(jié)果。試想一下,如果你可以計算出重大問題(比如生命意義)的答案,但如果答案在你死后才獲得,系統(tǒng)就是失敗的。”
比較服務(wù)網(wǎng)格和使用場景
如果說 Istio 是最適合平移的 18 輪重型卡車,RSocket 就是法拉利,注重速度與優(yōu)雅。專家們預(yù)示將來兩者可能會共存。不過在一些應(yīng)用領(lǐng)域(比如物聯(lián)網(wǎng)使用場景),RSocket 顯然有優(yōu)勢。Istio 提供負(fù)載均衡、服務(wù)發(fā)現(xiàn)、日志記錄和流量管理等功能,不過開銷很大。
在研究中,Netifi 相比之下能夠處理數(shù)量多 16 倍的請求,吞吐量提高 4 倍,同時延遲只有三分之一——也就是說,吞吐量提高了 372%,延遲縮短了 300%。戴爾科技資本公司的投資者 Creighton Hicks 說:“Netifi 有可能如同思科——微服務(wù)界的路由器。”
Istio 由谷歌、IBM 和 Lyft 發(fā)起,因此它是強(qiáng)大的老牌技術(shù),品牌知名度很高。但是當(dāng)阿里巴巴和 Facebook 之類的公司開始展示 RSocket 的投資回報時,好戲剛剛開始上演。在倫敦最近的一次演講中,支持 Ractive 的陣營一派興奮表情。Facebook 的軟件工程師 Ondrej Lehecka 和 Andy Shi 談到了 RSocket 如何應(yīng)對現(xiàn)實世界的架構(gòu)挑戰(zhàn)。Shi 說:“RSocket 旨在在微服務(wù)和物聯(lián)網(wǎng)設(shè)備當(dāng)?shù)赖臅r代大放異彩?;?RSocket 協(xié)議和 Reactive Streams 構(gòu)建的項目將顛覆微服務(wù)架構(gòu)生態(tài)圈。Reactive 基金會是這些令人興奮的項目的核心組織。”