浅入浅出RPC框架 | 青训营笔记

99 阅读2分钟

这是我参与 第五届青训营 伴学笔记创作活动的第14天。

重点内容

本节课老师从本地函数调用的函数为切入点,结合抖音用户下单商品的例子引出RPC框架,介绍了RPC框架的作用、概念和核心组件以及字节内部自研RPC框架。对RPC框架有了基本的了解。

我主要谈一下我对RPC框架作用和核心概念的理解。

什么是RPC?

谈RPC之前,先谈一下本地常见的函数调用。

func main(){
    var a = 1
    var b = 2
    result := calculate(a,b)
    fmt.Println(result)
    return
}

func caculate(x,y int){
    z := x*y
    return z
}

本地函数调用就是在同一块代码中,或者说是本机代码中调用自己的函数,不涉及其他机器上并且自己没有的函数,操作都是在本地电脑上进行的。即我们学生接触最多的函数调用。

那如果不是自己本地函数调用呢?自己不想重复造轮子,或者公司业务需要,想调用别人电脑上的函数咋搞?

远程调用函数(RPC)登场。

比如这样的场景。

image.png

网上商城是一个函数,支付函数又是另一个机器上的函数。保证支付服务能顺利进行,这就要依靠RPC了。

RPC的出现就是为了让你调用远程方法像调用本地方法一样简单。 记住这一句话即可。

RPC原理

RPC的原理可以追溯到这张图。

image.png

翻译一下,整个RPC的核心功能可以由5部分组成:

  • 客户端:调用远程方法。
  • 客户端 Stub :代理类。把你调用方法、类、方法参数等信息传递到服务端。
  • 网络传输。
  • 服务端 Stub :这个不是代理类。 接收到客户端执行方法的请求后,去指定对应的方法然后返回结果给客户端的类。
  • 服务端:提供远程方法的一端。