go语言基础学习 | 青训营笔记

62 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第6天。

今天深入浅出的学习了RPC框架的相关内容。在系统的讲解RPC框架的相关内容之前,讲师先是给我们讲解了本地函数调用和远程函数调用的区别。在本地调用中,函数体是直接通过函数指针来指定的,我们调用哪个方法,编译器就自动帮我们调用它相应的函数指针。但是在远程调用中,函数指针是不行的,因为两个进程的地址空间是完全不一样的。所以函数都有自己的一个ID,在做RPC的时候要附上这个lD,还得有个ID和函数的对照关系表,通过ID找到对应的函数并执行。而作为RPC,主要需要解决的问题如下:函数映射、数据转换为字节流、网络传输。

基于上述内容,讲师给出了RPC框架的图示。

_E3){62{REU57$13QJTDZ%F.png

RPC框架主要有如下三个好处:可扩展性强、有助于分工协作、故障隔离。

但是,RPC并不是完美的,同样也会带来很多问题:一:服务宕机的时候,客户端是很难处理的;二:调用过程中,如果发生网络的异常,会使得消息的可达性很难得到保证;三:请求量突增,导致服务没有及时的处理。

RPC的概念模型主要分为这几个:User、User-Stub、RPC-Runtime等。

然后,讲师给介绍了以Apache Thrift为例的结构模型,图如下所示。

I013_R%0V~Q_S5CFZV26HKQ.png

其中,下图所示的这几层来生成代码。通过代码生成工具把IDL文件转换成不同语言对应的lib代码,里面封装了编解码逻辑。

1675513376446.png

RPC剩余的内容将在之后陆续学习。