溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

阿里雷卷:Reactive 基金會的成立將對開發(fā)方式帶來哪些影響?

發(fā)布時間:2020-08-16 01:27:02 來源:網(wǎng)絡(luò) 閱讀:503 作者:阿里系統(tǒng)軟件技術(shù) 欄目:云計算

作者 | 趙鈺瑩

近日,Linux 基金會宣布成立 Reactive 基金會。對于 Reactive,各位開發(fā)者應(yīng)該并不陌生,尤其是 Node.js 開發(fā)者,但真正了解并意識到這件事情對開發(fā)方式帶來的影響的恐怕不多。本文,InfoQ 有幸第一時間對推動阿里巴巴成為該基金會初創(chuàng)成員的阿里巴巴資深技術(shù)專家雷卷進(jìn)行了獨(dú)家采訪,進(jìn)一步全面了解 Reactive 基金會的成立背景及其對開發(fā)方式的發(fā)展推動。

阿里雷卷:Reactive 基金會的成立將對開發(fā)方式帶來哪些影響?

Reactive 基金會是什么?

近日,Linux 基金會宣布啟動?Reactive 基金會,旨在加速發(fā)展構(gòu)建下一代網(wǎng)絡(luò)應(yīng)用程序的架構(gòu)。該基金會由阿里巴巴、Facebook、Lightbend、Netifi 和 Pivotal 等初始成員組成。涉及成功的開源規(guī)范 Reactive Streams 和 RSocket,以及編程語言實(shí)現(xiàn)。
雖然 Reactive 基金會剛剛成立,但 Reactive,也就是開發(fā)者常說的響應(yīng)式編程,已經(jīng)發(fā)展多年。2011 年,Reactive 就開始步入大眾視野,當(dāng)時微軟在 .Net?Framework 4.0 中內(nèi)置了Reactive 支持,稱之為 Reactive Extensions。2013 年,廣大 Java 開發(fā)者熟知的 RxJava 發(fā)布。接下來,Reactive 進(jìn)入飛速發(fā)展階段,先后出現(xiàn)了 RxRuby、RxJS(感興趣的開發(fā)者可以訪問?http://reactivex.io/??)等。
在技術(shù)的發(fā)展過程中,各大廠商也開始陸續(xù)跟進(jìn),比如 Reactive 宣言、Lightbend 的 Akka、Spring 的 Reactor 項(xiàng)目,Spring Reactive Web 等,新興的微服務(wù)框架基本都是 Reactive 的,比如 Vert.x,Micronaut 等。 很多開發(fā)者對 Reactive 的理解是開發(fā)包,比如 Android 中整合 RxJava、Spring 中的 Reactive Web。但是,RSocket 的出現(xiàn)將 Reactive 擴(kuò)展到分布式場景,讓所有應(yīng)用都可通過 Reactive 和 RSocket 的方式串聯(lián)起來。
至于為什么 Reactive 可以迅速被廣大開發(fā)者接受,比較典型的兩大價值如下:

  • 非阻塞和高并發(fā): Reactive 基于異步消息通訊,與 Node.js 的 Event Loop 設(shè)計類似,這樣的應(yīng)用沒有同步阻塞,系統(tǒng)吞吐率較高,相當(dāng)于提升了系統(tǒng)性能。之前,開發(fā)者采用線程池來實(shí)現(xiàn)并發(fā),現(xiàn)在通過 Actor 的消息模型,消除了獲取線程的等待,減少了大量線程的切換,CPU 利用率提升。此外,非阻塞和高并發(fā)對云上客戶尤為重要,CPU 利用率和 QPS 提升直接意味著賬單金額變少;
  • 函數(shù)式編程范式: 函數(shù)編程已經(jīng)越來越被開發(fā)者接受,擁有線程安全、高效執(zhí)行等優(yōu)點(diǎn),但是將這些函數(shù)串聯(lián)起來工作,需要一定范式和相關(guān)框架,這就是 Reactive 做的事情,比如標(biāo)準(zhǔn)的 Reactive Streams 規(guī)范,相關(guān)的開發(fā)框架 RxJava、Reactor 等,可讓函數(shù)編程更加簡單,而且代碼還是統(tǒng)一風(fēng)格,閱讀簡單的同時,Code Review 也非常容易。這就好比 Java 中有 Servlet 規(guī)范,眾多 Web 框架來簡化 Web 應(yīng)用開發(fā)一樣。如果在代碼中看到 filter、 map、flatMap、subscribe 等函數(shù)調(diào)用,基本就是 Reactive 的雛形。

Reactive 基金會的出現(xiàn)則無疑會將這一技術(shù)的價值在未來最大化。據(jù)雷卷透露,整件事情在 2018 年底就已啟動。當(dāng)時,阿里巴巴與 Netifi、Pivotal 和 FaceBook 在共同開發(fā) RSocket 相關(guān)開源產(chǎn)品。雖然,Reactive 這個詞經(jīng)常被提及,但是知道的開發(fā)者還是比較少,幾家公司覺得需要讓更多開發(fā)者知道這項(xiàng)技術(shù),因此有了成立基金會的想法。雷卷表示:

整個籌備過程花費(fèi)了不到半年的時間,主要得力于 Netifi 和 Pivotal 的支持,雖然很多人還不是特別了解 Reactive,但是 Linux Foundation 的很多人對技術(shù)方向的把握還是很到位的,所以在半年不到的時間就完成了 Reactive 基金會的創(chuàng)建。

大部分開發(fā)人員對這幾家初創(chuàng)成員公司都不陌生,比如微服務(wù)領(lǐng)域比較火的 Spring Framework 就是 Pivotal 在維護(hù)開發(fā)。之后,這幾家公司將共同參與到基金會的工作中,雷卷表示,Pivotal 主要致力于將 RSocket 與 Spring 生態(tài)進(jìn)行融合;Netifi 是 RSocket SDK 核心開發(fā)團(tuán)隊,同時有自己的 RSocket Broker 商業(yè)產(chǎn)品;Facebook 也致力于 RSocket 的開發(fā),其中,RSocket-cpp 和 RSocket-js 主要都是 Facebook 的工程師在維護(hù),同時,F(xiàn)acebook 內(nèi)部也在積極推動 RSocket 落地;Lightbend 可能很多開發(fā)者覺得陌生,但它是 Scala 語言背后的支持公司,同時也是響應(yīng)式編程的先行者,支持著?Akka 平臺的開發(fā);阿里巴巴主要集中于 RSocket 的開發(fā),基于 Reactive 和 RSocket 將分布式開發(fā)推向下一個高度,同時也在積極開發(fā)內(nèi)部的 RSocket 產(chǎn)品,該產(chǎn)品將為云上客戶提供服務(wù)。
Reactive 基金會成立的出發(fā)點(diǎn)就是推動 Reactive Streams 和 RSocket 的發(fā)展,這對后續(xù)的 Reactive 產(chǎn)品開發(fā)有非常大的指導(dǎo)意義,保證了這些 Reactive 產(chǎn)品在 API 和協(xié)議上都是兼容的,這對最終開發(fā)者而言非常重要。

具體來說,Reactive 基金會將首先推動 RSocket 1.0 規(guī)范的落地,包括各種語言的 SDK 開發(fā),這是一件工作量大且繁瑣的工作,各種語言、測試、性能等相應(yīng)工作都需要配合進(jìn)行。對開發(fā)者來說,Reactive 基金會將帶來很多價值,比如持續(xù)推動規(guī)范演進(jìn)、SDK 開發(fā)、文檔、會議支持等,同時也是各 Reactive 產(chǎn)品對開發(fā)者的介紹窗口。

Reactive 對開發(fā)方式帶來的改變?

事實(shí)上,Reactive 的出現(xiàn)對現(xiàn)有架構(gòu)帶來許多沖擊,比如基于事件驅(qū)動設(shè)計、流式處理、Service Mesh、無網(wǎng)絡(luò)依賴、安全等。相應(yīng)的,開發(fā)方式也會隨之發(fā)生改變,越來越多的框架開始全面支持 Reactive,比如 Spring WebFlux、Spring Data Reactive Repository 等;數(shù)據(jù)庫操作,通過 R2DDBC 方式已經(jīng)完全 Reactive 化;各種 NoSQL 產(chǎn)品,比如 Redis、MongoDB 等,早已支持 Reactive;RPC 和 HTTP REST API 在 RSocket 的影響下可能也會改變開發(fā)者對分布式通訊的認(rèn)識。在這些改變和沖擊中,最典型的就是代碼編寫和分布式通訊。

  • 代碼編寫: 我們之前過程式的代碼,將會被函數(shù)式編程和 Reactive 范式替代,之前代碼中大量的 if else, null 判斷,for 循環(huán),try/catch 等,都會極大地減少,取而代之是 Reactive 的各種標(biāo)準(zhǔn)操作,更加簡單明了,代碼量也會顯著減少。
  • 分布式通訊:之前分布式開發(fā),我們非常注重通訊細(xì)節(jié)和并發(fā)的處理,這個是核心,Reactive 和 RSocket 的介入,會讓開發(fā)門檻會降到最低,你幾乎不用關(guān)心通訊的底層細(xì)節(jié)、并發(fā)線程數(shù)處理、斷路保護(hù)等,這一切 Reactive 下的 RSocket 就給你解決啦,你可能只用關(guān)系接口設(shè)計和數(shù)據(jù)序列化?,F(xiàn)在的應(yīng)用越來越追求極致性能,CPU、GPU 和 FPGA 等全都上,如果沒有匹配的高效通訊協(xié)議,那么性能會打折不少,而這一切 RSocket 都可以幫你做到,而且更加簡單和優(yōu)雅,我們稍后也會介紹 RSocket。

可以說,即便開發(fā)者現(xiàn)階段不關(guān)注 Reactive,這一暗潮也已經(jīng)在涌動。與此同時,業(yè)界也存在很多 Reactive 和 Java 整合的一些技術(shù),這些技術(shù)讓 Reactive 更加成熟且穩(wěn)定:

  • Reactive 框架: RxJava, Reactor, Akka, Kotlin Coroutines & Flow
  • Web 框架: Spring WebFlux, Vert.x, Micronaut, Helidon
  • 數(shù)據(jù)層: Spring Data Reactive,支持 database, Redis, Cassandra, MongoDB 等等
  • 通訊層: RSocket, Reactor Netty, Reactor Aeron,Reactive Dubbo
  • 集成:? Reactor Kafka, Reactor RabbitMQ,RocketMQ 等

如今,越來越多的開發(fā)者開始習(xí)慣基于云平臺開發(fā)應(yīng)用。如上文所言,Reactive 的發(fā)展對云原生領(lǐng)域的發(fā)展也將起到很大作用。在采訪中,雷卷透露,云原生可讓應(yīng)用獨(dú)立于底層架構(gòu),保持中立,進(jìn)而可運(yùn)行在不同云廠商的底層架構(gòu)上。 但是,這一方式并沒有解決應(yīng)用之間如何進(jìn)行通訊的問題,雖然有基于 API 的協(xié)作,但是并沒有對 API 做出具體要求,尤其是基于消息的異步通訊。
目前最常見的應(yīng)用間通訊就是 RPC 和 HTTP REST API。這兩者對于 request/response 的通訊完全沒有問題,HTTP REST API 只是有一些性能問題,但是整體還好。不過,這些技術(shù)也都在向 Reactive 靠攏,比如 Spring 的 RestTemplate 轉(zhuǎn)向 WebClient,而 gRPC 也有對應(yīng)的 Reactive gRPC 等。對于新的架構(gòu)設(shè)計,比如 Streaming、Event Driven、IoT 和雙向通訊,傳統(tǒng)的 RPC 就有點(diǎn)力不從心,而這些正是 RSocket 所擅長的。
RSocket 協(xié)議經(jīng)過非常長時間的論證,當(dāng)然也借鑒了其他協(xié)議的思想,終于形成了目前開發(fā)者看到的 1.0.0 版本。RSocket 協(xié)議可以說是目前基于二進(jìn)制異步消息通訊比較完美的版本,克服了之前協(xié)議設(shè)計中的一些問題,比如 Client/Server 轉(zhuǎn)換到角色對等的方式;Pub/Sub 調(diào)整為更靈活的 Request/Stream;元數(shù)據(jù)和數(shù)據(jù)分離的方式,提供更靈活的消息路由和消息編碼;傳輸層可插拔,支持 TCP、WebSocket、UDP/Aeron、RDMA 等;同時支持多語言接入,比如 Java、Kotlin、Node、C++、Golang、Python、Rust 等。
目前,RSocket 已經(jīng)受到廣泛支持,Spring Framework 將在 5.2 版本內(nèi)置 RSocket,Spring Boot 2.2.0 版本也第一位支持 RSocket,其他 Spring Cloud Gateway,Spring Security 等都會支持 RSocket。正如 Linux 基金會戰(zhàn)略副總裁 Michael Dolan 所言,Reactive 基于消息驅(qū)動的方式可以保證云原生應(yīng)用所需的彈性,可伸縮性和響應(yīng)能力,而且這一切都不受其底層基礎(chǔ)架構(gòu)的影響。換言之,利用 Reactive 的特性,開發(fā)者不需要依賴云廠商或者 Infra 層就可以達(dá)到 Reactive 宣言所說的彈性、可伸縮性和響應(yīng)能力??梢哉f,云原生關(guān)注應(yīng)用的外在,比如打包部署、運(yùn)行環(huán)境、監(jiān)控等,而 Reactive 更關(guān)注應(yīng)用內(nèi)在,比如代碼運(yùn)行的更有效率,應(yīng)用間通訊更加自然流暢,一定的彈性和自我恢復(fù)能力等。

阿里巴巴 Reactive 實(shí)踐及開源計劃

作為 Reactive 基金會的初創(chuàng)成員之一,阿里巴巴一直給外界的印象都是內(nèi)部使用了大量 Java 編程語言,積累了大量的 Java 技術(shù)棧。但是,據(jù)雷卷透露,阿里巴巴內(nèi)部的一些產(chǎn)品很早就開始進(jìn)行?Reactive 化,比如開發(fā)者都了解的 Dubbo,就在做 Reactive 和 RSocket 的整合。但是,Reactive 化的過程還有很多問題需要解決,比如 SDK 的 BUG,適配內(nèi)部各種架構(gòu)體系。雷卷認(rèn)為,最大的問題就是如何將阻塞調(diào)整為非阻塞方式,比如數(shù)據(jù)庫操作,非異步的 RPC 調(diào)用。
作為基金會的一員,阿里巴巴會將內(nèi)部 Reactive 化的經(jīng)驗(yàn)共享給需要的開發(fā)者,主要貢獻(xiàn)將偏向于 RSocket,主要是分布式 Reactive 與云上的整合,因?yàn)榘⒗锇桶驮诎踩?、性能測試、SDK 開發(fā)上面都貢獻(xiàn)了非常多,同時結(jié)合云上的特點(diǎn)以及多租戶支持,讓云上用戶使用更簡單。? 在內(nèi)部,阿里巴巴也積極推動產(chǎn)品 Reactive 化,添加對 RSocket 支持等。
在技術(shù)革新的同時,阿里巴巴還在著力解決成本問題,如果開發(fā)者聽過 QCon 2019 北京大會上的 RSocket 演講,可能會對 Netifi 公司通過研發(fā) RSocket 幫助企業(yè)實(shí)現(xiàn)微服務(wù),在 40,000RPS 的場景下,Istio 需要每月 3495 美金,而 Netifi 每月只要 388 美金,同時性能提升 10 倍有印象,這對任何企業(yè)無疑都極具吸引力。從那次演講到現(xiàn)在已有半年之久,新推出的 RSocket Broker 已經(jīng)支持多租戶特性,而非獨(dú)占的方式,成本可再次降低 50% 到 70%,在 4 萬 RPS 場景下,每月只要支付 200 美元不到。
雖然阿里巴巴的 Reactive 進(jìn)程還在進(jìn)行中,但其帶來的成本價值已經(jīng)有所體現(xiàn)。雷卷表示,主要是同步轉(zhuǎn)異步后,應(yīng)用的總體性能提升,直接變化就是費(fèi)用花銷變少,這對其他用戶而言應(yīng)該也是一樣的。

