iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
Software Development

從零開始Reactive Programming- Spring系列 第 28

[Day 27] Reactive Programming - RSocket

前言

Reactive的世界裡,我們已經知道了從接收request(Spring WebFlux)進來一路到DB(R2DBC),這時候就只剩下最後一哩路,也就是服務之間的通訊協定RSocket

RSocket

https://ithelp.ithome.com.tw/upload/images/20211011/20141418YeMVQW1467.png

圖片來源rsocket.io

簡介

RSocket是一個高效能且彈性的二進位通訊協定,由Facebook、Netflix、Alibaba、Pivotal等國際知名公司共同合作推出,RScoket的R在這系列中提到,想當然就是Reactive的R,可以建立於不同的傳輸層包含TCPWebSocket或是 Aeron,在OSI七層裡面屬於5/6層,在TPC/IP則屬於應用層。不限定特定語言,JavaGOC++Javascript等等都有支援,Java適用於ReactorRxJava。streaming的訊息(Message)傳遞模式,與傳統非同步的一大區別就是支援backpressure,不需要擔心訂閱者會被超出負荷的資料壓垮。

誕生的由來

1990s  大概是靜態網路的時期
主流協議是TCP/IP

2000s 開始有client-server ,Server導向時期。
http 1.0

2010s Web 2.0
RESTful的架構

現今 雲原生Cloud Native與微服務Microservices
Http/2 Http/3
MQTT gRPC
https://ithelp.ithome.com.tw/upload/images/20211011/20141418P8F7Ax2i8y.png

圖片來源:Oleh Dokuka

此時微服務興起大致有以下需求

  1. Message Driven
  2. 微服務效能問題
  3. 彈性,擴展性

舊有的通訊協定已經無法應付所有使用場景,創造出RSocket來應付所有的雲原生與微服物的使用場景

Binary Messageing

二進位的訊息,是機器最熟悉的方式,傳輸的過程更有效率且不容易出錯,而且是可以把任意格式、像是熟悉的JsonXML等等轉換成byte,接收的時候再轉換回來即可。

  • Data:任何格式的訊息本身
  • Metadata:類似headers,相關的資訊
  • Extension:擴充,可以提供額外的像是監控、鏈路追蹤等等微服務所需的資訊。

RSocket有四種互動的方式

  1. Request Response :典型的HTTP,發送一個請求,得到一個回覆。
    https://ithelp.ithome.com.tw/upload/images/20211011/20141418McztNRT795.png

  2. Request Fire-n-Forget:射後不理,用於監控或是log紀錄,不在意回傳結果。
    https://ithelp.ithome.com.tw/upload/images/20211011/20141418T6zBoPFqih.png

  3. Request Stream:一個request回應一個stream,類似於event-driven裡面的MQ。
    https://ithelp.ithome.com.tw/upload/images/20211011/20141418TJrfCNz5Rt.png

  4. Request Channel:頻道,可以互相推送message,像是即時通訊。
    https://ithelp.ithome.com.tw/upload/images/20211011/201414180YQ6j9aYup.png

優缺

優點

  1. reactive steams
  2. 應用層的flow control
  3. Natural Rate Limiting 限速。
  4. Circuit Breaker 斷路,避免微服務間有一個服務掛掉引發連鎖的雪崩效應。
  5. Client Server 是一樣的,Peer-To-Peer。
  6. 支援取消與恢復連線

缺點

  1. 非常新的技術
  2. 還在開發當中
  3. 文件稀缺

結語

相對於ReactorWebFluxR2DBCRSocket又是一個更新的技術,想要更加了解RSocket可能需要補一些網通相關的知識,這篇只是先簡單介紹,後續會進行一些比較。官網的介紹影片蠻清楚的,推薦去看一下。

存稿宣布用盡,開始進入趕稿人生......

資料來源


上一篇
[Day 26] Reactive Programming - Spring WebFlux(R2DBC Repositories)
下一篇
[Day 28] Reactive Programming - RSocket Part2
系列文
從零開始Reactive Programming- Spring32

尚未有邦友留言

立即登入留言