响应式开发RxJava、Reactor、Akka、Flower框架

反应式编程

举手 晃动 一起来 Naughty Bounce

反应式编程本质上是一种异步编程方案,在多线程(协程)、异步方法调用、异步I/O访问等技术基础之上,提供了一整套与异步调用相匹配的编程模型,从而实现程序调用非阻塞、即时响应等特性,即开发出一个反应式系统。以应对高并发处理需求。

目前主流的反应式编程框架有RxJava、Reactor等,他们的主要特点是基于观察者设计模式的异步编程方案,编程模型采用函数式编程。

RxJava

RxJava是对Java和安卓进行反应式编程的具体实现,受到了函数式编程的影响。提倡函数组合,避免出现全局状态和副作用。

Reactor

这个在Netty用的最多

Akka

Akka是基于Scala开发的,虽然同为JVM上的语言,也提供了Java API,但是Scala还略显小众。

项目庞大时,一般将当前系统拆成多个子系统并部署在不同服务器上,每个子系统尽量单一职责,这样可以解决由于代码累积造成的维护困难,也有助于分散高并发流量带来的压力。

特性

Akka是一款高性能、高容错性的分布式&并行应用框架,遵循Apache2开源许可。

  • 并发与并发
  • 异步非阻塞
  • 高容错性
  • 持久化:Actor携带的状态或消息可以被持久化,以便于在JVM崩溃后能恢复状态。
  • 轻量级

应用场景

  • 服务后端: rest web,websocket服务,分布式消息处理等。
  • 并发&并行:比如日志异步处理,密集数据计算等。

Actor是Akka最核心的概念。

Flower

Flower是一个纯消息驱动,完全异步,支持命令式编程的反应式编程框架。

当用户请求达到服务器时,web容器线程不需要执行应用程序代码,将用户的HTTP请求转换成请求对象,将请求对象异步交给Flower框架的Service处理,自身马上返回(不适合需要同步的接口)。用户的请求不会被阻塞。

通常Web应用线程阻塞主要是因为数据库访问导致的线程阻塞。异步数据库访问后将结果以异步回调的方式发送给Flower的Service进行异步的处理,线程不会被阻塞。

Flower框架实现异步无阻塞,一方面是利用了Web容器的异步特性,主要是Servlet3.0以后提供的AsyncContext,可快速释放容器线程。Flower框架内,核心的应用代码之间的异步物阻塞调用则是利用了Akka的Actor模型实现。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章