做者 | 趙鈺瑩react
近日,Linux 基金會宣佈成立 Reactive 基金會。對於 Reactive,各位開發者應該並不陌生,尤爲是 Node.js 開發者,但真正瞭解並意識到這件事情對開發方式帶來的影響的恐怕很少。本文,InfoQ 有幸第一時間對推進阿里巴巴成爲該基金會初創成員的阿里巴巴資深技術專家雷捲進行了獨家採訪,進一步全面瞭解 Reactive 基金會的成立背景及其對開發方式的發展推進。linux
近日,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 的開發。