RSocket 基于消息传递的反应式应用层网络协议

下面基于RSocket的一些主要特性分别做一下介绍,并和HTTP之类的常见协议进行比较:Multiplexed, Binary Protocol 多路复用的二进制协议 Bidirectional Streaming 双向流 Flow Control 流控制 Socket Resumption 连接恢复 Message passing 消息传递模型 Transport independent 与传输层解耦的应用层协议一、Multiplexed Binary Protocol现在Multip
摘要由CSDN通过智能技术生成

下面基于RSocket的一些主要特性分别做一下介绍,并和HTTP之类的常见协议进行比较:

  • Multiplexed, Binary Protocol 多路复用的二进制协议
  • Bidirectional Streaming 双向流
  • Flow Control 流控制
  • Socket Resumption 连接恢复
  • Message passing 消息传递模型
  • Transport independent 与传输层解耦的应用层协议

一、Multiplexed Binary Protocol

现在Multiplexing,Asynchronous,Non-blocking I/O已经被说烂了,基本上就是标配。没有这些连台面都上不了。这些特性意味着什么,拿HTTP的发展历史来比喻是最好不过(于是稍微扯远一下):

从HTTP1.0到HTTP3.0 在传输性能上的进步

  • 在HTTP1.0时代,每个HTTP request都要新建一个网络连接。网络连接不能复用
  • HTTP1.1时代,一个网络连接仍然在一个时候只能负责一个request,但是整个request/response结束后连接可以得到复用
  • 有一些文章讲到HTTP1.1的核心是pipeline功能,在实际运用中其实不然。pipelining支持一个TCP连接上按照顺序连续发送多个HTTP请求而不需要等待前一个请求的响应,但是它同时要求HTTP response也要按照请求的顺序逐个发送,这对服务器提出了很多要求,而且如果第一个响应很慢会拖累所有的后续响应(pipeling的队头阻塞),所以事实上并没有得到多少运用。即使到今天大部分浏览器仍然是默认关闭HTTP pipelining功能的,所以说HTTP1.1的主要突破还只是连接复用。
  • HTTP2.0是个飞跃,开始支持multiplexing,一个TCP连接上可以同时承载多个request/response,用这种方式替代1.1的pipelining提升HTTP的并行效果,也自然不存在什么队头阻塞了。每一个request/response的信息流,我们把它称作一个HTTP stream。这个时候一个HTTP client对于一个origin,只需要建立一个TCP就够了。(但是multiplexing带来了新的问题)
  • 现在HTTP3.0也差不多了。2.0解决了1.1pipelining的队头阻塞问题,但是却无法解决TCP本身的队头阻塞。而因为TCP/IP在内核协议栈中,简直无法升级,于是HTTP选择了QUIC作为新的传输层协议。 QUIC基于UDP,在用户模式中实现了类似TCP的connection oriented的功能同时解决TCP的队头阻塞,自带multiplexing等等。

所以,HTTP/2具有的优点,RSocket都有。另外,RSocket是一个二进制协议,也就是说在一个RSocket连接上传输的消息体对数据格式没有任何要求,应用程序可以为所欲为的压缩数据量的大小。

这样的二进制协议通常来说能给性能带来极大的提升,但是产生的代价是,网络中间件也会因为无法解读消息体中的数据,丧失了在对具体应用流量进行监控,日志和路由的能力。RSocket通过把每个消息体分成data和metadata的方式,在保证高效传输的前提下,提供了暴露少量元数据给网络中间件的能力

struct Payload {
    iobuf metadata;
    iobuf data;
};

对于每个data和metadata,应用可以采用不同的序列化方法。

  • data一般作为应用本身需要传递的业务数据,采取自定义的高效序列化方式,且对网络基础设施不可见
  • metadata可以采用网络基础设施一致默认的格式。在分布式传输的过程中,这些中间件可以按需求对metadata进行读写,然后监控应用健康状况或者调整路由。

二、Real Bidirectional Streaming

上面提到,HTTP这几年在传输性能上进步了很多。但说到底在应用层仍然仅支持client request/server response的交互模型。

这里一些同学可能有疑问,比如:

那HTTP/2推出的Server Push是什么

HTTP2.0推出了一个新的Server Push功能,但这个功能通常只是用来提前将一些静态资源返还给用户而已。举个例子:一个简单的网站有三个静态资源组成: index.html, index.css, index.js。 我们打开浏览器打开index.html,就会发起一个HTTP request拿到index.html。在不使用server push的情况下,我们要等浏览器解析出index.css 和 index.js之后才会再次向服务器发起请求。而运用server push,服务器可以根据一些规则预知到浏览器也需要index.css和index.js,

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值