RSocket的定义及四种通讯模式

rsocket的定义
rsocket 是reactive socket的意思,也就是反应式编程的网络协议。
它的官方 文档 的标语是:
application protocol providing reactive streams semantics
这里有几层意思:
首先rsocket确保的是网络通讯的语义是符合反应流的规范。第二它是应用层的协议,所以它并不介意传输层的协议。接着,文档中给出了它的具体定义:
rsocket is a binary protocol for use on byte stream transports such as tcp, websockets, and aeron.
这里强调的是rsocket协议是二进制的编码,与文本编码有很大的不同。
2 设计的思想
随着微服务的发展,传统的反应式编程的实现也受到挑战,特别在网络传输的部分,需要把背压作端到端的传输,而不是在一跳以后就丢失了。
另一方面,反应式编程的本身就要求反应式编程是消息驱动的。
这两个方向的方向的合力,就是把反应式编程从cpu和内存延伸到网络,这就是rsocket。这里的网络,是指应用层的,rsocket 努力的方向是让应用的语义可以在网络上传播。而对于传输层,rsocket 的原则是尽量兼容。目前它支持的传输层有websockets, tcp, 或者 aeron。
3 rsocket 的四种通讯模式**
rsocket 先定义了一套规范,然后才有实现。这套规范定义了数据帧的格式。此外,rsocket 总结了分布式应用的通讯共同特点,定义了四种不同的反应流通讯方式。
request/response (stream of 1):就是传统的rpcrequest/stream (finite stream of many):是指单向的流fire-and-forget (no response):是指无返回值的rpcchannel (bi-directional streams):是指双向的流4 与反应式编程的关系**
反应式编程的两个主要方面(非官方解释),就是非阻塞线程管理和背压。rsocket 主要是实现背压的网络部分。有的语言,如java, 有好几个反应式编程的库,如rxjava, reactor等。这种情况下,rsocket 就是和这些已有的库整合,不会重新发明轮子。但是,如果有的语言没有这样的库,那么rsocket 就要自己实现这部分的功能。
一个完整的rsocket sdk, 是包括非阻塞线程管理+背压+网络的,应该把它当作是反应式编程的扩展,而不是一个单独的模块。没有了其他的部分,rsocket 是根本没有用的。
5 与grpc的比较**
grpc 也分两部分(非官方版本):protobuf 和 http/2。与http2的比较下一节讲。protobuf 要解决的问题,是多语言定义服务的问题。这个和rsocket 要解决的问题不是一个方向的。所以,rsocket 可以支持protobuf 的idl。在负载编码的问题上,rsocket 很中立,它支持protobuf,json, 或者是java interface。
6 与http/2的比较
http/2 是1.1的增强版,但它还是http。这个协议有几个比较大的问题:
它是为 web 通讯开发的, 它的主要特点是通信的单向性。对一个链接来说,一定有一个 client, 一个server。而rsocket 是针对应用间的通讯而设计的,通讯像对话一样,是双向的,是流式的。所谓client和server的关系也是比较模糊的。http/2著名的server push是为浏览器开发的。对应用而言,要么是用websocket, 要么是用sse,即ascii编码。http/2所支持的语义是基于http 方法,get, put, delete,等。这些对于应用来说是不够的。而额外操作的定义就要在应用中自行完成。http/2的流控是在字节的层级上,而不是应用的层级(帧)。这样的转化也会增加应用的负担。7 rsocket 自身的特点
我们暂时忘掉反应式编程。不管叫什么名字,它最终要为应用带来好处。我们就rsocket 为应用带来的好处做个介绍:
面向链接。这个特点以后我们会展开讲。简单说就是链接的状态会被保存下来。当然,与kafka等不同,这个状态不落盘。但是只要有一边不重启,链接状态是可以恢复的。双向传输。就是复用同一个链接,双方没有主次之分。一旦链接建立,双方都可以用背压方式要求数据传输。端到端的流控。这条以后也会展开说。简单地说,http/2 的流控是一站一站,就是说假设a-b-c,a-b的流控对b-c是无效的。而用了rsocket,a-c的流控是应用程序可控的。比如a说给我8条记录,(这就是背压的实现),c就会知道并传8条记录到a。这些特点,会让rsocket 在应用间的通讯表现比起http/2有很大的提升。
本文作者:andy shi,阿里巴巴高级技术专家,andy长期关注service mesh,在cloud foundry,kubernetes,envoy,rsocket上有着丰富的实践和开发经验。

Intel CPU第8代Core i处理器G系列 确定明年1月底停产
如何定义一个Blocklet基石程序
中国公司5G专利占全球34% 华为一家占到20%居世界第一
如何提升示波器波形质量 三种波形算法的应用
雷蛇发布战锤狂鲨专业版真无线降噪耳机
RSocket的定义及四种通讯模式
如何才能快速入门单片机详细方法教程说明
电子芯闻早报:瑞萨拟收购Intersil 小米note2竟是这样
快速识别高温电线电缆好坏的方法是什么
智能计算会覆盖区块链领域吗
Mini/Micro LED开始进入高端场合
高速PCB设计技巧有哪些
C语言有哪些预处理操作?
通过动图看懂三极管的工作过程
造成接线端子高温现象的因素都有哪些
基于具有Arduino Leonardo的树莓派扩展板的介绍
将FRAM器件集成到新的汽车EDR设计中所需满足的要求
微雪电子OTS-48-0.5-01TSOP48测试座简介
从Windows 10 1903版本起,微软默认禁用USB驱动器缓存
应用于汽车自动驾驶的五大传感器技术详解