软件转发设备的数据转发方法、系统及电子设备与流程

文档序号:27690552发布日期:2021-12-01 02:57阅读:142来源:国知局
1.本发明涉及网络虚拟化
技术领域
:,尤其涉及一种软件转发设备的数据转发方法、系统及电子设备。
背景技术
::2.虚拟路由器(vrouter)运行在标准物理服务器的虚拟平台上。虚拟平台把物理服务器的物理资源虚拟化为虚拟资源,分配给虚拟路由器使用。虚拟路由器常用的虚拟资源包括vcpu(虚拟cpu),虚拟内存,虚拟存储,虚拟网卡等。虚拟路由器对vcpu等核心资源的合理调度对确保核心业务的正常转发具有重要技术意义。虚拟路由器等软件转发设备的运行模式通常是启动轮询线程来转发流量,轮询线程(pollmodedriver,pmd)被绑定至服务器上的vcpu核以提供对数据流执行转发过程所需要的物理计算资源。由于每个vcpu所能提供的转发能力是浮动的且与vcpu繁忙程度相关。由此对响应用户发起的访问请求所形成的数据流的转发能力造成了不利影响。3.在现有技术中,vrouter响应客户端发起的访问请求后,vrouter部署的虚拟网卡基于哈希算法(hash)将访问请求所对应的线程分配至不同vcpu,并由指定的一个或者多个vcpu执行对应的任务并形成数据流。每个vcpu通过ip转发表项为任务与任务建立队列(queue,q)。由于每个vcpu包含多个q,因此当某个vcpu繁忙并接近工作饱和极限时,会导致后续的数据流及数据流所对应的报文信息被全部或者部分丢失,从而严重影响vrouter对数据流的转发操作。4.申请人经检索后发现公开号为cn112671667a的中国发明专利公开了一种虚拟转发设备的转发限速方法及系统。该现有技术通过构建cpu资源与带宽的关系,为数据流或者租户分配转发操作所需要的cpu资源,用限制cpu资源的方式来确保数据流或者组合的限速和隔离性。然而,由于内存资源是一种限制性资源,内存资源的大小直接决定的应用程序的生死。由于vrouter在执行数据流转发过程中需要结合ip转发表项予以转发,该现有技术由于未考虑前述情形,因此会导致该现有技术对数据流的转发质量及转发效率受到一定的不利影响,并存在对数据流转发过程中发生丢包现象。5.有鉴于此,有必要对现有技术中虚拟路由器对数据流的转发技术予以改进,以解决上述问题。技术实现要素:6.本发明的目的在于揭示一种软件转发设备的数据转发方法、系统及电子设备,用以提高软件转发设备(例如vrouter)执行数据转发时的转发成功率,防止在执行数据转发过程中所可能导致的丢包现象,隔离vcpu与内存资源等指定资源,以实现对数据包的加速转发,并降低对访问请求的响应延迟。7.为实现上述目的之一,本发明提供了一种软件转发设备的数据转发方法,包括:8.接收业务请求,对响应业务请求的预配置队列所属的当前线程所关联的全部队列执行轮询检测;9.在与所述预配置队列所属的当前线程建立映射关系的资源池中的指定资源的剩余使用率达到饱和阈值时,触发切换至资源池中的其他指定资源的事件;10.从与切换后的资源池中的指定资源建立映射关系的指定线程所关联的全部队列中选举空闲队列,以将所述业务请求所对应的数据包放入空闲队列中,以通过切换后的资源池中的指定资源所对应的空闲队列响应所述业务请求。11.作为本发明的进一步改进,在所述确定预配置队列所属的当前建立映射关系的资源池中的指定资源的剩余使用率达到饱和阈值时,预先执行对所述预配置队列所属的当前所关联的全部队列中是否存在其他空闲队列的轮询检测,并将所述业务请求所对应的数据包放入从预配置队列所属的当前所关联的全部队列中所确定的空闲队列中。12.作为本发明的进一步改进,所述从与切换后的资源池中的指定资源建立映射关系的指定线程所关联的全部队列中选举空闲队列包括:13.根据数据包目的ip地址查询地址映射表;14.判断是否存在已有表项记录;若是,根据地址映射表记录的线程信息,将数据包调度至表项记录的指定线程;若否,轮询查询当前线程所关联的全部队列的使用情况,并根据目的ip地址基于哈希算法查找出空闲队列;15.更新地址映射表并选举出空闲队列,以将数据包放入被选举出的空闲队列。16.作为本发明的进一步改进,将数据包调度至表项记录的指定线程后,还包括:17.检查所述指定线程所关联的全部队列中是否存在能够被选举出的空闲队列;若是,更新地址映射表并选举出空闲队列,以将数据包放入被选举出的空闲队列;若否,判定指定线程所关联的全部队列中无法选举出空闲队列,并丢弃数据包。18.作为本发明的进一步改进,还包括:通过设置丢包优先级策略,以在指定线程所关联的全部队列中无法选举出空闲队列时,确定数据包被丢弃的优先级。19.作为本发明的进一步改进,所述资源池中的指定资源包括:由内存形成的内存资源、由虚拟处理器形成的虚拟处理器资源、由磁盘形成的存储资源、内存资源或者带宽资源中的一种或者几种的任意组合;响应客户端发起的访问请求所包含的当前线程和/或指定线程基于所述snat所包含的ip转发表的表项记录对资源池中的指定资源予以隔离。20.作为本发明的进一步改进,所述数据转发方法还包括:协议栈接收业务请求,对业务请求预配置至少一个与业务请求关联并与其他业务请求预配置队列相互隔离的空白队列;所述协议栈预配置空白队列后创建一个与所述空白队列匹配的空白线程。21.基于相同发明思想,本发明还揭示了一种软件转发设备的数据转发系统,包括:22.与资源池中的指定资源建立映射关系的协议栈,分流模块以及队列调度模块;23.所述协议栈接收业务请求,并通过所述分流模块对响应业务请求的预配置队列所属的当前线程所关联的全部队列执行轮询检测;24.在与所述确定预配置队列所属的当前线程建立映射关系的资源池中的指定资源的剩余使用率达到饱和阈值时,由所述队列调度模块触发切换至资源池中的其他指定资源的事件;25.所述队列调度模块从与切换后的资源池中的指定资源建立映射关系的指定线程所关联的全部队列中选举空闲队列,以将所述业务请求所对应的数据包放入空闲队列中,以通过切换后的资源池中的指定资源所对应的空闲队列响应所述业务请求。26.作为本发明的进一步改进,所述软件转发设备包括虚拟路由器或者虚拟交换机;所述队列调度模块包括入队列调度模块与出队列调度模块;27.所述入队列调度模块从与切换后的资源池中的指定资源建立映射关系的指定线程所关联的全部队列中选举空闲队列,以将所述业务请求所对应的数据包放入空闲队列中,以响应对业务请求所含数据包的转发操作;28.所述出队列模块在所述确定预配置队列所属的当前建立映射关系的资源池中的指定资源的剩余使用率达到饱和阈值时,触发执行切换至资源池中的其他指定资源的事件。29.作为本发明的进一步改进,所述资源池中的指定资源包括:由内存形成的内存资源、由虚拟处理器形成的虚拟处理器资源、由磁盘形成的存储资源、内存资源或者带宽资源中的一种或者几种的任意组合;所述协议栈包含snat,响应客户端发起的访问请求所包含的当前线程和/或指定线程基于所述snat所包含的ip转发表的表项记录对资源池中的指定资源予以隔离。30.作为本发明的进一步改进,所述协议栈接收业务请求,对业务请求预配置至少一个与业务请求关联并与其他业务请求预配置队列相互隔离的空白队列;所述协议栈预配置空白队列后创建一个与所述空白队列匹配的空白线程。31.最后,基于相同发明思想,本发明还揭示了一种电子设备,包括:32.处理器,由至少一个存储单元组成的存储装置,以及33.在处理器与存储装置之间建立通信连接的通信总线;34.所述处理器用于执行存储装置中存储的一个或者多个程序,以实现如前述任一项发明创造所述的软件转发设备的数据转发方法。35.与现有技术相比,本发明的有益效果是:36.首先,本发明通过出队列与入队列指定调度转发的方法,可以将ip转发表项对资源池中实现数据包转发所需的各种资源在软件转发设备中通过协议栈实现内存地址隔离,实现了数据包在被转发过程中被配置合理的指定资源,避免了对响应并发执行的队列使用分布式锁所导致的不必要的资源消耗与计算开销,隔离vcpu与内存资源等指定资源,以实现对数据包的加速转发,以有效满足对访问请求予以及时响应;37.其次,由于软件转发设备(例如vrouter)在执行数据流转发过程中结合ip转发表项予以转发,因此提高了对数据流包转发质量及转发效率,有效地遏制了丢包现象;38.最后,通过对业务请求预配置至少一个与业务请求关联并与其他业务请求预配置队列相互隔离的空白队列,并在协议栈预配置空白队列后创建一个与所述空白队列匹配的空白线程,将用户的核心业务通过隔离的空白队列予以调度,确保核心业务的正常转发。附图说明39.图1为本发明一种软件转发设备的数据转发方法的整体流程图;40.图2为响应客户端发起的访问请求所包含的线程thread_1被队列调度模块所包含的队列调度逻辑为线程thread_1另行选择线程thread_2以响应客户端的示意图;41.图3为图2中队列调度模块执行调度队列的详细流程图;42.图4为本发明一种软件转发设备的数据转发系统在一种实施例中的拓扑图;43.图5为队列调度模块的拓扑图;44.图6为多个队列与运行在vcpu_1中的线程thread_1建立映射关系的示意图;45.图7为本发明一种软件转发设备的数据转发系统在另一种实施例中的拓扑图,其中,协议栈接收业务请求,对业务请求预配置至少一个与业务请求关联并与其他业务请求预配置队列相互隔离的空白队列;46.图8为空白队列与由协议栈预配置空白线程相互匹配的示意图;47.图9为本发明一种电子设备的拓扑图。具体实施方式48.下面结合附图所示的各实施方式对本发明进行详细说明,但应当说明的是,这些实施方式并非对本发明的限制,本领域普通技术人员根据这些实施方式所作的功能、方法、或者结构上的等效变换或替代,均属于本发明的保护范围之内。49.在详细阐述本技术各个实施例之前,对各实施例中所涉及的主要技术术语及英文缩写的含义予以必要解释或者定义。50.术语“snat”是指源地址转换。snat的作用是当内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址(可指定具体的服务以及相应的端口或端口范围),这可以使内网中使用保留ip地址的主机访问外部网络,即内网的多部主机可以通过一个有效的公网ip地址访问外部网络。51.术语“l3”是指三层路由器,三层路由器是二层交换机中引入路由模块而取代传统路由器实现交换与路由相结合的网络技术。52.术语“l2”是指二层交换机,二层交换机属于数据链路层设备,可以识别数据包中的mac地址信息,根据mac地址进行转发,并将这些mac地址与对应的端口记录在自己内部的一个地址表。53.术语“eth”是指物理网卡,图4中客户端与服务端均通过独立的物理网卡(例如图4及图7中的物理网卡eth_i及物理网卡eth_e)与虚拟路由器(或者虚拟交换机)相互通信,前述两个物理网卡分别连接客户端与服务端。54.术语“q”是指队列(queue)。55.术语“协议栈(protocolstack)”是指计算机网络协议套件的一个具体的软件实现,协议栈运行在软件转发设备中。56.以下通过多个实施例对发明的具体实现过程予以详细阐述。57.实施例一:58.参图1至图3所示,本实施例揭示了一种软件转发设备的数据转发方法(以下简称“数据转发方法”)的一种具体实施方式。59.该数据转发方法旨在实现虚拟路由器等所映射线程与vcpu(即申请中资源池200所包含资源的一种下位概念)执行重新切换队列的切换操作,以满足对数据包所执行的转发处理,并确保核心业务的转发操作,从而有效防止数据包发生丢包的现象。60.如图1所示,在本实施例中,该软件转发设备(例如虚拟路由器或者虚拟交换机)的数据转发方法,包括以下步骤s1~步骤s3。前述核心业务包括对用户在客户端10向服务端30(例如云平台或者位于云平台底层的虚拟机)发起的各种关键访问请求的所对应的核心业务,例如支付任务、重置密码、创建虚拟机等核心任务。该数据转发方法旨在实现对的数据包(数据报文)在客户端10与服务端30之间执行转发过程中,对资源池200中一种或者几种支持数据包转发过程所依赖资源趋于饱和前,切换并确定空闲队列q_xy,以通过空闲队列q_xy所配置的各种资源响应访问请求。空闲队列q_xy中的下标x∈[1,m],下标y∈[1,t],其中,下标m,t均为正整数。[0061]例如,参图4所示,队列通道21中包含若干队列集;其中,队列集211包含首尾连接队列q_11~队列q_1r,队列集212包含首尾连接队列q_21~队列q_2s,队列集213包含首尾队列q_m1~队列q_mt,各个队列的下标参数r、s、m、t均为大于或者等于1的正整数。队列集211包含r个q,队列集212中包含s个q,队列集213包含t个q。队列集211~队列集213中的任一队列集映射至一个线程,每一个线程独立并预配置的具有一定规模的资源(包括vcpu、内存等满足数据包转发的一种或者几种资源),并通过资源池200为该线程预配置。通过本实施例中所揭示的该数据转发方法,使得原来通过thread_1所对应的队列q_22所依赖的vcpu_1执行转发的数据转发路径(参图4中实线箭头所示出的转发路径)变更为q_22所依赖的vcpu_2执行转发的数据转发路径(参图4中加较为稀疏的粗虚线箭头所示出的转发路径),以最终形成图4(或者图7)中的较为密集的虚线箭头⑤所示出的数据流。重新确定的线程thread_2通过snat、物理网卡eth_e将数据包最终转发至服务端30。snat将客户端10对位于后端的客户端30中所部署的某个虚拟机(vm)所具有的内网所发起访问的内网ip地址转换为指定的ip地址。snat通常部署于nat网关(未示出)中,以负责与物理网卡eth_e实现内网‑外网的ip地址转换。[0062]具体的,本实施例中的当前线程是指对正在由虚拟交换机20为响应一具体的访问请求所确定的某个具体的线程,例如,线程thread_1。因此,在申请各个实施例中,当前线程与指定线程可被理解为原始响应访问请求的线程及被切换后以响应访问请求所对应的一个(或者多个)线程。参图6所示,q_11~队列q_1r映射至作为当前线程的线程thread_1。线程thread_1可包含r个队列,但由于每个队列的空闲状况及预配置资源存在一定区别,尤其是在高并发访问请求场景以及为队列所预配置的资源,在资源池200中的指定资源的剩余使用率达到饱和阈值。于此场景中,队列所预配置的剩余资源趋于饱和,从而造成对对数据包在客户端10与服务端30之间执行转发过程中出现性能瓶颈,甚至导致数据包发生丢失的丢包现象。在本实施例中,重新确定的空闲队列q_xy及空闲队列q_xy的所属线程发生基于ip转发表项重新确定新资源的切换事件,只要重新确定的新资源能够满足访问请求所需的资源即可。[0063]步骤s1、客户端10通过物理网卡eth_i、l2及l3向虚拟路由器20(即软件转发设备的一种下位概念,且在实施例中以虚拟路由器20即vrouter为范例予以示范性阐述)所向客户端30下发的业务请求,并由虚拟路由器20所部署的协议栈23接收业务请求,并由部署于虚拟路由器20中的分流模块22对响应业务请求的预配置队列所属的当前线程所关联的全部队列执行轮询检测。轮询检测通过轮询模式驱动程序(即轮询线程)实现。轮询线程负责处理dpdk数据路径上的大部分工作,并执行诸如输入端口的连续轮询等任务。一旦接收到数据包及对其进行分类,分类完成后进行处理动作。为便于描述,在本实施例中,当前线程选用线程thread_1予以示范性阐述。[0064]参图2所示,分流模块所包含的一种分离逻辑对图2所示出的队列通道21中的三个队列集211~213所分别包含的队列进行轮询检测,以选举出空闲队列q_xy。空闲队列q_xy可为队列集211~213中的任意一个队列集中的一个队列q。例如,对于通过当前线程thread_1接收用户在客户端10发起的访问请求的场景中,客户端10基于当前线程thread_1首先将访问请求发送协议栈23,以通过协议栈23转发至分流模块22,以通过分流逻辑确定是否将当前数据包入空闲队列q_xy;其中,当前数据包是指基于图4中客户端10发起的访问请求所生成的数据集。[0065]如图2所示出的响应客户端发起的访问请求所包含的线程thread_1被队列调度模块所包含的队列调度逻辑为线程thread_1另行选择线程thread_2以响应客户端的整个过程包括以下步骤301~步骤311。[0066]步骤301)由分流模块确定当前线程thread_1,由任务调度模块判断队列集211中所包含的r个队列(即q_11~q_1r)中是否存在数据包;若是,跳转执行步骤302;若否,跳转执行步骤305。[0067]步骤302)队列q_11出队列,跳转执行步骤303)snat隔离,并继续跳转执行步骤304)通过队列q_11所包含的一个或者多个队列(即q_11~q_1r)执行发送数据包的操作。步骤304)执行完毕后跳转执行步骤305)。[0068]步骤305)l3接收数据包,并执行l3转发流程,其为现有技术,故,省略描述。[0069]步骤306)当前线程thread_1判断该数据包是否为访问服务端数据包。通常的,虚拟路由器20保存包含destination/mask(目的网络地址/掩码长度)、proto(协议类型)、cost(度量值)、flags(标志)、nexthop(下一跳)及interface(出接口)的路由表。[0070]若数据包不是为访问服务端数据包,跳转执行步骤308)发送数据包,并在执行完毕后重新跳转步骤301),并开始执行队列集211中所包含的2个队列(即q_12)中是否存在数据包予以判断,并执行步骤301)~步骤306)的操作,从而将队列集211轮询检测完毕。[0071]若数据包是访问服务端数据包,跳转执行步骤307)。[0072]步骤307)队列调度模块调度并选举出空闲队列q_xy,并进入步骤309)的判断逻辑。[0073]步骤309)由队列调度模块判断是否选举出空闲队列q_xy,且被选举出的空闲队列q_xy建立映射关系的当前线程或者指定线程建立映射关系的资源池200中的指定资源能够满足对数据包的转发所需资源需求即可。从而在当前线程建立映射关系的资源池200中的指定资源的剩余使用率达到饱和阈值时,触发切换至资源池200中的其他指定资源的事件,并最终从与切换后的资源池200中的指定资源建立映射关系的指定线程所关联的全部队列中选举空闲队列q_xy。选举空闲队列q_xy可通过轮询查询当前线程所关联的全部队列的使用情况,并根据目的ip地址基于哈希算法查找出空闲队列q_xy予以实现,并最终将数据包放入被选举出的空闲队列q_xy,以执行后续的数据包转发操作。[0074]若是,跳转执行步骤310);[0075]若否,跳转执行步骤311)丢弃当前数据包,并在执行完毕后重新跳转步骤301)。[0076]步骤310)对于能够选举出的空闲队列q_xy,则该空闲队列q_xy建立映射关系的指定线程所配置的资源池200中的指定资源能够满足访问请求所需资源即可。申请人指出,本技术中的“选举”就是轮询检测机制。[0077]结合图6所示,资源池200中的指定资源包括:由内存形成的内存资源、由虚拟处理器形成的虚拟处理器资源(vcpu资源)、由磁盘形成的存储资源、内存资源或者带宽资源中的一种或者几种的任意组合;响应客户端发起的访问请求所包含的当前线程和/或指定线程基于snat所包含的ip转发表的表项记录对资源池200中的指定资源予以隔离。前述指定线程是指当前线程所预配置的资源趋于饱和而可能无法响应访问请求时,通过分流模块22所包含的分流逻辑,从协议栈23中重新选择或者选定的一个已经创建的线程或者新创建的线程。在本实施例中,指定线程以线程thread_2为范例,以作示范性说明。线程thread_2可被理解为指定线程。[0078]步骤s2、在与预配置队列所属的当前线程建立映射关系的资源池200中的指定资源的剩余使用率达到饱和阈值时,触发切换至资源池200中的其他指定资源的事件。具体的,前述饱和阈值可设置为每一种具体的资源的剩余使用率占每一种具体的资源全部资源的10~20%,且剩余使用率的比例可被任意地设定,并由管理员以指令或者命令行的形式予以提前配置,并保存在形成的虚拟路由器20的物理设备所包含的一存储介质中,例如rom或者其他任意一种非易失性存储介质。[0079]具体的,在本实施例中,在确定预配置队列所属的当前建立映射关系的资源池200中的指定资源的剩余使用率达到饱和阈值时,预先执行对预配置队列所属的当前所关联的全部队列中是否存在其他空闲队列q_xy的轮询检测,并将业务请求所对应的数据包放入从预配置队列所属的当前所关联的全部队列中所确定的空闲队列q_xy中。[0080]步骤s3、从与切换后的资源池200中的指定资源建立映射关系的指定线程所关联的全部队列中选举空闲队列q_xy,以将业务请求所对应的数据包放入空闲队列q_xy中,以通过切换后的资源池200中的指定资源所对应的空闲队列q_xy响应业务请求。[0081]进一步结合图3所示,从与切换后的资源池200中的指定资源建立映射关系的指定线程所关联的全部队列中选举空闲队列q_xy包括:[0082]根据数据包目的ip地址查询地址映射表;[0083]判断是否存在已有表项记录;若是,根据地址映射表记录的线程信息,将数据包调度至表项记录的指定线程;若否,轮询查询当前线程所关联的全部队列的使用情况,并根据目的ip地址基于哈希算法查找出空闲队列q_xy;[0084]更新地址映射表并选举出空闲队列q_xy,以将数据包放入被选举出的空闲队列q_xy。[0085]将数据包调度至表项记录的指定线程后,还包括:检查指定线程所关联的全部队列中是否存在能够被选举出的空闲队列q_xy;若是,更新地址映射表并选举出空闲队列q_xy,以将数据包放入被选举出的空闲队列q_xy;若否,判定指定线程所关联的全部队列中无法选举出空闲队列q_xy,并丢弃数据包。优选的,在本实施例中,该数据转发方法还包括:通过设置丢包优先级策略,以在指定线程所关联的全部队列中无法选举出空闲队列q_xy时,确定数据包被丢弃的优先级。丢包优先级策略以一种可被计算机执行的逻辑保存于图4所示出的队列调度模块40或者分流模块22中,并通过前述丢包优先级策略尽量确保对优先级较高和/或核心业务所对应的数据包的正常转发,从而减少了优先级较高和/或核心业务所对应的数据包的丢包现象,以进一步提高了用户体验。[0086]从与切换后的资源池200中的指定资源建立映射关系的指定线程所关联的全部队列中选举空闲队列q_xy,即步骤307)~步骤311)包括以下步骤400~步骤413。[0087]步骤400)开始。[0088]步骤401)根据数据包目的ip地址查询地址映射表。[0089]步骤402)判断是否存在已有表项记录,表项记录包含ip转发表(iptable);若是,跳转执行步骤404),若否,跳转执行步骤403)。[0090]步骤403)判断目的ip地址是否为预设值保护资源;若是,跳转执行步骤405),若否,跳转执行步骤407)。[0091]步骤407)遍历查询thread_1~thread_m的队列q_11~q_mt(即队列通道中排除空白队列214的全部队列)的使用情况,并根据目的地ip地址通过hash算法查找并选举出空闲队列q_xy,然后跳转执行步骤408)的判断逻辑。[0092]步骤408)判断是否存在空闲队列q_xy;若是,跳转执行步骤409),若否,跳转执行步骤411),此时证明队列通道21中无可用的空闲队列q_xy,此时就需要丢弃当前数据包。步骤411)执行跳转步骤413)并结束。[0093]步骤409)更新地址映射表。更新地址映射表完毕后,继续跳转执行步骤412)选出空闲队列q_xy,将当前数据包入空闲队列q_xy(即入队列处理)。[0094]当存在已有表项记录时,跳转执行步骤404)根据映射表记录的thread信息,将数据包调度到表项记录的指定线程,即thread_x,指定线程thread_x是协议栈23所包含的线程thread_1~线程thread_m中的一个线程。[0095]当步骤404)执行完毕后,跳转执行步骤410)判断指定线程thread_x调用并根据映射表记录的thread信息判断是否空闲队列q_xy;若否,则直接跳转步骤411),若是,则跳转执行前述步骤409)。[0096]步骤405)由队列调度模块40查询预设的线程thread_n所包含的队列q_n1~q_nt的使用情况,其中,前述线程及队列的下标n∈[1,m],t∈[1,t]。步骤406以轮询方式逐一轮询检测队列通道中的全部队列,以遍历查找出空闲队列q_xy。[0097]步骤406)由队列调度模块40判断是否存在空闲队列q_xy;若否,跳转执行前述步骤407),若是,则证明已经通过遍历查找方式选举出了空闲队列q_xy,此时可直接跳转执行步骤409)。[0098]步骤412)最终由队列调度模块40选出空闲队列q_xy,将当前数据包入空闲队列q_xy(即入队列处理)。[0099]步骤413)结束。[0100]配合参照图7所示,在本实施例中,该数据转发方法还包括:协议栈23接收业务请求,对业务请求预配置至少一个与业务请求关联并与其他业务请求预配置队列相互隔离的空白队列214。协议栈23在预配置空白队列214之后,创建一个与空白队列214匹配的空白线程thread_m+1。空白队列214与空白线程thread_m+1被创建的个数并不限定,仅需要确保彼此一一对应即可。空白队列214独立配置与其他任何一个队列q或者空闲队列q_xy所预配置的资源相互隔离的资源,以满足对核心业务执行转发过程中的性能需求。进一步的,当队列通道21中存在空白队列214且协议栈23中已经创建了空白线程thread_m+1后,可直接将客户端10向服务端30发的一种(或者几种)核心业务,直接通过前述空白队列214及空白线程thread_m+1予以响应。以通过该空白队214所预配置的资源(或者包含若干种资源所形成的一集合),以通过映射至空白线程thread_m+1,在虚拟路由器20(或者虚拟交换机20’)响应核心业务时,不需要执行前述轮询检测、选举空闲队列q_xy的策略,而直接适用该空白队列214及空白线程thread_m+1,从而实现将用户的核心业务通过隔离的空白队列予以调度,确保核心业务所对应的数据流的正常转发,以进一步提高该数据转发方法的可靠性。[0101]实施例二:[0102]结合图4至图8以及实施例一,本实施例还揭示了一种软件转发设备的数据转发系统100(以下简称“数据转发系统”)的一种具体实施方式。[0103]在本实施例中,该数据转发系统100,包括:[0104]与资源池200中的指定资源建立映射关系的协议栈23,分流模块22以及队列调度模块40。协议栈23接收业务请求,并通过分流模块22对响应业务请求的预配置队列所属的当前线程所关联的全部队列执行轮询检测。在与确定预配置队列所属的当前线程建立映射关系的资源池200中的指定资源的剩余使用率达到饱和阈值时,由队列调度模块40触发切换至资源池200中的其他指定资源的事件。此处的“指定资源”泛指满足响应业务请求(或者核心业务)的一种或者几种资源,例如,若干vcpu、虚拟内存、虚拟存储等。资源池200中的指定资源包括:由内存形成的内存资源、由虚拟处理器形成的虚拟处理器资源、由磁盘形成的存储资源、内存资源或者带宽资源中的一种或者几种的任意组合。协议栈23包含snat,响应客户端10发起的访问请求所包含的当前线程和/或指定线程基于snat(sourcenetworkaddresstranslation,源网络地址转换)所包含的ip转发表的表项记录对资源池200中的指定资源予以隔离。[0105]队列调度模块40从与切换后的资源池200中的指定资源建立映射关系的指定线程所关联的全部队列中选举空闲队列q_xy,以将业务请求所对应的数据包放入空闲队列q_xy中,以通过切换后的资源池200中的指定资源所对应的空闲队列q_xy响应业务请求。[0106]本实施例中所示出的软件转发设备包括虚拟路由器20(参图4所示)或者虚拟交换机20’(参图7所示)。队列调度模块40包括执行入队列处理的入队列调度模块450与执行出队列处理的出队列调度模块460。入队列调度模块450从与切换后的资源池200中的指定资源建立映射关系的指定线程所关联的全部队列中选举空闲队列q_xy,以将业务请求所对应的数据包放入空闲队列q_xy中,以响应对业务请求所含数据包的转发操作。出队列模块460在确定预配置队列所属的当前建立映射关系的资源池200中的指定资源的剩余使用率达到饱和阈值时,触发执行切换至资源池200中的其他指定资源的事件。[0107]作为本实施例的一种合理变形,参图7与图8所示,在该数据转发系统100’中,协议栈23接收客户端10通过物理网卡eth_i、l2交换机及l3路由器向虚拟交换机20’所下发的业务请求,对业务请求预配置至少一个与业务请求关联并与其他业务请求预配置队列相互隔离的空白队列214。协议栈23预配置空白队列214后创建一个与空白队列214匹配的空白线程,即thread_m+1。空白队列214与空白线程thread_m+1被创建的个数并不限定,仅需要确保彼此一一对应即可。空白队列214独立配置与其他任何一个队列q或者空闲队列q_xy所预配置的资源相互隔离的资源,以满足对核心业务执行转发过程中的性能需求。[0108]进一步的,当队列通道21中存在空白队列214且协议栈23中已经创建了空白线程thread_m+1后,可直接将客户端10向服务端30发起的一种(或者几种)核心业务,直接通过前述空白队列214及空白线程thread_m+1予以响应。同时,申请人指出,本技术各个实施例中,空白队列214与空闲队列q_xy并非同一技术特征,空闲队列q_xy是通过轮询检测被选举出来的,而空白队列214始终响应核心业务。[0109]申请人指出,在本实施例(或者实施例一)中,数据包在被执行转发过程中不需要使用全局ip转发表项,也不需要使用分布式锁所导致的不必要的资源消耗与计算开销。通过入队列调度模块与出队列调度模块所分别具有的入队列逻辑(enqueue)及出队列逻辑(dequeue),入队列逻辑及出队列逻辑参前文对入队列调度模块与出队列调度模块的描述部分所示。通过入队列逻辑及出队列逻辑,可直接将ip转发表项对资源池中实现数据包转发所需的各种资源在软件转发设备中通过协议栈实现内存地址隔离,实现了数据包在被转发过程中被配置合理的指定资源。以实现数据包在被转发过程中被配置合理的指定资源,避免了对响应并发执行的队列使用分布式锁所导致的不必要的资源消耗与计算开销,从而有效地隔离了vcpu与内存资源等指定资源,以实现对数据包的加速转发,以有效满足对访问请求予以及时响应。[0110]本实施例所揭示的数据转发系统与实施例一所披露的数据转发方法的装置项实现,故,本实施例与实施例一中所具有的相同技术方案,参实施例一所述,在此不再赘述。[0111]实施例三:[0112]参图9所示出的本实施例一种电子设备500的一种具体实施方式。[0113]在本实施例中,该电子设备500,包括:处理器51,由至少一个存储单元组成的存储装置52,以及在处理器51与存储装置52之间建立通信连接的通信总线53。处理器51用于执行存储装置52中存储的一个或者多个程序,以实现如实施例一所揭示的一种软件转发设备的数据转发方法的具体实现过程。[0114]该存储装置52可由存储单元521~存储单元52j所组成,其中,参数j取大于或者等于1的正整数。处理器51可为asic、fpga、cpu、mcu或者其他具有指令处理功能的物理硬件或者虚拟设备。通信总线53的形式并不需要予以具体限定,i2c总线、spi总线、sci总线、pci总线、pci‑e总线、isa总线等,并可根据电子设备500的具体类型及应用场景需求予以合理变更。通信总线53并非本技术发明点,故在本技术中不予展开陈述。[0115]存储装置52可为例如raid0~raid7的磁盘阵列,也可被配置为一块或者多块硬盘或者可移动存储装置、数据库服务器、ssd(solid‑statedisk)、nas存储系统或者san存储系统组成。该电子设备500可被配置为计算机、服务器、数据中心、虚拟集群、便携式移动终端、web系统、金融支付平台或者erp系统,以及虚拟在线支付平台/系统等。[0116]本技术各实施例中所涉及的单元/模块/组件如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read‑onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。[0117]对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。[0118]此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1