RSocket 与 gRPC性能对比

article/2025/8/17 23:59:42

几乎每次我向观众介绍RSocket时,都会有人问这个问题:“ RSocket与gRPC相比如何?”

今天我们要找出答案。

搭建平台

插座

RSocket在应用程序网络上实现反应式语义。它是一种网络协议,可端对端实施反压力和其他反应流概念。

gRPC

gRPC旨在解决多语言RPC问题。它包含两个部分:protobuf IDL和HTTP / 2网络协议。

苹果到苹果?

从设计和组件上,我们知道苹果与苹果的比较应该是RSocket与HTTP / 2。

但是,您将如何有效地比较两种协议?一种方法是使用相同的应用程序对它们进行基准测试。为了使应用程序在协议上运行,我们需要一个RPC SDK。 

RSocket在编码器上是不可知的。它支持JSON,protobuf和其他定义。在此基准测试中,我们将RSocket与protobuf,Java RPC和Messagepack一起使用。对于gRPC,我们仅会使用protobuf,因为事实证明它已经是gRPC的最佳性能编码器。

语境

在进行基准测试之前,让我们先比较两种协议的用例。基本上,RSocket是为应用程序通信而设计的,而HTTP / 2仍是为处理Web流量而设计的。

但是“旨在处理网络流量”是什么意思?好吧,这意味着客户端和服务器之间有明显的区别。会话样式主要是请求/响应,并且可能存在流。请记住,TCP并不强调客户端/服务器的区别。当我们使用HTTP / 2协议时,服务器很难向客户端发出反向请求,更不用说使用相同的套接字连接了。

另一方面,应用程序之间的通信则完全不同。应用程序是具有对话的同级。谁是服务器和谁是客户端之间没有强硬的界限,尤其是在微服务架构中。

为了涵盖大多数对话场景,RSocket实现了四种类型的通信模型:

  • Request/response (stream of 1)
  • Request/stream (finite stream of many)
  • Fire-and-forget (no response)
  • Channel (bi-directional streams)

RSocket不仅是多路复用的,而且发送方和接收方可以在保留相同的套接字连接的同时切换角色。

基准测试

建立

  • 两台服务器,每台服务器均带有2.50GHz + 8G @ 4核Intel®Xeon®Platinum 8163 CPU

JVM配置

 -Xmx2g -Xms2g -XX:+ AlwaysPreTouch -XX:+ UseStringDeduplication

gRPC配置

  • gRPC windowupdate = 1 * 1024 * 1024 * 1024

抽样规则

  • 10次​​尝试中最好的结果

工具

我们使用的软件包是Netifi开发的比较工具 。它是一个Java堆栈。

堆与直接

在一些结果中,我们将看到堆与直接比较。它主要用于高负载的Java应用程序。在图表上,我们将显示堆(带有 _h  标签)和非堆(带有 _d 标签)结果。

结果:

两个有意义的基准是吞吐量(QPS)和延迟。以下是不同负载下的结果:

100,000-request_32-concurrency_16-conns_16bytes-repsonse

潜伏:

图片标题

 

QPS:

图片标题

 

10,000,000-request_512​​-concurrency_16-conns_16bytes-repsonse

潜伏:

图片标题

 

QPS:

图片标题

 

2,000-request_16-concurrency_16-conns_131072bytes-repsonse

潜伏:

图片标题

 

QPS:

图片标题

 

中央处理器

我们还针对10,000,000-request_512​​-concurrency_16-conns_16bytes-repsonse测试测试了CPU使用率 。使用Java分析工具,我们得到以下结果:

图片标题

 

结论

很明显,在Java版本中,RSocket SDK胜过gRPC。在QPS,延迟,CPU消耗和可伸缩性方面,RSocket在每个类别中的性能均优于gRPC。

反应性gRPC?

我们应该问的最后一个问题是:“当gRPC进行反应时会发生什么?” 为了回答这个问题,我推荐Oleh Dokuka和Igor Lozynskyi撰写的《Spring 5中的动手响应式编程》一书。Oleh Dokuka是反应式gRPC项目的主要贡献者之一。在这本书中,有一章比较了反应式gRPC与RSocket。我引用:“唯一的区别是它支持更高粒度的流控制。由于gRPC是在HTTP / 2之上构建的,因此该框架将HTTP / 2流量控制作为构建块来提供细粒度的反压控制。但是,流量控制仍然依赖于滑动窗口的大小(以字节为单位),因此,逻辑单元级别粒度上的反压控制没有被发现。

因此,基本上,HTTP / 2不能“真正地”响应,即使使用响应式实现,gRPC的性能也可以提高很多。


http://chatgpt.dhexx.cn/article/MGSTB07D.shtml

相关文章

浅谈RSocket与响应式编程

简介: RSocket是高效一个二进制的网络通讯协议,能够满足很多场景下使用。另外,RSocket也是一个激进的响应式捍卫者,激进到连API都跟响应式无缝集成。本文我们将和大家分享RSocket与响应式编程。 作者 | 素渡 来源 | 阿里技术公众号…

阿里雷卷:RSocket从入门到落地,RSocket让AJP换发青春

考虑很久,决定还是写一下这篇文章,主要是 AJP 技术太老,我只能说 Long long ago ,估计我在用这个技术的时候,很多同学小学还没有毕业。但是没有问题,这篇文章只是一个架构启发,不会浪费你时间让…

云原生实践之 RSocket 从入门到落地:Servlet vs RSocket

技术实践的作用在于:除了用于构建业务,也是为了验证某项技术或框架是否值得大规模推广。 本期开始,我们推出《RSocket 从入门到落地》系列文章,通过实例和对比来介绍RSocket。主要围绕RSocket如何实现Polyglot RPC、Service Regi…

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

