记一次 RPC 项目中的实践

2023-09-05 19:02:19 浏览数 (2)

背景说明:

在我们项目中有一些比较特殊的需求,需要访问其他服务器上的 bag 包资源信息,本身读取 bag 包就是一个非常耗时的操作,还在不同的机器上,所以就涉及到了远程过程调用,即 RPC ,调用远程函数就像调用本地函数一样,RPC 底层会做好数据的序列化与传输,从而能使我们更轻松地创建分布式应用和服务。

以文件注册为例

涉及到的服务有:

后端 API 服务,业务逻辑处理

任务守护进程,主要是进行新的异步任务扫描检测以及任务状态的更新

代理服务,这个是需要在每台服务器上都要部署

通俗来说就是在每台服务器上都启动了一个代理服务,接收 API 请求,解析出特定的指令操作,操作本服务器上的资源。以文件注册功能为例:

文件注册的核心功能是读取指定机器上的bag包信息,并将bag包文件信息写入到数据库中,这是个比较耗时的任务,实现流程如上图:

A:创建异步任务,将任务处理函数和需要的参数写入到数据库中的任务表

B:运行的守护进程会一直扫描任务表,检查出新的异步任务

C:找到对应的任务处理函数并执行,

D:处理函数中包括了请求代理服务的业务逻辑,会隔段时间请求代理服务等待结果返回,代理服务会将处理完的结果写到指定的json文件中,结果文件增加了 finish 标识

E:处理函数收到返回结果继续执行余下的业务逻辑

F:对于已经完成的异步任务会及时更新任务状态

对于任务表,我们增加了优先级的字段,相同处理函数和相同的任务参数我们视为同一个任务,如果任务正在运行则不会新增相同的任务,只会增加任务的优先级,比较任务重复。

0 人点赞