发明内容
本申请的目的在于提供一种业务数据处理系统、方法、计算机设备及存储介质,用以降低业务耦合性,提高业务扩展性,以使业务数据处理效率得到有效提升,缩减系统开发成本。
第一方面,本申请提供一种业务数据处理系统,包括:连接池模块、线程池模块以及网络收包模块;其中,
连接池模块,用于存储至少一个连接池元素,以响应客户端的业务请求,为客户端分配目标连接池元素;
网络收包模块,用于利用目标连接池元素,读取业务请求中包含的业务数据,并结合预置与目标连接池元素关联的连接池句柄,以及目标连接池元素中的序列号,对业务数据进行封装,得到指向业务数据的万能指针;
线程池模块,用于存储至少一个线程,以便于至少一个线程中的目标线程解析万能指针,得到连接池句柄和业务数据之后,确定并指示与连接池句柄关联的扩展连接池元素处理业务数据。
在本申请一些实施例中,连接池模块中设置有用于存放空闲连接池元素的空闲列表,和/或用于存放在用连接池元素的在用列表;
其中,连接池模块还用于响应于客户端的业务请求,判断空闲列表中是否包含有空闲连接池元素;
若是,则从空闲列表中提取出一个空闲连接池元素,作为目标连接池元素;
若否,则创建一个新连接池元素,以确定新连接池元素作为目标连接池元素,并将新连接池元素添加至在用列表中。
在本申请一些实施例中,连接池元素包括:网络句柄、序列号、可读事件回调、可写事件回调、收包头、收包体、收缓冲指针、阻塞标志、入回收池时间、发包头、发包体及发缓冲指针中的至少一个;
其中,网络句柄用于标记客户端的用户身份;序列号用于判断客户端是否在线;可读事件回调用于供系统内核通知是否可读取事件;可写事件回调用于供系统内核通知是否可写入事件;
收包头和收包体用于标记当前所接收业务数据的存储地址;收缓冲指针用于标记多次接收业务数据时的衔接读取地址;
阻塞标志用于标记业务数据是否传输阻塞;入回收池时间用于标记在用连接池元素的回收时刻;
发包头和发包体用于标记当前所发送业务数据的存储地址;发缓冲指针用于标记多次发送业务数据时的衔接读取地址。
在本申请一些实施例中,万能指针由消息头和数据块组成;消息头由用于标记连接池元素的连接池句柄,以及用于判断客户端是否在线的序列号组成;数据块由包头和包体组成;包体由数据长度和数据类型组成;
其中,线程池模块还用于判断用于存储万能指针的队列列表是否为空,若是则等待万能指针得到后唤醒目标线程,若否则通知目标线程解析万能指针,以确定并指示与连接池句柄关联的扩展连接池元素处理业务数据。
在本申请一些实施例中,业务数据处理系统还包括:网络发包模块;其中,
网络发包模块,用于利用目标连接池元素,将客户端的业务数据进行封装,进而通过万能指针将封装后的业务数据发送至系统内核。
在本申请一些实施例中,网络发包模块还用于将封装后的业务数据传输至数据发送队列中,进而响应于客户端的阻塞标志为非阻塞状态,将封装后的业务数据发送至系统内核;或者,
响应于客户端的阻塞标志为阻塞状态,传输数据发送队列中的其他业务数据,并在其他业务数据完全发送至系统内核,且客户端的阻塞标志为非阻塞状态之后,继续将封装后的业务数据发送至系统内核。
在本申请一些实施例中,业务数据处理系统还包括:延迟回收模块;其中,
延迟回收模块,用于在检测到客户端与连接池模块断开连接时,将目标连接池元素添加至预设的延迟回收池中,并记录入池时间,以便在入池时间达到预设的等待时长阈值时,将目标连接池元素再次添加至空闲列表,以供其他客户端使用。
第二方面,本申请提供一种业务数据处理方法,业务数据处理方法应用于业务数据处理系统,业务数据处理系统包括用于存储至少一个连接池元素的连接池模块、存储至少一个线程的线程池模块以及网络收包模块,方法包括:
通过连接池模块响应客户端的业务请求,为客户端分配目标连接池元素;其中,目标连接池元素为预存的连接池元素;
通过网络收包模块利用目标连接池元素,读取业务请求中包含的业务数据,并结合预置与目标连接池元素关联的连接池句柄,以及目标连接池元素中的序列号,对业务数据进行封装,得到指向业务数据的万能指针;
通过线程池模块解析万能指针,得到连接池句柄和业务数据之后,确定并指示与连接池句柄关联的扩展连接池元素处理业务数据。
第三方面,本申请还提供一种计算机设备,包括:
一个或多个处理器;
存储器;以及一个或多个应用程序,其中的一个或多个应用程序被存储于存储器中,并配置为由处理器执行以实现上述第二方面的业务数据处理方法。
第四方面,本申请还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器进行加载,以执行业务数据处理方法中的步骤。
第五方面,本申请实施例提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述第二方面提供的方法。
上述业务数据处理系统、方法、计算机设备及存储介质,依托于连接池模块、线程池模块以及网络收包模块;其中,连接池模块,用于存储至少一个连接池元素,以响应客户端的业务请求,为客户端分配目标连接池元素;网络收包模块,用于利用目标连接池元素,读取业务请求中包含的业务数据,并结合预置与目标连接池元素关联的连接池句柄,以及目标连接池元素中的序列号,对业务数据进行封装,得到指向业务数据的万能指针;线程池模块,用于存储至少一个线程,以便于至少一个线程中的目标线程解析万能指针,得到连接池句柄和业务数据之后,确定并指示与连接池句柄关联的扩展连接池元素处理业务数据。本申请通过模块化设计,精简系统基础层框架,可使业务耦合性降低、业务扩展性提升,进而促进业务数据处理效率得到有效提升,缩减了系统开发成本。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请的描述中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本申请的描述中,术语“例如”一词用来表示“用作例子、例证或说明”。本申请中被描述为“例如”的任何实施例不一定被解释为比其它实施例更优选或更具优势。为了使本领域任何技术人员能够实现和使用本发明,给出了以下描述。在以下描述中,为了解释的目的而列出了细节。应当明白的是,本领域普通技术人员可以认识到,在不使用这些特定细节的情况下也可以实现本发明。在其它实例中,不会对公知的结构和过程进行详细阐述,以避免不必要的细节使本发明的描述变得晦涩。因此,本发明并非旨在限于所示的实施例,而是与符合本申请所公开的原理和特征的最广范围相一致。
本申请实施例提供一种业务数据处理系统、方法、计算机设备及存储介质,以下分别进行详细说明。
参阅图1,图1为本申请实施例提供的业务数据处理系统的架构示意图,该业务数据处理系统100包括:连接池模块102、线程池模块104以及网络收包模块106;
其中,连接池模块102,用于存储至少一个连接池元素,以响应客户端的业务请求,为客户端分配目标连接池元素;网络收包模块106,用于利用目标连接池元素,读取业务请求中包含的业务数据,并结合预置与目标连接池元素关联的连接池句柄,以及目标连接池元素中的序列号,对业务数据进行封装,得到指向业务数据的万能指针;线程池模块104,用于存储至少一个线程,以便于至少一个线程中的目标线程解析万能指针,得到连接池句柄和业务数据之后,确定并指示与连接池句柄关联的扩展连接池元素处理业务数据。
其中,客户端可以是既包括接收和发射硬件的终端设备,即具有能够在双向通信链路上,执行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备。客户端具体可以是台式终端或移动终端,还可以是手机、平板电脑、笔记本电脑中的一种。
具体而言,可参阅图2,本申请实施例是针对现有请求应答系统中存在的可扩展性差、业务耦合性过高、封装性低、灵活性差等问题,提出的系统架构改进方案。其中,现有请求应答系统可扩展性差是由于业务是不断变化的,若是基于该现有系统开发其他架构,则CLogicSocket的很多模块均需全部重写,且以前的很多需求未必适用。现有请求应答系统的业务耦合性过高是由于多个连接池并联在CLogicSocket上,由CLogicSocket为各个客户端分配用于处理业务数据的线程,则连接池1的业务大概率会和连接池2的业务产生竞争,这对于两个不同的请求端而言,极易产生资源争夺,进而影响业务数据处理效率和安全性。
进一步地,可参阅图3,本申请实施例提出的系统架构改进方案,实际是基于模块设计,以便于结合业务需求引入更多模块,例如,引入网络收包模块。首先,将CLogicSocket的耦合性彻底降低,即直接转入到连接池中,并且是扩展连接池中,由系统用户基于业务需求实现对扩展连接池的业务扩展。其次,3设计让CSocket基础网络框架继承线程池。最后,固定连接池、进程池与CSocket基础网络框架的关系,即能解决好高并发问题。
更进一步地,可参阅图4,连接池模块102中设置有用于存放空闲连接池元素的空闲列表(也称Free列表),和/或用于存放在用连接池元素的在用列表(也称Use列表);其中,连接池模块102还用于响应于客户端的业务请求,判断空闲列表中是否包含有空闲连接池元素;若是,则从空闲列表中提取出一个空闲连接池元素,作为目标连接池元素;若否,则创建一个新连接池元素,以确定新连接池元素作为目标连接池元素,并将新连接池元素添加至在用列表中。
其中,Free列表和Use列表的总和为Total列表,主要用于体现过去曾接入的连接用户的最大数量。每次用户连接上来了,就需分配一个连接池元素给这个用户,那么就直接从Free列表中分配,如果Free列表没有可分配的(虽然初始会分配一定数量的空闲连接池元素到Free列表中),那么就直接新建一个连接池元素,并添加到Use列表中。
具体而言,无论是空闲连接池元素还是在用连接池元素,连接池元素的组成均包括:网络句柄、序列号、可读事件回调、可写事件回调、收包头、收包体、收缓冲指针、阻塞标志、入回收池时间、发包头、发包体及发缓冲指针中的至少一个。
其中,网络句柄用于标记客户端的用户身份;序列号用于判断客户端是否在线;可读事件回调用于供系统内核通知是否可读取事件;可写事件回调用于供系统内核通知是否可写入事件;收包头和收包体用于标记当前所接收业务数据的存储地址;收缓冲指针用于标记多次接收业务数据时的衔接读取地址;阻塞标志用于标记业务数据是否传输阻塞;入回收池时间用于标记在用连接池元素的回收时刻;发包头和发包体用于标记当前所发送业务数据的存储地址;发缓冲指针用于标记多次发送业务数据时的衔接读取地址。
在一个实施例中,业务数据处理系统还包括:延迟回收模块;其中,延迟回收模块,用于在检测到客户端与连接池模块断开连接时,将目标连接池元素添加至预设的延迟回收池中,并记录入池时间,以便在入池时间达到预设的等待时长阈值时,将目标连接池元素再次添加至空闲列表,以供其他客户端使用。
具体而言,可参阅图4,“延迟回收”是由内核的性质决定的,例如,为一个用户分配了连接池句柄为“25”的连接池元素来处理,但是当这个用户掉线后,连接池句柄为“25”的连接池元素会很快分配给一个新接入的用户。这个过程非常短暂,所以高并发模块下,很可能会出现一种情况:用户A刚刚断开了连接却有一个用户B及时接入了,那么在这个瞬间,这个用户A断开的连接池元素在回收的同时,很可能又会被分配给新加入的用户B,这样导致在某个临界时间点,存在2个线程对同一块内存区域进行操作,极易造成不可预料的错误。并且,回收连接池元素是需要时间的,如用户A在1秒的时候断开,可能其对应的业务还需继续处理,处理可能需要10秒,若是再将其断开的连接池元素分配给用户B,则业务处理极易出错。
所以,本实施例提及的策略就是将用户A断开的连接池元素让入到某一块延迟回收的池子(也称延迟回收池),等待一定时间后再将其添加到Free列表中,并且这个一定时间,须超过上面处理可能需要的10秒时间,也即是说,在用连接池元素的回收时刻为断开时刻(也是入池时间)与等待时长之和,等待时长需要根据业务处理时长确定。
在一个实施例中,万能指针由消息头和数据块组成;消息头由用于标记连接池元素的连接池句柄,以及用于判断客户端是否在线的序列号组成;数据块由包头和包体组成;包体由数据长度和数据类型组成;其中,线程池模块还用于判断用于存储万能指针的队列列表是否为空,若是则等待万能指针得到后唤醒目标线程,若否则通知目标线程解析万能指针,以确定并指示与连接池句柄关联的扩展连接池元素处理业务数据。
其中,连接池句柄是在创建网络socket,向内核注册时生成的,且向内核注册时会注册进连接池句柄的可读事件、可写事件,其目的在于向内核发出连接池元素与客户端之间一一对应的关联性通知。
具体而言,线程池模块104的作用分为两部分,数据消费端和数据生产端,数据消费端的应用流程图可参阅图5,数据生产端的应用流程图可参阅图6,整个数据生产和消费的应用流程图可参阅图7。无论是数据消费期间还是数据生产期间,若用户突然掉线,比如收数据时序列号是“3”,但是掉线后,序列号很可能就变为“4”,则可确定该数据无处理必要。
如图5所示,队列列表“list”是用于存放万能指针“void*”的列表,线程池中所有的线程都需从list中取void*,作为后续处理依据。数据消费时,若list的数量为“0”,则表示当前无事件需线程池模块处理,待到收到唤醒通知后,通知目标线程从list中取void*,然后解析void*的消息头,即可得到连接池句柄。之后,再借助编译器动态编联的特性,即可很轻松的找到系统业务层目标连接池元素的扩展对象,进而根据数据块里面的msgcode参数,调用对应的业务逻辑。
如图6所示,数据生产时,网络收包模块可从CSocket基础网络框架处申请获得连接池句柄,然后向内核注册可读事件,进而等待内核通知可读事件能够触发,网络收包模块106即可先读包头,得到完整数据块之后,封装块头和连接池句柄,即可得到能够放入万能指针void*的数据结构。
如图7所示,线程池模块104存储有至少一个线程,各个线程均可从线程池中取数据,但若无数据可取,即可等待唤醒,以避免CPU空转。线程池模块104若是接收到数据了,就发送唤醒通知,而线程收到了唤醒通知就可竞争数据,竞争到数据的线程即为目标线程(此时一次性仅能唤醒一个)。目标线程被唤醒之后,即可直接从线程池中提取数据,但若此时目标线程繁忙,则可等待后提取。
在一个实施例中,业务数据处理系统还包括:网络发包模块;其中,网络发包模块,用于利用目标连接池元素,将客户端的业务数据进行封装,进而通过万能指针将封装后的业务数据发送至系统内核。
具体而言,上述实施例解释的是业务数据处理系统的收包过程,本实施例将详细说明业务数据处理系统的发包过程,具体可参阅图8,网络发包模块需调用连接池元素、用于存储万能指针void*的队列列表,实现针对于业务数据的发送任务。其中,业务数据的发送过程中难免遇到网络阻塞情况,针对这一异常情况,本申请实施例将提出为之有效的解决策略,具体详见下文。
在一个实施例中,网络发包模块还用于将封装后的业务数据传输至数据发送队列中,进而响应于客户端的阻塞标志为非阻塞状态,将封装后的业务数据发送至系统内核;或者,响应于客户端的阻塞标志为阻塞状态,传输数据发送队列中的其他业务数据,并在其他业务数据完全发送至系统内核,且客户端的阻塞标志为非阻塞状态之后,继续将封装后的业务数据发送至系统内核。
具体而言,可参阅图8,如果要发100个字节,但是调用系统函数后,发现只发送了90个字节,这个时候就需要把阻塞标志设置为“true”,因为发送队列只有一个,发送数据的线程也只有一个。假设这个队列里面有10个要发的数据,分别对应10个客户端,其中有一个客户端阻塞标志为“true”,那么一旦检测到有阻塞标志为“true”,即可直接跳过当前处理的这个数据,进而继续处理后续数据,因为这个标志提示对方网络差,暂无法接收数据,除非内核通知网络可写了,即可就将阻塞标志设置为“false”,并继续发送信号量,通知线程继续发送。
上述业务数据处理系统,通过模块化设计,精简系统基础层框架,可使业务耦合性降低、业务扩展性提升,进而促进业务数据处理效率得到有效提升,缩减了系统开发成本。
参阅图9,本申请实施例提供了一种业务数据处理方法,业务数据处理方法应用于业务数据处理系统,业务数据处理系统包括用于存储至少一个连接池元素的连接池模块、存储至少一个线程的线程池模块以及网络收包模块,下文将主要以该方法应用于上述图1中的业务数据处理系统100来举例说明,业务数据处理方法包括步骤S901至步骤S903具体如下:
S901,通过连接池模块响应客户端的业务请求,为客户端分配目标连接池元素;其中,目标连接池元素为预存的连接池元素。
S902,通过网络收包模块利用目标连接池元素,读取业务请求中包含的业务数据,并结合预置与目标连接池元素关联的连接池句柄,以及目标连接池元素中的序列号,对业务数据进行封装,得到指向业务数据的万能指针。
S903,通过线程池模块解析万能指针,得到连接池句柄和业务数据之后,确定并指示与连接池句柄关联的扩展连接池元素处理业务数据。
上述实施例中的业务数据处理方法,通过模块化设计,精简系统基础层框架,可使业务耦合性降低、业务扩展性提升,进而有效提升业务数据处理效率。
在本申请一些实施例中,业务数据处理系统100可以实现为一种计算机程序的形式,计算机程序可在如图10所示的计算机设备上运行。计算机设备的存储器中可存储组成该业务数据处理系统100的各个程序模块,比如,图1所示的连接池模块102、线程池模块104以及网络收包模块106;各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的业务数据处理方法中的步骤。
例如,图10所示的计算机设备可以通过如图1所示的业务数据处理系统100中的连接池模块102执行步骤S901。计算机设备可通过网络收包模块106执行步骤S902。计算机设备可通过线程池模块104执行步骤S903。
其中,该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的计算机设备通过网络连接通信。该计算机程序被处理器执行时以实现一种业务数据处理方法。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在本申请一些实施例中,提供了一种计算机设备,包括一个或多个处理器;存储器;以及一个或多个应用程序,其中的一个或多个应用程序被存储于存储器中,并配置为由处理器执行上述业务数据处理方法的步骤。此处业务数据处理方法的步骤可以是上述各个实施例的业务数据处理方法中的步骤。
在本申请一些实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器进行加载,使得处理器执行上述业务数据处理方法的步骤。此处业务数据处理方法的步骤可以是上述各个实施例的业务数据处理方法中的步骤。
本邻域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上对本申请实施例所提供的一种业务数据处理系统、方法、计算机设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。