首页 > 其他分享 >【性能优化】:设计模式与技术方案解析(二)

【性能优化】:设计模式与技术方案解析(二)

时间:2024-08-29 12:23:13浏览次数:9  
标签:COMMENT 解析 20 DEFAULT NULL time 设计模式 优化 id

引言

【性能优化】:探索系统瓶颈的根源(一)文章中,我们已经分析了手动结算的弊端和瓶颈,本文来分析下怎么优化系统性能。

需求分析

既然手动结算耗时费力易出错,那么能不能开发一个**程序自动化处理**呢?如果要开发一个自动化跑批的程序,核心功能点是什么呢?

第一:需要能正常运行;
第二:出错了之后也得能重跑;
第三:既然是自动化处理了,步骤结果信息能通知到我们;
第四:系统能够自动生成财务报表并下载;
第五:能看到每次步骤的执行详情;
第六:需要数据库表记录每次执行步骤的参数,供下次使用。

通过上述分析,我们已经能够得出,一个自动化跑批的程序,核心功能点如下

  1. 正常运行
  2. 出错重试
  3. 节点报警
  4. 步骤详情
  5. 一个可视化的界面

所以,我们的自动化跑批模型大概类似于这种
自动化跑批模型图

表结构设计

通过需求分析,我们已经大概知道了自动化跑批的功能点,现在来设计下表结构。

