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 ...
最新文章
- ptyhon时间处理
- JavaScript之共享onload
- LeetCode 100.相同的树(C++)
- C#LeetCode刷题之#728-自除数(Self Dividing Numbers)
- C++中const的一些知识点
- iOS SQLite语法基础
- SQL server 2016数据库 下载安装
- iOS常用三方库、插件、知名技术博客、常用开发工具使用介绍等等,大家可以一次性下载了!
- 网络故障排除的4款软件
- MySQL免安装版配置部署详细教程
- 计算机应用技术专业硕士学位,南华大学计算机应用技术专业硕士学位研究生培养方案...
- 移远BC35-G固件升级
- RNA-seq 详细教程:似然比检验(13)
- INSERT DESC UPDATE SELECT
- 好书整理系列之-设计模式:可复用面向对象软件的基础 4
- 安装部署VMware vSphere 5.5文档 (6-2) 为IBM x3850 X5服务器安装配置VMware ESXi
- 什么是智能合约,区块链和智能合约的关系及原理
- 68 文本左右对齐
- 机器学习BP算法及矩阵求导
- 计算语言学课程笔记(一)
热门文章
- AS3,MXML,Flex,Flex Builder,Flash Builder,Flash,AIR,Flash Player之关系
- 各种DBMS和Sql语言
- 使用tf.data 加载文件夹下的图片集合并分类
- SPI NAND Flash和SPI NOR Flash的区别
- mhdd扫描磁盘坏道快速使用方法
- 时髦白领英语100句
- Android 获取手机的 IMEI 值
- Springboot+vue实现前后端分离智能化考试系统
- 打散线条lisp_几个很有用的CAD的lisp程序
- 团队项目之现场编程(牛码)