这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天,昨天学习了Web开发中采用的工具,包括了ORM/Web/RPC的基础概念,同时学习了字节跳动对应的三个框架GORM/Hertz/Kitex的基本使用。
RPC的概念
RPC(Remote Procedure Call),即远程过程调用,它允许本机像调用本地的服务一样,方便地调用位于远程的服务。RPC基于客户端/服务器模式的方式进行实现。RPC的广泛使用伴随着微服务架构的兴起,以往的单体服务将所有功能都融合在一套应用中,当程序体量变大时,会出现难以开发、部署和维护的问题。微服务为了解决这一问题,将单体架构中的各个功能进行拆分,从而可以由不同的团队进行开发、测试与维护。服务与服务之间的功能高度解耦。这种场景下,负责不同服务的机器需要互相协作,调用其他机器的模块,RPC应运而生。
RPC的具体原理和优点
本地调用是我们较为熟悉的方式,该过程发生在同一进程中。
但由于不同程序之间的内存空间相互隔离,因此无法调用其他应用中的函数。基于此,RPC需要解决以下三个问题:
- 如何确定调用的函数?(调用方和被调用方都需维护一个映射表)
- 如何表达与传递参数?(以字节流为载体,进行编解码)
- 如何进行网络传输?(使用TCP或HTTP协议进行传输)
对于这三个问题,RPC通过以下的流程进行解决。
最后,我在学习的时候有一个疑问,类似于RESTful API的方式,也可以实现服务调用,为什么还要使用RPC呢?这是因为RESTful API基于HTTP协议,而RPC可以直接使用TCP协议,同时传输的协议为序列化协议来保存数据,这一类协议的信息密度比json更高,基于这两点,RPC的性能通常会更好。
参考链接
www.ruanyifeng.com/blog/2022/0… www.liwenzhou.com/posts/Go/rp… www.zhihu.com/question/41…