RPC:RPC 是什么?

Posted 部长技术之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RPC:RPC 是什么?相关的知识,希望对你有一定的参考价值。

远程调用(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 流程。


欢迎加入社区

以上是关于RPC:RPC 是什么?的主要内容,如果未能解决你的问题,请参考以下文章

每天一点源代码:rpc/dubbo

RPC介绍与代码实现

既然有http 请求,为啥还要用rpc调用

通过几段 Java 代码带你理解 RPC

php rpc好用吗,有啥优缺点?php rpc框架哪个好?

RPC ---- RPC入门了解 & 最简单的RPC的实现