【dubbo-go 源码解析】RPC 是什么?|Go主题月

518 阅读2分钟

远程调用(Remote Process Call,RPC)是 Dubbo-go 及其他服务治理框架中最核心的部分。在互联网产品大行其道的今天,单体架构渐渐不能承受日益增长的请求压力,所以就必须对单体服务进行拆分。

在拆分过程中,一个单体系统会被拆分成多个服务。原来本地方法间的调用,经过拆分之后,成为了微服务架构,变成了服务间的调用。那服务间的调用能不能像本地方法间的调用一样丝滑呢?这就是 RPC 需要解决的问题。

所以,RPC 所解决的问题是让调用者使用 RPC 像使用本地方法调用一样简单。

如果想了解清楚 RPC 的实现原理,那就必须知道每一个模块解决的问题 ,而这也是 Dubbo-go 及其他服务治理框架中最核心的部分。因此本模块将围绕着 Dubbo-go RPC 进行讲解,而本讲则以如何掌握 Dubbo-go RPC 为核心,带你了解什么是 RPC 、Dubbo-go 的 RPC 流程及其中各模块的作用,从整体到局部进行分析。

接下来,要想了解 Dubbo-go 中如何进行 RPC,首先要知道什么是 RPC。必须从整体对其解决的问题或者流程有一个充分的了解,建基于对全局的了解之后,带着对细节不理解的一些问题,再去学习其中实现,更能加深对 Dubbo-go RPC 的理解。

什么是 RPC

梳理 RPC 流程之前,先了解什么是 RPC。通过本地过程调用与 RPC 两个例子分析它们的区别,先看本地调用的代码:

`func main() {`
 `j := &Joe{}`
 `j.say(`
`}`
`type Person interface {`
 `say()`
`}`
`type Joe struct {`
`}`
`func (j *Joe) say() {`
 `fmt.Println("hello world!")`
`}`

 

以上例子在程序中调用 Person.say() 的方法,通过结构体的函数指针进行方法调用,称为本地过程调用

图 1:远程过程调用

远程过程调用则与之不一样,将方法实现放置于服务端,客户端通过调用本地接口方法,RPC 框架将方法调用所需的必要参数,如方法名、入参等序列化并发送到服务端。服务端 RPC 框架,反序列化并进行方法调用,处理后,序列化并返回结果。客户端反序列化并输出。简而言之,理解 RPC 的关键点:让调用者使用 RPC 像使用本地方法调用这么简单

那 Dubbo-go 是如何让使用者调用远程方法像调用本地方法一样便捷呢?接下来的文章会讲解的 Dubbo-go 的整个 RPC 流程。

欢迎加入社区

关注公众号【部长技术之路】,在公众号后台回复关键字【dubbogo】加入社区。