一种基于单体应用的数据管理方法和服务器与流程

文档序号:16996904发布日期:2019-03-02 01:26阅读:170来源:国知局
一种基于单体应用的数据管理方法和服务器与流程

本发明涉及计算机应用技术领域,尤其涉及一种基于单体应用的数据管理方法和服务器



背景技术:

传统单体应用通常部署在用户场地,因此基本上是一个用户一次部署实施。为了减少定制化开发成本,通常会将不同用户的定制化需求进行抽象,形成功能配置化,这样可以尽可能保证不同用户使用一份版本代码,以减少维护开发成本。对丰富的定制需求进行抽象与功能配置化要求单体应用应具备良好的模块化设计。即便如此,传统单体应用在升级服务,异地部署维护与实施遇到很多困难,比如升级不及时,异地部署维护成本太高。所以,随着云计算与互联网技术的普及,对面向中小企业的单体应用进行saas化,已成为it服务公司的一个战略方向。

目前,对于传统单体应用的saas化有如下几种方案:(1)单纯将单体应用部署到云端,一个租户部署一个应用实例。此方案的优点是软件架构几乎无须改造,缺点是硬件资源利用率低,每个企业部署一个应用实例,资源成本高。(2)多个企业共享一个应用实例,每个企业使用不同数据库。此类方案的优点是软件架构改造代价低,缺点是要求租户共享的应用实例代码版本必须一致。如果租户有定制化要求,那么需要部署单独的应用实例,由于中小企业的业务定制化需求多样,所以该方案往往会退化成方案1。(3)在方案2的基础上,将软件功能定制化代码改造为功能可配置化,配置信息保存在租户各自的数据库中,租户在使用应用功能时读取各自的业务功能配置信息,从而达到功能配置化目的。此方案的优点是多个租户可以共享一个部署实例,缺点是软件功能配置化改造代价较高,随着可配置化越来越多,软件越来越抽象,越来越复杂,对开发的技能要求越高,且仍然要求租户共享的应用实例代码版本必须一致。(4)单体应用微服务改造,即将单体应用进行拆分,并且对拆分出来微服务可以独立部署。此方案的优点是部署与定制非常灵活,既可以通过代码开发的方式也可以通过功能配置化的方式实现租户的定制化需求。缺点是软件改造代价高,人力要求高,且需要引入服务治理等相关基础设施,增加系统的部署和维护难度。微服务化另一个目的是满足高并发,但对于大多数中小企业应用不像互联网应用有很高的高并发要求。

如上所述,对于大多数中小企业应用来说,传统模块化良好的单体应用可以代价较小的上述方案2所示可伸缩的saas,但是此类方案存在的最大问题是不能通过增量式部署,达到不同代码版本共享相同的部署运行实例。因此当两个版本代码差异很小,同时服务的租户不多时,也不得不重新部署一个实例,造成资源浪费。



技术实现要素:

本发明针对现有技术中的不足,提供了一种在充分利用既有的软件架构同时,获得资源利用率较高的资源共享能力的基于单体应用的数据管理方法,所示方法具体包括:

接收租户设备发送的登录请求,所述登录请求中包含所述租户身份信息;

在租户信息数据库中查询所述租户身份信息对应的租户租用模块版本列表,所述租户租用模块版本列表包括但不限于所租用的单体应用模块标识和模块版本信息;

根据所述租户租用模块版本列表加载对应模块版本集合;

根据预设部署规则从已部署实例中选取目标实例,将所租用的模块版本集合通过增量部署方式部署至所述目标实例。

优选的,所述步骤根据预设部署规则从已部署实例中选取目标实例,将所租用的模块版本集合通过增量部署方式部署至所述目标实例,还包括:当已部署实例的负载指标均超过相应实例阈值时,根据所租用的模块版本集合单独部署实例;否则根据预设部署规则从负载指标未超过相应实例阈值的已部署实例中选取目标实例,将所租用的模块版本集合通过增量部署方式部署至所述目标实例。

优选的,所述部署规则为选取与租户所租用的模块版本集合中相同模块数最多的已部署实例,当匹配的已部署实例有多个时选取拥有模块数最少的已部署实例。

优选的,所述租户租用模块版本列表包括但不限于租户身份信息、租用应用信息、所租用的应用模块标识和模块版本信息。

优选的,所述目标实例中包含所述单体应用同一模块的多个版本。

