RPC和GRPC和Http
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调用过程
- 调用者(客户端Client)以本地调用的方式发起调用;
- Client stub(客户端存根)收到调用后,负责将被调用的方法名、参数等打包编码成特定格式的能进行网络传输的消息体;
- Client stub将消息体通过网络发送给服务端;
- Server stub(服务端存根)收到通过网络接收到消息后按照相应格式进行拆包解码,获取方法名和参数;
- Server stub根据方法名和参数进行本地调用;
- 被调用者(Server)本地调用执行后将结果返回给server stub;
- Server stub将返回值打包编码成消息,并通过网络发送给客户端;
- Client stub收到消息后,进行拆包解码,返回给Client;
- 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接口的区别
- 服务器工作模式
- HTTP 采用浏览器 —— 服务器工作模式(B/S)不同
- RPC 采用客户端 —— 服务器(C/S)工作模式,请求程序是一个客户端(Client),而远程服务提供程序是一个服务器(Server)。
当执行一个 RPC 调用时,客户端程序首先会发送一个带有参数的请求到服务端,然后等待服务端响应;在服务端,服务进程保持监听状态,当客户端请求到达时,服务端通过解析请求参数计算出结果,并向客户端发送响应信息,然后继续等待下一个客户端请求。客户端接收到来自服务端的响应信息后,可以执行相应的业务逻辑,也可以继续进行其它 RPC 调用。
- 传输协议
- RPC:可以基于TCP协议,也可以基于HTTP协议。
- HTTP:基于HTTP协议。
- 传输效率
- RPC:使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率。
- HTTP:如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为一个RPC来使用的,这时标准RPC框架更多的是服务治理。
性能消耗
RPC:可以基于thrift实现高效的二进制传输。
HTTP:大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能。
长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。负载均衡
- RPC:基本都自带了负载均衡策略。
- HTTP:需要配置Nginx,HAProxy来实现。
- 服务治理
- RPC:能做到自动通知,不影响上游。
- HTTP:需要事先通知,修改Nginx/HAProxy配置。
- 总结
RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。
参考
- RPC和GRPC
- gRPC的简介与Protobuf的使用
RPC和GRPC和Http相关推荐
- Google高性能RPC框架gRPC 1.0.0发布
鉴于gRPC已进入稳定版分支,并对应用于生产中准备就绪,Google发布了gRPC 1.0. gRPC源于被称为Stubby的Google内部项目,早期是用于一些Google内部服务间的通信.18个月 ...
- 高性能RPC框架gRPC竟恐怖如斯~
RPC.gRPC.Thrift.HTTP,大家知道它们之间的联系和区别么?这些都是面试常考的问题,今天带大家先搞懂 RPC 和 gRPC. 在讲述 gRPC 之前,我们需要先搞懂什么是 RPC. 不 ...
- python rpc框架-python使用rpc框架gRPC的方法
概述 gRPC 是谷歌开源的一个rpc(远程程序调用)框架,可以轻松实现跨语言,跨平台编程,其采用gRPC协议(基于HTTP2). rpc: remote procedure call, 翻译过来就是 ...
- HTTP,TCP, socket,RPC 与gRPC都是啥?
此文章为转载, 转载地址: https://www.jianshu.com/p/959030de7f1c TCP/HTTP与socket 首先回顾下计算机网络的五(七)层协议:物理层.数据链路层.网络 ...
- python go rpc_Python RPC 之 gRPC
转http://blog.csdn.net/coderinfo/article/details/60883030 gRPC 简介: gRPC 是一款高性能.开源的 RPC 框架,产自 Google,基 ...
- 【微服务】RPC、gRPC 和 C/S 架构的基本实现(Golang)
一.RPC 1.1 what & why need? 一言以蔽之,RPC 是分布式系统的基石. RPC(Remote Procedure Call),中文名为远程过程调用.它最初由 Xerox ...
- SpringBoot整合Grpc实现跨语言RPC通讯
什么是gRPC gRPC是谷歌开源的基于go语言的一个现代的开源高性能RPC框架,可以在任何环境中运行.它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查 ...
- gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架
gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 Google Guava官方教程(中文版 ...
- gRPC简介及简单使用(C++)
gRPC是一个现代的.开源的.高性能远程过程调用(RPC)框架,可以在任何平台运行.gRPC使客户端和服务器端应用程序能够透明地进行通信,并简化了连接系统的构建.gRPC支持的语言包括C++.Ruby ...
最新文章
- python贴吧发帖脚本-Python实现自动添加脚本头信息的示例代码
- 直播技术初体验,简单实现直播不同阶段
- Android Scrollview嵌套RecyclerView导致滑动卡顿问题解决(屡试不爽)
- 扫地机器人水箱背景_你真的懂扫地机器人吗?这些不为人知的小细节值得一看...
- 【kafka】Kafka JMX监控报错 Failed to get broker metrics for BrokerIdentity
- 什么是创新型人才,创新型企业?
- 复制粘贴发明人、Java 和互联网创建者相继去世,向初代互联网大佬致敬!
- 集群之间数据拷贝distcp性能的调优
- 《MYSQL必知必会》—1.了解SQL
- 记一次RAID阵列的迁移经历
- Windows内核文件
- Jquery头像编辑器
- 教你修改Win7系统的登录界面背景
- python cv2 绘制不规则形状的最小外接矩形、最大内接矩形、最大内接圆、最小外接圆、拟合椭圆
- Android 微信聊天记录、联系人备份并导出为表格
- 考研数学:常见的的泰勒公式
- Crash:reportSizeConfigurations ActivityRecord not found for Token xxx
- Android 源码 图形系统之请求布局
- 2007执业医师成绩查询
- 《学成在线 》 网站制作源码及总结html+css
热门文章
- GO 读 yaml 的坑
- Tableau图表 | 14、动态图(含1800-2018年世界人均收入与期望寿命动图操作实例)
- 超值的收藏得Python 100个小技巧,入门学习必备小知识
- 手把手教你Windows+Linux双系统的安装与卸载
- 公益领域:长安链ChainMaker在全民义务植树中的应用实践
- Instagram社会化营销从入门到精通(一)完善主页资料 -抓眼球的个人简介(5)
- 从零开始搭建saas系统(1)
- Linux 常用命令之top
- Onyx 0.9.11 发布,分布式计算系统
- iOS 腾讯云移动直播SDK对接(一)