背景

随着业务发展,系统中使用文件导入导出的功能越来越多,针对每一次导入导出功能的添加,开发同事都需要重新进行一次大量重复且可能不安全的文件操作,并且常常伴有如下问题存在:

  1. exce样式问题导致oom
  2. 并发执行时oom
  3. 开发水平参差不齐导致线上问题
  4. …..

由此,急需一套平台级的文件上传下载中心服务来解决上述的诸多问题

设计思路

将导入导出具体操作异步化,即文件中心统一保存用户请求(导出的请求参数/导入的文件)后,逐条顺序执行。

同步导入导出

流程

1.文件上传下载中心 - 图1

异步导入导出

时序图

导出

1.文件上传下载中心 - 图2

导入

以excel导入为例

1.文件上传下载中心 - 图3

表结构

涉及两张表

  • 批次表
  • 模版表

批次表

字段 定义
用户唯一识别号(userId)
批次号
模版号
类型(in/out) 导入导出
处理状态(排队/处理中/正常结束/异常结束)
异常原因
in_source_url 导入原文件
in_csv_url 导入转CSV文件
our_url 导出文件
创建时间
开始处理时间
处理完成时间

模版表

字段 定义
模版号
落地服务
限定行数
类型(in/out) 导入导出
允许部分执行
out模版地址

平台缺点

1.交互

交互环节相比同步操作更加复杂

2.处理速度

相比于同步操作,文件中心由于是排队顺序执行,在导入导出操作频繁且业务分散在不同的系统中时,时间上会远超同步操作时间。

3.服务对接

存在导入导出功能的服务,需要引入文件中心依赖接口,并泛化实现

隐患解说

1.基于dubbo rpc方式调用,文件中心对服务间的每次请求,如果时间长,则会夯住占用一个线程,但是由于是顺序执行,因此最多也只会占用一个线程。