您好,登錄后才能下訂單哦!
作者 | 趙鈺瑩
近日,Linux 基金會宣布成立 Reactive 基金會。對于 Reactive,各位開發者應該并不陌生,尤其是 Node.js 開發者,但真正了解并意識到這件事情對開發方式帶來的影響的恐怕不多。本文,InfoQ 有幸第一時間對推動阿里巴巴成為該基金會初創成員的阿里巴巴資深技術專家雷卷進行了獨家采訪,進一步全面了解 Reactive 基金會的成立背景及其對開發方式的發展推動。
近日,Linux 基金會宣布啟動?Reactive 基金會,旨在加速發展構建下一代網絡應用程序的架構。該基金會由阿里巴巴、Facebook、Lightbend、Netifi 和 Pivotal 等初始成員組成。涉及成功的開源規范 Reactive Streams 和 RSocket,以及編程語言實現。
雖然 Reactive 基金會剛剛成立,但 Reactive,也就是開發者常說的響應式編程,已經發展多年。2011 年,Reactive 就開始步入大眾視野,當時微軟在 .Net?Framework 4.0 中內置了Reactive 支持,稱之為 Reactive Extensions。2013 年,廣大 Java 開發者熟知的 RxJava 發布。接下來,Reactive 進入飛速發展階段,先后出現了 RxRuby、RxJS(感興趣的開發者可以訪問?http://reactivex.io/??)等。
在技術的發展過程中,各大廠商也開始陸續跟進,比如 Reactive 宣言、Lightbend 的 Akka、Spring 的 Reactor 項目,Spring Reactive Web 等,新興的微服務框架基本都是 Reactive 的,比如 Vert.x,Micronaut 等。 很多開發者對 Reactive 的理解是開發包,比如 Android 中整合 RxJava、Spring 中的 Reactive Web。但是,RSocket 的出現將 Reactive 擴展到分布式場景,讓所有應用都可通過 Reactive 和 RSocket 的方式串聯起來。
至于為什么 Reactive 可以迅速被廣大開發者接受,比較典型的兩大價值如下:
Reactive 基金會的出現則無疑會將這一技術的價值在未來最大化。據雷卷透露,整件事情在 2018 年底就已啟動。當時,阿里巴巴與 Netifi、Pivotal 和 FaceBook 在共同開發 RSocket 相關開源產品。雖然,Reactive 這個詞經常被提及,但是知道的開發者還是比較少,幾家公司覺得需要讓更多開發者知道這項技術,因此有了成立基金會的想法。雷卷表示:
整個籌備過程花費了不到半年的時間,主要得力于 Netifi 和 Pivotal 的支持,雖然很多人還不是特別了解 Reactive,但是 Linux Foundation 的很多人對技術方向的把握還是很到位的,所以在半年不到的時間就完成了 Reactive 基金會的創建。
大部分開發人員對這幾家初創成員公司都不陌生,比如微服務領域比較火的 Spring Framework 就是 Pivotal 在維護開發。之后,這幾家公司將共同參與到基金會的工作中,雷卷表示,Pivotal 主要致力于將 RSocket 與 Spring 生態進行融合;Netifi 是 RSocket SDK 核心開發團隊,同時有自己的 RSocket Broker 商業產品;Facebook 也致力于 RSocket 的開發,其中,RSocket-cpp 和 RSocket-js 主要都是 Facebook 的工程師在維護,同時,Facebook 內部也在積極推動 RSocket 落地;Lightbend 可能很多開發者覺得陌生,但它是 Scala 語言背后的支持公司,同時也是響應式編程的先行者,支持著?Akka 平臺的開發;阿里巴巴主要集中于 RSocket 的開發,基于 Reactive 和 RSocket 將分布式開發推向下一個高度,同時也在積極開發內部的 RSocket 產品,該產品將為云上客戶提供服務。
Reactive 基金會成立的出發點就是推動 Reactive Streams 和 RSocket 的發展,這對后續的 Reactive 產品開發有非常大的指導意義,保證了這些 Reactive 產品在 API 和協議上都是兼容的,這對最終開發者而言非常重要。
具體來說,Reactive 基金會將首先推動 RSocket 1.0 規范的落地,包括各種語言的 SDK 開發,這是一件工作量大且繁瑣的工作,各種語言、測試、性能等相應工作都需要配合進行。對開發者來說,Reactive 基金會將帶來很多價值,比如持續推動規范演進、SDK 開發、文檔、會議支持等,同時也是各 Reactive 產品對開發者的介紹窗口。
事實上,Reactive 的出現對現有架構帶來許多沖擊,比如基于事件驅動設計、流式處理、Service Mesh、無網絡依賴、安全等。相應的,開發方式也會隨之發生改變,越來越多的框架開始全面支持 Reactive,比如 Spring WebFlux、Spring Data Reactive Repository 等;數據庫操作,通過 R2DDBC 方式已經完全 Reactive 化;各種 NoSQL 產品,比如 Redis、MongoDB 等,早已支持 Reactive;RPC 和 HTTP REST API 在 RSocket 的影響下可能也會改變開發者對分布式通訊的認識。在這些改變和沖擊中,最典型的就是代碼編寫和分布式通訊。
可以說,即便開發者現階段不關注 Reactive,這一暗潮也已經在涌動。與此同時,業界也存在很多 Reactive 和 Java 整合的一些技術,這些技術讓 Reactive 更加成熟且穩定:
如今,越來越多的開發者開始習慣基于云平臺開發應用。如上文所言,Reactive 的發展對云原生領域的發展也將起到很大作用。在采訪中,雷卷透露,云原生可讓應用獨立于底層架構,保持中立,進而可運行在不同云廠商的底層架構上。 但是,這一方式并沒有解決應用之間如何進行通訊的問題,雖然有基于 API 的協作,但是并沒有對 API 做出具體要求,尤其是基于消息的異步通訊。
目前最常見的應用間通訊就是 RPC 和 HTTP REST API。這兩者對于 request/response 的通訊完全沒有問題,HTTP REST API 只是有一些性能問題,但是整體還好。不過,這些技術也都在向 Reactive 靠攏,比如 Spring 的 RestTemplate 轉向 WebClient,而 gRPC 也有對應的 Reactive gRPC 等。對于新的架構設計,比如 Streaming、Event Driven、IoT 和雙向通訊,傳統的 RPC 就有點力不從心,而這些正是 RSocket 所擅長的。
RSocket 協議經過非常長時間的論證,當然也借鑒了其他協議的思想,終于形成了目前開發者看到的 1.0.0 版本。RSocket 協議可以說是目前基于二進制異步消息通訊比較完美的版本,克服了之前協議設計中的一些問題,比如 Client/Server 轉換到角色對等的方式;Pub/Sub 調整為更靈活的 Request/Stream;元數據和數據分離的方式,提供更靈活的消息路由和消息編碼;傳輸層可插拔,支持 TCP、WebSocket、UDP/Aeron、RDMA 等;同時支持多語言接入,比如 Java、Kotlin、Node、C++、Golang、Python、Rust 等。
目前,RSocket 已經受到廣泛支持,Spring Framework 將在 5.2 版本內置 RSocket,Spring Boot 2.2.0 版本也第一位支持 RSocket,其他 Spring Cloud Gateway,Spring Security 等都會支持 RSocket。正如 Linux 基金會戰略副總裁 Michael Dolan 所言,Reactive 基于消息驅動的方式可以保證云原生應用所需的彈性,可伸縮性和響應能力,而且這一切都不受其底層基礎架構的影響。換言之,利用 Reactive 的特性,開發者不需要依賴云廠商或者 Infra 層就可以達到 Reactive 宣言所說的彈性、可伸縮性和響應能力。可以說,云原生關注應用的外在,比如打包部署、運行環境、監控等,而 Reactive 更關注應用內在,比如代碼運行的更有效率,應用間通訊更加自然流暢,一定的彈性和自我恢復能力等。
作為 Reactive 基金會的初創成員之一,阿里巴巴一直給外界的印象都是內部使用了大量 Java 編程語言,積累了大量的 Java 技術棧。但是,據雷卷透露,阿里巴巴內部的一些產品很早就開始進行?Reactive 化,比如開發者都了解的 Dubbo,就在做 Reactive 和 RSocket 的整合。但是,Reactive 化的過程還有很多問題需要解決,比如 SDK 的 BUG,適配內部各種架構體系。雷卷認為,最大的問題就是如何將阻塞調整為非阻塞方式,比如數據庫操作,非異步的 RPC 調用。
作為基金會的一員,阿里巴巴會將內部 Reactive 化的經驗共享給需要的開發者,主要貢獻將偏向于 RSocket,主要是分布式 Reactive 與云上的整合,因為阿里巴巴在安全、性能測試、SDK 開發上面都貢獻了非常多,同時結合云上的特點以及多租戶支持,讓云上用戶使用更簡單。? 在內部,阿里巴巴也積極推動產品 Reactive 化,添加對 RSocket 支持等。
在技術革新的同時,阿里巴巴還在著力解決成本問題,如果開發者聽過 QCon 2019 北京大會上的 RSocket 演講,可能會對 Netifi 公司通過研發 RSocket 幫助企業實現微服務,在 40,000RPS 的場景下,Istio 需要每月 3495 美金,而 Netifi 每月只要 388 美金,同時性能提升 10 倍有印象,這對任何企業無疑都極具吸引力。從那次演講到現在已有半年之久,新推出的 RSocket Broker 已經支持多租戶特性,而非獨占的方式,成本可再次降低 50% 到 70%,在 4 萬 RPS 場景下,每月只要支付 200 美元不到。
雖然阿里巴巴的 Reactive 進程還在進行中,但其帶來的成本價值已經有所體現。雷卷表示,主要是同步轉異步后,應用的總體性能提升,直接變化就是費用花銷變少,這對其他用戶而言應該也是一樣的。
對 Node.js 開發者來說,如今幾乎都是 Reactive,而對 Java 開發者來說,尤其是后端,目前還處于早期階段,目前遇到最大的問題是,Reactive 要求用戶調整代碼,這是最大的麻煩,開發者需要很長時間熟悉、了解和使用。而且相關整合還不完善,雖然 Spring 5.0 已經包含 Reactive,但并不是所有都支持。雷卷表示,Spring 5.2 將從底層全面支持 Reactive,一旦該版本正式發布,開發者就可以體會到 Reactive 和 RSocket 開發的便捷性。
在開源方面,阿里巴巴正在研發 RSocket Broker 產品,希望可以很快推出,讓更多開發者能夠更好地使用 Reactive,幫助云原生應用解決異步通訊問題,讓所有組織和開發者可以更簡單、高效、安全,同時極大降低成本。
作者介紹:
雷卷,阿里巴巴資深技術專家,目前就職于阿里巴巴硅谷辦公室。在阿里巴巴工作 10 余年,具備 20 年 Java 開發經驗,參加過多個內部項目,從物流、旺鋪到國際部中間件等。目前主要的研究方式是 Reactive 和 RSocket,將 Reactive 和 RSocket 帶到應用開發中,構建更加簡單高效的架構設計。雷卷同時也是 RSocket 的開發者,主要著重于 RSocket Broker 的開發。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。