RPC初解

系列文章目录


前言

RPC是分布式的基石,可以将各个业务代码底层框架隔离开来,快速迭代更改业务代码,RPC也可以将不同语言如c++、Python、Go、Java等业务组件跨语言互相调用。

为什么用 RPC,不用 HTTP?

RPC 是一种设计,就是为了解决不同服务之间的调用问题,完整的 RPC 实现一般会包含有 传输协议 和 序列化协议 这两个。而 HTTP 只是一种传输协议。


一、RPC?

RPC(Remote Procedure Call)远程过程调,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序。可跨进程、跨计算机、跨系统调用函数

RPC是一种服务器-客户端(Client/Server模式
RPC也是一种进程间通信的模式,程序分布在不同的地址空间里。如果在同一主机里,RPC可以通过不同的虚拟地址空间(即便使用相同的物理地址)进行通讯,而在不同的主机间,则通过不同的物理地址进行交互


二、RPC的运行模式

动态模式:依赖语言特性实现动态调用(反射、内省) ,python反射 Java,Php,Go
静态模式:(Interface Definition Language),生成存根代码stub,与应用代码一起编译 :c++ java
在这里插入图片描述

预编译接口 IDL 可以认为业务能力的一种描述,IDL只有一种,但是存根代码Stub可以编译为很多种语言

三、数据序列化

远程调用过程中双方不再同一个内存里,无法直接传递函数的参数,因此需要客户端把参数转换成字节流,传给服务端,然后服务端将字节流转换成自身能读取的格式,是一个序列化反序列化的过程。

互联网上的机器大都通过TCP/IP协议相互访问,但TCP/IP只是往远端发送了一段二进制数据,因此为了建立服务还有很多问题需要抽象:

  1. 数据以什么格式传输?不同机器间,网络间可能是不同的字节序,直接传输内存数据显然是不合适的.
  2. 随着业务变化,消息的字段往往要增加或删减,怎么兼容前后不同版本的格式

3.1、文本型 json/xml

它们的结构就可以直接通过它的内容体现出来,所以它是一种显式结构的消息协议,可读性非常棒,但是它的缺点也很明显,有太多的冗余信息。比如每个字符串都使用双引号来界定边界,key/value 之间必须有冒号分割,对象之间必须使用大括号分割等等。。

{
     "firstName": "John",
     "lastName": "Smith",
     "gender": "male",
     "age": 25,
     "address": 
     {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": "10021"
     },
 }

3.2、二进制 protobuf

是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单,缺点是可读性差。

四、RPC的调用

RPC的调用方式可以大体分为 同步调用和异步调用,基本如下:

AMI 异步方法调用(client)
AMD 异步方法分派(server) 诸多个client请求,怎么样高效并行分派 ,工作线程池

同步调用(阻塞)
单向调用 例如 心跳(client -> sever),
双向调用(连接复用)(Bidirection) 网络中存在 NAT,怎么反向复用。

五、RPC的Runtime层

RPC的runtime层,控制层,负责以下几方面的功能:
网络通信
异常处理
超时处理
流量控制
幂等问题 ,网络不好,client 重传,sever只需一次调用
TCP的incast问题: client 访问多server,造成网络堵塞

六、RPC的负载均衡

round-robin 服务器能力均等
adap 自适应学习

七、RPC 传输协议,TCP?HTTP?

使用 TCP 和使用 HTTP 各有优势:

传输效率:

TCP,通常自定义上层协议,可以让请求报文体积更小
HTTP:如果是基于HTTP 1.1 的协议,请求中会包含很多无用的内容

性能消耗, 主要在于序列化和反序列化的耗时

TCP,可以基于各种序列化框架进行,效率比较高
HTTP,大部分是通过 json 来实现的,字节大小和序列化耗时都要更消耗性能,所以可以跨语言调用

跨平台:

TCP:通常要求客户端和服务器为统一平台
HTTP:可以在各种异构系统上运行

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值