这是我参与「第五届青训营」伴学笔记创作活动的第5天
基本概念
本地函数调用
- 将值压栈
- 通过函数指针找到calculate函数,进入函数取出栈中的值,将其赋予x和y。
- 计算计算式(例如x*y),并将结果存在Z。
- 将Z的值压栈,然后从calculate返回。
- 从栈中取出Z返回值,并赋值给result。
远程函数调用
需要解决的问题:
- 函数映射 需要告诉服务要调用哪个函数,因此函数有自己的ID,在做RPC的时候附上这个ID,并且还要有一个ID和函数的对照关系表。
- 数据转换成字节流 客户端把参数先转成一个字节流,传给服务端后,再把字节流转成自己能读取的格式。
- 网络传输 需要保证网络高效稳定地传输数据。
一次RPC的完整过程
-
IDL (Interface description language)文件 IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信。(约定调用规范)
-
生成代码 通过编译器工具把IDL文件转换成语言对应的静态库。(具体调用的时候用户代码需要依赖生成代码,所以可以把用户代码和生成代码看做一个整体)
-
编解码 从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化。
-
通信协议 规范了数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据。
-
网络传输 通常基于成熟的网络库走TCP/UDP传输。
关键指标
-
稳定性-保障策略
-
稳定性-请求成功率
-
稳定性-长尾请求
-
稳定性-注册中间件
-
易用性
-
扩展性
-
观测性
-
高性能