iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0

Reactive,不是一個新議題, 但是在 Cloud Native 時代是愈來愈重要。因為雲原生正是一個大型的分散式系統,會有 backpressure 的等問題,這是 Reactve 要處理的,所以 Quarkus 主打了 Reactive Programming

Per Request Per Thread 的問題

在 Java 的 Servlet 中,框架分配一個專門 thread 來處理 Request。這個 model 的並發性會受到線程數的限制。此外,一旦程式與外部服務互操作,這些 thread 就會被 block 住了,佔住了 CPU Memory。

餐桌與服務生

可以以餐桌跟服務生作比喻,per request per thread 就像每一個餐桌配給了一個服務生,並且在廚師煮菜的過程中還是一直隨侍在旁,如果是老闆應該會覺得很浪費

而採用 Reactive Programming 就可以一個服務生服務很多桌的客人,對於資源利用更好。

那什麼是 Reactive

Reactive 最近看到 2017 JCConf 史旺基大大有很好的說明,也有精美的投影片。在 Reactive programming 中,Non-blocking I/O 的操作是很重要的一環。

Yes

更有效的容器資源利用

在容器化的環境,CPU/Memory 是共用的,傳統的 thread 在等待外部的 Daabase, Service 資料回來時, CPU/Memory 是佔住的,對比 NodeJS 的 callback,可能要要佈置更多的 instance 才能面對同等的流量,這很花錢。

Quarkus 給你 Reactive 全家餐

Reative 這塊各家會選用不同的實作,Quarkus 則是選擇了 Mutiny, 底層是 vert.x。並且從 RESTful , NoSQL, JDBC, Message Queue 都有支援 reactive 操作的函式庫。以下列出 Quarkus 有支援的 Reactive 的 extension

HTTP

  • RESTEasy Reactive
  • Reactive Rest Client

Database

  • Hibernate Reactive
  • Reactive PostgreSQL
  • Reactive MySQL
  • MongoDB extension
  • Cassandra
  • Redis

Event-Driven Architecture

  • Kafka Connector
  • AMQP 1.0 Connector

講了這麼多 Reactive 的好處,那為什麼不是大量流行呢,因為 Reactive progamming 有一定的進入門檻,有各種的 Mono, Flux keyword,要以 functional programming 的方式去思考。但還好我們有 Kotlin coroutines,所以這些都不同管,明天來講講

參考文件


上一篇
1) 修正 Data Class 轉換問題 2) 談談 Kotlin function 串串法 - Day9
下一篇
Kotlin Coroutines 讓 Quarkus Reactive 容易起來 - Day11
系列文
Quarkus, Kotlin, Reactive 雲原生服務開發32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言