異步任務(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任務執行結果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章