RPC

rpc是什么?

①在分布式计算,远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。
RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。

rpc详解

RPC模式分为三层,
①用户和服务器(负责处理业务逻辑,调用本地 Stub);
②Stub处理客户端和服务端约定好的语法、语义的封装和解封装;
③RPCRuntime负责最底层的网络传输。

rpc解决的三大问题

基于RPC模式,一个 RPC 框架基本需要解决 协议约定、网络传输、服务发现这三个问题。

①协议约定问题(Stub) 指的是怎么规定远程调用的语法,怎么传参数等。用上面的类比,你怎么告诉你的朋友要玩什么游戏?是直接说游戏的名字,王者荣耀,绝地求生,还是说简称,王者,吃鸡,或者用 1 代表王者,2 代表吃鸡,只说 1 或 2。

②传输协议问题(RPCRuntime) 指的是在网络发生错误、重传、丢包或者有性能问题时怎么办?用上面的类比,你打电话时,刚说了打什么游戏,但是还没有收到对方回复,电话信号不好断了,这时候怎么处理?

③服务发现问题(插件比如:etcd) 指的是如何知道服务端有哪些服务可以调用,从哪个端口访问?服务端可能实现多个远程调用,在不同的进程上,随机监听端口,客户端要怎么才能知道这些端口呢?

rpc调用过程

  1. 调用者(客户端Client)以本地调用的方式发起调用;
  2. Client stub(客户端存根)收到调用后,负责将被调用的方法名、参数等打包编码成特定格式的能进行网络传输的消息体;
  3. Client stub将消息体通过网络发送给服务端;
  4. Server stub(服务端存根)收到通过网络接收到消息后按照相应格式进行拆包解码,获取方法名和参数;
  5. Server stub根据方法名和参数进行本地调用;
  6. 被调用者(Server)本地调用执行后将结果返回给server stub;
  7. Server stub将返回值打包编码成消息,并通过网络发送给客户端;
  8. Client stub收到消息后,进行拆包解码,返回给Client;
  9. Client得到本次RPC调用的最终结果。

GRPC

grpc是什么?

gRPC客户端和服务端可以在多种环境中运行和交互;例如服务端使用Java写;可以用Go语言写客户端调用
①gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等),本篇只介绍 Golang 的 gRPC 使用。因为 gRPC 对 HTTP/2 协议的支持使其在 Android、IOS 等客户端后端服务的开发领域具有良好的前景。
gRPC 提供了一种简单的方法来定义服务,同时客户端可以充分利用 HTTP/2 stream 的特性,从而有助于节省带宽、降低 TCP 的连接次数、节省CPU的使用等。

rpc和grpc之间的关系是什么?

①rpc是一种协议,grpc是基于rpc协议实现的一种框架。

grpc的解决rpc三大问题

①协议约定。gRPC 的协议是 Protocol Buffers,是一种压缩率极高的序列化协议,Google 在 2008 年开源了 Protocol Buffers,支持多种编程语言,所以 gRPC 支持客户端与服务端可以用不同语言实现。

②传输协议。gRPC 的数据传输用的是 Netty Channel, Netty 是一个高效的基于异步 IO 的网络传输架构。Netty Channel 中,每个 gRPC 请求封装成 HTTP 2.0 的 Stream。

③服务发现。gRPC 本身没有提供服务发现的机制,需要通过其他组件。

Protocol Buffers

Protocol Buffers 是一种与语言、平台无关,可扩展的序列化结构化数据的方法,常用于通信协议,数据存储等等。相较于 JSON、XML,它更小、更快、更简单,因此也更受开发人员的青眯。

gRPC与Protobuf介绍

  • 微服务架构中每个服务对应的代码库都是独立运行的;gRPC 可以实现微服务,将大的项目拆分为多个小且独立的业务模块;即服务;各服务之间使用高效的protobuf协议进行RPC调用
  • 可以使用proto files 创建gRPC服务;使用message类型来定义方法参数和返回类型
  • Protobuf实际是一套类似Json或者XML的数据传输格式和规范,用于不同应用或进程之间进行通信时使用。通信时所传递的信息是通过Protobuf定义的message数据结构进行打包,然后编译成二进制的码流再进行传输或者存储。

Protobuf的优点

  • 足够简单

  • 序列化后体积很小:消息大小只需要XML的1/10 ~ 1/3

  • 解析速度快:解析速度比XML快20 ~ 100倍

  • 多语言支持

  • 更好的兼容性,Protobuf设计的一个原则就是要能够很好的支持向下或向上兼容。
    原文链接:https://blog.csdn.net/wzb_wzt/article/details/107367120

小结

grpc是一种实现了rpc协议的框架,并且分别通过protocol buffer、netty channel 以及服务发现组件解决rpc的协议约定、传输协议、服务发现三大问题。

优缺点

优点:

grpc
Protocol Buffers 压缩性高,速度快。
HTTP 2.0 流传输。
支持多语言。

缺点:

grpc
可读性差。
对浏览器支持有限。
外部组件支持较差。