优选的,所述数据管理方法还包括:根据各模块请求数量与租户数量的比值,将各已部署实例中所述比值大于阈值二的模块抽离出来单独部署实例。

本发明还公开了一种对单体应用进行saas改造的方法,具体包括:

根据单体应用各版本信息,对单体应用中的各模块添加模块版本号;

在租户租用时,记录租户的租用模块版本列表,所述用户租用模块版本列表包括但不限于所租用的应用模块标识和模块版本信息;

在接到租户登录请求后,根据租户身份信息获取对应租用模块版本列表,根据所述租用模块版本列表加载对应模块版本集合;

根据预设部署规则从已部署实例中选取目标实例,将所租用的模块版本集合通过增量部署方式部署至所述目标实例。

优选的,所述对单体应用进行saas改造的方法还包括:获取各模块在特定时间内的请求处理累计时间占所有模块总处理时间的比值,当排名在前的特定数量模块占比之和超过阈值二时,对所述特定数量模块进行迭代拆分处理后转化为微服务。

本发明还公开了一种服务器,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其中所述处理器执行所述计算机程序时实现如前述基于单体应用的数据管理方法的步骤。

本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如前述基于单体应用的数据管理方法的步骤。

本发明通过对单体应用对模块识别加上版本号,使得将不同版本的相同模块要作为不同模块进行识别,继而通过增量式部署,达到不同代码版本共享相同的部署运行实例。解决了传统的模块化单体应用虽然支持模块升级加载功能,但是并不支持相同模块的不同版本加载,导致当某一租户只对单体应用中的某一模块进行了定制后,即使两个版本代码差异很小且服务租户不多时,也不得不重新单独部署和运行一个实例而造成的资源极大浪费的问题。通过对单体应用的进一步改造,低代价地将单体应用改造为具备增量部署能力,使得在充分利用既有的软件架构资产同时,可获得资源利用率较高的资源共享能力,具备软件改造代价低,通过支持增量部署方式实现多个代码版本有差异的租户仍然能够共享一个部署实例,从而充分利用既有的软件架构资产,获得资源利用率较高的saas能力,能广泛适用于模块化良好且具有插件化能力的单体应用。

本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为本发明一实施例公开的基于单体应用的数据管理方法的流程示意图。

图2为本发明一实施例公开的步骤s103的部分示意图。

图3为本发明一实施例公开的对单体应用进行saas改造的方法的流程示意图。

图4为现有技术中单体应用的部署运行实例示意图。

图5为本发明一实施例公开的对单体应用进行saas改造后的部署运行实例示意图。

图6为本发明一实施例公开的服务器结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例的附图,对本发明实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

在本发明中,除非另有明确的规定和限定,第一特征在第二特征之“上”或之“下”可以包括第一和第二特征直接接触,也可以包括第一和第二特征不是直接接触而是通过它们之间的另外的特征接触。而且,第一特征在第二特征“之上”、“上方”和“上面”包括第一特征在第二特征正上方和斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”包括第一特征在第二特征正下方和斜下方,或仅仅表示第一特征水平高度小于第二特征。

除非另作定义,此处使用的技术术语或者科学术语应当为本发明所属领域内具有一般技能的人士所理解的通常意义。本发明专利申请说明书以及权利要求书中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”或者“一”等类似词语也不表示数量限制,而是表示存在至少一个。

附图1为一实施例公开的一种基于单体应用的数据管理方法,该方法适用于模块化良好,无状态的单体应用,其中无状态应用是指业务状态保存在数据库实例中,而非保存在应用服务器,如基于web的erp,wms,mes等应用,所述数据方法具体包括如下步骤。

步骤s101,接收租户设备发送的登录请求,所述登录请求中包含所述租户身份信息。

步骤s102,在租户信息数据库中查询所述租户身份信息对应的租户租用模块版本列表,所述租户租用模块版本列表包括但不限于所租用的单体应用模块标识和模块版本信息。

