一种基于排队机制的在线OTA差分做包系统及方法与流程

文档序号:26824548发布日期:2021-09-29 04:39阅读:236来源:国知局
一种基于排队机制的在线OTA差分做包系统及方法与流程
一种基于排队机制的在线ota差分做包系统及方法
技术领域
1.本发明涉及到ota升级技术领域,尤其涉及一种基于排队机制的在线ota差分做包系统及方法。


背景技术:

2.空中编程(over

the

air programming,ota)是一种为设备分发新固件、应用、配置乃至更新加密秘钥的方法。
3.差分包就是在版本升级中的定向升级中的一种,是指的是两个版本之间差异部分的文件,一般为.zip格式。通过云端下发文件,通过ota至设备端,设备检测到差分包后进行下载及安装升级操作。
4.目前,物联网设备在线制作差分包的流程包括:由前端通过差分接口上传文件,后端负责接收文件并解析,前端获得解析结果后,再次通过差分接口请求进行差分。
5.现有技术中,差分过程完全由前端驱动,进行差分请求后,需要前端不断调用接口获取当前状态,直至后端返回做包完成。一旦前端页面刷新或关闭,请求中止,需要重新做包;而后端却会一直进行任务,直至完成,造成客户的重复操作,造成大量无意义的资源消耗。


技术实现要素:

6.针对现有技术中的问题,现提供一种基于排队机制的在线ota差分做包系统及方法,旨在解决多个用户同时做包时遇到的阻塞问题,本发明通过优化现有技术方案中的排队机制来提高用户在线差分做包的效率,解决多个用户同时做包阻塞、反复失败、效率低下的问题。
7.其中,一种基于排队机制的在线ota差分做包系统,所述系统包括:
8.一数据库,所述数据库用以存储若干做包任务以及对应的状态信息;
9.一第一判断模块,连接所述数据库,用于判断数据库中是否有正在排队中的做包任务;
10.一第二判断模块,连接所述第一判断模块,用于判断线程池中是否有空闲的线程;
11.一查询模块,分别连接所述数据库、所述第一判断模块和所述第二判断模块,用于当所述数据库中有正在排队中的做包任务时,按照一预设的排队策略从所述数据库中查询正在排队中的所述做包任务;
12.一做包线程管理模块,分别连接所述第二判断模块和所述查询模块,用于对线程池中的线程进行管理,并于存在空闲的线程时,启动空闲的所述线程,以处理所述做包任务得到差分包。
13.优选地,还包括:
14.一任务创建模块,用于创建差分任务,所述差分任务包括项目、做包类型、安装包;
15.一上传模块,连接所述任务创建模块,用于供用户上传文件;
16.一解析模块,连接所述上传模块,用于根据做包类型解析上传的文件。
17.优选地,还包括:
18.一共享空间,用于供所述解析模块将解析后的文件上传至所述共享空间;
19.所述做包线程管理模块连接所述共享空间,启动的所述线程从所述共享空间中获取解析的文件,并根据所述做包任务制作所述差分包,并将制作完成后的所述差分包保存在所述共享空间中;
20.还包括:差分包部署模块,连接所述共享空间,用于将制作完成的所述差分包部署至对应版本的差分关系中。
21.优选地,还包括:
22.一更新模块,分别连接所述数据库、所述第一判断模块、所述第二判断模块和所述做包线程管理模块,用于更新所述数据库中对应的所述做包任务的状态信息。
23.优选地,还包括:
24.日志管理模块,用于对差分做包系统生成的日志进行管理,以及将处理所述差分任务过程产生的脚本日志保存至所述差分包的根目录下。
25.本发明还提供一种基于排队机制的在线ota差分做包方法,用于如上述的一种基于排队机制的在线ota差分做包系统,包括一数据库,所述数据库用以存储若干做包任务以及对应的状态信息;
26.所述方法包括:
27.步骤s1,判断数据库中是否有正在排队中的做包任务:
28.若所述数据库中有正在排队中的做包任务,则进入步骤s2;
29.步骤s2,判断线程池中是否有空闲的线程,若判断结果表示所述线程池中当前存在空闲线程,则按照一预设的排队策略从所述数据库中获取正在排队中的所述做包任务;
30.步骤s3,启动空闲的所述线程,所述线程根据获取的所述做包任务制作差分包,并更新所述数据库中对应的所述做包任务的状态信息。
31.优选地,于所述步骤s1之前,还包括:
32.步骤s0,接收一做包请求,根据所述做包请求生成一做包任务;
33.所述步骤s1中,若所述数据库中有正在排队中的做包任务,则将当前的做包任务对应的状态信息标记为“正在排队中”,并存储至所述数据库中。
34.优选地,所述步骤s0具体包括:
35.步骤s01,创建一差分任务,所述差分任务包括项目、做包类型、安装包;
36.步骤s02,将创建好的所述差分任务上传至差分平台;
37.步骤s03,所述差分平台接收所述差分任务,并于用户确认开始差分后,根据所述差分任务形成所述做包请求;
38.步骤s04,对所述做包请求进行解析,得到所述做包任务。
39.优选地,所述步骤s1中,具体包括:
40.步骤s11,每隔一预设时间从所述数据库中查询正在排队中的所述做包任务;
41.步骤s12,将查询的所述做包任务按照任务开始时间进行排序。
42.优选地,所述步骤s2中,判断线程池中是否有空闲的线程,具体包括:
43.判断所述线程池中活跃的线程数是否等于最大线程数:
44.若等于,则表示当前不存在空闲的线程;
45.若小于,则表示当前存在空闲的线程。
46.优选地,于所述步骤s3之后还包括:
47.将制作完成后的所述差分包部署至对应版本的差分关系中。
48.本发明的技术方案有益效果在于:
49.提供了一种基于排队机制的在线ota差分做包系统,大大提高了做包效率,解决了原有技术方案中做包屡次卡顿无法成功做出的问题;同一时间内针对同样大小、数量的包文件制作速度提高。
附图说明
50.图1为本发明优选实施方式中,基于排队机制的在线ota差分做包系统的结构框图;
51.图2为本发明优选实施方式中,基于排队机制的在线ota差分做包方法的流程示意图;
52.图3为本发明优选实施方式中,基于排队机制的在线ota差分做包方法另一具体实施例的流程示意图;
53.图4为本发明优选实施方式中,步骤s0具体实施例的流程示意图。
具体实施方式
54.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
55.需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
56.下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。
57.本发明提供一种基于排队机制的在线ota差分做包系统,属于ota升级技术领域,如图1所示,系统包括:
58.一数据库1,数据库1用以存储若干做包任务以及对应的状态信息;
59.一第一判断模块2,连接数据库1,用于判断数据库1中是否有正在排队中的做包任务;
60.一第二判断模块3,连接第一判断模块2,用于判断线程池中是否有空闲的线程;
61.一查询模块4,分别连接数据库1、第一判断模块2和第二判断模块3,用于当数据库1中有正在排队中的做包任务时,按照一预设的排队策略从数据库1中查询正在排队中的做包任务;
62.一做包线程管理模块5,分别连接第二判断模块3和查询模块4,用于对线程池中的线程进行管理,并于存在空闲的线程时,启动空闲的线程,以处理做包任务得到差分包。
63.具体的,为解决现有技术中多个用户同时做包时遇到的阻塞的问题,提供一种基于排队机制的在线ota差分做包系统,对现有技术中的排队机制进行优化,来提高用户在线
差分做包的效率,解决多个用户同时做包阻塞、反复失败、效率低下的问题。
64.系统包括数据库1、第一判断模块2、第二判断模块3、查询模块4、做包线程管理模块5。
65.对数据库1进行操作加锁,同一时间内只能一个数据读取端(即一个线程),防止多个线程同时读取同一数据。
66.通过判断数据库1中是否有正在排队中的做包任务,以及判断线程池中是否有空闲的线程;
67.当数据库1中有正在排队中的做包任务,且线程池中有空闲的线程时,按照一预设的排队策略从数据库1中查询正在排队中的做包任务,预设的排队策略可以按照任务时间开始的时间顺序,也可以设置优先级,例如对于一些差分包加急处理,则当有空闲的线程时,优先处理该做包任务;
68.当数据库1中有正在排队中的做包任务,但线程池中没有空闲的线程时,则可按照一预设时间或持续判断,直至线程池中有空闲的线程。
69.还包括:一做包线程管理模块5,分别连接第二判断模块3和查询模块4,用于对线程池中的线程进行管理,做包线程管理模块5中包括线程的类型、线程的状态,管理内容例如增加、删除、修改线程,以及启动,结束线程,并于存在空闲的线程时,启动空闲的线程,以处理做包任务得到差分包,当做包任务完成后,将状态信息标记为task_status=4,表示当前该任务“已完成”,并结束线程。
70.进一步的,做包线程管理模块5可以对android、rtos、linux等三个线程池进行管理,对不同做包类型的任务启动不同线程进行。
71.作为优选的实施方式,还包括:
72.一任务创建模块6,用于创建差分任务,差分任务包括项目、做包类型、安装包;
73.一上传模块7,连接任务创建模块6,用于供用户上传文件;
74.一解析模块8,连接上传模块7,用于根据做包类型解析上传的文件。
75.具体的,用户通过任务创建模块6创建差分任务,并填入差分任务相关的信息,例如文件路径、做包类型、项目id等信息;通过上传模块7上传文件,该文件可以是压缩包,并将上传的文件存放至指定临时目录中,同时创建的任务成功上传后,文件路径、做包类型、项目id等相关信息会存入数据库1中存储;解析模块8根据做包类型解析用户上传的压缩包中是否包含相应文件,并对用户上传的压缩包进中解析得到版本等相关信息。
76.作为优选的实施方式,还包括:
77.一共享空间8,用于供解析模块8将解析后的文件上传至共享空间8;
78.做包线程管理模块5连接共享空间8,启动的线程从共享空间8中获取解析的文件,并根据做包任务制作差分包,并将制作完成后的差分包保存在共享空间8中;
79.还包括:差分包部署模块9,连接共享空间8,用于将制作完成的差分包部署至对应版本的差分关系中。
80.具体的,为了保证多服务部署,利用分布式文件系统gfs作为共享空间8,来保存上传的文件(包括整包文件、差分包文件)。解析模块8将解析成功的整包传至共享空间8,做包线程管理模块5从gfs中读取整包,并于制作完成差分包后将制作好的差分包保存在gfs,差分包部署模块9再从gfs读取差分包信息部署至对应版本。
81.进一步的,对于差分任务的多点部署,可能出现上传整包和制作差分包的服务不在同一个服务器,为了不同服务器上的差分服务可以读取整包进行同一个差分任务,因此,基于共享空间8技术实现差分服务的高可用。
82.作为优选的实施方式,还包括:
83.一更新模块10,分别连接数据库1、第一判断模块2、第二判断模块3和做包线程管理模块5,用于更新数据库1中对应的做包任务的状态信息。
84.具体的,在差分做包过程中,通过对数据库1中做包任务对应的的状态信息实时更新,以供用户能够在前端查看目前该做包任务的进度;
85.进一步的,创建任务后,若判断出数据库1中有正在排队中的做包任务,或者数据库1中没有正在排队中的做包任务但线程池中没有空闲的线程,此时,则先将创建的做包任务存储至数据库1中,并将状态信息标记为task_status=2,表示当前该任务“正在排队中”。
86.启动线程做包时,将状态信息修改为“做包中”;
87.当启动线程处理做包任务时,还包括:
88.向数据库1中插入开始做包时间字段,定时每5分钟在数据库1中查找状态为“做包中”的任务,通过开始做包时间,判断是否超时,如果超时,更新任务状态为“已超时”。
89.状态信息还包括“已完成”、“已失败”、“已取消”。
90.通过增加差分任务的状态更新,及时更新对应差分任务状态,捕捉异常情况下并结束线程。
91.作为优选的实施方式,还包括:
92.日志管理模块11,用于对差分做包系统生成的日志进行管理,以及将处理差分任务过程产生的脚本日志保存至差分包的根目录下。
93.具体的,可通过日志管理模块11对系统产生的日志进行管理,例如可以查询日志,可以将处理差分任务的整个过程所产生的日志输出,并单独保存至差分包的根目录下;进一步的,发生异常情况时,通过日志可以追溯历史操作信息。
94.进一步的,针对部署多个服务的情况下,可使用elk对差分服务日志进行集中管理。
95.于上述较佳的实施例中,还包括:
96.文件管理模块,连接共享空间8,用于对gfs、系统中的文件进行管理,具体包括:
97.上传模块7上传的临时文件在解析后即失去作用,在将解析后的临时文件上传至共享空间8后,即刻将解析模块8解析后的文件从系统中删除。
98.gfs中的文件包括整包、差分包文件两部分,暂不做清理。
99.做包过程中解析使用的解压文件、做包的临时目录,无论做包成功,还是做包失败都会删除。
100.android做包会在系统中产生临时目录下指定若干个固定做包目录,命名为ws${threadnum},例如最大android做包线程为5,则为ws1至ws5五个做包目录,不会生成其他临时文件占据空间。
101.上述技术方案中,系统采用任务模式管理,首先,由用户通过点击前端的差分任务创建按钮,选择相关信息,确认创建后,通过上传模块7(上传接口)上传文件,其中任务创建
和上传文件接口可采用同一个接口,也可采用两个接口实现,上传并解析后,由后端更新任务状态(上传成功/上传失败),用户在前端刷新列表即可获取当前任务状态,并提供下面流程的操作按钮。
102.上传完成后,客户可以选择取消任务/开始差分。开始差分后,若当前无线程处理,则需要排队,后端更新列表显示正在排队中状态,排队结束后可自动进入差分状态;若不需要排队,则直接进入差分状态;优选的,在差分状态下不可取消差分任务。
103.当差分包制作成功后,可将差分包上传至共享空间8中,选择立即部署(或下载差分包),此时,做包任务的状态更新为已完成状态,之后用户可以执行删除操作,但不可再进行其他操作。
104.本发明还提供一种基于排队机制的在线ota差分做包方法,用于如上述的一种基于排队机制的在线ota差分做包系统,如图2所示,方法包括:
105.步骤s1,判断数据库1中是否有正在排队中的做包任务:
106.若数据库1中有正在排队中的做包任务,则进入步骤s2;
107.步骤s2,判断线程池中是否有空闲的线程,若判断结果表示线程池中当前存在空闲线程,则按照一预设的排队策略从数据库1中获取正在排队中的做包任务;
108.步骤s3,启动空闲的线程,线程根据获取的做包任务制作差分包,并更新数据库1中对应的做包任务的状态信息。
109.做包过程具体包括:
110.a、从gfs中获取源包、目标版本包并重新解压至服务所在服务器的临时路径;
111.b、copy算法工具至差分包生成目录(自定义),指定源包、目标版本包的目录,使用shell命令启动算法工具,进行制作差分包
112.java:
113.runtime rt=runtime.getruntime();
114.process process=rt.exec(shell);
115.c、执行结束可以在生成目录拿到update.zip文件,即为差分包。
116.d、将差分包放入gfs保存,做包结束,更新数据库1状态。
117.作为优选的实施方式,如图3所示,于步骤s1之前,还包括:
118.步骤s0,接收一做包请求,根据做包请求生成一做包任务;
119.步骤s1中,若数据库1中有正在排队中的做包任务,则将当前的做包任务对应的状态信息标记为“正在排队中”,并存储至数据库1中。
120.作为优选的实施方式,如图4所示,步骤s0具体包括:
121.步骤s01,创建一差分任务,差分任务包括项目、做包类型、安装包;
122.步骤s02,将创建好的差分任务上传至差分平台;
123.步骤s03,差分平台接收差分任务,并于用户确认开始差分后,根据差分任务形成做包请求;
124.步骤s04,对做包请求进行解析,得到做包任务。
125.作为优选的实施方式,步骤s1中,具体包括:
126.步骤s11,每隔一预设时间从数据库1中查询正在排队中的做包任务;
127.步骤s12,将查询的做包任务按照任务开始时间进行排序。
128.作为优选的实施方式,步骤s2中,判断线程池中是否有空闲的线程,具体包括:
129.判断线程池中活跃的线程数是否等于最大线程数:
130.若等于,则表示当前不存在空闲的线程;
131.若小于,则表示当前存在空闲的线程。
132.作为优选的实施方式,于步骤s3之后还包括:
133.将制作完成后的差分包部署至对应版本的差分关系中。
134.于上述较佳的实施例中,线程池中包括不同类型的线程,每一类型的线程处理同一做包类型的做包任务;
135.步骤s2中,当判断结果表示线程池中当前存在空闲的线程,之后还包括:
136.判断空闲的线程的类型。
137.本发明的技术方案有益效果在于:
138.提供了一种基于排队机制的在线ota差分做包系统,大大提高了做包效率,解决了原有技术方案中做包屡次卡顿无法成功做出的问题;同一时间内针对同样大小、数量的包文件制作速度提高。
139.以上仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1