新一代通信协议:RSocket
什么是 RSocket
-
请求 / 响应( 1 : 1 ) -
请求 / 流 ( 1 : N ) -
发射了不管 ( 1 : 0 ) -
双向流( N : N )
我的一些理解
拿我最熟悉的 gRPC 来对比,gRPC 也支持那四种交互模式,也是二进制协议,支持多语言,为啥 RSocket 更好呢?
我觉得最重要的,是 RSocket 基于 Reactive Streams 语义,并且是一种比较底层的协议。
Reactive Streams 是比较标准化的东西,JDK 9 直接内置了支持。
上面列举的那些协议,都自带自己的传输方式,使用的范围自然比更底层的协议要窄。
而且,RSocket 得到了多个大厂的支持:
-
RSocket 出自 Netflix -
Facebook 将 Thrit 捐给 Apache 基金会后,自己又 Fork 了一个内部分支,底层基于 RSocket -
阿里的 Dubbo 集成了 RSocket -
Pivotal 使劲将 RSocket 集成入 Spring
Broker 模式
Spring Cloud Gateway 支持 RSocket 的 Broker 模式。
简单说,这种模式是:
-
一堆 Spring Cloud Gateway 组成集群 -
服务生产者和消费者用 Client 模式接入集群,连接时提供注册信息 -
经过上面这么一搞,其实就不分生产者和消费者了,大家可以互相调,通过 Gateway 转发,有点像 SOA 服务总线了 -
由于都是连到集群,只需暴露集群地址,传统意义上的服务端就可以隐藏起来了,安全 -
权限,日志等等都在 Broker 上做
所有请求都通过转发,具体到一个调用,比直接连接要多耗时间。但是,当应用规模大了,复杂了,多花的时间就很值得了:
-
不关心互相调用的权限控制(除了处理跟 Gateway 间的权限) -
无需单独的服务发现服务 -
没有断路器 -
没有客户端负载均衡 -
没有 Sidecar -
解决启动顺序问题 -
解决服务热身的问题 -
代替消息队列
很好,你已经成功引起了我的注意!虽然有点新瓶装旧酒的意思,不过还挺期待这种模式赶快成熟呢。
参考资料
-
RSocket 基于消息传递的反应式应用层网络协议 -
Reactive Architectures with RSocket and Spring Cloud Gateway -
RSocket Messaging with Spring -
RSocket: Solving Real-World Architectural Challenges
点击查看原文可以访问本文的有链接版。
-------------- END --------------
不定时获取关于科技新知的文章
请放心,不会推送垃圾信息