异步任务(task)服务

为什么要用异步

在我们平时使用的业务系统中,文件导入和导出是一个很常见的业务需求。正常情况下,同步导出就可以满足我们99.169%的需求。但是对于数据量大,业务拼接复杂的系统来说,导出、导入超时是不可避免的,而且是无法容忍的。异步任务的使用的特点: 处理耗时短、业务优先级低、它能解决导出超时问题,能大大的提高接口请求处理速度,提高吞吐量,提升系统性能!

设计原则

  1. 降低excel导出时的内存消耗。
  2. 支持大数据量场景下的excel导出。采用异步导出方式
  3. 统一excel导出规范。后端导出接口统一化、前端导出交互组件化,简化开发流程
  4. 封装公共导出方法,管理导出的整个生命周期。接入方只用关心业务逻辑,且代码复用性高
  5. 文件上传到腾讯云。避免因导出文件过大、导出逻辑耗时过长带来的请求超时等的问题

设计思路

  1. 公共服务提供统一的提交任务消费者,前端通过统一的接口来导出。统一导出接口会根据导出的url参数转发请求到各业务方的接口实现上
  2. 公共组件包中提供通用异步导出方法。该方法封装数据写入excel、继承工厂类等逻辑
  3. 文件上传类,去掉service注解,配置类抽出一个单独的bean供接入发使用
  4. 导入导出提供统一api
  5. 大数据量导出的文件划分、支持多种划分策略
  6. 导出任务内存使用优化,避免大量数据全部load进内存后才开始写入文件
  7. 定期清理腾讯云文件
  8. 可在通用导出服务中添加导出审计日志,记录重要敏感数据的导出情况。并且可以添加异常告警等扩展功能。
  9. 增加过期时间字段,展示到前端,动态生成下载链接

流程图剖析

 

表设计

CREATE TABLE `yin_cai_task` (0
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键自增',
  `task_id` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户自定义的任务名称,如果没有则使用方法签名',
  `task_status` int NOT NULL DEFAULT '0' COMMENT '执行状态',
  `execute_times` int NOT NULL COMMENT '执行次数',
  `execute_time` bigint NOT NULL COMMENT '执行时间',
  `parameter_types` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '参数的类路径名称',
  `method_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '方法名',
  `method_sign_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '方法签名',
  `execute_interval_sec` int NOT NULL DEFAULT '60' COMMENT '执行间隔秒',
  `delay_time` int NOT NULL DEFAULT '60' COMMENT '延迟时间:单位秒',
  `task_parameter` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '任务参数',
  `performance_way` int NOT NULL COMMENT '执行模式:1、立即执行 2、调度执行',
  `thread_way` int NOT NULL COMMENT '线程模型 1、异步 2、同步',
  `error_msg` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '执行的error信息',
  `alert_expression` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '告警表达式',
  `alert_action_bean_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '告警逻辑的的执行beanName',
  `fallback_class_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '降级逻辑的的类路径',
  `fallback_error_msg` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '降级失败时的错误信息',
  `shard_key` bigint DEFAULT '0' COMMENT '任务分片键',
  `gmt_create` datetime NOT NULL COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_id_shard_key` (`id`,`shard_key`) USING BTREE
) ENGINE=InnoDB COMMENT='淫才的任务表';

消息队列

  1. task服务通知业务系统开始执行
  2. 业务系统通知task任务执行结果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章