读写分离控制方法和装置、存储介质及电子装置与流程

文档序号:14727198发布日期:2018-06-19 11:49阅读:177来源:国知局

本发明涉及计算机领域,具体而言,涉及一种读写分离控制方法和装置、存储介质及电子装置。



背景技术:

代理服务器(proxy server,以下简称proxy),通常用于代理网络用户所使用的浏览器向web服务器获取网络信息,并缓存在proxy的存储器中,以减少反复向web服务器请求上述网络信息的等待时长,从而达到提高网络信息的获取效率的目的。

其中,云数据库的前端proxy还用于代理对将要存储到数据库中的数据进行读写分离,但是相关技术中提供的读写分离方法,往往需要对数据进行多次内存拷贝操作,还需调用不同协议栈相关函数进行协议检查,从而导致对数据的读写分离的控制操作复杂化,速度难以提升,进而造成读写分离控制效率较低的问题。

针对上述的问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种读写分离控制方法和装置、存储介质及电子装置,以至少解决相关技术中提供的的技术问题。

根据本发明实施例的一个方面,提供了一种读写分离控制方法,包括:使用工具集将接收到的数据包直接拷贝至服务器的应用层存储器中,其中,工具集用于控制数据包绕过服务器中的内核处理器到达应用层存储器;对应用层存储器中存储的数据包按照预定格式进行封装,并映射至共享内存,其中,共享内存中存储有至少用于指示存储数据包的存储地址的指针;获取共享内存中的指针所指示的数据包进行解析,得到待分离的目标数据;按照目标数据的数据类型对目标数据进行读写分离控制。

根据本发明实施例的另一方面,还提供了一种读写分离控制装置,包括:拷贝单元,用于使用工具集将接收到的数据包直接拷贝至服务器的应用层存储器中,其中,工具集用于控制数据包绕过服务器中的内核处理器到达应用层存储器;封装单元,用于对应用层存储器中存储的数据包按照预定格式进行封装,并映射至共享内存,其中,共享内存中存储有至少用于指示存储数据包的存储地址的指针;解析单元,用于获取共享内存中的指针所指示的数据包进行解析,得到待分离的目标数据;读写分离单元,用于按照目标数据的数据类型对目标数据进行读写分离。

根据本发明实施例的又一方面,还提供了一种存储介质,上述存储介质包括存储的程序,其中,上述程序运行时执行上述读写分离控制方法。

根据本发明实施例的又一方面,还提供了一种电子装置,包括存储器、处理器及存储在上述存储器上并可在上述处理器上运行的计算机程序,上述处理器通过上述计算机程序执行上述读写分离控制方法。

在本发明实施例中,在使用工具集将接收到的数据包直接拷贝至服务器的应用层存储器之后,通过对应用层存储器中存储的数据包按照预定格式进行封装,并映射至共享内存,然后获取共享内存中的指针所指示的数据包进行解析,得到待分离的目标数据,从而实现按照上述目标数据的数据类型对目标数据进行快速地读写分离。也就是说,通过将接收到的数据包直接拷贝至服务器的应用层存储器中,绕过服务器中内核处理器对接收到的数据包所进行的处理操作,以达到简化数据库中读写分离操作的步骤,实现提高数据读写分离的控制效率的效果,进而解决了相关技术中提供的的技术问题。

附图说明

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

图1是根据本发明实施例的一种可选的读写分离控制方法的应用环境示意图;

图2是根据本发明实施例的一种可选的读写分离控制方法的流程图;

图3是根据本发明实施例的一种可选的读写分离控制方法的示意图;

图4是根据本发明实施例的另一种可选的读写分离控制方法的示意图;

图5是根据本发明实施例的又一种可选的读写分离控制方法的示意图;

图6是根据本发明实施例的又一种可选的读写分离控制方法的示意图;

图7是根据本发明实施例的一种可选的读写分离控制装置的示意图;