具体的,对单体应用增加模块版本管理,为每个模块增加版本号,具体单体应用对模块的识别可采用“模块id+模块版本号”,即采用格式mn.vn,其中mn代表模块id,vn代表模块版本号,比如m1.v1,表示模块1的v1版本。其中单体应用版本号是随着模块版本的变化而变化,所以模块版本号可以唯一标识模块的某一版本代码。在租户租用时,记录所述租户的租用模块版本列表。所述所述租户租用模块版本列表包括但不限于所租用的单体应用模块标识和模块版本信息,所述单体应用模块标识可以是模块id。在另一些实施例中,所述租户租用模块版本列表可包括但不限于租户身份信息、租用应用信息、所租用的应用模块标识和模块版本信息,例如:租户a租用单体应用版本为r1且租用的模块为m1.v1,m2.v1;租户b租用模块与租户a相同,但需要对m2模块进行定制,从而导致m2.v1版本演化为m2.v2,由于是单体应用所以单体应用版本演化为r2。由此我们可以得到租户a,b的租用列表分别为:

(a,r1,(m1.v1,m2.v1))

(b,r2,(m1.v1,m2.v2))

其中a和b包括租户身份信息。

由于传统的模块化单体应用虽然支持模块升级加载功能,但是并不支持相同模块的不同版本加载,导致当某一租户只对单体应用中的某一模块进行了定制后,对于该租户也需要单独部署和运行一个实例。但如果租户a和租户b租用了很多相同模块,并且只有m2有客户化定制,那么独立部署和运行一个相似的实例将非常浪费。为解决这些问题,首先通过对单体应用对模块id识别加上版本号,使得将不同版本的相同模块要作为不同模块进行识别,以方便后续的加载。

步骤s103,根据所述租户租用模块版本列表加载对应模块版本集合。

如附图2所示,当租户请求到来时,所述单体应用从租户租用关系列表中获取对应租户的租用关系列表,根据所述租户对应的租用模块版本列表,在调用路由上需包括所述租户的用模块版本列表中的模块id和模块版本号,调用对应版本模块的接口完成请求处理。

步骤s104,根据预设部署规则从已部署实例中选取目标实例,将所租用的模块版本集合通过增量部署方式部署至所述目标实例。

具体的,所述部署规则可以为选取与租户所租用的模块版本集合中相同模块数最多的已部署实例,当匹配的已部署实例有多个时选取拥有模块数最少的已部署实例。其中,如果匹配已部署实例有多个,也可取第一个匹配的已部署实例。其中在一具体实施例中,所述步骤s104具体如下:

设新租用模块集合为n;k1,k2,...,kn为已部署的实例,mkn表示已部署实例kn的租用模块集合。并且,所有集合的元素都不重复。

n^mkn,表示n与mkn的交集;

n+mkn,表示n与mkn的并集;

n-mkn,表示n对mkn的差集;

card表示取集合的元素个数;

1)查找card(nm^mkn)为最大的mkn的实例集合,记为sm,sm的元素为mkx(1≤x≤n)。

2)查找card(mkx)最小的实例集合,记为sn,sn的元素为mky(1≤y≤x),

3)如果sn为空集,新生成一个空模块集合的部署实例,记为mks(s=1);否则如果card(sn)≥1,则从集合sn中取出租户数最少的第一个集合,记为mks(1≤s≤y);

4)创建集合i,其中i=n-mks

5)将集合i部署到mks实例

在一些实施例中,所述步骤s104,根据预设部署规则从已部署实例中选取目标实例,将所租用的模块版本集合通过增量部署方式部署至所述目标实例,还包括:

当已部署实例的负载指标均超过相应实例阈值时,根据所租用的模块版本集合单独部署实例;

否则根据预设部署规则从负载指标未超过相应实例阈值的已部署实例中选取目标实例,将所租用的模块版本集合通过增量部署方式部署至所述目标实例。

其中,所述的负载指标可以是每一部署实例的租户数量,其对应的相应实例阈值可以为该部署实例限制的最大租户数量。每一个部署实例有限制最大的租户数量,这是因为一个部署实例所服务的租户数量是有上限的。这个上限值取决于实际软件的业务和用户体验目标,可以根据实际情况测试取得,举例如下:

如果已部署如下3个实例,且设一个实例服务的上限为tk,k1的租户数tk1=5;k2的租户数为tk2=8;k3的租户数为tk3=10;另:

k1={m1.v1,m2.v1,m4.v1,m4.v2}

k2={m1.v1,m2.v1,m5.v1,m6.v1,m7.v1}

k3={m1.v1,m2.v1,m9.v1}

现在有新租户的租用模块列表为n={m1.v1,m2.v1,m8.v1}

