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