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. ptyhon时间处理
  2. JavaScript之共享onload
  3. LeetCode 100.相同的树(C++)
  4. C#LeetCode刷题之#728-自除数(Self Dividing Numbers)
  5. C++中const的一些知识点
  6. iOS SQLite语法基础
  7. SQL server 2016数据库 下载安装
  8. iOS常用三方库、插件、知名技术博客、常用开发工具使用介绍等等,大家可以一次性下载了!
  9. 网络故障排除的4款软件
  10. MySQL免安装版配置部署详细教程
  11. 计算机应用技术专业硕士学位,南华大学计算机应用技术专业硕士学位研究生培养方案...
  12. 移远BC35-G固件升级
  13. RNA-seq 详细教程:似然比检验(13)
  14. INSERT DESC UPDATE SELECT
  15. 好书整理系列之-设计模式:可复用面向对象软件的基础 4
  16. 安装部署VMware vSphere 5.5文档 (6-2) 为IBM x3850 X5服务器安装配置VMware ESXi
  17. 什么是智能合约,区块链和智能合约的关系及原理
  18. 68 文本左右对齐
  19. 机器学习BP算法及矩阵求导
  20. 计算语言学课程笔记(一)

热门文章

  1. AS3,MXML,Flex,Flex Builder,Flash Builder,Flash,AIR,Flash Player之关系
  2. 各种DBMS和Sql语言
  3. 使用tf.data 加载文件夹下的图片集合并分类
  4. SPI NAND Flash和SPI NOR Flash的区别
  5. mhdd扫描磁盘坏道快速使用方法
  6. 时髦白领英语100句
  7. Android 获取手机的 IMEI 值
  8. Springboot+vue实现前后端分离智能化考试系统
  9. 打散线条lisp_几个很有用的CAD的lisp程序
  10. 团队项目之现场编程(牛码)