rpc和传统的http接口的区别

  1. 服务器工作模式
  • HTTP 采用浏览器 —— 服务器工作模式(B/S)不同
  • RPC 采用客户端 —— 服务器(C/S)工作模式,请求程序是一个客户端(Client),而远程服务提供程序是一个服务器(Server)。
    当执行一个 RPC 调用时,客户端程序首先会发送一个带有参数的请求到服务端,然后等待服务端响应;在服务端,服务进程保持监听状态,当客户端请求到达时,服务端通过解析请求参数计算出结果,并向客户端发送响应信息,然后继续等待下一个客户端请求。客户端接收到来自服务端的响应信息后,可以执行相应的业务逻辑,也可以继续进行其它 RPC 调用。
  1. 传输协议
  • RPC:可以基于TCP协议,也可以基于HTTP协议。
  • HTTP:基于HTTP协议。
  1. 传输效率
  • RPC:使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率。
  • HTTP:如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为一个RPC来使用的,这时标准RPC框架更多的是服务治理。
  1. 性能消耗
    RPC:可以基于thrift实现高效的二进制传输。
    HTTP:大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能。
    长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。

  2. 负载均衡

  • RPC:基本都自带了负载均衡策略。
  • HTTP:需要配置Nginx,HAProxy来实现。
  1. 服务治理
  • RPC:能做到自动通知,不影响上游。
  • HTTP:需要事先通知,修改Nginx/HAProxy配置。
  1. 总结
    RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。

参考

  • RPC和GRPC
  • gRPC的简介与Protobuf的使用

RPC和GRPC和Http相关推荐

  1. Google高性能RPC框架gRPC 1.0.0发布

    鉴于gRPC已进入稳定版分支,并对应用于生产中准备就绪,Google发布了gRPC 1.0. gRPC源于被称为Stubby的Google内部项目,早期是用于一些Google内部服务间的通信.18个月 ...

  2. 高性能RPC框架gRPC竟恐怖如斯~

    RPC.gRPC.Thrift.HTTP,大家知道它们之间的联系和区别么?这些都是面试常考的问题,今天带大家先搞懂 RPC 和 gRPC. 在讲述 gRPC 之前,我们需要先搞懂什么是 RPC. 不 ...

  3. python rpc框架-python使用rpc框架gRPC的方法

    概述 gRPC 是谷歌开源的一个rpc(远程程序调用)框架,可以轻松实现跨语言,跨平台编程,其采用gRPC协议(基于HTTP2). rpc: remote procedure call, 翻译过来就是 ...

  4. HTTP,TCP, socket,RPC 与gRPC都是啥?

    此文章为转载, 转载地址: https://www.jianshu.com/p/959030de7f1c TCP/HTTP与socket 首先回顾下计算机网络的五(七)层协议:物理层.数据链路层.网络 ...

  5. python go rpc_Python RPC 之 gRPC

    转http://blog.csdn.net/coderinfo/article/details/60883030 gRPC 简介: gRPC 是一款高性能.开源的 RPC 框架,产自 Google,基 ...

  6. 【微服务】RPC、gRPC 和 C/S 架构的基本实现(Golang)

    一.RPC 1.1 what & why need? 一言以蔽之,RPC 是分布式系统的基石. RPC(Remote Procedure Call),中文名为远程过程调用.它最初由 Xerox ...

  7. SpringBoot整合Grpc实现跨语言RPC通讯

    什么是gRPC gRPC是谷歌开源的基于go语言的一个现代的开源高性能RPC框架,可以在任何环境中运行.它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查 ...

  8. gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架

    gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 Google Guava官方教程(中文版 ...

  9. gRPC简介及简单使用(C++)

    gRPC是一个现代的.开源的.高性能远程过程调用(RPC)框架,可以在任何平台运行.gRPC使客户端和服务器端应用程序能够透明地进行通信,并简化了连接系统的构建.gRPC支持的语言包括C++.Ruby ...

最新文章

  1. python贴吧发帖脚本-Python实现自动添加脚本头信息的示例代码
  2. 直播技术初体验,简单实现直播不同阶段
  3. Android Scrollview嵌套RecyclerView导致滑动卡顿问题解决(屡试不爽)
  4. 扫地机器人水箱背景_你真的懂扫地机器人吗?这些不为人知的小细节值得一看...
  5. 【kafka】Kafka JMX监控报错 Failed to get broker metrics for BrokerIdentity
  6. 什么是创新型人才,创新型企业?
  7. 复制粘贴发明人、Java 和互联网创建者相继去世,向初代互联网大佬致敬!
  8. 集群之间数据拷贝distcp性能的调优
  9. 《MYSQL必知必会》—1.了解SQL
  10. 记一次RAID阵列的迁移经历
  11. Windows内核文件
  12. Jquery头像编辑器
  13. 教你修改Win7系统的登录界面背景
  14. python cv2 绘制不规则形状的最小外接矩形、最大内接矩形、最大内接圆、最小外接圆、拟合椭圆
  15. Android 微信聊天记录、联系人备份并导出为表格
  16. 考研数学:常见的的泰勒公式
  17. Crash:reportSizeConfigurations ActivityRecord not found for Token xxx
  18. Android 源码 图形系统之请求布局
  19. 2007执业医师成绩查询
  20. 《学成在线 》 网站制作源码及总结html+css

热门文章

  1. GO 读 yaml 的坑
  2. Tableau图表 | 14、动态图(含1800-2018年世界人均收入与期望寿命动图操作实例)
  3. 超值的收藏得Python 100个小技巧,入门学习必备小知识
  4. 手把手教你Windows+Linux双系统的安装与卸载
  5. 公益领域:长安链ChainMaker在全民义务植树中的应用实践
  6. Instagram社会化营销从入门到精通(一)完善主页资料 -抓眼球的个人简介(5)
  7. 从零开始搭建saas系统(1)
  8. Linux 常用命令之top
  9. Onyx 0.9.11 发布,分布式计算系统
  10. iOS 腾讯云移动直播SDK对接(一)