图8是根据本发明实施例的一种可选的电子装置的示意。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本发明实施例的一个方面,提供了一种读写分离控制方法,可选地,该读写分离控制方法可以但不限于应用于如图1所示的应用环境中。使用工具集将接收到的数据包直接拷贝至服务器的应用层存储器104中,其中,工具集用于控制数据包绕过服务器中的内核处理器102到达应用层存储器104;对应用层存储器104中存储的数据包按照预定格式进行封装,并映射至共享内存106,其中,共享内存106中存储有至少用于指示存储数据包的存储地址的指针;获取共享内存106中的指针所指示的数据包进行解析,得到待分离的目标数据;按照目标数据的数据类型对目标数据进行读写分离。

可选地,上述应用层存储器可以存在与一个服务器上或者分散在多个服务器上;上述共享内存可以存在于一个服务器上或者分散在多个服务器上。上述数据包可以使用网络进行传输,上述网络可以包括但不限于以下至少之一:广域网、城域网、局域网。上述仅是一种示例,本实施例中对此不做任何限定。

可选地,如图2所示,上述读写分离控制方法包括:

S202,使用工具集将接收到的数据包直接拷贝至服务器的应用层存储器中,其中,工具集用于控制数据包绕过服务器中的内核处理器到达应用层存储器;

S204,对应用层存储器中存储的数据包按照预定格式进行封装,并映射至共享内存,其中,共享内存中存储有至少用于指示存储数据包的存储地址的指针;

S206,获取共享内存中的指针所指示的数据包进行解析,得到待分离的目标数据;

S208,按照目标数据的数据类型对目标数据进行读写分离。

可选地,在本实施例中,上述读写分离控制方法可以但不限于应用于数据库读写分离场景中,其中,对数据的读写分离控制操作可以但不限于是为了确保数据库产品的稳定性,以使数据库具备双机热备功能,一台设备用于提供增删改业务产生的写操作,另一台用于提供读操作,如查询、只读等。上述仅是一种示例,本实施例中对上述应用场景不做任何限定。需要说明的是,在本实施例中,通过将接收到的数据包直接拷贝至服务器的应用层存储器中,绕过服务器中内核处理器对接收到的数据包所进行的处理操作,以达到简化数据库中读写分离操作的步骤,使得接收到的数据包可以快速完成读写分离,达到提高数据读写分离的控制效率的效果,进而解决了相关技术中所提供的方式存在的读写分离控制操作较复杂,导致的读写分离控制效率较低的技术问题。

具体结合图3进行说明。如图3所示,当网卡接收到数据包之后,不需要将数据包发送到服务器的内核处理器进行处理,而是可以使用工具集直接将数据包发送到应用层的应用层存储器(如环缓冲区ring buffer)中,在应用层中进行封装,映射到共享内存中,并经过结构化查询语言(Structured Query Language,简称SQL)线程解析得到待分离的目标数据,然后,将目标数据发送到接入层。接入层包括入队列与出队列,并有多个SQL解析线程。多个SQL解析线程对接收到的目标数据进行解析,并将解析结果发送给主机。主机根据解析结果进行处理,若是只读实例,则由主机进行处理,若是非只读实例,则发送给备机,由备机进行处理。从而实现了根据目标数据的数据类型对目标数据进行读写分离。

可选地,上述工具集可以使用数据平面开发工具集(Data Plane Development Kit,简称DPDK)。其中,DPDK用于通过在应用层注册驱动,以使网卡接收到的数据包可以绕过服务器的内核处理器直接被拷贝至应用层存储器(如环缓冲区ring buffer)中,从而实现为用户空间高效的数据包处理提供函数和驱动的支持,无需再执行内核处理器配置的通用性操作,而是更加专注于应用所配置的对数据包的高性能处理,提高了对接收到的数据包的处理效率,进而实现提高在将处理后的数据包中的数据写入数据库时的读写分离控制效率。

可选地,在本实施例中,上述读写分离可以但不限于包括:当通过解析获得的目标数据的数据类型为只读类型时,则将目标数据发送到只读端口;当目标数据的数据类型为非只读类型时,将目标数据发送到写端口。

需要说明的是,在本实施例中,上述只读端口或写端口可以但不限于通过端口号或端口地址表示,当解析线程解析到目标数据的数据类型为只读类型时,则转发给proxy-read-only-backend对应的IP地址和端口号对应的数据库实例,否则,转发给proxy-backend对应的和端口号对应的数据库实例。

可选地,在映射至共享内存前,可以但不限于对接收到的数据包先进行解析,再重新进行封装,以使数据包绕过内核处理器,而可以直接在应用层对数据包进行解析,解析之后再进行封装,还可保证数据包继续在应用层传输。其中,上述封装后的数据包适用的通讯接口可以包括但不限于:TCP/IP接口、可移植操作系统接口posix接口。

可选地,上述解析过程可以但不限于使用多个解析线程对指针所指向的数据包进行解析,当使用线程对指针所指向的数据包进行解析时,可以采用轮询的方式对共享内存中的数据包进行轮询,获取所要解析的数据包。其中,上述解析线程可以但不限于SQL线程。

此外,在本实施例中,上述每个解析线程(也可称作每个SQL线程)都将按照预定周期不断轮询共享内存中新得到的指针,其中,该指针可以但不限于用于指示目标数据的存储地址和存储长度。进一步,再通过mysql协议获取目标数据进行解析。如当线程获取到指针所指示的目标数据的存储地址后,解析内部数据结构,并对目标数据中的SQL语句进行语法解析,得到目标数据的数据类型,从而确定读写分离所需的读写策略。

可选地,在本实施例中,上述解析过程还可以但不限于使用协程来对数据包进行解析。也就是说,可以但不限于使用多协程来对数据包进行解析和分发过程。本实施例中对于解析所使用的方式不做任何限定。

其中,在本实施例中,上述读写分离控制方法可以但不限于为多进程并发处理,如图4所示。其中,每个进程中的网卡所接收到的数据包将通过网络适配器(Network Interface Control,简称NIC),被该进程中对应的DPDK工具集调用,以控制拷贝到对应的应用层存储器中,接入层全用户态服务开发套件(用F-Stack表示),将完成对被拷贝的数据包的封装,得到待分离的目标数据,以达到简化了绕过内核处理的待分离的目标数据的处理操作的目的,从而保证了对目标数据的读写分离控制效率。

可选地,在本实施例中,服务器的接入层与共享内存之间的通信可以但不限于通过以下一种方式实现:使用管道、unix协议域等。

通过本申请实施例,在获取到数据包时,使用工具集将数据包直接拷贝到应用层存储器中,并对数据包进行封装,映射到共享内存中,经过解析数据包得到目标数据,并根据目标数据的类型将目标数据发送到与目标数据类型对应的端口中,从而避免了将数据包发送到内核处理器中对数据包进行处理,简化了读写分离操作的步骤,提高了读写分离操作的效率。

作为一种可选的实施方案,按照目标数据的数据类型对目标数据进行读写分离包括:

S1,在目标数据为只读类型数据的情况下,控制将目标数据发送至只读端口;

S2,在目标数据为非只读类型数据的情况下,控制将目标数据发送至写端口。

例如,在某一次解析时,解析到数据包中的目标数据的数据类型为只读类型数据的情况下,如用“read”表示,则需要将目标数据发送到只读端口。当解析到数据包中的目标数据的数据类型为非只读类型数据的情况下,则需要将该目标数据发送到写端口。

例如,在服务器中有如下配置:

proxy-backend=172.16.31.20:3306;172.16.31.21:3306;

proxy-read-only-backend=172.16.31.22:3306

那么当解析线程解析到目标数据的数据类型为只读类型时,则转发给proxy-read-only-backend对应的IP地址和端口号对应的数据库实例,否则,转发给proxy-backend对应的和端口号对应的数据库实例。需要说明的是,这里可以但不限于使用后端“backend”表示非只读类型数据,并将对应数据转发至用“write”表示的“写端口”。

需要说明的是,上述目标数据类型:“read”与“write”只是一种实例,本实施例在此不对目标数据的数据类型做具体限定。

通过本实施例,在解析到数据包的目标数据时,根据目标数据的类型将目标数据发送到不同的端口,可以达到提高数据读写分离的控制效率的效果。

作为一种可选的方案,获取共享内存中的指针所指示的数据包进行解析,得到待分离的目标数据包括:

S1,通过多个解析线程获取共享内存中指针所指示的数据包进行解析,其中,多个解析线程中的每个解析线程用于每隔预定周期轮询一次共享内存,以获取数据包进行结构解析,得到数据结构化查询语言SQL语句作为目标数据。具体结合图5进行说明。如图5所示,解析线程1、解析线程2、解析线程3为多条线程。线程1采用轮询的方式对共享内存中的数据包进行轮询,获取所要解析的数据包的指针。根据指针,获取需要解析的数据包的存储地址和存储长度,之后通过mysql协议获取目标数据进行解析。当线程获取到指针所指示的目标数据的存储地址后,解析内部数据结构,并对目标数据中的SQL语句进行语法解析,得到目标数据的数据类型,从而确定读写分离所需的读写策略。

通过本申请实施例,通过采用多个解析线程每隔预定的周期对共享内存进行轮询的方式,可以在共享内存接收到数据包之后,解析线程能在最短的时间内获取到该数据包,并对数据包进行解析,获取目标数据,节省了获取数据包的时间,提高了解析效率。

作为一种可选的方案,在通过多个解析线程获取共享内存中指针所指示的数据包进行解析时,还包括:

S1,为多个解析线程中正在执行解析的目标解析线程配置互斥锁标记,其中,互斥锁标记用于指示在目标解析线程处于正在执行解析的状态时,除目标解析线程之外的其他解析线程被配置为等待解析状态。例如,结合图6进行说明。图6中示出了三条SQL解析线程。当某一条SQL解析线程对数据包进行解析时,为该SQL解析线程配置互斥锁标记。其他解析线程则无法对配置有互斥锁标记的解析线程正在解析的数据进行访问。图中的SQL解析线程2正在对目标数据进行解析,为SQL解析线程2配置互斥锁标记,SQL解析线程1、3无法解析上述SQL解析线程2正在解析的数据包,处于等待状态。当SQL解析线程2完成对数据包的解析时,取消互斥锁标记,此时,SQL解析线程1、3可以对数据包进行解析。

需要说明的是,在本实施例中,互斥锁标记用于保证单词解析过程,但由于单次获取指针的时间非常短,所以锁等待时长也对应较短,并不会对读写分离时长造成影响。

通过本申请实施例,通过设置互斥锁,保证了只有一条解析线程对数据包进行解析,提高了数据读写分离的控制效果。

作为一种可选的方案,对应用层存储器中存储的数据包按照预定格式进行封装,并映射至共享内存包括:

S1,根据服务器所需通信协议对数据包进行封装,并通过与通信协议对应的通信接口映射至共享内存,其中,通信接口包括:TCP/IP接口,以及可移植操作系统接口。

例如,如图4所示,每个进程中的网卡所接收到的数据包将通过网络适配器,被该进程中对应的DPDK工具集调用,以控制拷贝到对应的应用层存储器中。接入层F-Stack将完成对被拷贝的数据包的封装,得到待分离的目标数据。在F-Stack对被拷贝的数据包封装后,将封装后的目标数据通过TCP/IP接口或者posix接口映射至共享内存。

通过本申请实施例,通过将数据包封装不同的接口,从而实现了简化数据库中读写分离操作的步骤,达到了快速完成读写分离,提高数据读写分离的控制效率的效果。

作为一种可选的实施方案,使用工具集将接收到的数据包直接拷贝至服务器的应用层存储器中包括:

S1,通过直接内存存取方式,使用数据平面开发工具集DPDK将数据包直接拷贝至服务器的应用层存储器中。

具体继续结合图4进行说明,每个进程中的网卡所接收到的数据包将通过NIC被该进程中对应的DPDK工具集调用,以控制拷贝到对应的应用层存储器中,F-Stack将完成对被拷贝的数据包的封装,得到待分离的目标数据。

通过本实施例,通过将网卡接收到的数据包直接发送到应用层缓冲区,在应用层对数据包进行封装处理,从而绕过服务器中内核处理器对接收到的数据包所进行的处理操作,达到简化数据库中读写分离操作的步骤的效果。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。

根据本发明实施例的另一方面,还提供了一种用于实施上述读写分离控制方法的读写分离控制装置,如图7所示,该装置包括:

(1)拷贝单元702,用于使用工具集将接收到的数据包直接拷贝至服务器的应用层存储器中,其中,工具集用于控制数据包绕过服务器中的内核处理器到达应用层存储器;

(2)封装单元704,用于对应用层存储器中存储的数据包按照预定格式进行封装,并映射至共享内存,其中,共享内存中存储有至少用于指示存储数据包的存储地址的指针;

(3)解析单元706,用于获取共享内存中的指针所指示的数据包进行解析,得到待分离的目标数据;

(4)读写分离单元708,用于按照目标数据的数据类型对目标数据进行读写分离。

可选地,该读写分离控制装置可以应用于上述读写分离控制方法中所提到的应用环境中,在此不做具体赘述。

需要说明的是,在本实施例中,通过将接收到的数据包直接拷贝至服务器的应用层存储器中,绕过服务器中内核处理器对接收到的数据包所进行的处理操作,以达到简化数据库中读写分离操作的步骤,使得接收到的数据包可以快速完成读写分离,达到提高数据读写分离的控制效率的效果,进而解决了相关技术中所提供的方式存在的读写分离控制操作较复杂,导致的读写分离控制效率较低的技术问题。

具体结合图3进行说明。如图3所示,当网卡接收到数据包之后,不需要将数据包发送到服务器的内核处理器进行处理,而是可以使用工具集直接将数据包发送到应用层的应用层存储器(如环缓冲区ring buffer)中,在应用层中进行封装,映射到共享内存中,并经过结构化查询语言(Structured Query Language,简称SQL)线程解析得到待分离的目标数据,然后,将目标数据发送到接入层。接入层包括入队列与出队列,并有多个SQL解析线程。多个SQL解析线程对接收到的目标数据进行解析,并将解析结果发送给主机。主机根据解析结果进行处理,若是只读实例,则由主机进行处理,若是非只读实例,则发送给备机,由备机进行处理。从而实现了根据目标数据的数据类型对目标数据进行读写分离。

可选地,上述工具集可以使用数据平面开发工具集(Data Plane Development Kit,简称DPDK)。其中,DPDK用于通过在应用层注册驱动,以使网卡接收到的数据包可以绕过服务器的内核处理器直接被拷贝至应用层存储器(如环缓冲区ring buffer)中,从而实现为用户空间高效的数据包处理提供函数和驱动的支持,无需再执行内核处理器配置的通用性操作,而是更加专注于应用所配置的对数据包的高性能处理,提高了对接收到的数据包的处理效率,进而实现提高在将处理后的数据包中的数据写入数据库时的读写分离控制效率。

可选地,在本实施例中,上述读写分离可以但不限于包括:当通过解析获得的目标数据的数据类型为只读类型时,则将目标数据发送到只读端口;当目标数据的数据类型为非只读类型时,将目标数据发送到写端口。

需要说明的是,在本实施例中,上述只读端口或写端口可以但不限于通过端口号或端口地址表示,当解析线程解析到目标数据的数据类型为只读类型时,则转发目标数据至对应IP地址或端口号对应的只读端口,否则,转发给标数据至对应的IP地址或端口号对应的写端口。

可选地,在映射至共享内存前,可以但不限于对接收到的数据包先进行解析,再重新进行封装,以使数据包绕过内核处理器,而可以直接在应用层对数据包进行解析,解析之后再进行封装,还可保证数据包继续在应用层传输。其中,上述封装后的数据包适用的通讯接口可以包括但不限于:TCP/IP接口、可移植操作系统接口posix接口。

可选地,上述解析过程可以使用多个解析线程对指针所指向的数据包进行解析,当使用线程对指针所指向的数据包进行解析时,可以采用轮询的方式对共享内存中的数据包进行轮询,获取所要解析的数据包。其中,上述解析线程可以但不限于SQL线程。

此外,在本实施例中,上述每个解析线程(也可称作每个SQL线程)都将按照预定周期不断轮询共享内存中新得到的指针,其中,该指针可以但不限于用于指示目标数据的存储地址和存储长度。进一步,再通过mysql协议获取目标数据进行解析。如当线程获取到指针所指示的目标数据的存储地址后,解析内部数据结构,并对目标数据中的SQL语句进行语法解析,得到目标数据的数据类型,从而确定读写分离所需的读写策略。

可选地,在本实施例中,上述解析过程还可以但不限于使用协程来对数据包进行解析。也就是说,可以但不限于使用多协程来对数据包进行解析和分发过程。本实施例中对于解析所使用的方式不做任何限定。

其中,在本实施例中,上述读写分离控制方法可以但不限于为多进程并发处理,如图4所示。其中,每个进程中的网卡所接收到的数据包将通过网络适配器(Network Interface Control,简称NIC),被该进程中对应的DPDK工具集调用,以控制拷贝到对应的应用层存储器中,接入层全用户态服务开发套件(用F-Stack表示),将完成对被拷贝的数据包的封装,得到待分离的目标数据,以达到简化了绕过内核处理的待分离的目标数据的处理操作的目的,从而保证了对目标数据的读写分离控制效率。

可选地,在本实施例中,服务器的接入层与共享内存之间的通信可以但不限于通过以下一种方式实现:使用管道、unix协议域等。

通过本申请实施例,在获取到数据包时,使用工具集将数据包直接拷贝到应用层存储器中,并对数据包进行封装,映射到共享内存中,经过解析数据包得到目标数据,并根据目标数据的类型将目标数据发送到与目标数据类型对应的端口中,从而避免了将数据包发送到内核处理器中对数据包进行处理,简化了读写分离操作的步骤,提高了读写分离操作的效率。

作为一种可选的实施方案,上述读写分离单元708包括:

(1)第一发送模块,用于在目标数据为只读类型数据的情况下,控制将目标数据发送至只读端口;

(2)第二发送模块,用于在目标数据为非只读类型数据的情况下,控制将目标数据发送至写端口。

例如,在某一次解析时,解析到数据包中的目标数据的数据类型为只读类型数据的情况下,如用“read”表示,则需要将目标数据发送到只读端口。当解析到数据包中的目标数据的数据类型为非只读类型数据的情况下,则需要将该目标数据发送到写端口。

例如,在服务器中有如下配置:

proxy-backend=172.16.31.20:3306;172.16.31.21:3306;

proxy-read-only-backend=172.16.31.22:3306

那么当解析线程解析到目标数据的数据类型为只读类型时,则转发给proxy-read-only-backend对应的IP地址和端口号对应的数据库实例,否则,转发给proxy-backend对应的和端口号对应的数据库实例。需要说明的是,这里可以但不限于使用后端“backend”表示非只读类型数据,并将对应数据转发至用“write”表示的“写端口”。

需要说明的是,上述目标数据类型:“read”与“write”只是一种实例,本实施例在此不对目标数据的数据类型做具体限定。

通过本实施例,在解析到数据包的目标数据时,根据目标数据的类型将目标数据发送到不同的端口,可以达到提高数据读写分离的控制效率的效果。

作为一种可选的方案,上述解析单元706包括:

(1)解析模块,用于通过多个解析线程获取共享内存中指针所指示的数据包进行解析,其中,多个解析线程中的每个解析线程用于每隔预定周期轮询一次共享内存,以获取数据包进行结构解析,得到数据结构化查询语言SQL语句作为目标数据。

具体结合图5进行说明。如图5所示,解析线程1、解析线程2、解析线程3为多条线程。线程1采用轮询的方式对共享内存中的数据包进行轮询,获取所要解析的数据包的指针。根据指针,获取需要解析的数据包的存储地址和存储长度,之后通过mysql协议获取目标数据进行解析。当线程获取到指针所指示的目标数据的存储地址后,解析内部数据结构,并对目标数据中的SQL语句进行语法解析,得到目标数据的数据类型,从而确定读写分离所需的读写策略。

通过本申请实施例,通过采用多个解析线程每隔预定的周期对共享内存进行轮询的方式,可以在共享内存接收到数据包之后,解析线程能在最短的时间内获取到该数据包,并对数据包进行解析,获取目标数据,节省了获取数据包的时间,提高了解析效率。

作为一种可选的方案,上述解析单元706还包括:

(1)配置模块,用于为多个解析线程中正在执行解析的目标解析线程配置互斥锁标记,其中,互斥锁标记用于指示在目标解析线程处于正在执行解析的状态时,除目标解析线程之外的其他解析线程被配置为等待解析状态。

例如,结合图6进行说明。图6中示出了三条SQL解析线程。当某一条SQL解析线程对数据包进行解析时,为该SQL解析线程配置互斥锁标记。其他解析线程则无法对配置有互斥锁标记的解析线程正在解析的数据进行访问。图中的SQL解析线程2正在对目标数据进行解析,为SQL解析线程2配置互斥锁标记,SQL解析线程1、3无法解析上述SQL解析线程2正在解析的数据包,处于等待状态。当SQL解析线程2完成对数据包的解析时,取消互斥锁标记,此时,SQL解析线程1、3可以对数据包进行解析。

需要说明的是,在本实施例中,互斥锁标记用于保证单词解析过程,但由于单次获取指针的时间非常短,所以锁等待时长也对应较短,并不会对读写分离时长造成影响。

通过本申请实施例,通过设置互斥锁,保证了只有一条解析线程对数据包进行解析,提高了数据读写分离的控制效果。

作为一种可选的方案,封装单元704包括:

(1)封装模块,用于根据服务器所需通信协议对数据包进行封装,并通过与通信协议对应的通信接口映射至共享内存,其中,通信接口包括:TCP/IP接口,以及可移植操作系统接口。

例如,如图4所示,每个进程中的网卡所接收到的数据包将通过网络适配器,被该进程中对应的DPDK工具集调用,以控制拷贝到对应的应用层存储器中。接入层F-Stack将完成对被拷贝的数据包的封装,得到待分离的目标数据。在F-Stack对被拷贝的数据包封装后,将封装后的目标数据通过TCP/IP接口或者posix接口映射至共享内存。

通过本申请实施例,通过将数据包封装不同的接口,从而实现了简化数据库中读写分离操作的步骤,达到了快速完成读写分离,提高数据读写分离的控制效率的效果。

作为一种可选的方案,上述拷贝单元702包括:

(1)拷贝模块,用于通过直接内存存取方式,使用数据平面开发工具集DPDK将数据包直接拷贝至服务器的应用层存储器中。

具体继续结合图4进行说明,每个进程中的网卡所接收到的数据包将通过NIC被该进程中对应的DPDK工具集调用,以控制拷贝到对应的应用层存储器中,F-Stack将完成对被拷贝的数据包的封装,得到待分离的目标数据。

通过本实施例,通过将网卡接收到的数据包直接发送到应用层缓冲区,在应用层对数据包进行封装处理,从而绕过服务器中内核处理器对接收到的数据包所进行的处理操作,达到简化数据库中读写分离操作的步骤的效果。

根据本发明实施例的又一方面,还提供了一种用于实施上述读写分离控制方法的电子装置,如图8所示,该电子装置包括:一个或多个(图中仅示出一个)处理器802、存储器804、用户接口806以及网络接口808。

可选地,在本实施例中,上述电子装置可以位于计算机网络的多个网络设备中的至少一个网络设备。

在本实施例中,上述电子装置可以执行应用程序的读写分离控制方法中以下步骤的程序代码:使用工具集将接收到的数据包直接拷贝至服务器的应用层存储器中,其中,工具集用于控制数据包绕过服务器中的内核处理器到达应用层存储器;对应用层存储器中存储的数据包进行封装,并映射至共享内存,其中,共享内存中存储有至少用于指示存储数据包的存储地址的指针;获取共享内存中的指针所指示的数据包进行解析,得到待分离的目标数据;按照目标数据的数据类型对目标数据进行读写分离。

其中,存储器804可用于存储软件程序以及模块,如本发明实施例中的读写分离控制方法和装置对应的程序指令/模块,处理器802通过运行存储在存储器804内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述读写分离控制方法。存储器804可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器804可进一步包括相对于处理器802远程设置的存储器,这些远程存储器可以通过网络接口808连接至网络,进而连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

处理器802可以通过用户接口806获取交互指令。

处理器802可以通过传输装置调用存储器804存储的信息及应用程序,以执行下述步骤:

S1,使用工具集将接收到的数据包直接拷贝至服务器的应用层存储器中,其中,工具集用于控制数据包绕过服务器中的内核处理器到达应用层存储器;

S2,对应用层存储器中存储的数据包按照预定格式进行封装,并映射至共享内存,其中,共享内存中存储有至少用于指示存储数据包的存储地址的指针;

S3,获取共享内存中的指针所指示的数据包进行解析,得到待分离的目标数据;

S4,按照目标数据的数据类型对目标数据进行读写分离。

处理器802可以通过传输装置调用存储器804存储的信息及应用程序,以执行下述步骤:

S1,在目标数据为只读类型数据的情况下,控制将目标数据发送至只读端口;

S2,在目标数据为非只读类型数据的情况下,控制将目标数据发送至写端口。

可选的,上述处理器802还可以执行如下步骤的程序代码:

S1,通过多个解析线程获取共享内存中指针所指示的数据包进行解析,其中,多个解析线程中的每个解析线程用于每隔预定周期轮询一次共享内存,以获取数据包进行结构解析,得到数据结构化查询语言SQL语句作为目标数据。

可选的,上述处理器802还可以执行如下步骤的程序代码:

S1,为多个解析线程中正在执行解析的目标解析线程配置互斥锁标记,其中,互斥锁标记用于指示在目标解析线程处于正在执行解析的状态时,除目标解析线程之外的其他解析线程被配置为等待解析状态。

可选的,上述处理器802还可以执行如下步骤的程序代码:

S1,根据服务器所需通信协议对数据包进行封装,并通过与通信协议对应的通信接口映射至共享内存,其中,通信接口包括:TCP/IP接口,以及可移植操作系统接口。

可选的,上述处理器802还可以执行如下步骤的程序代码:

S1,通过直接内存存取方式,使用数据平面开发工具集DPDK将数据包直接拷贝至服务器的应用层存储器中。

本领域普通技术人员可以理解,图8所示的结构仅为示意,电子装置也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图8其并不对上述电子装置的结构造成限定。例如,电子装置8还可包括比图8中所示更多或者更少的组件(如显示装置等),或者具有与图8所示不同的配置。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。

根据本发明实施例的又一方面,还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以位于网络中的多个网络设备中的至少一个网络设备。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:

S1,使用工具集将接收到的数据包直接拷贝至服务器的应用层存储器中,其中,工具集用于控制数据包绕过服务器中的内核处理器到达应用层存储器;

S2,对应用层存储器中存储的数据包按照预定格式进行封装,并映射至共享内存,其中,共享内存中存储有至少用于指示存储数据包的存储地址的指针;

S3,获取共享内存中的指针所指示的数据包进行解析,得到待分离的目标数据;

S4,按照目标数据的数据类型对目标数据进行读写分离。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

S1,在目标数据为只读类型数据的情况下,控制将目标数据发送至只读端口;

S2,在目标数据为非只读类型数据的情况下,控制将目标数据发送至写端口。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

S1,通过多个解析线程获取共享内存中指针所指示的数据包进行解析,其中,多个解析线程中的每个解析线程用于每隔预定周期轮询一次共享内存,以获取数据包进行结构解析,得到数据结构化查询语言SQL语句作为目标数据。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

S1,为多个解析线程中正在执行解析的目标解析线程配置互斥锁标记,其中,互斥锁标记用于指示在目标解析线程处于正在执行解析的状态时,除目标解析线程之外的其他解析线程被配置为等待解析状态。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

S1,根据服务器所需通信协议对数据包进行封装,并通过与通信协议对应的通信接口映射至共享内存,其中,通信接口包括:TCP/IP接口,以及可移植操作系统接口。

可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:

S1,通过直接内存存取方式,使用数据平面开发工具集DPDK将数据包直接拷贝至服务器的应用层存储器中。

可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

可选地,本实施例中的具体示例可以参考上述实施例1和实施例2中所描述的示例,本实施例在此不再赘述。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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