響應式開發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模型實現。

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