电子说
RSocket的定义
RSocket 是Reactive Socket的意思,也就是反应式编程的网络协议。
它的官方 文档 的标语是:
Application protocol providing Reactive Streams semantics
这里有几层意思:
接着,文档中给出了它的具体定义:
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 总结了分布式应用的通讯共同特点,定义了四种不同的反应流通讯方式。
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。这个协议有几个比较大的问题:
7 RSocket 自身的特点
我们暂时忘掉反应式编程。不管叫什么名字,它最终要为应用带来好处。我们就RSocket 为应用带来的好处做个介绍:
这些特点,会让RSocket 在应用间的通讯表现比起HTTP/2有很大的提升。
本文作者:Andy Shi,阿里巴巴高级技术专家,Andy长期关注Service Mesh,在Cloud Foundry,Kubernetes,Envoy,RSocket上有着丰富的实践和开发经验。
全部0条评论
快来发表一下你的评论吧 !