CREATE TABLE ` dispatch ` (
  ` id ` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '数据库表主键',
  ` dispatch_time ` timestamp NOT NULL COMMENT '调度日期',
  ` status ` varchar(10) NOT NULL COMMENT '调度状态(failed、success、running、pause、human)',
  ` remarks ` varchar(50) DEFAULT NULL COMMENT '备注',
  ` create_time ` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  ` update_time ` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (` id `)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '调度表'

CREATE TABLE ` dispatch_detail ` (
  ` id ` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '数据库表主键',
  ` dispatch_id ` bigint(20) NOT NULL COMMENT '调度表主键',
  ` step ` varchar(20) NOT NULL COMMENT '步骤',
  ` start_time ` timestamp NULL DEFAULT NULL COMMENT '开始日期',
  ` end_time ` timestamp NULL DEFAULT NULL COMMENT '结束日期',
  ` status ` varchar(10) NOT NULL COMMENT '调度状态(failed、success、running、pause、human)',
  ` remarks ` varchar(50) DEFAULT NULL COMMENT '备注',
  ` create_time ` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  ` update_time ` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  ` execution_time ` varchar(50) DEFAULT NULL COMMENT 'DAG调度时间',
  ` serial_number ` int(10) DEFAULT NULL COMMENT '步骤序号',
  ` result ` varchar(1000) DEFAULT NULL COMMENT '返回结果',
  ` params ` varchar(1000) DEFAULT NULL COMMENT '请求参数',
  PRIMARY KEY (` id `),
  KEY ` idx_step ` (` step `),
  KEY ` idx_dispatch_id ` (` dispatch_id `)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '调度明细表'

CREATE TABLE ` back_record ` (
  ` id ` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '数据库表主键',
  ` back_pt ` varchar(20) NOT NULL COMMENT '备份日期',
  ` create_time ` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  ` update_time ` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  ` dispatch_id ` bigint(20) NOT NULL COMMENT '调度表主键',
  PRIMARY KEY (` id `)
  /*T![clustered_index] CLUSTERED */
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '备份记录表'

CREATE TABLE ` netting_record ` (
  ` id ` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '数据库表主键',
  ` back_pt ` varchar(20) NOT NULL COMMENT '备份日期',
  ` version ` varchar(20) NOT NULL COMMENT '备份版本号',
  ` create_time ` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  ` update_time ` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  ` dispatch_id ` bigint(20) NOT NULL COMMENT '调度表主键',
  PRIMARY KEY (` id `)
  /*T![clustered_index] CLUSTERED */
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '轧差记录表'

CREATE TABLE ` sap_record ` (
  ` id ` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '数据库表主键',
  ` product_version ` varchar(20) NOT NULL COMMENT '发送sap日期',
  ` create_time ` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  ` update_time ` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  ` dispatch_id ` bigint(20) NOT NULL COMMENT '调度表主键',
  PRIMARY KEY (` id `)
  /*T![clustered_index] CLUSTERED */
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = 'sap发送记录表'

代码设计

通过需求分析和表结构设计,我们已经大致有一个模型了,为了让程序扩展性更好,所以还需要对代码结构设计下。

步骤配置化

步骤列表信息不能写死,如果之后有变动,还需要改动代码发布,所以我们可以把它放到公司的配置中心动态配置,在调度运行的时候加载到表中,并以接口形式返回给前端。

钉钉通知

如果要监控每一步骤的执行信息,如输入参数、返回参数、执行状态、运行时长等信息,我们可以引入钉钉通知。
具体可参考 高效实时监控:异步计算任务的挑战与解决方案(一)

设计模式

为了使代码的扩展性更好、可读性更强,我们可以引入设计模式来设计。通过跑批模型图,可以得到以下信息

  • 各个步骤的执行特别符合一条“责任链”,从起始节点依次向下执行,直到尾节点;
  • 各个步骤在执行时,都必需满足上一个节点执行成功且自己没有执行过,如果把这个流程代码放到一个抽象的父类,各个步骤子类去实现自己的业务逻辑,这就是“模板方法”。

可参考:
【职责链】设计模式:构建灵活的请求处理系统
【模板方法】设计模式:构建可扩展软件的基石

总结

通过以上简单分析,我们已经可以大概能想象出自动化跑批系统的雏型了,在下一篇我们就要实际编码来实现了。
以上分析肯定存在漏洞不完善的地方,欢迎大家批评指正。

标签:COMMENT,解析,20,DEFAULT,NULL,time,设计模式,优化,id
From: https://blog.csdn.net/yqq962464/article/details/141609922

相关文章

  • 博客园-awescnb插件-geek皮肤优化--浏览器ico图标修改
    简介通过js方式自定义修改博客园-awescnb插件-geek皮肤下浏览器ico图标图标准备准备自定义的图标,上传至博客园个人的相册中代码注入定义自定义HTML:博客园->管理->设置->页脚HTML代码添加相关代码//更换ico图标functionupdateICO(){varlink=docum......
  • 从零开始的PyTorch【03】:优化你的神经网络模型
    从零开始的PyTorch【03】:优化你的神经网络模型前言欢迎回到PyTorch学习系列的第三篇!在前两篇文章中,我们学习了如何构建一个简单的神经网络并训练它,同时探索了数据集调整对模型性能的影响。今天,我们将深入探讨如何优化你的神经网络模型,使其在更复杂的任务中表现更好。我们......
  • Java设计模式之原型模式详细讲解和案例示范
    引言在软件设计中,设计模式为我们提供了可复用的解决方案,以应对常见的设计问题。原型模式(PrototypePattern)是创建型设计模式的一种,它允许通过复制现有对象来创建新对象,而不需要了解创建过程的细节。本文将详细探讨原型模式,结合电商交易系统中的具体案例,深入讲解其使用场景......
  • 非结构化文档解析
    参考:RAG效果优化:高质量文档解析详解知识库RAG的核心之一就是知识库的离线存储,如何将非结构化文档存储是非常重要的。PDF和Word文件结构word文件解析pdf文件解析Papermage介绍总结阿里云上的文件解析方法示例准确率参考......
  • Android开发 - Parcel 类打包对象数据进行传递解析
    Parcel是什么Parcel是用于对象序列化和反序列化的一个类。通俗地说,它是一种轻量级的容器,常用于打包对象的数据(如基本类型和其他Parcelable对象),使它们能够在不同的组件(如Activity、Service等)之间传递Parcel的主要作用不同的组件(如Activity、Service)之间需要传递数据。......
  • Android开发 - Parcelable 接口实现不同组件之间传递数据解析
    什么是ParcelableParcelable是用于对象序列化的一种接口。通俗来讲,Parcelable允许将一个对象转化为一个字节流,这样你就可以将这个对象在不同的组件之间(如Activity、Service等)进行传递为什么需要Parcelable组件之间通信时(比如在两个Activity之间传递数据),传递的对象必......
  • 如何选择合适的Java集合类来优化性能
    在Java开发中,选择合适的集合类是优化应用程序性能的关键之一。由于不同的集合类在时间复杂度、内存占用和操作效率上各有特点,错误的选择可能会导致严重的性能问题。这篇博客将探讨如何根据具体需求选择合适的Java集合类,以最大化性能优化。1.明确需求在选择集合类之前,首先要......
  • openGauss-子事务并发回滚流程优化
    openGauss-子事务并发回滚流程优化可获得性本特性自openGauss5.1.0版本开始引入。特性简介本特性利用ProcArrayGroup数据结构管理所有抢占ProcArrayLock锁失败的backends,由第一个进入group的backend作为groupleader负责请求ProcArrayLock锁,并在获取到锁后清理group中所有ba......
  • 历年CSP-J初赛真题解析 | 2016年CSP-J初赛阅读程序(23-26)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客#include<iostream>usingnamespacestd;intmain(){intmax,min,sum,count=0;inttmp;cin>>tmp;......
  • Scratch跨入网络世界:探索数据解析与网络请求的编程之旅
    标题:Scratch跨入网络世界:探索数据解析与网络请求的编程之旅在当今数字化时代,编程已不再局限于本地操作,网络功能的需求日益增长。Scratch,这个广受好评的图形化编程平台,也紧跟时代的步伐,提供了对网络请求和数据解析的支持。本文将深入探讨Scratch在网络功能方面的应用,通过实......