`
darrenzhu
  • 浏览: 804173 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

既然有http 请求,为什么还要用rpc调用?

阅读更多
https://www.zhihu.com/question/41609070?sort=created
链接:https://www.zhihu.com/question/41609070/answer/191965937

这个问题其实是有理解误区的,首先 http 和 rpc 并不是一个并行概念。rpc是远端调用协议, 包含传输协议和编码协议。传输协议包含: 如著名的 [gRPC](grpc / grpc.io) 使用的 http2 协议,也有如dubbo一类的自定义报文的tcp协议。编码协议包含: 如基于文本编码的 xml json,也有二进制编码的 protobuf binpack 等。因此我理解的你想问的问题应该是:为什么要使用自定义 tcp 协议的 rpc 做后端进程通信?要解决这个问题就应该搞清楚 http 使用的 tcp 协议,和我们自定义的 tcp 协议在报文上的区别。首先要否认一点 http 协议相较于自定义tcp报文协议,增加的开销在于连接的建立与断开。http协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁的创建和销毁连接。二一要说的是http也可以使用protobuf这种二进制编码协议对内容进行编码,因此二者最大的区别还是在传输协议上。通用定义的http1.1协议的tcp报文包含太多废信息,一个POST协议的格式大致如下HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
  <body>Hello World</body>
</html>
即使编码协议也就是body是使用二进制编码协议,报文元数据也就是header头的键值对却用了文本编码,非常占字节数。如上图所使用的报文中有效字节数仅仅占约 30%,也就是70%的时间用于传输元数据废编码。当然实际情况下报文内容可能会比这个长,但是报头所占的比例也是非常可观的。那么假如我们使用自定义tcp协议的报文如下

报头占用的字节数也就只有16个byte,极大地精简了传输内容。这也就是为什么后端进程间通常会采用自定义tcp协议的rpc来进行通信的原因。-- 分割线 2017.08.03 --可能回答里面没有描述清楚,这个回答仅仅是用来纠正victory的回答的。所谓的效率优势是针对http1.1协议来讲的,http2.0协议已经优化编码效率问题,像grpc这种rpc库使用的就是http2.0协议。这么来说吧http容器的性能测试单位通常是kqps,自定义tpc协议则通常是以10kqps到100kqps为基准简单来说成熟的rpc库相对http容器,跟多的是封装了“服务发现”,"错误重试"一类面向服务的高级特性。可以这么理解,rpc框架是面向服务的更高级的封装。如果把一个http server容器上封装一层服务发现和函数代理调用,那它就已经可以做一个rpc框架了。所以为什么要用rpc调用?因为良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少了这些特性。

  • 大小: 20.5 KB
分享到:
评论

相关推荐

    Java RPC调用示例

    Java RPC(Remote Procedure Call)调用是分布式系统中常见的通信方式,它允许一个程序在不关心远程系统具体实现的情况下调用另一个网络上的程序。在这个Java RPC调用示例中,我们将探讨RPC的基本概念、实现机制以及...

    RPC(远程过程调用)

    - 通信协议:RPC框架负责将调用请求转化为网络数据包,通过网络发送到服务器,并将返回结果解析为调用者可理解的形式。 2. **RPC的工作流程**: - 请求封装:客户端将调用参数打包成特定格式的请求。 - 发送请求...

    java自制简单RPC调用例子

    RPC(Remote Procedure Call)是一种分布式计算技术,允许在一台计算机上的程序调用另一台计算机上的程序,就像调用本地函数一样。在这个Java自制简单RPC调用例子中,我们看到项目结构包括三个模块:API、客户端...

    rpc远程调用库C语言实现

    RPC(Remote Procedure Call)是一种进程间通信技术,允许在一台计算机上的程序调用另一台计算机上的程序,使得分布式系统能够像调用本地函数一样调用远程服务。在本主题中,我们将深入探讨如何使用C语言实现RPC,并...

    rpc远程调用使用说明&源码

    RPC(Remote Procedure Call)远程过程调用是一种计算机通信协议,允许一个程序在某处执行,通过网络调用另一台计算机上的程序,就像它是一个本地函数一样。这种技术在分布式系统和微服务架构中广泛使用,简化了不同...

    基于socket实现的rpc调用demo

    RPC(Remote Procedure Call)是一种进程间通信技术,它允许程序在不同的网络环境下调用另一台计算机上的函数或方法,就像是直接调用本地函数一样简单。本示例是基于Socket实现的RPC调用Demo,让我们深入探讨一下这...

    基于thrift的RPC调用实例

    RPC(远程过程调用)是一种在分布式系统中执行远程计算的方法,使得客户端可以在不理解远程服务器内部实现的情况下,像调用本地函数一样调用远程服务器上的服务。在本实例中,我们将关注一个基于Thrift的RPC调用实现...

    rpc调用的一个demo

    5. **服务执行**:服务器根据请求调用相应的服务方法。 6. **响应构建**:服务方法执行完成后,打包返回结果。 7. **序列化**:将响应对象转换为字节流。 8. **网络传输**:将序列化的响应发送回客户端。 9. **反...

    远程过程调用RPC生成工具

    RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,它允许一个程序请求另一个地址空间(通常是远程计算机上的程序)执行代码,并等待结果返回。RPC使得程序能够像调用本地函数一样调用位于远程...

    phprpc调用示例

    phprpc 的delphi调用 一般常用的调用方法 htdocs http://127.0.0.1/ 为WEB根目录 PHPRPC演示 php版本调用 http://127.0.0.1/demo-phpclient.php 调用demo-phpserver.php发布的HelloWorld()方法 demo1 ...

    用RPC机制把本地调用转换成远程调用

    ### 使用RPC机制将本地调用转换为远程调用 #### 概述 远程过程调用(RPC, Remote Procedure Call)是一种通信协议,它允许在一台计算机上的程序调用另一台计算机上的子程序或函数,而无需程序员明确了解底层通信...

    Android-对OkHttp3请求库简单封装适配Json-Rpc调用协议

    json-rpc是基于json的跨语言远程调用协议,比xml-rpc、webservice等基于文本的协议传输数据格小;相对hessian、java-rpc等二进制协议便于调试、实现、扩展,是非常优秀的一种远程调用协议。

    rpc 远程调用

    RPC(Remote Procedure Call)远程过程调用是一种计算机通信协议,允许程序在一台计算机上执行另一台计算机上的代码,而无需了解底层网络协议的细节。RPC使得分布式系统中的组件能够像调用本地方法一样调用远程服务...

    c# 实现远程调用(rpc) remoting

    首先,让我们深入了解一下什么是RPC(Remote Procedure Call):RPC是一种协议,使得一个程序可以在执行过程中无感知地调用另一个位于不同地址空间的程序,通常是网络上的另一台计算机上的程序。RPC简化了分布式系统...

    jsonrpc-frontend:前端应用程序发送 json-rpc 请求进行测试

    JSON-RPC(JavaScript Object ...总的来说,jsonrpc-frontend是一个为前端开发者设计的实用工具,它简化了JSON-RPC请求的发送和测试,对于那些依赖JSON-RPC通信的前端应用,它是一个必不可少的开发和测试辅助工具。

    Apache RPC调用实例

    **Apache RPC调用实例** Apache远程过程调用(Remote Procedure Call, RPC)是一种通信协议,允许网络上的一个程序调用另一个远程系统上的程序,并且看起来就像调用本地函数一样。在分布式系统中,RPC框架扮演着至...

    jsonRPC java远程调用 返回json

    jsonRPC java远程调用(请求) 返回json

    java-rpc远程过程调用

    可能包含的类有` RpcClient `用于客户端的请求,` RpcServer `处理服务端的请求,以及一些示例服务接口和实现。代码应该详细展示了如何创建并使用这些组件,以及如何处理网络通信和序列化。 学习这个简单的Java-RPC...

    手写rpc rpc简单源码 rpc源码学习 rpc过程了解 rpc通信原理

    RPC(Remote Procedure Call)远程过程调用是一种计算机通信协议,允许程序在一台计算机上执行另一台计算机上的程序,而无需了解底层网络协议的细节。它为开发者提供了一种透明调用远程服务的方式,使得分布式系统...

    WebServices服务接口调用---基于rpc方式应用

    本主题将深入探讨基于RPC(Remote Procedure Call)方式的WebServices应用,特别是使用sun-jaxws.xml配置文件的方法。 RPC是一种使客户端能够执行远程服务器上的方法的技术,它隐藏了底层的网络通信细节,使得调用...

Global site tag (gtag.js) - Google Analytics