根据上述预设部署规则可知n与k1,k2,k3的交集是一样的,但是因为k1,k3的模块数量小于k2,且k1的租户数tk1<tk3,所以n将部署到k1。部署后:

k1={m1.v1,m2.v1,m4.v1,m4.v2,m8.v1}。

同时从上述可知,所述目标实例中可包含所述单体应用同一模块的多个版本,以供不同的租户调用,而不必单独部署一个新实例,提供资源利用率。

在另一些实施例中,所述的数据管理方法,还包括:根据各模块请求数量与租户数量的比值,将各已部署实例中所述比值大于阈值二的模块抽离出来单独部署实例。所述阈值二可根据实际情况进行使用确定。通过设立模块请求数量与租户数量的比值来对比模块的使用率,对于高使用率且负载较高的模块,可以抽离出来独立部署实例,从而实现满足单体应用的高可伸缩性。

本实施例通过对单体应用对模块id识别加上版本号,使得将不同版本的相同模块要作为不同模块进行识别,继而通过增量式部署,达到不同代码版本共享相同的部署运行实例。解决了传统的模块化单体应用虽然支持模块升级加载功能,但是并不支持相同模块的不同版本加载,导致当某一租户只对单体应用中的某一模块进行了定制后,即使两个版本代码差异很小且服务的租户不多时,也不得不重新单独部署和运行一个实例而造成的资源极大浪费的问题。通过对单体应用的进一步改造,低代价地将单体应用改造为具备level4的增量部署能力,使得在充分利用既有的软件架构资产同时,可获得资源利用率较高的资源共享能力,具备软件改造代价低,通过支持增量部署方式实现多个代码版本有差异的租户仍然能够共享一个部署实例,从而充分利用既有的软件架构资产,获得资源利用率较高的saas能力,能广泛适用于模块化良好且具有插件化能力的单体应用。

附图3为一实施例公开的一种对单体应用进行saas改造的方法,用于对模块化良好的单体应用进行低成本saas改造,适合面向中小型企业个性化定制多的企业应用,比如erp,mes,wms等,具体步骤如下:

步骤s201,根据单体应用各版本信息,对单体应用中的各模块添加模块版本号。

由于传统的模块化单体应用通常支持模块升级替换功能,但是并不支持相同模块的不同版本同时加载。因此,需要对单体应用进行改造,使得单体应用对模块的识别采用“模块id+模块版本号”。而目前的saas化的单体应用加载模块时有两种方式,一种是升级替换,另一种是新增加载。显然对于多租户而言采用新增加载方式将更有效的节省设备资源,提供资源利用率。而目前单体应用无法支持不同版本的相同模块的同时加载,限制了增量式部署的应用。因此本实施例中,先对单体应用增加模块版本管理,为每个模块增加版本号,具体单体应用对模块的识别可采用“模块id+模块版本号”,即采用格式mn.vn,其中mn代表模块id,vn代表模块版本号,比如m1.v1,表示模块1的v1版本。其中单体应用版本号是随着模块版本的变化而变化,所以模块版本号可以唯一标识模块的某一版本代码。

步骤s202,在租户租用时,记录租户的租用模块版本列表,所述用户租用模块版本列表包括但不限于所租用的应用模块标识和模块版本信息。

租户租用时,记录租户a与租户b的租用模块版本列表。在一些实施例中,例如租户a租用单体应用版本为r1且租用的模块为m1.v1,m2.v1;租户b租用模块与租户a相同,但需要对m2模块进行定制,从而导致m2.v1版本演化为m2.v2,由于是单体应用所以单体应用版本演化为r2。由此我们可以得到租户a,b的租用列表l:

(a,r1,(m1.v1,m2.v1))

(b,r2,(m1.v1,m2.v2))

步骤s203,在接到租户登录请求后,根据租户身份信息获取对应租用模块版本列表,根据所述租用模块版本列表加载对应模块版本集合。

当租户请求到来时,所述单体应用从租户租用关系列表中获取对应租户的租用关系列表,根据所述租户对应的租用模块版本列表,在调用路由上需包括所述租户的用模块版本列表中的模块id和模块版本号,调用对应版本模块的接口完成请求处理。

步骤s204,根据预设部署规则从已部署实例中选取目标实例,将所租用的模块版本集合通过增量部署方式部署至所述目标实例。

