CN111756776B - 服务器、报文分配设备、程序交接系统以及程序交接的方法 - Google Patents
服务器、报文分配设备、程序交接系统以及程序交接的方法 Download PDFInfo
- Publication number
- CN111756776B CN111756776B CN202010735148.5A CN202010735148A CN111756776B CN 111756776 B CN111756776 B CN 111756776B CN 202010735148 A CN202010735148 A CN 202010735148A CN 111756776 B CN111756776 B CN 111756776B
- Authority
- CN
- China
- Prior art keywords
- port
- message
- server
- target
- group
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/164—Adaptation or special uses of UDP protocol
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请提供一种报文分配设备、一种服务器、一种由报文分配设备执行的程序交接方法、一种由服务器执行的程序交接方法以及一种程序交接系统。所述由服务器执行的程序交接方法包括:运行原始进程,所述原始进程开启目标监听套接字、监听并接收客户端通过原始连接传来的第一报文;以及启动所述原始进程派生出来的新建进程,所述新建进程开启所述目标监听套接字、监听并接收所述客户端新建连接传来的第二报文,其中所述新建连接建立时间在所述原始连接的建立时间之后。
Description
技术领域
本申请涉及计算机网络领域,特别涉及服务器、报文分配设备、程序交接系统以及程序交接的方法。
背景技术
QUIC协议是一种在用户态、基于UDP实现的、可靠安全的传输协议。QUIC协议具有链接建立开销小、传输性能效率高等特点。QUIC协议作为一种新兴的传输层协议,相比传统的TCP+TLS,具有建链开销小、无头阻塞、支持连接迁移等多种优点。基于QUIC传输的HTTP2正成为下一代HTTP协议即HTTP3。基于此,当前各大公司都在进行QUIC协议的落地工作。例如Google、Facebook、腾讯等。
对于设计好的客户端软件和服务端软件,当服务端软件的版本需要变化的时候,通常希望对服务端软件进行无损升级。升级是指,替换二进制,重启进程等运维操作。无损是指,在升级时,不影响原来网络服务器存量连接上的业务数据。无损升级,也称为热升级。
对于基于QUIC设计的客户端和服务端,当前还没有成熟的方案来解决服务端的无损升级的问题。
发明内容
为实现基于QUIC设计的服务端的无损升级,本申请公开了一种程序交接的方法,包括:一种程序交接的方法,包括:运行原始进程,所述原始进程开启目标监听套接字、监听并接收客户端通过原始连接传来的第一报文;以及启动所述原始进程派生出来的新建进程,所述新建进程开启所述目标监听套接字、监听并接收所述客户端新建连接传来的第二报文,其中所述新建连接建立时间在所述原始连接的建立时间之后。
在一些实施例中,所述方法还包括:通过第一程序运行所述原始进程;以及通过第二程序运行所述新建进程。
在一些实施例中,其中所述原始进程通过第一端口接收所述第一报文;以及所述新建进程通过第二端口接收所述第二报文。
在一些实施例中,其中所述第一端口属于第一端口组中的端口;以及所述第二端口属于第二端口组中的端口。
在一些实施例中,所述方法还包括:创建所述第一端口组;将所述第一端口组对应的组数赋值给启动计数器;所述原始进程派生出所述新建进程后,对所述启动计数器加1;创建所述第二端口组;以及将所述启动计数器的值赋值给所述第二端口组对应的组数。
在一些实施例中,所述方法还包括,将所述启动计数器的值发送到报文分配设备;所述报文分配设备在接收到所述启动计数器的值之后:确认所述第二报文的报文标识中没有端口标识,根据所述启动计数器的值从至少一个端口组中确定所述第二端口组为目标端口组,从所述目标端口组中的至少一个端口中选择目标端口,以及将所述客户端传来的第二报文发送到所述目标端口。
在一些实施例中,所述方法还包括:生成关于所述第二报文的响应,所述响应包括所述目标端口的端口号,其中所述目标端口为所述第二端口。
在一些实施例中,其中,所述第一报文的报文标识中包括所述第一端口的端口号;以及所述客户端将所述第一报文发送至报文分配设备,所述报文分配设备根据所述报文标识中的所述第一端口号将所述第一报文发送至所述第一端口。
在一些实施例中,所述方法还包括:确定连接在所述原始进程上的原始连接已经退出;以及结束所述原始进程。
在一些实施例中,其中所述报文包括UDP数据包。
本申请还公开了一种服务器,包括:至少一个存储器,包括至少一组指令集;以及至少一个处理器,同所述至少一个存储器通讯连接,当所述至少一个处理器运行所述至少一组指令集时,所述至少一个处理器执行本申请所述的程序交接的方法。
本申请还公开了一种程序交接的方法,包括:同目标服务器建立通信连接;获取所述目标服务器当前的启动次数;接收客户端传来的报文;以及根据所述报文的类别,将所述报文发送至所述目标服务器中的目标端口。
在一些实施例中,其中所述根据所述报文的类别将所述报文发送至所述目标服务器中的目标端口包括:判断所述报文的报文标识中有端口标识;获取所述报文标识中的所述端口标识;以及将所述报文发送到同所述端口标识对应的端口。
在一些实施例中,其中所述根据所述报文的类别,将所述报文发送至所述目标服务器中的目标端口包括:判断所述报文的报文标识中没有端口标识;根据所述启动次数确定目标端口组;从所述目标端口组中的至少一个端口中选择目标端口;以及将所述报文发送到所述目标端口。
在一些实施例中,所述方法还包括:接收来自所述目标服务器的响应,所述响应中包括所述目标端口的端口号;以及将所述目标端口的端口号封装至响应包并发送至所述客户端。
在一些实施例中,其中所述目标服务器包括UDP服务器。
本申请还公开了一种报文分配设备,包括:至少一个存储器,包括至少一组指令集;以及至少一个处理器,同所述至少一个存储器通讯连接,当所述至少一个处理器运行所述至少一组指令集时,所述至少一个处理器执行本申请所述的程序交接的方法。
本申请还公开了一种程序交接系统,包括:服务器,包括至少一组进程,所述至少一组进程中的每一组进程通过所述服务器内的至少一个端口组接收数据,其中,任意两组进程对应的端口组中的端口均不相同;以及报文分配设备,接收来自客户端的报文,根据所述报文的类别,将所述报文发送至所述服务器中的目标端口,其中,不同类别的报文对应的目标端口所属的端口组不相同。
在一些实施例中,所述服务器包括UDP服务器。
在一些实施例中,其中所述至少一组进程包括第一组进程和第二组进程,所述第一组进程通过第一端口组接收数据,所述第二组进程通过第二端口组接收数据,所述第一组进程派生出所述第二组进程。
在一些实施例中,其中所述根据所述报文的类别,将所述报文发送至所述服务器中的目标端口包括:所述报文分配设备判断所述报文的报文标识中包含所述目标端口号,所述报文分配设备将所述报文发送至所述服务器中的目标端口,所述目标端口为第一端口组中的端口。
在一些实施例中,其中所述根据所述报文的类别,将所述报文发送至所述服务器中的目标端口包括:所述报文分配设备判断所述报文的报文标识中不包含所述目标端口号,所述报文分配设备将所述报文发送至所述服务器中的第二端口组中的任意一个端口。
本申请所述程序交接的方法,服务器通过对端口进行分组,并将不同的端口组分配给不同版本的服务器软件的进程,解决了基于QUIC实现的服务器因缺少连接套接字带来的无法将存量连接和新建连接进行隔离的技术问题,进一步可以实现基于QUIC实现的服务器软件的无损升级。
进一步地,本申请所述程序交接的方法,通过计数器加1来表示进行了一次升级,根据计数器得到变量index的值,通过变量index的值来标识不同的端口组,进而将不同服务器软件版本对应的端口组区分开。
附图说明
图1示出了根据本申请实施例提供的一种程序交接方法的应用场景示意图;
图2示出了根据本申请实施例中的一种报文分配设备和/或服务器的硬件结构示意图;
图3示出了根据本申请实施例提供的一种程序交接的方法的流程图;
图4示出了根据本申请实施例提供的一种M*N个端口的分组示意图;以及
图5示出了根据本申请实施例提供的一种程序交接系统的工作原理示意图。
具体实施方式
以下描述提供了本申请的特定应用场景和要求,目的是使本领域技术人员能够制造和使用本申请中的内容。对于本领域技术人员来说,对所公开的实施例的各种局部修改是显而易见的,并且在不脱离本申请的精神和范围的情况下,可以将这里定义的一般原理应用于其他实施例和应用。因此,本申请不限于所示的实施例,而是与权利要求一致的最宽范围。
这里使用的术语仅用于描述特定示例实施例的目的,而不是限制性的。
考虑到以下描述,本申请的这些特征和其他特征、以及结构的相关元件的操作和功能、以及部件的组合和制造的经济性可以得到明显提高。参考附图,所有这些形成本申请的一部分。然而,应该清楚地理解,附图仅用于说明和描述的目的,并不旨在限制本申请的范围。
以下描述可以显著改进本申请的这些和其他特征,以及结构的相关元件的操作和功能,以及组件的组合和制造的经济效率。所有这些都参考附图形成本申请的一部分。然而,应该清楚地理解,附图仅用于说明和描述的目的,并不旨在限制本申请的范围。还应理解,附图未按比例绘制。
本申请提供一种报文分配设备、一种服务器、一种由报文分配设备执行的程序交接方法、一种由服务器执行的程序交接方法以及一种程序交接系统。所述程序交接系统可以包括所述报文分配设备和所述服务器。
本申请所述程序交接可以包括,但不限于,程序的更新,升级,降级,等等。本申请所述程序交接的方法可以应用于两个应用程序交接的过程中。在一些实施例中,所述程序交接可以包括由一个程序升级至另一个程序的升级过程。在一些实施例中,所述程序交接可以包括由一个程序降级为另一个程序的降级过程。在一些实施例中,所述程序交接可以包括程序更新的过程。在一些实施例中,所述程序交接可以包括由一个程序转换为另一个程序的转换过程。为了便于描述,在本申请下面的描述中,以程序升级为例描述程序交接在本申请中的作用。需要说明的是,所述程序升级的过程可以包括:停止和/或卸载旧的程序的运行,下载/安装/运行新的程序。所述程序升级可以包括由旧的程序转换为新的程序的转换过程。所述旧的程序的性能以及新的程序的性能的优劣不对本申请的保护范围构成限制。例如,新的程序的性能可以比旧的程序的性能高,新的程序修复了旧的程序的缺陷;新的程序的性能也可以比旧的程序的性能低。
所述程序交接系统可以是一种无损升级系统。所述程序交接系统可以实现基于QUIC的无损升级。
图1示出了根据本申请实施例提供的一种程序交接方法的应用场景示意图。所述应用场景中可以包括客户端140、网络130、报文分配设备200以及服务器400。
客户端140指的是载有客户机软件的电子设备。所述客户机软件指的是同用户110打交道的软件。所述客户机软件可以将客户端140接收到的用户110的请求依据通信协议发送给服务器400中的服务器软件。所述客户机软件可以是服务器软件提供的工具、脚本语言(如Perl)、Web应用开发语言(如ASP、ColdFusion、JSP和PHP)、程序设计语言(如C、C++、java)等。作为示例,安装在客户端140内的所述客户端软件和安装在服务器400内的服务器软件之间基于QUIC协议实现。作为示例,所述客户机软件可以是安装在用户110的电子设备上的小程序或者app。所述客户机软件能够为用户110提供通过网络130同外界交互的能力以及界面。在一些实施例中,客户端140可以包括移动设备120-1、平板电脑120-2、笔记本电脑120-3、机动车辆120-4的内置设备或类似内容,或其任意组合。用户110可以通过客户端140上的客户机软件输入自己的请求。客户端140可以将用户110的请求通过网络130提交给服务器400。例如,如果用户110请求一个按字母顺序列出的产品表,则客户端140通过网络130提交该请求给服务器400。
网络130可以促进信息和/或数据的交换。如图1所示,客户端140、报文分配设备200以及服务器400可以同网络130连接,并且通过网络130互相传输信息和/或数据。例如,报文分配设备200可以通过网络120获得从客户端140传送的用户110的请求,也可以向客户端140传送所述请求的处理结果。在一些实施例中,网络130可以是任何类型的有线或无线网络,也可以是其组合。例如,网络130可以包括电缆网络,有线网络、光纤网络、电信通信网络、内联网、互联网、局域网(LAN)、广域网(WAN)、无线局域网(WLAN)、大都市市区网(MAN)、广域网(WAN)、公用电话交换网(PSTN)、蓝牙网络、ZigBee网络、近场通信(NFC)网络或类似网络。在一些实施例中,网络130可以包括一个或多个网络接入点。例如,网络130可以包括有线或无线网络接入点,如基站和/或互联网交换点120-1、120-2,...,通过该接入点,客户端140、报文分配设备200以及服务器300中的一个或多个组件可以连接到网络130以交换数据和/或信息。
服务器400可以是安装了服务器软件的电子设备。服务器400可以接收来自客户端140的报文,并根据所述报文中的指示执行用户110的请求。服务器400可以是独立的服务器。服务器400也可以是分布式服务器集群。所述分布式服务器集群可以包括多个分布式连接的子服务器。所述多个子服务器可以相互通讯交流数据和信息。比如,所述多个子服务器可以通过网络130联系在一起。所述多个子服务器可以共享一个共同的任务,所述多个子服务器中的每个子服务器完成所述任务中的一个或者多个子任务,并且把所述子任务的运行结果传递给其他需要这个子任务的服务器。
服务器400可以负责所有数据的接收、访问和处理。关于数据查找、添加、删除和数据更新的所有请求都由服务器400完成。这些请求或者更改可以来自于客户端140。例如,如果用户110请求一个按字母顺序列出的产品表,客户端140将该请求提交给服务器400。服务器400处理这个请求,根据需要过滤、丢弃和排序数据;然后把结果送回客户端140。
服务器400可以包括若干端口。安装在服务器400内的一个服务器软件可以占用至少一个进程。所述至少一个进程可以监听所述若干个端口中的至少一个端口。所述至少一个进程可以通过所述至少一个端口接收数据。
在一些实施例中,服务器400中可以同时运行多个服务器软件。例如,当需要对目标应用程序进程升级时,服务器400中可以同时运行旧版本的服务器软件和新版本的服务器软件,以保证升级过程中已经同旧的服务器软件建立连接的客户端不受影响。
报文分配设备200可以是服务器400的负载均衡设备。报文分配设备200可以拦截客户端140发送的报文。报文分配设备200可以根据所述报文中包含的信息将所述报文发送至服务器的目标进程。例如,报文分配设备200可以根据所述报文中包含的IP地址从分布式服务器集群中选择至少一个目标服务器,并将所述报文发送至所述目标服务器。例如,报文分配设备200可以根据所述报文中包含的端口信息将所述报文发送至目标服务器中的目标端口。
图2示出了根据本申请实施例中的一种报文分配设备200和/或服务器400的硬件结构示意图。为了便于理解,以下介绍将以服务器400为例对所述硬件结构进行介绍。
服务器400包括至少一个存储器230和至少一个处理器220。在一些实施例中,服务器400还可以包括通信端口250和内部通信总线210。同时,服务器400还可以包括I/O组件260。
内部通信总线210可以连接不同的系统组件,包括存储器230和处理器220。
I/O组件260支持服务器400和其他组件之间的输入/输出。
存储器230可以包括数据存储装置。所述数据存储装置可以是非暂时性存储介质,也可以是暂时性存储介质。比如,所述数据存储装置可以包括磁盘232、只读存储器(ROM)234或随机存取存储器(RAM)236中的一种或多种。存储器230还包括存储在所述数据存储装置中的至少一个指令集。所述指令集是计算机程序代码,所述计算机程序代码可以包括执行本申请提供的程序交接方法的程序、例程、对象、组件、数据结构、过程、模块等等。
至少一个处理器220同至少一个存储器230通过内部通信总线210进行通讯。至少一个处理器220用以执行上述至少一个指令集,当至少一个处理器220执行上述至少一个指令集时,服务器400实施本申请提供的程序交接的方法。处理器220可以执行程序交接方法包含的部分步骤。处理器220可以是一个或多个处理器的形式,在一些实施例中,处理器220可以包括一个或多个硬件处理器,例如微控制器,微处理器,精简指令集计算机(RISC),专用集成电路(ASIC),特定于应用的指令集处理器(ASIP),中央处理单元(CPU),图形处理单元(GPU),物理处理单元(PPU),微控制器单元,数字信号处理器(DSP),现场可编程门阵列(FPGA),高级RISC机器(ARM),可编程逻辑器件(PLD),能够执行一个或多个功能的任何电路或处理器等,或其任何组合。仅仅为了说明问题,在本申请中服务器400中仅描述了一个处理器220。然而,应当注意,本申请中服务器400还可以包括多个处理器,因此,本申请中披露的操作和/或方法步骤可以如本申请所述的由一个处理器执行,也可以由多个处理器联合执行。例如,如果在本申请中服务器400的处理器220执行步骤A和步骤B,则应该理解,步骤A和步骤B也可以由两个不同处理器220联合或分开执行(例如,第一处理器执行步骤A,第二处理器执行步骤B,或者第一和第二处理器共同执行步骤A和B)。
端口250用于服务器400同外界的数据通讯。比如,服务器400可以通过端口250连接网络130,进而接收来自于客户端140和/或来自于报文分配设备200发送的数据。
端口250和处理器220通过内部通信总线210相连。处理器220可以通过端口250访问指令直接读写端口250的数据。比如,处理器220可以通过指令out读取端口250上的数据;比如,处理器220可以通过指令in向端口250写入数据。处理器230通过端口地址来定位端口。所述端口地址可以是端口号。
端口250可以被看作是操作系统的一种可分配资源。网络通信的最终地址不仅包括主机地址(IP),还包括可描述进程的某种标识。端口250可以被认为是网络通信进程的一种标识符。服务器400的操作系统可以给有需要的进程分配端口,其中每个端口由一个正整数标识,如:8081,8091,445,等等。当服务器400接收到数据包后,会根据报文首部的目的端口号,把数据发送到相应端口。而与此端口相对应的那个进程将会领取数据并等待下一组数据的到来。
端口可以看作是队列。操作系统为各个进程分配了不同的队列,数据包按照目的端口被推入相应的队列中,等待被进程取用,在一些实施例中,该队列可能会溢出。不过操作系统允许各进程制定和调整自己的队列的大小。
不光接收数据包的进程需要开启他自己的端口,发送数据包的进程也需要开启端口。这样,数据包中将会标识有源端口,以便接收数据包的一方对数据进行处理后能够顺利的将处理结果回传给发送方的源端口。
根据前面的描述可知,服务器400中可以安装有若干个服务器软件。所述服务器软件可以包括安装在服务器400上的应用程序。所述应用程序被处理器220调入存储器230并开始运行后一般称为进程。
操作系统可以向应用程序分配一个或者多个端口。应用程序通过系统调用与某端口建立连接,传输层传给该端口的数据都被相应的进程接收,相应的进程发给传输层的数据都从该端口输出。比如,当进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返给本地唯一的端口号,进程再通过合适的系统调用,将自己和该端口连接起来。
每一个服务器软件运行时包括一个或者多个进程。每一个进程绑定一个或者多个端口。每一个进程通过与其绑定的端口来读写数据,并同客户端建立连接。
为了便于描述,在本申请下面的描述中,以应用程序A为例来描述安装在客户端140和服务器400内的应用程序,以″客户端软件A″表示应用程序A安装在客户端140的部分,以″服务器软件A″表示应用程序A安装在服务器400的部分,以″服务器软件A.X″表示″服务器软件A″的不同版本。
服务器400正常运行服务器软件A.1。服务器软件A.1同客户端软件A建立了连接。客户端140发送的报文由服务器软件A.1的进程接收并处理。当需要将服务器软件A.1升级为服务器软件A.2时,需要将客户端140发送的报文发送到新的服务器软件A.2的进程上。也就是,需要使客户端软件A同新的服务器软件A.2建立新连接。通常,在使客户端140同新版本的服务器软件建立连接的过程中,不希望客户端140已经同旧版本的服务器软件建立的连接中断,以提升升级过程中用户110使用客户端140的流畅感。
在TCP协议的实现中,通过监听套接字和连接套接字来标识一条连接。基于TCP实现的网络服务器完成无损升级的方案(以NGINX为例)如下:老进程fork出新进程,新进程继承老进程的″监听套接字″并开始接受新连接,老进程则关闭监听套接字不再接收新连接,但会继续接收″连接套接字″上的数据,直到老进程上的存量连接完全断开后再退出,从而达到对老进程上的业务无损。
在UDP协议的实现中,只有监听套接字。对于QUIC服务器来说,因为QUIC基于UDP实现,而UDP没有连接套接字,只有监听套接字,所以基于TCP服务器的无损升级方案无法应用到QUIC中。而现阶段UDP的无损升级也没有成熟的方案。
UDP面临的一个问题是,因为只有监听套接字,所以如果关闭该监听套接字的话,老进程上便无法再收数据;如果继续监听的话,那么新老进程同时接收报文,老进程上便无法退出。
Connection ID(以下简称CID)是QUIC协议中用于取代五元组,唯一标识一条连接的值。在QUIC的上行报文中,CID会一直携带在报文中。Facebook在其HTTP服务器mvfast上实现了QUIC的无损升级,方案是:在CID中标识新老进程,升级时,老进程关闭监听套接字不再接受客户端数据,新进程接管监听套接字用来统一接收新老数据报文,然后当接收到新报文时,如果新进程判断出报文是老进程连接上的数据时,新进程会通过进程间通信的形式,将数据发送给老进程进行处理。待所有报文处理完后,老进程退出。
上述Facebook的方案需要跨进程转发报文。在报文量比较大的情况下,会影响性能。而且所有老进程的报文都要走新进程进行转发,会增加设计上的复杂度。
图3示出了根据本申请实施例提供的一种程序交接的方法S100的流程图。图3所示的流程S100包括了由报文分配设备200执行的程序交接的方法以及由服务器400执行的程序交接的方法。流程S100的部分步骤可以由报文分配设备200来执行,部分步骤可以由服务器400来执行。
以下呈现的所示流程S100的操作,旨在是说明性的而非限制性的。在一些实施例中,流程S100在实现时可以添加一个或多个未描述的额外操作,和/或删减一个或多个此处所描述的操作。此外,图3中所示的和下文描述的操作的顺序并不对此加以限制。
S110,服务器400运行原始进程。
服务器400可以包括UDP服务器。所述UDP服务器可以表示基于UDP协议同其他设备进行通信的服务器。在一些实施例中,所述UDP协议可以包括基于UDP实现的QUIC协议。在一些实施例中,所述UDP服务器可以包括QUIC服务器。服务器400内可以安装有至少一个应用程序。作为示例,所述至少一个应用程序可以包括服务器软件A.1和服务器软件A.2。作为示例,服务器软件A.1和服务器软件A.2可以基于QUIC协议实现。
服务器400可以通过第一程序运行所述原始进程。作为示例,所述第一程序可以是服务器软件A.1。所述原始进程可以是服务器软件A.1被处理器220调用并运行的进程。
每一个服务器软件运行时包括一个或者多个进程。每一个进程绑定一个或者多个端口。每一个进程通过与其绑定的端口来读写数据,并同客户端140建立连接。
服务器400可以通过操作系统给每一个应用程序的进程分配一个或者多个端口。服务器400可以预先创建M*N个端口,并将所述M*N个端口分配给应用程序A的进程。这里,应用程序A可以包括安装在服务器400内的不同版本的应用程序A(比如旧版本的服务器软件A.1,新版本的服务器软件A.2)。服务器400预先将所述M*N个端口分配给这些不同版本的服务器软件的进程。
服务器400可以将所述M*N个端口分成M组,每一组是一个端口组。每一个端口组中包含有N个端口。为了便于理解,图4示出了根据本申请实施例提供的一种M*N个端口的分组示意。为了便于描述,在图4中,以Port[i][j]来表示所述M*N个端口中第j组端口组中的第i个端口。
所述M*N个端口中的每一个端口的地址由其端口号来标识。需要说明的是,在本申请的描述中,仅仅是为了对所述M*N个端口中的不同的端口作出区分,因此以Port[i][j]表示某特定的端口。在本申请的描述中,Port[i][j]同端口号不相关。
所述M*N个端口中的每一个端口都有与其对应的唯一的端口号。
作为示例,所述M*N个端口的端口号可以是从1到M*N的M*N个整数。以图4为例,Port[1,1]的端口号可以是1,Port[2,1]的端口号可以是2,Port[3,1]的端口号可以是3,Port[4,1]的端口号可以是4,Port[5,1]的端口号可以是5,Port[N,1]的端口号可以是N,Port[N,M]的端口号可以是整数N*M。
作为示例,所述M*N个端口的端口号可以是从某特定整数开始往后的M*N个连续的整数(其中,数量M*N可以包含该特定整数)。以N=10、M=5为例,所述M*N个端口的端口号可以是从8080开始至8129之间的50个整数。以图4中的N=10、M=5为例,Port[1,1]的端口号可以是8080,Port[2,1]的端口号可以是8081,......,Port[N,M](即Port[5,10])的端口号可以是8129。
当然,在一些实施例中,所述M*N个端口的端口号也可以是不连续的整数。所述M*N个端口的端口号是多少不影响本申请的核心精神。
服务器400可以将所述M个端口组中的每一组端口分配给一个版本的应用程序运行时的进程。以服务器软件A.1和服务器软件A.2为例,服务器400可以将第1组端口组中的N个端口分配给服务器软件A.1被系统运行的进程,即原始进程。所述原始进程通过所述第1端口组中的端口接收报文。为了便于描述,以第一端口表示所述原始进程接收报文的端口,根据前面的描述可知,所述第一端口属于第1端口组中的端口。同样地,服务器400可以将第2组端口组中的N个端口分配给服务器软件A.2被系统运行的进程,即新建进程。所述新建进程通过所述第2端口组中的端口接收报文。为了便于描述,以第二端口表示所述新建进程接收报文的端口。根据前面的描述可知,所述第二端口属于第2端口组中的端口。
在服务器400正常运行服务器软件A.1时,服务器软件A.1的进程通过第1组端口中的端口接收来自客户端的数据。当需要将服务器软件A.1升级至服务器软件A.2时,不切断服务器软件A.1同客户端140的连接。所述原始进程依旧通过第1组端口来接收原有连接的数据。当客户端140发送过来新的建立连接的报文时,只需要将来自客户端140的新建连接的报文发送至第2组端口中的端口,就可以避免升级过程对客户端和所述原始进程的连接造成影响,即实现无损升级。
这样,通过对端口进行分组,将不同的端口组分配给不同版本的服务器软件的进程,就可以解决基于QUIC实现的服务器因缺少连接套接字带来的无法将存量连接和新建连接进行隔离的技术问题,进一步可以实现基于QUIC实现的服务器软件的无损升级。
S120,服务器400将第一端口组对应的组数赋值给计数器。
服务器400中可以设置一个变量,以标识当前服务器400运行的服务器软件的状态。服务器400可以通过所述变量的值来标记当前状态下的服务器软件的版本,同时标识最新的服务器软件版本所对应的端口组。这样,报文分配设备200在获取了所述变量的值之后就可以获知当前服务器400内的服务器软件的状态,并根据所述变量的值将来自客户端140的报文发送至不同服务器软件的进程。参考图4,以index表示所述变量。
变量index可以通过下面的方式获得服务器400内可以设置一个计数器。作为示例,以START_CNT表示所述计数器。所述计数器可以是一个全局计数器。所述计数器的值可以表示启动次数。所述计数器的值加1可以表示安装在服务器400内的应用程序A的服务器软件进行了一次升级。运行最初版本的服务器软件(以服务器软件A.1表示)时,设置所述计数器的值为0,即START_CNT的值为0。每进行一次升级,计数器START_CNT的值加1,直至START_CNT的值溢出。
服务器400分配至应用程序A的端口的组数一共是M组,是有限的整数。因此,用于标识端口组组数的变量index的值也必须小于组数的最大值M。
为了使index实现计数的功能,同时保证index的值小于M,可以由公式index=START_CNT mod M计算得到变量index。该公式表示,以START_CNT除以M求余数,所述余数的值为index。
当然,服务器400也可以通过其他设置来标识当前服务器400运行的服务器软件的状态和/或新的进程接收数据的端口组的组数而不影响本申请的核心精神。
S130,服务器400启动所述原始进程派生出来的新建进程。
所述派生可以理解为所述新建进程是从所述原始进程中分化出来的。例如,所述原始进程可以调用fork函数,并利用所述fork函数派生出所述新建进程。本领域技术人员可以理解,所述原始进程也可以采用其他的方式(比如其他的函数)派生出所述新建进程而不背离本发明的核心精神。
当需要将应用程序A的服务器软件由版本A.1升级至版本A.2时,服务器400在运行服务器软件A.1的过程中调用fork函数,fork出新的进程一一即服务器软件A.2被运行后的进程。新进程继承老进程的START_CNT和监听套接字。
S140,服务器400对所述计数器加1。
服务器400调用fork函数fork出新进程也就是表示服务器软件开始进行一次升级。服务器400将计数器START_CNT++,也就是将计数器的值加1。
S150,服务器400将所述计数器的值赋值给第二端口组对应的组数。
服务器400根据index=START_CNT mod M计算得到变量index的值。index同时表示升级后的新进程的接收数据的端口的组数。
S160,服务器400将所述启动计数器的值发送给报文分配设备200。
S170,报文分配设备200获取目标服务器400当前的启动次数。
报文分配设备200还实时地从服务器400处获取服务器400中的M*N个端口的端口号的列表。
这样,报文分配设备200便获知了当前服务器400内的接收新建连接的端口的组数。当报文分配设备200接收到来自客户端140的新建连接报文时,便可以将所述新建连接报文发送到同所述变量对应的端口组的端口。
这样,通过计数器加1来表示进行了一次升级,根据计数器得到变量index的值,通过变量index的值来标识不同的端口组,将不同服务器软件版本对应的端口组区分开,解决了基于QUIC实现的服务器因缺少连接套接字带来的无法将存量连接和新建连接进行隔离的技术问题。
S180,报文分配设备200接收客户端140传来的报文。
所述报文可以是客户端140希望发送至服务器400的报文。所述报文可以是QUIC数据报。
S190,报文分配设备200根据所述报文的类别,将所述报文发送至服务器400的目标端口。
根据前面的描述,服务器400需要将服务器软件A.1升级至服务器软件A.2。服务器400通过服务器软件A.1运行原始进程,同时,服务器400通过服务器软件A.2运行新建进程。所述原始进程通过所述监听套接字监听并接收所述第一端口组上的数据。所述新建进程通过所述监听套接字监听并接收所述第二端口组上的数据。同时,报文分配设备200获得了同所述新建进程绑定的用于接收数据的第二端口组的组数。
客户端140向服务器400发送报文。报文分配设备200拦截该报文,并解析该报文的首部,识别该报文首部CID中的数据。报文分配设备200根据CID中的数据来确定报文的类别,并将所述报文发送至服务器400的目标端口。
继续参考图3所示的流程S100。
S210,报文分配设备200获取所述报文标识中的端口数据。
S220,报文分配设备200将所述报文发送到所述端口数据对应的端口。
如果客户端140发送的报文是连接在旧版本的服务器软件A.1上的存量连接。也就是,客户端140发送的报文需要老进程接收。由于客户端140同服务器软件A.1的进程已经建立了连接,该报文首部的CID中会包含目标端口号。报文分配设备200识别CID中包含有端口数据(即目标端口号),获取所述端口数据,根据所述端口数据将所述报文发送至服务器400的目标端口。根据前面的描述,所述目标端口为第一端口组中的端口。在本申请的描述中,以第一报文表示报文首部CID中包含有端口数据的报文。
继续参考图3所示的流程S100。
S310,报文分配设备200确定所述报文标识中的端口数据为空。
S320,报文分配设备200根据所述启动次数确定目标端口组。
S330,报文分配设备200从所述目标端口组中的至少一个端口中选择目标端口。
S340,报文分配设备200将所述报文发送到所述目标端口。
如果客户端140发送的报文是新建连接报文,也就是,客户端140发送的报文需要新进程接收。由于客户端140同新进程尚未建立连接,该报文首部的CID中会不包含端口数据,也就是CID中的端口数据为空。报文分配设备200确认CID中的端口数据为空,报文分配设备200根据变量index的值,从N*M个端口中选择出来目标端口组。所述目标端口组是index的值所对应的端口组。比如index=1对应的端口组为第2组端口。报文分配设备200将所述报文随机发送至服务器400的第2端口组中的任意一个端口。在本申请的描述中,以第二报文表示报文首部CID中没有端口数据的报文。
在一些实施例中,报文分配设备200可以直接从服务器400获得index的值。
在一些实施例中,报文分配设备200可以从服务器400获得计数器START_CNT的值。报文分配设备200可以根据计数器START_CNT的值以及公式index=START_CNT mod M计算得到index的值。
这样,报文分配设备200便将存量连接上的报文发送至了位于第1端口组中目标端口,将新建连接的报文发送至了第2端口组中的端口,实现了新老连接的隔离。
S350,服务器400生成关于所述报文的响应。
S360,报文分配设备200接收来自服务器400的响应。
S370,报文分配设备200将所述目标端口的端口号封装至响应包并发送至客户端140。
进一步地,报文分配设备200将新建连接的报文发送至服务器400的第2端口组中的任意一个端口之后,监听在第2端口组上的新进程通过所述第2端口组中的端口接收到来自报文分配设备200的数据。为了便于理解,以第二端口表示第2端口组中的实际接收到所述报文的端口。服务器400生成关于所述报文的响应,所述响应中封装有实际接收数据的端口号的信息。服务器400将所述响应包返回给报文分配设备200。报文分配设备200接收到所述响应包之后将所述响应包处理并转发给客户端140。
这样,客户端140便获得了服务器400内的新进程接收数据的端口号,客户端140同运行在服务器400内的新进程建立了连接。后续,客户端140可以通过在报文首部的的CID中添加第二端口的端口号,以向服务器400内的新进程发送数据。
进一步地,下面的步骤S380和步骤S390说明了客户端140同新进程建立连接之后的流程。
S380,客户端140发送报文,报文中携带第二端口号。
S390,报文分配设备200根据报文中的第二端口号将报文发到第二端口。
这样,通过对端口进行分组,将不同的端口组分配给不同版本的服务器软件的进程,设置变量index来标识不同的端口组的组数。报文分配设备200实时获取index的值,然后根据报文的类别将报文发送至不同的端口组。其中,当所述报文为新建连接报文(即报文首部CID中没有端口数据)时,报文分配设备200将所述新建连接报文发送至同index的值对应的端口组中的任意一个端口。服务器400将实际接收所述新建连接报文的端口号的信息封装至响应包并返回给报文分配设备200。报文分配设备200再将该端口号返回给客户端140。客户端140就同新进程建立了连接。通过给新老进程分配不同的端口组,来实现新老进程的隔离,解决了基于QUIC实现的服务器因缺少连接套接字带来的无法将存量连接和新建连接进行隔离的技术问题,进一步可以实现基于QUIC实现的服务器软件的无损升级。
进一步地,当客户端140需要退出同老进程的连接时,比如,用户110已经获取了当前请求的结果,用户110退出了当前的客户端软件。服务器400确定连接在所述原始进程上的原始连接已经退出;服务器400结束所述原始进程。
在一些实施例中,可以设置一个时间(比如2min,3min,5min),在该时间内,老进程继续接收通过老连接发送的报文,达到该时间后,服务器400可以自动结束所述老进程。
综上,本申请提供的程序交接的方法,通过向新老进程分配不同的端口组,进一步实现新老进程的隔离。
图5示出了根据本申请实施例提供的一种程序交接系统的工作原理示意图。
初始状态下,服务器400通过服务器软件A.1运行老进程。所述老进程同第1端口组中的端口绑定。所述老进程通过第1端口组中的第一端口接收数据。
当需要升级的时候,老进程派生出新进程。所述新进程可以是服务器软件A.2被调用后的进程。服务器400内的计数器START_CNT++。进一步地,服务器400运行指令将START_CNT mod M赋值给index。服务器400将当前的index值对应的端口组(以第2端口组为例)中的端口同新进程绑定。也就是,新进程通过第2端口组中的端口接收数据。这样,新老进程分别同不同的端口组进行了绑定。新老进程分别通过不同的端口组来接收数据。
报文分配设备200实时地从服务器400获取端口列表以及START_CNT的值,并根据所述START_CNT的值以及公式index=START_CNT mod M计算得到index的值。当然,报文分配设备200也可以直接实时地从服务器400获得index的值。
客户端140向报文分配设备200发送报文。所述报文可以是第一报文,也可以是第二报文。所述第一报文指的是报文首部的CID中包含有目标端口号。所述第二报文指的是报文首部的CID中没有端口号信息。
报文分配设备200接收到来自客户端140的报文之后,解析所述报文首部,根据报文首部的CID中是否包含有端口号信息,确定所述报文的类别——即所述报文是第一报文还是第二报文。之后,报文分配设备200根据所述报文的类别,将所述报文发送至所述目标服务器中的目标端口,其中,不同类别的报文对应的目标端口所属的端口组不相同。
当报文分配设备200判断所述报文为第一报文,也就是所述报文首部的CID中包含有目标端口号时,报文分配设备200将所述报文发送至服务器400中的目标端口。
当报文分配设备200判断所述报文为第二报文,也就是当所述报文首部的CID中的端口数据为空时,报文分配设备200根据当前index的值,将所述报文发送至同当前index值对应的端口组(比如第2端口组)中的任意一个端口中。
新进程接收到所述报文之后将第2端口组中的实际接收所述报文的端口(即第2端口)的端口号封装至响应包并回传给报文分配设备200。报文分配设备200再将该第2端口的端口号回传至客户端140。这样,客户端140便同新进程建立了连接。后续客户端140可以在报文首部的CID中写入第二端口的端口号,以向服务器400的新进程发送数据,也就是向服务器软件A.2发送数据。
进一步地,当服务器400确定连接在老进程上的存量连接已经退出,或者,当时间达到预设的时间,服务器400就结束老进程,即结束了服务器软件A.1的运行。
进一步地,当服务器400需要再次升级(例如需要将服务器软件A.2升级至服务器软件A.3)时,服务器400和报文分配设备200可以重复前述方法中的部分步骤,将第3端口组分配给服务器软件A.3运行时的进程。
这样,通过给不同服务器软件的进程分配不同的端口组来接收数据,就可以解决基于QUIC实现的服务器因缺少连接套接字带来的无法将存量连接和新建连接进行隔离的技术问题,进一步可以实现基于QUIC实现的服务器软件的无损升级。
需要说明的是,所述新进程可以是一个进程,也可以包括多个进程。例如,服务器软件A.1被运行后占用多个进程。所述老进程可以是一个进程,也可以包括多个进程。例如,服务器软件A..2被运行后占用多个进程。所述新进程和所述老进程的数量可以是任何值而不影响本申请的核心精神。
需要说明的是,为了简洁,本申请仅描述了同本申请核心精神密切相关的同端口相关的流程,没有对报文中的地址信息(比如IP地址)和寻址流程进行描述。客户端140、报文分配设备200以及服务器400中的一个或者多个在通过网络进行数据传输的过程中可以携带其他寻址信息而不背离本申请的核心精神。作为示例,所述寻址信息可以包括,但不限于,报文分配设备200和/或服务器400的IP地址,用于标识报文分配设备200和/或服务器400地址的hash值,等等。本申请所述程序交接的方法中可以增加一个或者多个其他寻址步骤而不背离本申请的核心精神。例如,报文分配设备200在接收到来自客户端140的报文之后,可以根据所述报文首部所包含的IP地址从至少一个服务器中选择出服务器400,进一步根据所述报文首部CID中的端口号将所述报文发送所述服务器400的目标端口。
需要说明的是,运行新进程和老进程的服务器400可以是同一个服务器,也可以是不同的服务器。比如,新进程和老进程分别由分布式服务器中的不同的字服务器运行。所述服务器400可以包含一个服务器或者多个服务器而不背离本申请的核心精神。
需要说明的是,报文分配设备200和服务器400可以是相互独立的硬件设备。报文分配设备200和服务器400也可以共用一个硬件设备而不背离本申请的核心精神。
综上所述,在阅读本详细公开内容之后,本领域技术人员可以明白,前述详细公开内容可以仅以示例的方式呈现,并且可以不是限制性的。尽管这里没有明确说明,本领域技术人员可以理解本申请意图囊括对实施例的各种合理改变,改进和修改。这些改变,改进和修改旨在由本申请提出,并且在本申请的示例性实施例的精神和范围内。
此外,本申请中的某些术语已被用于描述本申请的实施例。例如,″一个实施例″,″实施例″和/或″一些实施例″意味着结合该实施例描述的特定特征,结构或特性可以包括在本申请的至少一个实施例中。因此,可以强调并且应当理解,在本说明书的各个部分中对″实施例″或″一个实施例″或″替代实施例″的两个或更多个引用不一定都指代相同的实施例。此外,特定特征,结构或特性可以在本申请的一个或多个实施例中适当地组合。
应当理解,在本申请的实施例的前述描述中,为了帮助理解一个特征,出于简化本申请的目的,本申请有时将各种特征组合在单个实施例、附图或其描述中。或者,本申请又是将各种特征分散在多个本申请的实施例中。然而,这并不是说这些特征的组合是必须的,本领域技术人员在阅读本申请的时候完全有可能将其中一部分特征提取出来作为单独的实施例来理解。也就是说,本申请中的实施例也可以理解为多个次级实施例的整合。而每个次级实施例的内容在于少于单个前述公开实施例的所有特征的时候也是成立的。
在一些实施方案中,表达用于描述和要求保护本申请的某些实施方案的数量或性质的数字应理解为在某些情况下通过术语″约″,″近似″或″基本上″修饰。例如,除非另有说明,否则″约″,″近似″或″基本上″可表示其描述的值的±20%变化。因此,在一些实施方案中,书面描述和所附权利要求书中列出的数值参数是近似值,其可以根据特定实施方案试图获得的所需性质而变化。在一些实施方案中,数值参数应根据报告的有效数字的数量并通过应用普通的舍入技术来解释。尽管阐述本申请的一些实施方案列出了广泛范围的数值范围和参数是近似值,但具体实施例中都列出了尽可能精确的数值。
本文引用的每个专利,专利申请,专利申请的出版物和其他材料,例如文章,书籍,说明书,出版物,文件,物品等,可以通过引用结合于此。用于所有目的的全部内容,除了与其相关的任何起诉文件历史,可能与本文件不一致或相冲突的任何相同的,或者任何可能对权利要求的最宽范围具有限制性影响的任何相同的起诉文件历史。现在或以后与本文件相关联。举例来说,如果在与任何所包含的材料相关联的术语的描述、定义和/或使用与本文档相关的术语、描述、定义和/或之间存在任何不一致或冲突时,使用本文件中的术语为准。
最后,应理解,本文公开的申请的实施方案是对本申请的实施方案的原理的说明。其他修改后的实施例也在本申请的范围内。因此,本申请披露的实施例仅仅作为示例而非限制。本领域技术人员可以根据本申请中的实施例采取替代配置来实现本申请中的申请。因此,本申请的实施例不限于申请中被精确地描述过的那些实施例。
Claims (20)
1.一种QUIC服务器上程序交接的方法,包括:
运行原始进程,所述原始进程开启目标监听套接字、监听并接收客户端通过原始连接传来的第一报文;
创建第一端口组;
将所述第一端口组对应的组数赋值给启动计数器;
启动所述原始进程派生出来的新建进程,所述新建进程开启所述目标监听套接字、监听并接收所述客户端新建连接传来的第二报文,其中所述新建连接建立时间在所述原始连接的建立时间之后;
对所述启动计数器加1;
创建第二端口组;以及
将所述启动计数器的值赋值给所述第二端口组对应的组数。
2.如权利要求1所述的程序交接的方法,还包括:
通过第一程序运行所述原始进程;以及
通过第二程序运行所述新建进程。
3.如权利要求1所述的程序交接的方法,其中
所述原始进程通过第一端口接收所述第一报文;以及
所述新建进程通过第二端口接收所述第二报文。
4.如权利要求3所述的程序交接的方法,其中
所述第一端口属于第一端口组中的端口;以及
所述第二端口属于第二端口组中的端口。
5.如权利要求1所述的程序交接的方法,还包括,将所述启动计数器的值发送到报文分配设备;
所述报文分配设备在接收到所述启动计数器的值之后:
确认所述第二报文的报文标识中没有端口标识,
根据所述启动计数器的值从至少一个端口组中确定所述第二端口组为目标端口组,
从所述目标端口组中的至少一个端口中选择目标端口,以及
将所述客户端传来的第二报文发送到所述目标端口。
6.如权利要求5所述的程序交接的方法,还包括:
生成关于所述第二报文的响应,所述响应包括所述目标端口的端口号,其中所述目标端口为所述第二端口。
7.如权利要求3所述的程序交接的方法,其中,所述第一报文的报文标识中包括所述第一端口的端口号;以及
所述客户端将所述第一报文发送至报文分配设备,所述报文分配设备根据所述报文标识中的所述第一端口号将所述第一报文发送至所述第一端口。
8.如权利要求1所述的程序交接的方法,还包括:
确定连接在所述原始进程上的原始连接已经退出;以及
结束所述原始进程。
9.如权利要求1所述的程序交接的方法,其中所述报文包括UDP数据包。
10.一种QUIC服务器,包括:
至少一个存储器,包括至少一组指令集;以及
至少一个处理器,同所述至少一个存储器通讯连接,当所述至少一个处理器运行所述至少一组指令集时,所述至少一个处理器执行权利要求1至9中任意一个权利要求所述的程序交接的方法。
11.一种程序交接的方法,包括:
同目标服务器建立通信连接,所述目标服务器是QUIC服务器;
通过获取启动计数器的值获取所述目标服务器当前的启动次数,所述启动次数用于标识不同的端口组;
接收客户端传来的报文;以及
根据所述报文的类别,将所述报文发送至所述目标服务器中的目标端口。
12.如权利要求11中所述的程序交接的方法,其中所述根据所述报文的类别将所述报文发送至所述目标服务器中的目标端口包括:
判断所述报文的报文标识中有端口标识;
获取所述报文标识中的所述端口标识;以及
将所述报文发送到同所述端口标识对应的端口。
13.如权利要求11中所述的程序交接的方法,其中所述根据所述报文的类别,将所述报文发送至所述目标服务器中的目标端口包括:
判断所述报文的报文标识中没有端口标识;
根据所述启动次数确定目标端口组;
从所述目标端口组中的至少一个端口中选择目标端口;以及
将所述报文发送到所述目标端口。
14.如权利要求13所述的程序交接的方法,还包括:
接收来自所述目标服务器的响应,所述响应中包括所述目标端口的端口号;以及
将所述目标端口的端口号封装至响应包并发送至所述客户端。
15.如权利要求11所述的程序交接的方法,其中所述目标服务器包括UDP服务器。
16.一种报文分配设备,包括:
至少一个存储器,包括至少一组指令集;以及
至少一个处理器,同所述至少一个存储器通讯连接,当所述至少一个处理器运行所述至少一组指令集时,所述至少一个处理器执行如权利要求11至15中任意一个权利要求所述的程序交接的方法。
17.一种程序交接系统,包括:
服务器,包括至少一组进程,所述至少一组进程中的每一组进程通过所述服务器内的至少一个端口组接收数据,其中,任意两组进程对应的端口组中的端口均不相同,所述服务器是QUIC服务器;以及
报文分配设备,接收来自客户端的报文,根据所述报文的类别,将所述报文发送至所述服务器中的目标端口,其中,不同类别的报文对应的目标端口所属的端口组不相同。
18.如权利要求17所述的程序交接系统,其中所述至少一组进程包括第一组进程和第二组进程,所述第一组进程通过第一端口组接收数据,所述第二组进程通过第二端口组接收数据,所述第一组进程派生出所述第二组进程。
19.如权利要求18所述的程序交接系统,其中所述根据所述报文的类别,将所述报文发送至所述服务器中的目标端口包括:
所述报文分配设备判断所述报文的报文标识中包含所述目标端口号,所述报文分配设备将所述报文发送至所述服务器中的目标端口,所述目标端口为第一端口组中的端口。
20.如权利要求18所述的程序交接系统,其中所述根据所述报文的类别,将所述报文发送至所述服务器中的目标端口包括:
所述报文分配设备判断所述报文的报文标识中不包含所述目标端口号,所述报文分配设备将所述报文发送至所述服务器中的第二端口组中的任意一个端口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010735148.5A CN111756776B (zh) | 2020-07-28 | 2020-07-28 | 服务器、报文分配设备、程序交接系统以及程序交接的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010735148.5A CN111756776B (zh) | 2020-07-28 | 2020-07-28 | 服务器、报文分配设备、程序交接系统以及程序交接的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111756776A CN111756776A (zh) | 2020-10-09 |
CN111756776B true CN111756776B (zh) | 2023-03-24 |
Family
ID=72711990
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010735148.5A Active CN111756776B (zh) | 2020-07-28 | 2020-07-28 | 服务器、报文分配设备、程序交接系统以及程序交接的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111756776B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112653740A (zh) * | 2020-12-11 | 2021-04-13 | 北京金山云网络技术有限公司 | 支持quic连接迁移的负载均衡方法、装置及计算机产品 |
CN114697411A (zh) * | 2020-12-29 | 2022-07-01 | 北京达佳互联信息技术有限公司 | 数据处理方法、装置、服务器及存储介质 |
CN114915669A (zh) * | 2021-02-08 | 2022-08-16 | 北京金山云网络技术有限公司 | 一种基于quic协议的服务升级方法、装置及电子设备 |
CN114422616A (zh) * | 2022-01-29 | 2022-04-29 | 杭州迪普科技股份有限公司 | 数据通讯方法、客户端、服务器及系统 |
CN115379027B (zh) * | 2022-04-27 | 2023-08-01 | 国家计算机网络与信息安全管理中心 | Dns报文解析改进方法、装置、改进设备及存储介质 |
CN118214786B (zh) * | 2024-05-21 | 2024-07-16 | 国网信息通信产业集团有限公司 | 高并发多协议通信方法、装置、电子设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110381042A (zh) * | 2019-07-01 | 2019-10-25 | 北京字节跳动网络技术有限公司 | 一种平滑重启服务的方法、装置、介质和电子设备 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1030275A3 (en) * | 1998-05-27 | 2004-06-30 | Diebold, Incorporated | Terminal configuration methods |
WO2012142854A1 (zh) * | 2011-04-18 | 2012-10-26 | 北京新媒传信科技有限公司 | 一种应用服务平台系统及其实现方法 |
CN103150181B (zh) * | 2013-02-20 | 2017-02-08 | 大唐移动通信设备有限公司 | 一种进程启动的方法及装置 |
CN103209362B (zh) * | 2013-04-12 | 2016-05-04 | 深圳市共进电子股份有限公司 | 一种无源光网络设备间多设备之间升级的方法 |
CN105099789B (zh) * | 2015-09-02 | 2018-03-16 | 华为技术有限公司 | 一种网元升级方法及设备 |
CN105677433A (zh) * | 2016-03-15 | 2016-06-15 | 深圳创维-Rgb电子有限公司 | 服务器程序热升级的方法及装置 |
CN108388431B (zh) * | 2018-02-13 | 2021-03-02 | Oppo广东移动通信有限公司 | 应用程序热更新的控制方法、装置、存储介质及移动终端 |
CN111158782B (zh) * | 2019-12-27 | 2022-03-15 | 郑州信大捷安信息技术股份有限公司 | 一种基于DPDK技术的Nginx配置热更新系统和方法 |
CN111352642B (zh) * | 2020-02-27 | 2023-08-18 | 厦门网宿有限公司 | 服务设备及服务软件升级的方法 |
-
2020
- 2020-07-28 CN CN202010735148.5A patent/CN111756776B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110381042A (zh) * | 2019-07-01 | 2019-10-25 | 北京字节跳动网络技术有限公司 | 一种平滑重启服务的方法、装置、介质和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111756776A (zh) | 2020-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111756776B (zh) | 服务器、报文分配设备、程序交接系统以及程序交接的方法 | |
CN105979009B (zh) | 一种针对云应用容器的增加负载自动均衡方法 | |
US10802906B2 (en) | Monitoring method and apparatus of server, and storage medium | |
JP6834033B2 (ja) | ネットワークスライス管理方法、ユニット、及びシステム | |
CN107566541B (zh) | 容器网络资源分配方法、系统、存储介质和电子设备 | |
CN105379191B (zh) | 虚拟网络功能的升级方法和网络功能虚拟化编排器 | |
CN107145380B (zh) | 虚拟资源编排方法及装置 | |
WO2020052605A1 (zh) | 一种网络切片的选择方法及装置 | |
CN110221918B (zh) | 一种ns与vnf的关联方法、装置及系统 | |
EP3291499A1 (en) | Method and apparatus for network service capacity expansion | |
EP3373518B1 (en) | Service configuration method and device for network service | |
EP2942914A1 (en) | Load sharing method and apparatus | |
CN107193609B (zh) | 应用中功能模块调用方法及装置、电子设备 | |
CN109697120A (zh) | 用于应用迁移的方法、电子设备 | |
CN107332814B (zh) | 一种请求消息传输方法及装置 | |
CN111371694B (zh) | 一种分流方法、装置和系统、处理设备和存储介质 | |
CN109964507A (zh) | 网络功能的管理方法、管理单元及系统 | |
CN105745621A (zh) | 在服务器上仿真测试分布式应用 | |
CN109313568A (zh) | 用于在网络服务实例之间移动虚拟化网络功能实例的方法和装置 | |
CN108351798A (zh) | 用于虚拟机的可扩展寻址机制 | |
CN104144490A (zh) | 用户卡的开户方法、终端、网络服务器和系统 | |
CN112994915B (zh) | 一种sd-wan业务编排方法、系统、设备和存储介质 | |
CN110417856B (zh) | 多活负载均衡应用的扩容方法、装置、设备及存储介质 | |
US20190129742A1 (en) | Network system, management method and apparatus thereof, and server | |
CN111262771B (zh) | 虚拟私有云通信系统、系统配置方法及控制器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |