发明内容
针对现有技术中锁机制实现临界资源的分配时产生的缺陷,本发明提供一种基于虚拟CPE的资源分配方法及系统。
根据本发明的一个方面提供了一种基于虚拟CPE的资源分配方法,包括以下步骤:环境部署,获取支持数据同步的网元、数据库,通过所述网元部署虚拟CPE;初始化虚拟CPE参数,将所述数据库设置在所述虚拟CPE中;分配预处理,当获取分配指令时,根据该分配指令对数据库的资源数据进行分配预处理,所述分配预处理包括检测数据库;检测数据库,对数据库进行检测,若数据库存在所述资源数据,则根据分配指令进行资源数据分配,若数据库不存在所述资源数据,则更新数据库中的资源数据,更新完成后重新进行检测数据库;数据更新,更新并同步所述网元、数据库的资源数据。
本发明比传统同步方法具有更好的扩展性,因为传统的同步方法,只能支撑单服务内的资源正确分配,而本发明既可以支持单服务,又可以支持分布式服务,同时支持单节点和集群化部署方式的服务,拓展性更强。同时针对第三方中间件的不稳定性因素,本发明设计了一套应对措施,来保证在高强度使用场景下,发生中间件异常时,能够保证系统的可用性。基于虚拟CPE实现数据库的快捷、方便、高效迁移,对资源数据分配的效率有极大的提高。
进一步的,所述的一种基于虚拟CPE的资源分配方法,所述数据库包括但不限于MySQL、Redis。
进一步的,所述的一种基于虚拟CPE的资源分配方法,所述网元包括但不限于一个或多个具有传输功能的设备。
进一步的,所述的一种基于虚拟CPE的资源分配方法,包括至少两个数据库。
进一步的,所述的一种基于虚拟CPE的资源分配方法,包括两个数据库:MySQL 和Redis,且MySQL和Redis互为主备、数据互通。
进一步的,所述的一种基于虚拟CPE的资源分配方法,当存在两个数据库时所述分配预处理具体步骤包括:
在Redis数据库中创建单向数据队列,根据所述分配指令判断所述单向数据队列中是否存在资源数据,若存在,则根据分配指令进行资源数据分配,若不存在,则查询MySQL数据库,并将所述MySQL数据库中的资源数据存入所述单向数据队列。单向数据队列只允许在一端进行插入操作,而在另一端进行删除操作的线性表,通过单向数据队列可以有效减少数据重叠、覆盖的发生。
进一步的,所述的一种基于虚拟CPE的资源分配方法,所述单向数据队列包括但不限于具有单进和/或单出数据功能的数据队列。
进一步的,所述的一种基于虚拟CPE的资源分配方法,所述单向数据队列为 Redis中的list数据结构,所述单向数据队列的数据存取采用Redis的PUSH-POP 机制。
根据本发明的另一方面提供了一种基于虚拟CPE的资源分配系统,该系统包括环境部署单元、数据更新单元、分配处理单元,所述环境部署单元、数据更新单元、分配处理单元相互通讯连接,其中:所述环境部署单元,用于获得支持数据同步的网元、数据库,并所述网元上部署虚拟CPE;所述数据更新单元,用于将所述数据库设置在所述虚拟CPE中、更新并同步所述网元、数据库的资源数据;所述分配处理单元,用于获取分配指令,并根据所述分配指令对虚拟CPE、数据库中的资源数据进行分配处理。
进一步的,所述虚拟CPE根据所述网元进行部署。
所述虚拟CPE是通过软件而非硬件向分支机构或边缘网络提供路由、安全、 SD-WAN等虚拟托管服务的虚拟设备。其中cpe可以是防火墙、边界网关、路由器、 NAT、VPN等。通过虚拟CPE,可以利用基于软件的虚拟功能实现所有基于硬件的操作。通俗的讲,虚拟CPE即cpe的虚拟化部署,虚拟CPE的部署,使得放置位置更加灵活,适用更多的应用场景。常见的虚拟CPE(虚拟客户端)是通过多个相互连接的客户端设备组成网络实现,虚拟化每个客户端的CPE以定义众多的虚拟化客户端设备(vCPE)。
本发明的有益效果体现在:
根据本发明的基于虚拟CPE网元用户最大容量分配方法比传统的同步方法有着更好的性能,因为Redis的数据是存储在内存中的,拥有着很高的I/O性能;更好扩展性,因为传统的同步方法,只能支撑单服务内的资源正确分配,而本专利方法,既可以支持单服务,又可以支持分布式服务;具有高可靠性,能够稳定正确的将资源有序的分配,并且多数据库可以及时纠错,防止分配异常。
具体实施方式
下面将结合附图对本发明技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本发明的技术方案,因此只作为示例,而不能以此来限制本发明的保护范围。
需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本发明所属领域技术人员所理解的通常意义。
实施例一
如图1所示,在该实施例中,环境部署,获取支持数据同步的网元、数据库,通过所述网元部署虚拟CPE;初始化虚拟CPE参数,将所述数据库设置在所述虚拟CPE中;分配预处理,当获取分配指令时,根据该分配指令对数据库的资源数据进行分配预处理,所述分配预处理包括检测数据库;检测数据库,对数据库进行检测,若数据库存在所述资源数据,则根据分配指令进行资源数据分配,若数据库不存在所述资源数据,则更新数据库中的资源数据,更新完成后重新进行检测数据库;数据更新,更新并同步所述网元、数据库的资源数据。
本实施例中所述的一种基于虚拟CPE的资源分配方法,所述数据库包括但不限于MySQL、Redis。其中MySQL是一款安全、跨平台、高效的,并与PHP、Java 等主流编程语言紧密结合的数据库系统,其体积小、速度快、总体拥有成本低。 Redis(Remote DictionaryServer),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
在本实施例中,所述网元包括但不限于一个或多个具有传输功能的设备。本实施例中,网元可以是组成路由器、NAT、VPN等的一个或多个机盘或机框。
在本实施例中,所述的一种基于虚拟CPE的资源分配方法,包括至少两个数据库。
在本实施例中,所述的一种基于虚拟CPE的资源分配方法,包括两个数据库:MySQL和Redis,且MySQL和Redis互为主备、数据互通。由于所述网元、数据库以及Redis三方数据互通且同步,所述数据库和Redis可以互为主备关系,当Redis发生异常时,其数据库可作为备份无缝衔接,相同的若数据库发生异常, Redis也可作备份无缝衔接。
在本实施例中,所述的一种基于虚拟CPE的资源分配方法,当存在两个数据库时所述分配预处理具体步骤包括:
在Redis数据库中创建单向数据队列,根据所述分配指令判断所述单向数据队列中是否存在资源数据,若存在,则根据分配指令进行资源数据分配,若不存在,则查询MySQL数据库,并将所述MySQL数据库中的资源数据存入所述单向数据队列。单向数据队列只允许在一端进行插入操作,而在另一端进行删除操作的线性表,通过单向数据队列可以有效减少数据重叠、覆盖的发生。
在本实施例中,所述的一种基于虚拟CPE的资源分配方法,所述单向数据队列包括但不限于具有单进和/或单出数据功能的数据队列。
在本实施例中,所述的一种基于虚拟CPE的资源分配方法,所述单向数据队列为Redis中的list数据结构,所述单向数据队列的数据存取采用Redis的 PUSH-POP机制。使用的数据结构是list,无需大量的key来存储对应的value。将数据池化管理,把数据统一塞入一个key中,形成一个左进右出的数据队列,数据统一从队列左侧塞入,然后每次从右侧获取,这样获取资源的时间复杂度较低。通常Redis中的list会被当做队列使用,左进右出。
例如采用Redis中间件去实现,主要使用的是Redis里的list数据结构,先创建一个list,将会产生资源争抢的数据生成多个资源单位,然后将这些资源单位插入到list中,形成长链。由于Redis存取数据是单线程操作,所以当多个线程获取数据时,有且仅有一个线程能获取到资源,每次删除一个资源,list 中就会少一个资源。在可自定义的配置下,支持网元、数据库、Redis三方数据同步,Redis和数据库互作主备,当Redis发生异常时,数据库可以无缝衔接。
该分配方法比传统同步方法更好扩展性,因为传统的同步方法,只能支撑单服务内的资源正确分配,既可以支持单服务,又可以支持分布式服务。同时支持单节点和集群化部署方式的服务,拓展性更强。同时针对第三方中间件的不稳定性因素,本发明设计的应对措施,保证在高强度使用场景下,发生中间件异常时,能够保证系统的可用性。
对应上述方法,本实施例还提出了基于虚拟CPE网元用户最大容量分配系统,该系统包括环境部署单元、数据更新单元、分配处理单元,所述环境部署单元、数据更新单元、分配处理单元相互通讯连接,其中:所述环境部署单元,用于获得支持数据同步的网元、数据库,并所述网元上部署虚拟CPE;所述数据更新单元,用于将所述数据库设置在所述虚拟CPE中、更新并同步所述网元、数据库的资源数据;所述分配处理单元,用于获取分配指令,并根据所述分配指令对虚拟 CPE、数据库中的资源数据进行分配处理。
实施例二
当多个工单同时进行,并使用数据库查询时,由于数据库中的资源数据可能是临时态(瞬时态),使多个工单重合或覆盖,导致资源分配出现问题。临时态(瞬时态)是一种不存在于节点中、也不存在于数据库中的数据,被称为临时态。
如图2所示,当N个工单同时进行分配时,若其中工单1和工单2分配用户数相同,导致工单重合,得到的分配资源会产生异常。
如图3所示,在多个工单同时进行分配时:
首先更新数据,对Redis数据库、MySQL数据库进行数据更新;
并且申请分配,在申请时先查询并判断Redis中是否存在对应资源,若存在,则更新Redis中的资源数量,若Redis中不存在对应资源,则查询MySQL数据库,并将查询到的资源储存在所述Redis中,并更新Redis中的资源数量;
最后完成分配。这样保持Redis数据库、MySQL数据库中数据的一致性,并且可以一定程度上减少对数据库操作的压力。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。
以上结合具体实施例描述了本申请的基本原理,但是,需要指出的是,在本申请中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本申请的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本申请为必须采用上述具体的细节来实现。
本申请中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
还需要指出的是,在本申请的装置和设备中,各部件是可以分解和/或重新组合的。这些分解和/或重新组合应视为本申请的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本申请。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本申请的范围。因此,本申请不意图被限制到在此示出的方面,而是按照与在此发明的原理和新颖的特征一致的最宽范围。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换等,均应包含在本申请的保护范围之内。