RPC框架|青训营笔记

32 阅读2分钟

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

基本概念

本地函数调用

  1. 将a和b的值压栈
  2. 通过函数指针找到Calculate函数,进入函数取出栈中的值2和3,将其赋予x和有
  3. 计算x*y,将结果存在z
  4. 将z的值压栈,然后从calculate返回
  5. 从栈中取出z返回值。并赋值给result image.png 这是本地程序的执行流程。

远程函数调用

在本地调用中,函数体直接通过函数指针来指定我们调用哪个方法,编译器找到对应的函数指针,但是远程调用,函数指针不行,因为两个进程的地址空间完全不一样。所以每个函数都有自己的一个ID,在做RPC的时候要附上这个ID,ID和函数有对照关系表,通过ID找到对应的函数执行。

客户端需要先把参数转换成字节流,传给服务器后,再把字节流转成自己能读取的格式。

RPC全称是Remote Procedure Calls,远程函数调用 一次完成的RPC调用过程包含5部分

  1. IDL(Interface description language)文件,通过一种中立的方式来描述接口,使得在不同平台上运行的对象和不同元编写的程序可以互相通信
  2. 生成代码:通过编译器工具将IDL文件转换成语言对应的静态库
  3. 编解码:从内存中表示到字节序列化的转换称为编码,反之,则为解码,也就是常说的序列化和反序列化
  4. 通信协议:规范了数据在网络中的传输内容和格式。除必须的请求、响应 数据外,通常还会包含一些额外的元数据
  5. 网络传输:通常是基于成熟的网络库走TCP/UDP传输

image.png

好处

  • 单一职责,每个服务都是分开的,互相之间可以调用,有利于分工协作和运维开发
  • 可扩展性强,资源利用率更优,一些底层服务可以实现复用
  • 故障隔离,服务整体可靠性更高

存在问题

  • 服务宕机,如何处理?
  • 调用过程中发生网络异常,如何保证消息可达性?
  • 请求量突增导致服务无法及时处理,如何应对?