[rpc] intro

什么是RPC?

rpc: remote procedure call,顾名思义,指的就是远程过程调用,在大多数语境下,过程指的都是函数

在传统的单体服务中,所有的函数都写在一个进程映像里,我们调用函数只需要跳转到对应的代码段即可.

但是单体服务已经注定是不可行的了,解耦是永恒的话题.操作系统已经从传统的宏内核演变成微内核,原先非必要的函数都以服务的形式作为进程运行在主机上.

随着互联网的发展,微服务也逐渐大放光彩.在同一主机上不同的服务可以通过各种各样的ipc手段进行通信,但在web领域,位于不同主机的服务之间只能通过网络通信.

事实上,网络过程中的通信是复杂的,但我们仍然希望远程过程调用就像原来本机单进程内的函数调用一样简单,那么那些底层复杂的一些操作有谁来完成呢?

这就是rpc框架提供的封装,在用户层,我们只需要使用简单的call(),即可在客户端调用服务端的函数,并可以根据不同期望选择同步或异步调用方式.至于底层的协议,序列化,路由,限流,熔断,降级等操作,都被rpc框架隐藏了.

RPC严格来说不是一个协议,它代表的只是一种风格,即调用远程函数来完成本地任务的这种风格,其底层使用的网络协议,可以是自研的,那么就可以称之为rpc协议,但实际上,也完全可以承载在现有的应用层协议上,比如HTTP. 本质上,你只需要让服务端知道你要调用哪个函数即可,通信协议只是手段,不是目的

关于rpc框架

如果想了解rpc框架需要哪些功能,可以看我的rpc系列的另一篇文章: [rpc] rpcx

也可以看看 [rpc] grpc和 [rpc] net-rpc, 分别介绍了内置的rpc框架和google的grpc