結(jié)束語

對 Node.js 開發(fā)者來說,如今幾乎都是 Reactive,而對 Java 開發(fā)者來說,尤其是后端,目前還處于早期階段,目前遇到最大的問題是,Reactive 要求用戶調(diào)整代碼,這是最大的麻煩,開發(fā)者需要很長時間熟悉、了解和使用。而且相關(guān)整合還不完善,雖然 Spring 5.0 已經(jīng)包含 Reactive,但并不是所有都支持。雷卷表示,Spring 5.2 將從底層全面支持 Reactive,一旦該版本正式發(fā)布,開發(fā)者就可以體會到 Reactive 和 RSocket 開發(fā)的便捷性。
在開源方面,阿里巴巴正在研發(fā) RSocket Broker 產(chǎn)品,希望可以很快推出,讓更多開發(fā)者能夠更好地使用 Reactive,幫助云原生應(yīng)用解決異步通訊問題,讓所有組織和開發(fā)者可以更簡單、高效、安全,同時極大降低成本。
作者介紹:
雷卷,阿里巴巴資深技術(shù)專家,目前就職于阿里巴巴硅谷辦公室。在阿里巴巴工作 10 余年,具備 20 年 Java 開發(fā)經(jīng)驗(yàn),參加過多個內(nèi)部項(xiàng)目,從物流、旺鋪到國際部中間件等。目前主要的研究方式是 Reactive 和 RSocket,將 Reactive 和 RSocket 帶到應(yīng)用開發(fā)中,構(gòu)建更加簡單高效的架構(gòu)設(shè)計。雷卷同時也是 RSocket 的開發(fā)者,主要著重于 RSocket Broker 的開發(fā)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI