数据交换平台的需求总结与初步设计

来源:互联网 发布:阿里云华北2速度怎样 编辑:程序博客网 时间:2024/05/16 14:18

一、     需求总结

功能性需求:

1、 从某时刻开始,转储某些特定的表。开始时间、时间频率、表字段、源表和目的表执行前后sql语句等数据可配置。

2、 转储频率可以自由设定,时间精确到秒级,任务精确到表。

3、 满足多个表捆绑在一起,按既定的先后顺序执行。避免由于数据不一致性给后续工作带来的影响。

4、 实时控制每一个表是否转储,暂停或开始。并且不影响其他数据表转储。

5、 转储过程中,可以按照既定的配置,对某个或某些字段进行加密或解密。

6、 各个表的转储要求互相独立,互不影响。

7、 源数据库和目的数据库均支持mysql和oracle,留接口扩展其他数据源。

8、 添加一个表的转储工作,要求只修改配置数据,不修改软件代码,或重启软件。(测试手段  配置数据是否完整,执行测试结果)

9、 对各个数据库的操作,只使用链接,保证db账号密码的安全不泄露。

10、   支持程序参数,只执行某个任务号下的某个或某些表的转储工作。

11、   转储表结束后,记录日志到配置数据库proc_use_times表,方便开展后续工作。(添加为可配置)

12、   实时监控表转储情况,并且,需要向技术人员下发每日提醒短信。(转储程序生成转储提醒日志,监控程序解析日志,并下发短信)

13、   软件日志记录全面准确,方便维护人员查阅和排错。

 

性能需求:

14、   数据实时交换平台的定位,是业务流转的一部分。对业务来讲,是承上启下的一部分,以数据准确为根本原则。数据定时转储的定位,是数据备份、数据统计分析的一部分。

15、   对实时转储工作的完成,要求准时、准确、高效、稳定,容错性能高。

16、   错误处理机制完备,尽可能减少对业务的影响。

# 上线前,完成大数据量测试和各种功能测试,尽可能减少上线后问题的出现。

# 实时转储过程中,如果某任务转储失败,则保留处理现场,并立刻通知相关人员处理。当前任务不再继续执行。

 

二、数据库设计

源表要求:

字段1

。。。

字段N

sync_status

扩展一个控制字段sync_status,协助实时转储使用。

sync_status:默认值为0。

0表示未转储,1表示转储中,2表示转储成功,3表示转储失败。

 

三、软件设计

A.    各模块功能简单介绍:

控制进程 -- 取配置数据,初始化共享内存,管理多个任务进程。

任务进程通过共享内存与控制进程通信。ssync2o、ssync2m(控制进程fork出任务进程)

写入进程 由任务进程fork产生。写入目的库完成后退出(最多10个)。

 

共享内存执行时动态数据、任务详细参数

 

配置数据库 配置数据所在数据库

源数据库源数据表所在数据库

目的数据库目的数据库所在数据库

 

进程守护脚本守护控制进程。在控制进程异常时,将其启动,并报警。1分钟检查一次。

日志打包脚本每天凌晨打包昨天日志并转移。打包后的日志只保存最近3个月。

任务监控进程通过读取共享内存,整理每天转储简报,通知相关同事。

任务实时数据展示程序通过共享内存,实时展示任务执行情况,或查看历史任务执行情况。

退出程序 控制信号灯,达到退出控制进程的目的。

数据库连接池维护进程以启动进程的方式,为本操作系统的应用进程提供连接数据库服务。达到统一管理,最优化分配资源的目的。(先期考虑使用lib文件,后续在升级为服务

 

lib文件libPassWord.a、libxxtencrypt.a(已实现)

数据库配置过程 修改现有的过程,完成对实时转储任务的添加。后续考虑用可视化界面实现。

 

B.    主进程操作步骤:

1、 启动控制进程,读取以上8张配置表,将数据组织到共享内存中。此后,定时每小时读取T_EXTRACTION_TASK表中IS_ADD_DEL=1或2的任务,添加或删除到调度队列,并更新IS_ADD_DEL=0。

2、 为每一个调度添加一个属性:下次执行时间和执行状态。初始值为当前时间加上时间频率。

3、 遍历调度队列。遍历结束后,sleep(1)。

4、 当某调度的下次执行时间大于当前时间时,fork任务进程执行任务的实时转储。fork两次,避免生成僵尸进程。任务进程执行任务结束后,通过共享内存返回执行结果。)

5、 任务进程按照配置信息,执行任务,完成之后退出。

6、 控制进程更新调度下次执行时间+=时间频率

7、 执行操作3。

 

备注:

# 当前时间、下次执行时间、时间频率:单位为秒。

# 程序初次启动:指程序自启动后,未读取配置数据。

# 控制进程和任务进程,通过共享内存通信。

 

# 调度的下次执行时间严格按照时间频率向后推移。

# 调度与任务是一对多的关系。一个调度下的任务,顺序执行。不同调度下的任务,异步执行。

 

# 调度的关键属性:下次执行时间、时间频率

# 任务的关键属性:任务状态(0未执行,1执行中,2执行完毕),任务类型(1--ssync2o、2--ssync2m)

 

C.    子任务转储步骤:

1、 当任务信号灯打开,从共享内存中获取任务数据。校验数据是否合理有效。

2、 初始化任务执行环境,如:创建配置数据库连接、源数据库连接、目的数据库连接等。

3、 更新配置数据库task_detail表中子任务锁。如果已锁,则停止转储。

4、 执行子任务前sql,包括源数据库和目的数据库。(将源表sync_status=0的数据更改为1)

5、 读取源表中sync_status=1的行数据,合理组织源表数据。

6、 根据配置要求,对源表数据分批写入目的库。通过Fork子进程实现。

7、 根据配置要求,子进程对数据做相应特殊加工处理,如:加解密。处理完成之后,写入目的数据库。

8、 父进程继续操作6.

9、父进程通过共享内存获得子进程转储执行情况,更新源表数据:sync_status=2(成功)或3(失败)。

10、执行子任务后sql,包括源数据库和目的数据库。

11、更新配置数据库子任务锁。

12、打扫现场,释放资源。继续操作1。

目的表不包含这控制字段:sync_status。

D.   共享内存


任务详细参数的共享内存结构:

要需包含:配置表的数据,即任务的详细信息,包含源库id、目的库id,源表名称和表结构,目的表名称和表结构,执行前后sql,等。


0 0
原创粉丝点击