[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可能需要补一些网通相关的知识,这篇只是先简单介绍,後续会进行一些比较。官网的介绍影片蛮清楚的,推荐去看一下。

存稿宣布用尽,开始进入赶稿人生......

资料来源


<<:  Day27 Vue CLI 介绍

>>:  Day 29: Detective 简介与操作

【没钱买ps,PyQt自己写】Day 1 - 安装 PyQt,建立自己的第一支 PyQt5 程序

前言 今年算是拖到最後一天最後一刻才开赛... 因为疫情的关系今年实在有点忙不过来, 因此早在两个月...

Day25:NavigationView

前言 前面两天刻了两个 view, 现在要用 Navigation 来把它们连接起来。 实作 在 R...

[DAY 04] EC2 Security Group

Security Group 安全群组 Security group 是 AWS 网路安全的基础,它...

冒险村07 - Update gems & js

07 - Update gems & js 专案如果要长久,套件升级是一定是不可或缺的事,从...

快取机制 心得纪录

这几天听到一个新名词,eTag,我想说这究竟是什麽东西,要上高速公路了吗?、还是什麽特别的tag呢?...