阿里雷卷:Reactive 基金会的成立将对开发方式带来哪些影响?

做者 | 赵钰莹react

近日,Linux 基金会宣布成立 Reactive 基金会。对于 Reactive,各位开发者应该并不陌生,尤为是 Node.js 开发者,但真正了解并意识到这件事情对开发方式带来的影响的恐怕很少。本文,InfoQ 有幸第一时间对推进阿里巴巴成为该基金会初创成员的阿里巴巴资深技术专家雷卷进行了独家采访,进一步全面了解 Reactive 基金会的成立背景及其对开发方式的发展推进。

file

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 能够迅速被广大开发者接受,比较典型的两大价值以下:linux

  • 非阻塞和高并发: Reactive 基于异步消息通信,与 Node.js 的 Event Loop 设计相似,这样的应用没有同步阻塞,系统吞吐率较高,至关于提高了系统性能。以前,开发者采用线程池来实现并发,如今经过 Actor 的消息模型,消除了获取线程的等待,减小了大量线程的切换,CPU 利用率提高。此外,非阻塞和高并发对云上客户尤其重要,CPU 利用率和 QPS 提高直接意味着帐单金额变少;
  • 函数式编程范式: 函数编程已经愈来愈被开发者接受,拥有线程安全、高效执行等优势,可是将这些函数串联起来工做,须要必定范式和相关框架,这就是 Reactive 作的事情,好比标准的 Reactive Streams 规范,相关的开发框架 RxJava、Reactor 等,可以让函数编程更加简单,并且代码仍是统一风格,阅读简单的同时,Code Review 也很是容易。这就比如 Java 中有 Servlet 规范,众多 Web 框架来简化 Web 应用开发同样。若是在代码中看到 filter、 map、flatMap、subscribe 等函数调用,基本就是 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 对开发方式带来的改变?


事实上,Reactive 的出现对现有架构带来许多冲击,好比基于事件驱动设计、流式处理、Service Mesh、无网络依赖、安全等。相应的,开发方式也会随之发生改变,愈来愈多的框架开始全面支持 Reactive,好比 Spring WebFlux、Spring Data Reactive Repository 等;数据库操做,经过 R2DDBC 方式已经彻底 Reactive 化;各类 NoSQL 产品,好比 Redis、MongoDB 等,早已支持 Reactive;RPC 和 HTTP REST API 在 RSocket 的影响下可能也会改变开发者对分布式通信的认识。在这些改变和冲击中,最典型的就是代码编写和分布式通信。
后端

  • 代码编写: 咱们以前过程式的代码,将会被函数式编程和 Reactive 范式替代,以前代码中大量的 if else, null 判断,for 循环,try/catch 等,都会极大地减小,取而代之是 Reactive 的各类标准操做,更加简单明了,代码量也会显著减小。
  • 分布式通信:以前分布式开发,咱们很是注重通信细节和并发的处理,这个是核心,Reactive 和 RSocket 的介入,会让开发门槛会降到最低,你几乎不用关心通信的底层细节、并发线程数处理、断路保护等,这一切 Reactive 下的 RSocket 就给你解决啦,你可能只用关系接口设计和数据序列化。如今的应用愈来愈追求极致性能,CPU、GPU 和 FPGA 等全都上,若是没有匹配的高效通信协议,那么性能会打折很多,而这一切 RSocket 均可以帮你作到,并且更加简单和优雅,咱们稍后也会介绍 RSocket。


能够说,即使开发者现阶段不关注 Reactive,这一暗潮也已经在涌动。与此同时,业界也存在不少 Reactive 和 Java 整合的一些技术,这些技术让 Reactive 更加成熟且稳定:
安全

  • Reactive 框架: RxJava, Reactor, Akka, Kotlin Coroutines & Flow
  • Web 框架: Spring WebFlux, Vert.x, Micronaut, Helidon
  • 数据层: Spring Data Reactive,支持 database, Redis, Cassandra, MongoDB 等等
  • 通信层: RSocket, Reactor Netty, Reactor Aeron,Reactive Dubbo
  • 集成:  Reactor Kafka, Reactor RabbitMQ,RocketMQ 等


现在,愈来愈多的开发者开始习惯基于云平台开发应用。如上文所言,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 实践及开源计划


做为 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 的开发。并发

搜索「阿里巴巴云原生公众号」获取更多K8s容器技术内容框架

相关文章
相关标签/搜索