具体的,所述部署规则可以为选取与租户所租用的模块版本集合中相同模块数最多的已部署实例,当匹配的已部署实例有多个时选取拥有模块数最少的已部署实例。其中,如果匹配已部署实例有多个,也可取第一个匹配的已部署实例。

在另一些实施例中,所述步骤还包括当已部署实例的负载指标均超过相应实例阈值时,根据所租用的模块版本集合单独部署实例;否则根据预设部署规则从负载指标未超过相应实例阈值的已部署实例中选取目标实例,将所租用的模块版本集合通过增量部署方式部署至所述目标实例。

本实施例通过对单体应用增加模块版本管理,对单体应用对模块id识别加上版本号,使得将不同版本的相同模块要作为不同模块进行识别,继而通过增量式部署,达到不同代码版本共享相同的部署运行实例。解决了如附图4所示的传统模块化单体应用虽然支持模块升级加载功能,但是并不支持相同模块的不同版本加载,导致当某一租户只对单体应用中的某一模块进行了定制后,即使两个版本代码差异很小且服务的租户不多时,也不得不重新单独部署和运行一个实例而造成的资源极大浪费的问题。通过对单体应用的进一步改造,低代价地将单体应用改造为具备level4的增量部署能力,使得在充分利用既有的软件架构资产同时,可获得资源利用率较高的资源共享能力,具备软件改造代价低。如附图5所示,经过本实施例所述的saas改造后的单体应用,通过支持增量部署方式实现多个代码版本有差异的租户仍然能够共享一个部署实例,从而充分利用既有的软件架构资产,获得资源利用率较高的saas能力,能广泛适用于模块化良好且具有插件化能力的单体应用。

在另一些实施例中,所述的对单体应用进行saas改造的方法还包括:获取各模块在特定时间内的请求处理累计时间占所有模块总处理时间的比值,当排名在前的特定数量模块占比之和超过阈值二时,对所述特定数量模块进行迭代拆分处理后转化为微服务。

具体的,可以为单体应用的每个模块加入请求处理负载统计,负载统计方法:设mnt表示模块n在一段时间内的请求处理累计时间mnt,mns为一段时间内总的请求处理时间,记mnr=(mnt/mns)*100,取mnr排名靠前3且占比之和超过50%的这些模块进行拆分和微服务化,在该实施例中所述阈值二选取了50%,当然阈值二可以根据实际业务测试决定。按照这种方式进行评估和迭代拆分处理,可以逐步、可靠的将单体应用演化为微服务。

在另一些实施例中,对单体应用进行saas改造后,当发现单体应用里有部分模块的使用率和请求率显著高于其他模块时,可通过设立模块请求数量与租户数量的比值来对比模块的使用率。对于高使用率且负载较高的模块,可以抽离出来独立部署实例。具体的,获取一定时间内的单体应用各模块的请求数量与总租户数量,根据各模块请求数量与全部租户数量的比值,将各已部署实例中所述比值大于阈值二的模块抽离出来单独部署实例。所述阈值二可根据实际情况进行使用确定。通过设立模块请求数量与租户数量的比值来对比模块的使用率,对于高使用率且负载较高的模块,可以抽离出来独立部署实例,从而实现满足单体应用的高可伸缩性,既保护了既有的软件架构资产价值,也提供了往微服务演化的高价值,高可靠路径。

需要说明的是,本说明书中前述各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于对单体应用进行saas改造的方法的相关实施例而言,由于其与实施例公开的部分内容与前述的基于单体应用的数据管理方法相类似,所以描述的比较简单,相关之处参见数据管理方法部分说明即可。

附图6为实施例公开的一种服务器的示意图。所述服务器用于为租户提供单体应用服务,该实施例的服务器包括存储器32、处理器31以及存储在所述存储器中并可在所述处理器上运行的计算机程序,例如基于单体应用的数据管理程序。所述处理器执行所述计算机程序时实现上述各个基于单体应用的数据管理方法实施例中的步骤。

示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述服务器中的执行过程。

所述服务器可包括,但不仅限于处理器、存储器。本领域技术人员可以理解,所述示意图仅仅是服务器的示例,并不构成对服务器设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述服务器设备还可以包括输入输出设备、网络接入设备、总线等。

所称处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述服务器设备的控制中心,利用各种接口和线路连接整个服务器设备的各个部分。

所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述服务器设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

所述基于单体应用的数据管理方法如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

总之,以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所作的均等变化与修饰,皆应属本发明专利的涵盖范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1