下面基于RSocket的一些主要特性分别做一下介绍,并和HTTP之类的常见协议进行比较: Multiplexed, Binary Protocol 多路复用的二进制协议Bidirectional Streaming 双向流Flow Control 流控制Socket Resumption 连接恢复Message passing 消息传递模型Trans…

RSocket 从入门到落地:两种微服务对比

✏️ Pic by Alibaba Tech on Facebook 技术实践的作用在于:除了用于构建业务,也是为了验证某项技术或框架是否值得大规模推广。 这是《RSocket 从入门到落地》系列文章的第三篇,来一起对比下开发微服务应用和微服务之间的网络通讯。该系列文…

开源的技术底座技术中台spring cloud Rsocket 微服务

一、项目背景 企业对新技术、用户体验、需求响应、交互协作提出了新的要求 1、应用新技术: 物联网、人工智能、大数据挖掘和分析、机器人、自动化等 2、重用核心能力: 使组织能够在其ERP核心解决方案的基础上进行构建,并为“下一步做什么”铺…

spring响应式编程13 RSocket:一种新的高性能网络通信协议

前面几讲我们讨论了如何使用 WebFlux 构建响应式 Web 服务的实现方案。WebFlux 和 WebMVC 一样,都是基于 HTTP 协议实现请求-响应式的交互方式。这种交互方案很简单,但不够灵活,也无法应对所有的响应式应用场景。那么,有没有在网络…

RSocket 学习(二):HTTP VS WebSocket VS RSocket

在比对 HTTP、WebSocket、RSocket 之前,我们先通过下面这张 OSI 七层模型的图快速梳理一下网络通信的面貌, 以便后续更好地理解它们。 osi model.png 一. HTTP 的特性 超文本传输协议(英语:HyperText Transfer Protocol&#xff0…

基于RSocket协议实现客户端与服务端通信

RSocket基础开发demo package com.pshdhx.rsocket;import io.rsocket.Payload; import io.rsocket.RSocket; import io.rsocket.util.DefaultPayload; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; import …

响应式编程之网络新约:RSocket

响应式reactive是Java中高效应用的下一个前沿,但它目前主要有两个障碍:数据访问和网络。RSocket是一种新的第7层语言无关的应用网络协议(解决后者),它由Facebook,Netifi和Pivotal等工程师开发,提…

一篇文章了解RSocket协议

RSocket是一个类似于HTTP的通讯协议。在了解Rsocket协议之前,先简单介绍下HTTP协议。 之所以推出springboot的技术,一个原因是因为前后端设计的分离。因为基于HTTP协议可以直接返回REST数据内容。 REST是一个简单且容易使用的异构处理架构,R…

RSocket 学习(一):初探

girl.jpg 一. RSocket 介绍 RSocket 是一种二进制字节流传输协议,位于 OSI 七层模型中的5、6层,对应 TCP/IP 模型中的应用层。RSocket 并没有规定必须使用何种底层传输层协议,开发者可以使用不同的底层传输协议,包括 TCP、WebSock…

RSocket——Http协议的替代者

1. 简介 RSocket是一种二进制的点对点通信协议,是一种新的网络通信第七层协议。旨在用于分布式应用程序中。从这个意义上讲,RSocket是HTTP等其他协议的替代方案。它是一种基于Reactive Streams规范具有异步,背压的双向,多路复用&…

java-语言学习-eclipse安装java汉化包

java的汉化: 1.打开链接:https://www.eclipse.org/babel/ 2.进入网页后,往下翻一点,看到一个download(下图红框所示),点开。 3.进入一个页面后,往下翻一点点,看到有几…

安装Eclipse的中文语言包

安装Eclipse的中文语言包 下载语言包 1、进入网址 http://www.eclipse.org/babel 2、对应版本下载中文语言包 3、替换Eclipse软件安装文件的features、plugins,再次启动加载 4、替换出现The Eclipse executable launcher was unable to locate its companion l…

Eclipse 官方简体中文语言包下载地址及安装方法

转自: http://www.cnblogs.com/yaotong/archive/2011/12/28/2305421.html 打开Eclipse Babel Project 主页: http://www.eclipse.org/babel/downloads.php 根据Eclipse的版本找到相应的插件地址,复制下来。 进入Eclipse,选择Help->Install New Softwa…

Eclipse-中文语言包

Eclipse-中文语言包 效果图 版本使用中文语言包 下载过程 点击如下 打开插件市场 填写链接 填写此链接地址https://download.eclipse.org/technology/babel/update-site/latest/到下图 简体中文选择 简体中文选择 选择允许协议 安装代码提示插件codota 是什么 打开插件市场 搜…

Eclipse汉化 中文语言包下载安装 Babel Language Pack

相关链接 Java & Eclipse & Maven 使用配置方法 Eclipse平台上新建Java项目使用Junit测试 如何在Eclipse平台使用git从GitHub上下载文件至本地及管理本地git项目 Eclipse汉化 中文语言包下载安装 Babel Language Pack 点击进入Eclipse Babel Project 下拉可见 选择与自…

eclipse中文语言包安装(别看网上那些乱七八糟的,我这个最简单)

一、安装好JDK和eclispe。(这个步骤不用多说了) 二、步骤 1、找语言包并下载:https://www.eclipse.org/babel/downloads.php 找到汉化文件下载备用。 2、把下载好的文件复制到 eclipse的dropins文件夹中。 3、启动eclispe,汉化…

Eclipse语言包在官网下载不了-解决方案

可能家里的网络不好,在官网语言包一直出现这个问题,网上找了很久没找到解决方案,应该是家里网络和对方服务器不对付。就发现有下面这个选项,选了nanjing的节点就解决了。