这是我参与 第五届青训营 伴学笔记创作活动的第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)登场。
比如这样的场景。
网上商城是一个函数,支付函数又是另一个机器上的函数。保证支付服务能顺利进行,这就要依靠RPC了。
RPC的出现就是为了让你调用远程方法像调用本地方法一样简单。 记住这一句话即可。
RPC原理
RPC的原理可以追溯到这张图。
翻译一下,整个RPC的核心功能可以由5部分组成:
- 客户端:调用远程方法。
- 客户端 Stub :代理类。把你调用方法、类、方法参数等信息传递到服务端。
- 网络传输。
- 服务端 Stub :这个不是代理类。 接收到客户端执行方法的请求后,去指定对应的方法然后返回结果给客户端的类。
- 服务端:提供远程方法的一端。