[go: up one dir, main page]

CN118301214A - 目标服务数据的传输方法、系统、存储介质及电子装置 - Google Patents

目标服务数据的传输方法、系统、存储介质及电子装置 Download PDF

Info

Publication number
CN118301214A
CN118301214A CN202410397185.8A CN202410397185A CN118301214A CN 118301214 A CN118301214 A CN 118301214A CN 202410397185 A CN202410397185 A CN 202410397185A CN 118301214 A CN118301214 A CN 118301214A
Authority
CN
China
Prior art keywords
source
application container
information
service call
call request
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.)
Pending
Application number
CN202410397185.8A
Other languages
English (en)
Inventor
孙远
张晨
黄韬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zijinshan Laboratory
Original Assignee
Zijinshan Laboratory
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zijinshan Laboratory filed Critical Zijinshan Laboratory
Priority to CN202410397185.8A priority Critical patent/CN118301214A/zh
Publication of CN118301214A publication Critical patent/CN118301214A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/563Data redirection of data network streams
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/63Routing a service request depending on the request content or context

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请实施例提出了一种目标服务数据的传输方法、系统、存储介质及电子装置,该方法应用于第一应用容器,包括:向内部网关发送初始服务调用请求;在第二应用容器接收到服务调用请求的情况下,接收所述第二应用容器通过预设连接通道发送的所述服务调用请求对应的目标服务数据,其中,所述目标服务数据对应的数据包中包括第一源地址信息和第一源端口信息,所述服务调用请求为内部网关改写所述初始服务调用请求后得到的;基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。

Description

目标服务数据的传输方法、系统、存储介质及电子装置
技术领域
本申请涉及通信领域,具体而言,涉及一种目标服务数据的传输方法、系统、存储介质及电子装置。
背景技术
无服务器架构表示一种允许将服务实例的个数缩容至0的架构。不过这一特性往往需要在现有系统架构上引入额外模块来实现,使得无服务器架构的集群内部服务调用变得非常复杂。
例如,在无服务器系统Knat ive中,需要将内部服务调用请求先转发到内部网关。如果此无服务器系统Knat ive的集群内部存在服务实例,则内部网关将服务调用请求转发到所选择的一个可用的服务实例上。如果此无服务系统Knat ive的集群内部不存在服务实例,则内部网关将服务调用请求转发给Act ivator系统服务。Act ivator系统服务在接收到服务调用请求后,向AutoSca ler系统服务发送服务实例的冷启动信号,然后等待服务实例冷启动成功。当Act ivator系统服务检测到服务实例冷启动成功后,再将服务调用请求转发给刚刚冷启动的服务实例。
与当前基于服务网格(Service Mesh)架构的集群实现内部服务调用的过程相比,无服务器集群基于内部网关实现内部服务调用的过程会增加至少一次七层代理转发过程。如果再加上内部服务调用之前的服务实例的冷启动过程,则会增加两次七层代理转发过程。而随着七层代理转发过程的发生次数的增加,集群内部服务的调用延迟会上升。
为减少集群内部服务的调用延迟,可以利用Linux系统的Traffic Contro l内核模块对数据包做网络地址转换(NAT),由服务器直接返回(Di rect Server Return)数据,也可以使用TCP交接的方案将服务调用结果直接发送给服务调用发起方,而无需经过七层代理进行转发,不过服务器直接返回数据的方案不能减少TCP服务调用延迟,而TCP交接的方案虽然可以减少TCP服务调用延迟,但这一方案需要改造已有服务架构,改造成本高,且难度大。也就是说,相关技术中,在通过无服务器架构的集群内部服务调用来传输服务数据时,存在集群内部服务的调用延迟较高的问题。
因此,有必要对相关技术予以改良以克服相关技术中的所述缺陷。
发明内容
本申请实施例提供了一种目标服务数据的传输方法、系统、存储介质及电子装置,以至少解决在通过无服务器架构的集群内部服务调用来传输服务数据时,集群内部服务的调用延迟较高的问题。
根据本申请实施例的一方面,提供一种目标服务数据的传输方法,应用于第一应用容器,包括:向内部网关发送初始服务调用请求;在第二应用容器接收到服务调用请求的情况下,接收所述第二应用容器通过预设连接通道发送的所述服务调用请求对应的目标服务数据,其中,所述目标服务数据对应的数据包中包括第一源地址信息和第一源端口信息,所述服务调用请求为内部网关改写所述初始服务调用请求后得到的;基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
根据本申请实施例的又一方面,提供一种目标服务数据的传输方法,应用于第二应用容器,包括:通过第二应用容器接收内部网关转发的服务调用请求;确定所述服务调用请求对应的目标服务数据,并使用提前约定的格式在所述目标服务数据对应的数据包中写入第一源地址信息和第一源端口信息;通过第二应用容器对应的预设连接通道将所述目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,以使所述第一应用容器基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
根据本申请实施例的又一方面,提供一种目标服务数据的传输方法,应用于内部网关,包括:接收第一应用容器发送的初始服务调用请求;通过在所述初始服务调用请求对应的数据包内增加进行服务调用所需的第一源地址信息和第一源端口信息对所述初始服务调用请求进行改写,得到服务调用请求;将所述服务调用请求转发给第二应用容器,以使所述第二应用容器基于对应的预设连接通道将所述服务调用请求对应的目标服务数据发送至所述第一应用容器,其中,所述目标服务数据对应的数据包中包括第一源地址信息和第一源端口信息。
根据本申请实施例的又一方面,还提供了一种目标服务数据的传输系统,其特征在于,包括:第一应用容器,第二应用容器,内部网关,其中,所述内部网关,用于接收所述第一应用容器发送的初始服务调用请求;通过在所述初始服务调用请求对应的数据包内增加进行服务调用所需的第一源地址信息和第一源端口信息对所述初始服务调用请求进行改写,得到服务调用请求;将所述服务调用请求转发给所述第二应用容器;所述第二应用容器,用于接收所述内部网关转发的服务调用请求,确定所述服务调用请求对应的目标服务数据,并使用提前约定的格式在所述目标服务数据对应的数据包中写入第一源地址信息和第一源端口信息,以及通过所述第二应用容器对应的预设连接通道将所述目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器;所述第一应用容器,用于基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
根据本申请实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述目标服务数据的传输方法。
根据本申请实施例的又一方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,上述处理器通过计算机程序执行上述目标服务数据的传输方法。
根据本申请实施例的又一方面,还提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现上述目标服务数据的传输方法。
通过本申请,首先通过第一应用容器向内部网关发送初始服务调用请求,由内部网关在所述初始服务调用请求对应的数据包内增加进行服务调用所需的第一源地址信息和第一源端口信息对所述初始服务调用请求进行改写,得到服务调用请求,并将所述服务调用请求转发给所述第二应用容器,接着第二应用容器接收所述内部网关转发的服务调用请求,确定所述服务调用请求对应的目标服务数据,并使用提前约定的格式在所述目标服务数据对应的数据包中写入第一源地址信息和第一源端口信息,以及通过所述第二应用容器对应的预设连接通道将所述目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,最后第一应用容器基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内,本申请通过对现有服务调用流程进行修改,使得第二应用容器可以使用快速回传通道(即预设连接通道)将所述目标服务数据,所述第一源地址信息和所述第一源端口信息共同转发给第一应用容器,通过调用预置编程接口,将所述目标服务数据重定向到所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域中,解决了在通过无服务器架构的集群内部服务调用来传输服务数据时,集群内部服务的调用延迟较高的问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示例性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是相关技术中无服务器集群内部的服务调用的示意图;
图2是本申请实施例的目标服务数据的传输方法的计算机终端的硬件结构框图;
图3是根据本申请实施例的目标服务数据的传输方法的流程图(一);
图4是根据本申请实施例的目标服务数据的传输方法的流程图(二);
图5是根据本申请实施例的目标服务数据的传输方法的流程图(三);
图6是根据本申请实施例的目标服务数据的传输方法的流程示意图;
图7是根据本申请实施例的目标服务数据的传输方法的数据流向示意图;
图8是根据本申请实施例的目标服务数据的传输系统的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在相关领域内,无服务器集群的内部服务调用的过程如图1所示,容器1发起的服务调用请求首先到达内部网关,内部网关接收到这个服务调用请求后,从系统中选择一个可以满足此次服务调用请求的容器(即容器2),把此次服务调用请求转发给这个容器2。此过程可以认为,内部网关直接原封不动地把此次服务调用请求的所有数据包转发给容器2。即服务调用请求的数据流向为:容器1->内部网关->容器2,这其中不涉及任何数据包修改。
具体无服务器集群内部服务调用加速方案如下:
1,利用Linux系统的Traffic Contro l内核模块对数据包做网络地址转换(NAT)的直接服务器返回(Di rect Server Return)的技术方案:
首先,由七层代理记录服务调用的源IP地址和源端口,然后将源IP地址和源端口与服务调用请求一起发送到后端服务器,接着由后端服务器根据源IP地址和源端口配置数据包NAT规则。在NAT规则配置完成后,便可以直接使用NAT规则将服务调用请求对应的响应数据直接发送给服务调用的发起方,而无需经由七层代理转发。
2,利用Linux系统的TCP连接序列化与反序列化能力的TCP交接(TCP Hand-Off)的技术方案:
首先,由七层代理将接收到服务调用请求的TCP连接进行序列化,然后将序列化的TCP状态传递到后端服务器,接着由后端服务器进行TCP连接反序列化来恢复该TCP连接,进而接管该TCP连接。在后端服务器接管TCP连接后,便可以将服务调用结果直接发送给服务调用发起方,而无需经过七层代理进行转发。不过这一方案仍需要利用可编程硬件交换机或者软件交换机对数据包的IP地址和MAC地址进行转换。
不过上述直接由服务器返回数据的技术方案,存在只能加速UDP服务调用,不能加速TCP服务调用的问题,而上述TCP交接方案虽然可以加速TCP服务调用,但是实现加速TCP服务调用必须先用专用网络通信库改造已有服务架构,实施难度较大。
需要说明的是,在无服务器集群中,内部服务调用时使用的七层代理通常是应用程序负载均衡器(App l icat ion Load Ba l ancer,ALB)。ALB是AWS提供的在七层(应用层)对流量进行负载均衡和路由的负载均衡器,通过将流量分发到不同的无服务器函数,以实现负载均衡和高可用性。并且,ALB还支持路由规则、目标组和监听器等功能,可以根据请求的路径、主机名、查询字符串等条件将请求路由到不同的目标组。这使得在无服务器集群中可以轻松实现基于路径的路由和微服务架构。
其中,在无服务器集群中,还包括一种自动扩展机制AutoSca ler,可以根据当前工作负载的需求来动态调整集群中的计算资源数量。AutoSca ler通过监控集群中的指标,例如CPU使用率、内存使用率或请求处理时间等,来确定是否需要增加或减少计算资源。当工作负载增加时,AutoSca ler会自动添加更多的计算资源,以确保系统能够处理更多的请求。而当工作负载减少时,AutoSca ler会自动缩减计算资源,以节省成本和资源。通过使用AutoSca ler,无服务器集群可以根据实际需求进行动态扩展和收缩,以提供更好的性能和弹性。
本申请实施例中所提供的方法实施例可以在计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图2是本申请实施例的目标服务数据的传输方法的计算机终端的硬件结构框图。如图2所示,计算机终端可以包括一个或多个(图2中仅示出一个)处理器202(处理器202可以包括但不限于微处理器(Microprocessor Un it,简称是MPU)或可编程逻辑器件(Programmab le logic device,简称是PLD))和用于存储数据的存储器204,在一个示例性实施例中,上述计算机终端还可以包括用于通信功能的传输设备206以及输入输出设备208。本领域普通技术人员可以理解,图2所示的结构仅为示意,其并不对上述计算机终端的结构造成限定。例如,计算机终端还可包括比图2中所示更多或者更少的组件,或者具有与图2所示等同功能或比图2所示功能更多的不同的配置。
存储器204可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的目标服务数据的传输方法对应的计算机程序,处理器202通过运行存储在存储器204内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器204可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器204可进一步包括相对于处理器202远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备206用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输设备206包括一个网络适配器(Network I nterface Contro l ler,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备206可以为射频(Rad io Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
图3是根据本申请实施例的目标服务数据的传输方法的流程图(一),如图3所示,该方法应用于第一应用容器,具体步骤包括:
步骤S302,向内部网关发送初始服务调用请求;
步骤S304,在第二应用容器接收到服务调用请求的情况下,接收所述第二应用容器通过预设连接通道发送的所述服务调用请求对应的目标服务数据,其中,所述目标服务数据对应的数据包中包括第一源地址信息和第一源端口信息,所述服务调用请求为内部网关改写所述初始服务调用请求后得到的;
需要说明的是,向第二应用容器转发服务调用请求对应于集群中存在可用的第二应用容器的情况,此时内部网关可以直接将服务调用请求转发给第二应用容器。不过,如果集群中不存在可用的第二应用容器,就不能向第二应用容器直接转发服务调用请求。对于这种情况,最常见的一种处理方法是让内部网关将服务调用请求转发给另外一个系统服务。如在knat ive中,内部网关可以将服务调用请求转发给系统服务Act ivator。当Activator监测到第二应用容器冷启动完成后,会将服务调用请求再转发给第二应用容器。
基于以上说明,可选的,还可以在确定内部网关改写初始服务调用请求后得到服务调用请求,且通过其他系统服务转发服务调用请求的情况下,如果确定第二应用容器冷启动完成,则接收所述第二应用容器通过预设连接通道发送的所述服务调用请求对应的目标服务数据。需要说明的是,对于下文中出现的通过其他系统服务转发服务调用请求,可参考以上说明,本申请在此不再赘述。
步骤S306,基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
本申请实施例使用第一应用容器向内部网关发送初始服务调用请求;在确定所述内部网关改写所述初始服务调用请求后得到服务调用请求,且向第二应用容器发送服务调用请求的情况下,接收所述第二应用容器通过预设连接通道发送的所述服务调用请求对应的目标服务数据,其中,所述目标服务数据对应的数据包中包括第一源地址信息和第一源端口信息;基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内,解决了在通过无服务器架构的集群内部服务调用来传输服务数据时,集群内部服务的调用延迟较高的问题。
其中,上述第一应用容器和第二应用容器例如可以为Sidecar容器,需要说明的是,Sidecar容器是一种与主要应用程序容器一起运行的辅助容器,可以与主容器共享相同的资源和网络命名空间,并且可以提供一些额外的功能和服务。Sidecar容器通常用于处理主容器与外部系统的交互,或者在主容器中运行的应用程序之外执行其他任务。通过使用Sidecar容器,可以将不同的功能和服务进行解耦后再进行独立部署和扩展。这种模式可以提高应用程序的可维护性和可扩展性,进而提高了Sidecar容器的可管理性。
进一步的,Sidecar容器可以实现各种功能,例如:
1.日志收集:Sidecar容器收集主容器产生的日志,并将日志发送到中央日志存储或分析系统。
2.监控和指标收集:Sidecar容器可以收集主容器的性能指标和监控数据,并将性能指标和监控数据发送到监控系统进行分析和可视化。
3.身份验证和安全:Sidecar容器可以处理与身份验证和授权相关的任务,例如在主容器中运行的应用程序需要与身份提供者进行通信。
4.配置管理:Sidecar容器可以负责动态更新主容器的配置,例如从配置存储中获取最新的配置信息,并将最新的配置信息发送给主容器。
5.数据转换和处理:Sidecar容器可以对主容器产生的数据进行预处理、转换或过滤,以便供其他系统使用。
在一个示例性实施例中,对于上述步骤S306中基于第一源地址信息和第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内的实现过程,可以包括以下步骤:根据提前约定的格式提取出所述目标服务数据对应的数据包中包含的所述第一源地址信息和所述第一源端口信息;根据第一键值对应关系在第一对应关系组中增加新的键值对应关系,得到第二对应关系组,并根据所述第二对应关系组将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内;或者,根据所述第一键值对应关系更新所述第一对应关系组中已有的键值对应关系,得到第三对应关系组,并根据所述第三对应关系组将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
其中,所述第二对应关系组用于调用预置编程接口将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内,所述第三对应关系组用于调用预置编程接口将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
在一个示例性实施例中,在根据第一键值对应关系在第一对应关系组中增加新的键值对应关系,得到第二对应关系组之前,所述方法还包括:根据所述第一源地址信息和所述第一源端口信息生成第一键值对应关系,其中,所述第一键值对应关系中的键元素是通过第一地址信息、第三端口信息、第二地址信息和第二端口信息生成的,所述第一键值对应关系中的值元素是通过所述第一地址信息、第一端口信息、内部网关服务地址和所述内部网关服务地址的端口信息生成的;其中,所述第一地址信息表示所述第一源地址信息对应的第一地址的信息,所述第二地址信息表示与所述第一地址相连通的第二地址的信息,所述第三端口信息表示第三端口的信息,所述第三端口是所述第一地址对应的所有端口中的提前约定的端口,所述第二端口信息表示第二端口的信息,所述第二端口是所述第二地址对应的所有端口中的任意一个未被占用的端口,所述第一端口信息表示第一源端口信息对应的第一端口的信息。
其中,上述第一键值对应关系可以理解为四元组-四元组映射关系,则根据第一键值对应关系在第一对应关系组中增加新的键值对应关系可以理解为在以下实施例中的四元组-四元组表中增加一条四元组-四元组映射记录。本实施例中的一个四元组可以包括一个Socket的本地IP地址、本地端口、远程IP地址和远程端口,表示一个Socket的唯一标识。也就是说,把一个四元组-四元组映射关系添加进四元组-四元组表中,意味着本来应该放进(或者说存储到)这个四元组-四元组映射关系的键所对应的Socket的接收缓冲区中的数据,都会被重定向到这个四元组-四元组映射关系的值所对应的Socket的接收缓冲区或发送缓冲区域中。
需要说明的是,内存缓冲区域例如图7的容器1中的发送缓冲区和接收缓冲区。其中,发起服务的服务调用方使用的socket对应的是第一地址、第一端口。快速回传通道的目的socket对应的是第一地址、第三端口(提前约定的)。快速回传通道的源socket对应的是第二地址、第二端口(随机选的)。
图4是根据本申请实施例的目标服务数据的传输方法的流程图(二),如图4所示,该方法应用于第二应用容器,具体步骤包括:
步骤S402,通过第二应用容器接收内部网关转发的服务调用请求;
可选的,基于上述步骤S304中的说明内容,在步骤S402中接收到的服务调用请求还可以来自其他系统服务转发,即内部网关通过其他系统服务转发服务调用请求,继而由其他系统服务向第二应用容器转发服务调用请求。
步骤S404,确定所述服务调用请求对应的目标服务数据,并使用提前约定的格式在所述目标服务数据对应的数据包中写入第一源地址信息和第一源端口信息;
步骤S406,通过第二应用容器对应的预设连接通道将所述目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,以使所述第一应用容器基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
基于以上步骤,本申请实施例通过第二应用容器接收内部网关转发的服务调用请求,并确定所述服务调用请求对应的目标服务数据,并使用提前约定的格式在所述目标服务数据对应的数据包中写入第一源地址信息和第一源端口信息,继而通过第二应用容器对应的预设连接通道将所述目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,以使所述第一应用容器基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内,解决了在通过无服务器架构的集群内部服务调用来传输服务数据时,集群内部服务的调用延迟较高的问题。
在一个示例性实施例中,可以通过以下步骤对上述步骤S406通过第二应用容器对应的预设连接通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器的技术方案进行说明:步骤S4061,在确定所述第二应用容器对应的预设连接通道内存在第一回传通道的情况下,通过所述第一回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,其中,所述第一回传通道为预先建立的用于将来自所述第二应用容器的数据发送至所述第一应用容器的通道;步骤S4062,在确定所述第二应用容器对应的预设连接通道内不存在第一回传通道的情况下,基于所述第一源地址信息建立第二回传通道,通过所述第二回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,将所述第二回传通道加入所述第二应用容器对应的预设连接通道。
在一个示例性实施例中,基于上述步骤,还可以进一步包括如下实现方案:步骤S4063,在通过所述第一回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器的同时,将所述第一回传通道的通道状态设置为已占用;或者,步骤S4064,在通过所述第一回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器之后,将所述第一回传通道的通道状态设置为未占用;或者,步骤S4065,在通过所述第二回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器的同时,将所述第二回传通道的通道状态设置为已占用;或者,步骤S4066,在通过所述第二回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器之后,将所述第二回传通道的通道状态设置为未占用。
在一个示例性实施例中,进一步提出了一种用于实现基于所述第一源地址信息建立第二回传通道的技术方案,具体包括:从第二应用容器的所有地址中确定出与所述第一源地址信息对应的第一地址相连通的第二地址;从与所述第二地址对应的所有端口中确定出任意一个未被占用的端口,将所述任意一个未被占用的端口确定为第二端口;从与所述第一地址对应的所有端口中确定出提前约定的端口,将所述提前约定的端口确定为第三端口;向所述第一应用容器发送连接建立请求,以使所述第一应用容器根据所述连接建立请求建立所述第一地址和所述第二地址的传输通道,其中,所述传输通道的一端与所述第三端口连接,所述传输通道的另一端与所述第二端口连接;将所述传输通道确定为所述第二回传通道。
可选的,在本步骤中还可以由第一应用容器建立第二回传通道。在集群中存在可用的第二应用容器的情况下,当内部网关确定了服务调用请求的转发目的地(即被内部网关选中的第二应用容器),就可以基于所述第一源地址信息建立第二回传通道。技术方案如下:
1)内部网关向第一应用容器发送一个包含被选中的第二应用容器的地址信息的信号;
2)第一应用容器接收到这个信号后,执行如下操作:
(1)根据所述信号中包含的第二应用容器的地址信息,确定出与所述第一源地址信息对应的第一地址相连通的第二地址;
(2)从与所述第二地址对应的所有端口中确定出提前约定的端口,将所述提前约定的端口确定为第二端口;
(3)从与所述第一源地址信息对应的第一地址对应的所有端口中确定出任意一个未被占用的端口,将所述任意一个未被占用的端口确定为第三端口;
(4)向所述第二应用容器发送连接建立请求,以使所述第二应用容器根据所述连接建立请求建立所述第一地址和所述第二地址的传输通道,其中,所述传输通道的一端与所述第三端口连接,所述传输通道的另一端与所述第二端口连接;将所述传输通道确定为所述第二回传通道。
需要说明的是,在集群中不存在可用的第二应用容器的情况下,内部网关会将服务调用请求先转发给其他系统服务。在这种情况下,当这个系统服务监测到第二应用容器冷启动成功时,需要由这个系统服务向第一应用容器发送一个包含第二应用容器的地址信息的信号。
可选的,通过以上步骤,可以先在回传通道连接池内检查是否存在状态为未占用的可用于快速回传该次服务调用响应数据的快速回传连接(即上述第一回传通道)。如果存在,则从中选择一个这样的快速回传连接,并将其状态设置为已占用。如果不存在,则根据第一源地址信息和第一源端口信息建立新的快速回传连接(即第二回传通道),将新的快速回传连接加入至回传通道连接池内,并将其状态设置为已占用。
图5是根据本申请实施例的目标服务数据的传输方法的流程图(三),如图5所示,该方法应用于内部网关,具体步骤包括:
步骤S502,接收第一应用容器发送的初始服务调用请求;
步骤S504,通过在所述初始服务调用请求对应的数据包内增加进行服务调用所需的第一源地址信息和第一源端口信息对所述初始服务调用请求进行改写,得到服务调用请求;
步骤S506,将所述服务调用请求转发给第二应用容器,以使所述第二应用容器基于对应的预设连接通道将所述服务调用请求对应的目标服务数据发送至所述第一应用容器,其中,所述目标服务数据对应的数据包中包括第一源地址信息和第一源端口信息。
可选的,在本步骤中,除了上述将所述服务调用请求直接转发给第二应用容器的方法,还可以通过其他系统服务将转发服务调用请求给第二应用容器,继而使得第二应用容器基于对应的预设连接通道将所述服务调用请求对应的目标服务数据发送至所述第一应用容器。
通过上述步骤,通过内部网关接收第一应用容器发送的初始服务调用请求,通过在所述初始服务调用请求对应的数据包内增加进行服务调用所需的第一源地址信息和第一源端口信息对所述初始服务调用请求进行改写,得到服务调用请求,并将所述服务调用请求转发给第二应用容器,以使所述第二应用容器基于对应的预设连接通道将所述服务调用请求对应的目标服务数据发送至所述第一应用容器。通过使用内部网关对初始服务调用请求进行改写,可以额外传输服务调用所需的第一源地址信息和第一源端口信息,以使第一应用容器基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内,解决了在通过无服务器架构的集群内部服务调用来传输服务数据时,集群内部服务的调用延迟较高的问题。
其中,需要说明的是,在上述内部网关将初始服务调用请求对应的数据包转发到第二应用容器或者其他系统服务之前,都可以根据提前约定的格式在初始服务调用请求对应的数据包中写入服务调用的源Socket的本地IP地址和本地端口信息(即第一源地址信息和第一源端口信息)。
也就是说,除了可以在内部网关执行这一数据改写操作,对于其他任何能够修改服务调用请求数据包的位置(如第一应用容器所在节点的操作系统、第一应用容器与内部网关之间的数据传输路径上的任何可编程硬件交换机或者软件交换机、内部网关及其所在节点的操作系统),也可以执行这一数据改写操作。即在本实施例中,可以选择内部网关将服务调用的源Socket的本地IP地址和本地端口信息写入初始服务调用请求对应的数据包中。或者,也可以选择其他能够修改服务调用请求数据包的位置将服务调用的源Socket的本地IP地址和本地端口信息写入初始服务调用请求对应的数据包中。
可选的,对于服务调用的源Socket的本地IP地址和本地端口信息,可以写入初始服务调用请求对应的数据包的任何位置。在该实施例中,如果第一应用容器发起的是HTTP服务调用,从实现难度上考虑,可以将服务调用的源Socket的本地IP地址和本地端口信息写入服务调用请求数据包的HTTP请求头中来降低数据包改写的难度。
接下来结合以下实施例对目标服务数据的传输方法进行进一步说明。
在一个示例性实施例中,如图6所示,提供了一种目标服务数据的传输的流程示意图,可以说明服务调用响应数据的接收过程。
如图6所示,socket对应有发送缓冲区、接收缓冲区,而且Socket既有地址信息,也有端口信息。其中,发起服务的服务调用方使用的socket对应的是第一地址、第一端口。快速回传通道的目的socket对应的是第一地址、第三端口(提前约定的)。快速回传通道的源socket对应的是第二地址、第二端口(随机选的)。
可见,容器1(相当于上述第一应用容器)在发起一次服务调用请求后,需要从发起此次服务调用所使用的socket1(即图6中的发起服务调用使用的socket)的接收缓冲区中接收此次服务调用响应数据(即上述目标服务数据)。也就是说,只要把服务调用响应数据放入socket1的接收缓冲区,容器1就可以接收到服务调用响应数据。
当前服务调用流程一般是由内部网关将服务调用响应数据转发给节点1,由于发送服务调用请求和接收服务调用响应数据使用的都是socket1,所以节点1的操作系统可以自动将服务调用响应数据填充到socket1的接收缓冲区中。不过本申请修改了当前服务调用流程,改为使用容器2通过快速回传通道将服务调用响应数据转发给节点1。在这种情况下节点1的操作系统会直接将服务调用响应数据放入快速回传通道的目的socket(后面称之为socket2)的接收缓冲区中。所以本申请基于以上修改,在节点1上又相应增加了一个缓冲区重定向功能,这样可以将本来要放入socket2的接收缓冲区中的服务调用响应数据重定向到socket1的接收缓冲区中,从而使得容器1接收到服务调用响应数据。
在本实施例中,涉及到服务调用请求、响应数据的改写,改写的目的是将一些额外的信息(即服务调用的源地址信息和源端口信息)和真正要传送的服务调用请求、服务调用响应数据一起传输过去。
具体的,在本申请提供的实施例中,对于服务调用请求数据的改写,可以将服务调用的源地址信息和源端口信息附加在HTTP请求头中。而对于服务调用响应数据的改写,可以将服务调用的源地址信息和源端口信息附加在TCP协议头部中。
从实现上来说,如果不把服务调用的源地址信息和源端口信息附加在协议头部中,而是直接修改真正的服务调用请求、服务调用响应数据并将这些信息附加在其中,也是可以完成服务调用的源地址信息和源端口信息的传送过程。
不过准确来说,对于服务调用请求数据的改写或者对于服务调用响应数据的改写的操作是把服务调用的源地址信息和源端口信息附加在服务调用请求、服务调用响应数据各自的数据包上。采取的以上方式都会使得对应的数据包发生变化。因此,目标服务数据就是真正想传输的数据。容器2生成的服务响应数据可以理解为目标服务数据,将容器2生成的服务响应数据传送到容器1,同时又需要把服务调用的源地址信息和源端口信息一起传送到容器1。
其中,在以上实施例中,Socket表示用于网络通信的编程接口,提供了一种通信机制,可以实现不同计算机之间的数据传输和通信。Socket编程可以通过创建Socket对象来进行网络通信的建立、数据的发送和接收等操作。Socket编程基于底层的传输协议(如TCP/IP协议),通过使用不同的Socket类型(如TCP Socket、UDP Socket等),可以实现不同的网络通信方式和应用场景。例如,TCP Socket可以提供可靠的、面向连接的通信,适用于需要保证数据完整性和可靠性的场合。而UDP Socket则提供了无连接的通信,适用于实时性要求较高的场合。
在一个示例性实施例中,可以结合图7对数据流向和对数据的操作过程进行简要说明,步骤如下:
步骤S11:在任意一个应用容器启动之前,首先在应用容器所对应的Sidecar容器中启动一个以应用容器IP地址为服务地址、以提前约定的端口为服务端口的TCP服务(下文称之为快速回传中介服务)。
步骤S12:针对内部网关,在任意一个服务调用请求被内部网关转发到下一个服务提供方容器或者其他系统服务之前,内部网关根据提前约定的格式在服务调用请求的数据包中写入服务调用的源Socket的本地IP地址(源IP地址,相当于上述第一源地址信息)和本地端口信息(源端口信息,相当于上述第一源端口信息)。
步骤S13:针对服务提供方(即第二应用容器),在其Sidecar容器接收到服务调用请求的数据包时,根据提前约定的格式检查服务调用请求的数据包,确定服务调用请求的数据包中是否含有此次服务调用的源IP地址和源端口信息。
步骤S14:针对服务提供方,在其Sidecar容器根据提前约定的格式检查到服务调用请求数据包中含有源IP地址和源端口信息时,建立或选择快速回传TCP连接(即上述预设连接通道)。具体包含以下操作:
(1)首先根据提前约定的格式从服务调用请求的数据包中提取出服务调用的源IP地址和源端口信息。
(2)在其对应的Sidecar容器的快速回传TCP连接池内,检查是否存在状态为未占用的可用于快速回传该次服务调用响应数据的快速回传TCP连接(即上述第一回传通道)。
如果存在,则从中选择一个这样的快速回传TCP连接,并将其状态设置为已占用。
如果不存在,则根据提取出的服务调用的源IP地址和提前约定的快速回传中介服务端口(即上述第三端口),向服务调用方的快速回传中介服务发起快速回传TCP连接建立请求,完成快速回传TCP连接的建立,最后将此快速回传TCP连接加入至快速回传TCP连接池内,并将其状态设置为已占用。
步骤S15:针对服务提供方,其Sidecar容器在接收到其返回的服务调用响应数据(即目标服务数据)时,通过快速回传TCP连接(在步骤S14中建立或者选择的)将接收到的服务调用响应数据转发到发起此次服务调用的应用容器(即服务调用方)。
步骤S16:针对服务提供方,在其Sidecar容器通过快速回传TCP连接(在步骤S14中建立或者选择的)转发所接收到的服务调用响应数据的过程中,此应用容器所在节点按照提前约定的格式将此次服务调用的源IP地址和源端口信息(在步骤S14中提取的)写入服务调用响应数据对应的数据包中。
步骤S17:针对服务调用方(即第一应用容器),当通过快速回传TCP连接(在步骤S14中建立或者选择的)转发的服务调用响应数据对应的数据包到达目的节点(如图6中的节点1)时,目的节点将从这些数据包中解析出的服务调用响应数据重定向到此次服务调用的源Socket的接收缓冲区中。具体包括以下操作:
(1)按照提前约定的格式从这些数据包中提取出此次服务调用的源IP地址和源端口信息;
(2)根据此次服务调用的源IP地址和源端口信息查找到此次服务调用的源Socket;
(3)将从这些数据包中解析出的准备放入此次使用的快速回传TCP连接的目的Socket的接收缓冲区中的服务调用响应数据重定向到此次服务调用的源Socket的接收缓冲区中。
步骤S18:针对服务提供方,在其Sidecar容器将接收到的服务调用响应数据通过快速回传TCP连接(在步骤S14中所述的建立或选择的)转发完成后,将此次使用的快速回传TCP连接在快速回传TCP连接池中的状态设置为未占用。
在以上步骤所提供的实施例中,可以由节点1上IP地址为10.11.9.100的应用容器发起一个HTTP服务调用,被调用的HTTP服务在集群内部的域名为service2.defau lt。这一服务调用请求首先到达内部网关,由于此时集群内没有可以提供该服务的应用容器,内部网关会将此服务调用请求转发到Act ivator(激活器)。Act ivator在接收到该服务调用请求后,向集群内的AutoSca ler(图7未示出)发出信号。AutoSca ler接收到信号后,启动一个可以提供该服务的应用容器。在该实施例中,该服务提供方的应用容器IP地址为10.11.9.200,运行在节点2上。Act ivator在监测到该服务提供方容器启动成功后,将服务调用请求转发到该服务提供方容器。
其中,Act ivator是一种计算机网络中的中间件组件,用于接收和处理服务调用请求,并将其转发到可以提供该服务的应用容器。Act ivator的作用类似于一个路由器,帮助服务调用请求找到正确的目标,并启动相应的应用容器来提供所需的服务。因此,Activator在网络中起着重要的作用,帮助实现服务调用的自动化和高效性。
在一个实施例中,如图7所示,提供了一种无服务器集群的架构示意图,包括节点1,节点2,集群内部网关和系统服务组件Act ivator,接下来进一步结合图7所示的架构对目标服务数据的传输过程进行说明。
其中,节点1对应包括用户空间和内核空间,其中,用户空间包括作为服务调用方的应用容器1,s idecar容器1,eBPF用户空间程序1,内核空间包括skops程序1和skb程序1。在应用容器1中还包括服务调用的源socket。在s idecar容器1还包括快速回传TCP连接的目的Socket。
节点2对应包括用户空间和内核空间,其中,用户空间包括作为服务提供方的应用容器2,s idecar容器2,eBPF用户空间程序2,内核空间包括skops程序2和skb程序2。在sidecar容器2还包括快速回传TCP连接的源Socket。
在应用容器1向集群内部网关发送服务调用请求之后,内部网关根据提前约定的格式在服务调用请求数据包中写入服务调用的源Socket的本地IP地址和本地端口信息(即源IP地址和源端口信息),并将服务调用请求数据包发送至Act ivator,Act ivator在监测到应用容器2启动成功后,将服务调用请求转发到应用容器2。由Sidecar容器2接收应用容器返回的服务调用响应数据,并通过快速回传TCP连接将服务调用响应数据转发到服务Sidecar容器1。
进一步的,在一个实施例中,结合图7和以下步骤对本申请中的数据传输过程进行说明:
步骤1,在任意一个应用容器启动之前,可以参照上述步骤S11,在应用容器1所对应的Sidecar容器1内启动一个以应用容器1的IP地址为服务地址、以提前约定的端口为服务端口的TCP服务。
同时,由于任意一个应用容器都有可能发起服务调用请求,故在服务提供方的Sidecar容器2也启动一个快速回传中介服务。
进一步的,继续在应用容器1所在的节点(例如节点1)将已编译好的eBPF字节码加载到Linux内核中。
从实现上来说,由于应用容器1所对应的Sidecar容器1没有将eBPF字节码加载到Linux内核的权限,需要从Sidecar容器1向其所在节点上的eBPF用户空间程序发送一个提前约定的信号(如通过命名管道发送信号),由eBPF用户空间程序1将已编译好的eBPF字节码加载到Linux内核中。
需要说明的是,上述已编译好的eBPF字节码,包含有多个不同类型的eBPF程序和不同类型的eBPF映射表,eBPF的程序类型例如可以包括:BPF_PROG_TYPE_SOCK_OPS类型和一个BPF_PROG_TYPE_SK_SKB类型。eBPF映射表的程序类型例如可以包括:BPF_MAP_TYPE_SOCKHASH类型,BPF_MAP_TYPE_HASH类型和BPF_MAP_TYPE_HASH类型的eBPF映射表。
其中,BPF_PROG_TYPE_SOCK_OPS类型的eBPF程序例如为图7所示的skops程序1,BPF_PROG_TYPE_SK_SKB类型的eBPF程序例如为图7所示的skb程序1。
其中,BPF_MAP_TYPE_SOCKHASH类型的eBPF映射表,也可简称为四元组-Socket表,保存有四元组以及此四元组所对应的Socket。BPF_MAP_TYPE_HASH类型的eBPF映射表也可简称为四元组-四元组表,保存有不同用于根据四元组之间的对应关系。BPF_MAP_TYPE_HASH类型的eBPF映射表,也可简称为四元组-二元组表,保存有四元组以及此四元组对应的二元组。
步骤2,针对步骤1中已编译好的eBPF字节码中的eBPF程序,可以由eBPF用户空间程序1将步骤1中的skops程序与步骤1中任意一个应用容器所在的cgroup进行关联,使步骤1中的skops程序1能够对步骤1中任意一个应用容器所在的cgroup中发生的所有Socket相关事件做出响应,以及将步骤1中的skb程序1与步骤1中的四元组-Socket表进行关联,使步骤1的skb程序1能够实现Socket重定向。
需要说明的是,为了减少步骤1中加载eBPF字节码的操作影响Sidecar容器1的启动速度,可以提前使用eBPF用户空间程序1将eBPF字节码加载到Linux内核中。这样Sidecar容器1只需向eBPF用户空间程序发送信号,就可以执行eBPF程序初始化操作。
在服务调用方容器发起服务调用请求时,需要先建立TCP连接,才能响应服务调用请求发送服务调用请求数据。在TCP连接的建立过程中完成第二次握手时,服务调用方容器所在节点上的Linux内核会产生BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB事件。
步骤3:当TCP连接建立完成时,即服务调用方容器所在节点上的Linux内核产生BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB事件时,如果该事件对应的Socket的远程IP地址和远程端口是无服务器集群中的内部网关的IP地址和端口,可以控制服务调用方容器所在节点上的skops程序在步骤1的四元组-Socket表中增加或更新一条映射记录,每条映射记录以键值对的形式存储,键是由BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB事件对应的Socket(同时也是此次服务调用的源Socket)的本地IP地址、本地端口、远程IP地址和远程端口构成的四元组,值是BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB事件对应的Socket。同时在步骤1中的四元组-四元组表中增加或更新一条映射记录,其键和值都是由BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB事件对应的Socket的本地IP地址、本地端口、远程IP地址和远程端口构成的四元组。
一个四元组可以理解为由一个Socket的本地IP地址、本地端口、远程IP地址和远程端口构成,是一个Socket的唯一标识。四元组-Socket表的作用是根据一个Socket的唯一标识找到这个Socket。在步骤13中会把这个四元组-Socket表作为参数来调用bpf辅助函数。四元组-四元组表的作用是根据一个Socket的唯一标识来查找要被重定向到的目的Socket的唯一标识,而要被重定向到的目的Socket表示的是本来应该放进这个Socket的接收缓冲区中的数据需要被重定向到的目的Socket。在步骤13中会使用到这个四元组-四元组表。经过步骤3,服务调用方容器所在节点的四元组-Socket表中的映射记录如下表1所示:
表1四元组-Socket表中的部分映射记录
经过步骤3,服务调用方容器所在节点的四元组-四元组表中的映射记录如下表2所示:
表2四元组-四元组表中的部分映射记录
步骤4,参照上述步骤S12,可以在服务调用请求被内部网关转发到服务提供方容器或者其他系统服务之前,内部网关根据提前约定的格式在服务调用请求数据包中写入服务调用的源Socket的本地IP地址和本地端口信息(即源IP地址和源端口信息)。
需要说明的是,只要服务调用请求数据包还未离开内部网关,在任何能够修改服务调用请求数据包的位置(如服务调用方容器所在节点的操作系统、服务调用方容器与内部网关之间的数据传输路径上的任何可编程硬件交换机或者软件交换机、内部网关及其所在节点的操作系统)都可以执行步骤4。
可选的,在该实施例中,可以选择在内部网关处将服务调用的源IP地址和源端口信息写入服务调用请求数据包中。或者,也可以选择其他能够修改服务调用请求数据包的位置执行步骤4。
需要说明的是,可以将服务调用的源IP地址和源端口信息写入服务调用请求数据包的任何位置。在该实施例中,由于服务调用方发起的是HTTP服务调用,可以将服务调用的源IP地址和源端口信息写入服务调用请求数据包的HTTP请求头中来降低数据包改写的难度。如可以在HTTP请求头中增加一个字段名为Source-Address的字段,并将服务调用的源IP地址和源端口信息作为该字段的值。
举例来说,假设在该实施例中内部网关接收到的服务调用请求数据包的HTTP请求头表示如下:
“GET/HTTP/1.1
Host:service2.defau lt
User-Agent:cur l/7.8
Content-Length:70。”
则在上述数据包写入服务调用的源IP地址和源端口信息后,由内部网关转发到服务提供方容器或者其他系统服务的服务调用请求数据包的HTTP请求头如下:
“GET/HTTP/1.1
Host:service2.defau lt
User-Agent:cur l/7.8
Content-Length:70
Source-Address:10.11.9.100:12345。”
步骤5,参照上述步骤S13,在服务提供方Sidecar容器在接收到服务调用请求数据包时,可以根据提前约定的格式检查服务调用请求数据包中是否含有该次服务调用的源IP地址和源端口信息。
可以理解的是,步骤5相当于上述根据提前约定的格式提取出所述目标服务数据对应的数据包中包含的所述第一源地址信息和所述第一源端口信息的下位方案。
步骤6,服务提供方Sidecar容器在根据提前约定的格式检查到服务调用请求数据包中含有源IP地址和源端口信息时,建立或选择快速回传TCP连接,并在步骤1中的四元组-二元组表中增加或更新映射记录。
具体的,首先根据提前约定的格式从服务调用请求数据包中提取出服务调用的源IP地址和源端口,然后检查服务提供方Sidecar容器的快速回传TCP连接池内是否存在状态为未占用的可用于快速回传该次服务调用响应数据的快速回传TCP连接;如果存在,则从中选择一个这样的快速回传TCP连接,并将其状态设置为已占用;如果不存在,则根据上述提取出的服务调用的源IP地址和提前约定的快速回传中介服务端口,向服务调用方的快速回传中介服务发起快速回传TCP连接建立请求,并完成快速回传TCP连接的建立,最后将该快速回传TCP连接加入快速回传TCP连接池,并其状态设置为已占用。
需要说明的是,服务提供方Sidecar容器的快速回传TCP连接池内存在状态为未占用的可用于快速回传该次服务调用响应数据的快速回传TCP连接可以理解为上述第一回传通道,在服务提供方Sidecar容器的快速回传TCP连接池内未存在状态为未占用的可用于快速回传该次服务调用响应数据的快速回传TCP连接,根据上述提取出的服务调用的源IP地址和提前约定的快速回传中介服务端口建立的快速回传TCP连接可以理解为上述第二回传通道。
则步骤6对应于上述通过第二应用容器对应的预设连接通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器的实现过程。
进一步的,可以由eBPF用户空间程序在步骤1的四元组-二元组表中增加或更新映射记录,四元组-二元组表的键是通过上述建立或选择的快速回传TCP连接的源Socket的本地IP地址、本地端口、远程IP地址和远程端口所构成的四元组,四元组-二元组表的值是由上述服务调用的源IP地址和源端口组成的二元组。
步骤11会使用到这个四元组-二元组表。服务提供方容器所在节点的Linux内核在封装服务调用响应数据对应的数据包时会在数据包增加一个TCP头部自定义选项。将一个四元组-二元组映射记录添加到这个四元组-二元组表中,意味着如果服务提供方Sidecar容器从这个四元组-二元组映射记录的键对应的快速回传TCP连接的源Socket转发服务调用响应数据,那么要根据这个四元组-二元组映射记录的值构造TCP头部自定义选项的内容。
经过步骤6,服务提供方容器所在节点(即节点2)的四元组-二元组表中的映射记录如下表3所示:
表3四元组-二元组表中的部分映射记录
在快速回传TCP连接建立过程中,当第二次握手完成时,服务提供方应用容器所在节点上的Linux内核将产生BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB事件。
步骤7:当服务提供方应用容器所在节点上的Linux内核产生BPF_SOCK_OPS_ACTIVE_ESTAB LISHED_CB事件时,如果该事件对应的Socket的远程端口是提前约定的快速回传中介服务端口,则通过服务提供方应用容器所在节点上的skops程序将BPF_SOCK_OPS_ACTIVE_ESTAB LISHED_CB事件对应的Socket的BPF_SOCK_OPS_WRI TE_HDR_OPT_CB_FLAG属性设定为True。
在快速回传TCP连接建立过程中,当第三次握手完成时,服务调用方应用容器所在节点上的Linux内核将产生BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB事件。
步骤8:服务调用方应用容器所在节点(即图7的节点1)上的Linux内核将产生BPF_SOCK_OPS_PASSIVE_ESTAB LISHED_CB事件时,如果BPF_SOCK_OPS_PASSIVE_ESTAB LISHED_CB事件对应的Socket的本地IP地址是服务调用方容器IP地址,且确定本地端口是提前约定的快速回传中介服务端口,控制服务调用方容器所在节点上的skops程序在步骤1的四元组-Socket表中增加或更新一条映射记录,这条映射记录的键是由BPF_SOCK_OPS_PASSIVE_ESTAB LISHED_CB事件对应的Socket(同时也是此快速回传TCP连接的目的Socket)的本地IP地址、本地端口、远程IP地址和远程端口构成的四元组,这条映射记录的值是此次快速回传TCP连接的目的Socket,然后在步骤1的四元组-四元组表中增加或更新一条映射记录,这条映射记录的键和值都是由BPF_SOCK_OPS_PASSIVE_ESTAB LISHED_CB事件对应的Socket的本地IP地址、本地端口、远程IP地址和远程端口构成的四元组。接着将BPF_SOCK_OPS_PASSIVE_ESTAB LISHED_CB事件对应的Socket的BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG属性设置为True。
经过步骤8,服务调用方应用容器所在节点的四元组-Socket表中的映射记录如下表4所示:
表4四元组-Socket表中的部分映射记录
经过步骤8,服务调用方容器所在节点的四元组-四元组表中的映射记录如下表5所示:
表5四元组-四元组表中的部分映射记录
随后,服务提供方的Sidecar容器会将接收到的服务调用请求转发给服务提供方应用容器,然后等待服务提供方容器向其返回响应数据。
步骤9,参照上述步骤S15-S16,由服务提供方Sidecar容器接收服务提供方容器返回的服务调用响应数据,通过快速回传TCP连接(在步骤6建立或者选择的)将服务调用响应数据转发到服务调用方的Sidecar容器。
在服务提供方的Sidecar容器通过快速回传TCP连接转发服务调用响应数据的过程中,需要由服务提供方容器所在节点上的Linux内核将这些响应数据封装成数据包。
在步骤7中,已经将服务提供方Sidecar容器要使用的快速回传TCP连接的源Socket的BPF_SOCK_OPS_WRI TE_HDR_OPT_CB_FLAG属性设定为True,因此服务提供方容器所在节点上的Linux内核在封装数据包时会生成BPF_SOCK_OPS_HDR_OPT_LEN_CB事件。
其中,需要说明的是,BPF_SOCK_OPS_HDR_OPT_LEN_CB事件表示Linux内核希望skops程序告知数据包的TCP头部自定义选项的长度。
接下来,通过步骤10-步骤13对上述基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内的过程进行具体说明。
步骤10:当服务提供方应用容器所在节点上的Linux内核生成BPF_SOCK_OPS_HDR_OPT_LEN_CB事件时,如果BPF_SOCK_OPS_HDR_OPT_LEN_CB事件对应的Socket的远程端口是提前约定的快速回传中介服务端口,那么由服务提供方应用容器所在节点上的skops程序根据提前约定的TCP头部自定义选项格式(相当于上述提前约定好的格式)向Linux内核告知数据包的TCP头部自定义选项的长度。
在使用skops程序向Linux内核告知数据包的TCP头部自定义选项的长度后,Linux内核生成BPF_SOCK_OPS_WRI TE_HDR_OPT_CB事件。
需要说明的是,BPF_SOCK_OPS_WRI TE_HDR_OPT_CB事件表示Linux内核希望skops程序在其正在封装的数据包的TCP头部写入自定义选项。
步骤11:当服务提供方应用容器所在节点上的Linux内核生成BPF_SOCK_OPS_WRITE_HDR_OPT_CB事件时,如果BPF_SOCK_OPS_WRI TE_HDR_OPT_CB事件对应的Socket的远程端口是提前约定的快速回传中介服务端口,那么控制服务提供方应用容器所在节点上的skops程序将由BPF_SOCK_OPS_WRI TE_HDR_OPT_CB事件对应的Socket的本地IP地址、本地端口、远程IP地址和远程端口组成的四元组确定为键,从步骤1所示的四元组-二元组表中查找出这个键所对应的二元组,然后按照提前约定的格式将包含在上述二元组中的服务调用的源IP地址和源端口都写入数据包的TCP头部的自定义选项中。
在步骤11之前,服务提供方应用容器所在节点的四元组-二元组表中的映射记录如下表6所示:
表6四元组-二元组表中的部分映射记录
进一步的,BPF_SOCK_OPS_WRI TE_HDR_OPT_CB事件对应的Socket为快速回传TCP连接的源Socket,由BPF_SOCK_OPS_WRI TE_HDR_OPT_CB事件对应的Socket的本地IP地址、本地端口、远程IP地址和远程端口组成的四元组为(10.11.9.200,23456,10.11.9.100,9090),把这一四元组确定为键,从服务提供方应用容器所在节点的四元组-二元组表中查到出与此键对应的二元组为(10.11.9.100,12345)。可以确定二元组(10.11.9.100,12345)是由该实施例中的服务调用的源IP地址和源端口号组成的。
在本实施例中,当通过快速回传TCP连接转发的服务调用响应数据的数据包到达服务调用方所在节点后,由服务调用方应用容器所在节点上的Linux内核解析数据包。
需要说明的是,在步骤8中已经将要使用的快速回传TCP连接的目的Socket的BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG属性设定为True,因此Linux内核在解析数据包时如果遇到了不能识别的TCP头部选项,会生成BPF_SOCK_OPS_PARSE_HDR_OPT_CB事件。
步骤12:当服务调用方应用容器所在节点上的Linux内核生成BPF_SOCK_OPS_PARSE_HDR_OPT_CB事件发生时,如果BPF_SOCK_OPS_PARSE_HDR_OPT_CB事件对应的Socket的本地IP地址是应用容器IP地址,且本地端口是提前约定的快速回传中介服务端口,则服务调用方应用容器所在节点上的skops程序根据提前约定的TCP头部自定义选项格式从服务调用响应数据包的TCP头部自定义选项中提取出服务调用的源IP地址和源端口。
然后在步骤1所示的四元组-四元组表中增加或更新一条映射记录,这条映射记录的键是由BPF_SOCK_OPS_PARSE_HDR_OPT_CB事件对应的Socket(同时也是步骤S14中建立或选择的快速回传TCP连接的目的Socket)的本地IP地址、本地端口、远程IP地址和远程端口组成的四元组,这条映射记录的值是由提取出的服务调用的源IP地址、源端口以及内部网关的IP地址、服务端口构成的四元组。
可以理解的是,对于在步骤1中的四元组-四元组表中增加或更新一条映射记录的过程,相当于上述根据第一键值对应关系在第一对应关系组中增加新的键值对应关系,得到第二对应关系组或者根据所述第一键值对应关系更新所述第一对应关系组中已有的键值对应关系,得到第三对应关系组的过程。
在本实施例中,服务调用方应用容器所在节点的四元组-四元组表中的映射记录如下表7所示:
表7四元组-四元组表中的部分映射记录
步骤13,参照上述步骤S17,服务调用方所在节点的Linux内核从接收到的数据包解析出服务调用响应数据,在准备将解析出的服务调用响应数据放入快速回传TCP连接(步骤6中建立或选择的)的目的Socket的接收缓冲区中时,由skb程序提取出快速回传TCP连接的目的Socket所对应的Linux内核sk_buff数据结构中的本地IP地址、本地端口、远程IP地址和远程端口的值,然后将由本地IP地址、本地端口、远程IP地址和远程端口构成的四元组作为键,从步骤1所示的四元组-四元组表中查找出这个键所对应的四元组;接着分别将指向上述Linux内核sk_buff数据结构的指针、指向步骤1所示的四元组-Socket表的指针、指向上述查找出的四元组的指针和整型变量1分别确定为用来调用eBPF辅助函数bpf_sk_redi rect_hash的第1、2、3、4个参数。
其中,eBPF辅助函数bpf_sk_red i rect_hash的功能说明如下:
通过将第3个参数确定为键,在第2个参数所指向的BPF_MAP_TYPE_SOCKHASH类型的eBPF映射表中找到第3个参数所对应的Socket(后文称之为目的Socket),然后将准备放入第1个参数所对应的Socket的接收缓冲区的数据重定向到从上述目的Socket的发送缓冲区或接收缓冲区中。
其中,如果第4个参数为1,则将准备放入第1个参数所对应的Socket的接收缓冲区的数据放入上述目的Socket的接收缓冲区中。否则将准备放入第1个参数所对应的Socket的接收缓冲区的数据放入上述目的Socket的发送缓冲区中。
根据步骤13,提取出的本地IP地址、本地端口、远程IP地址和远程端口分别为10.11.9.100、9090、10.11.9.200和23456,则构成的四元组为(10.11.9.100,9090,10.11.9.200,23456)。
在本实施例中,服务调用方应用容器所在节点的四元组-四元组表中的映射记录如下表8所示:
表8四元组-四元组表中的部分映射记录
因此,将四元组(10.11.9.100,9090,10.11.9.200,23456)确定为键,从服务调用方应用容器所在节点的四元组-四元组表中查找出的四元组为(10.11.9.100,12345,10.11.9.30,8080)。
此时,在本实施例中,服务调用方应用容器所在节点的四元组-Socket表中的映射记录如下表9所示:
表9四元组-Socket表中的部分映射记录
因此,将四元组(10.11.9.100,12345,10.11.9.30,8080)确定为键,从服务调用方应用容器所在节点的四元组-Socket表中查找出的Socket为服务调用的源Socket。
根据上述eBPF辅助函数bpf_sk_red i rect_hash的功能定义,此时调用eBPF辅助函数bpf_sk_red i rect_hash可以将解析出的准备放入快速回传TCP连接的目的Socket的接收缓冲区中的服务调用响应数据重定向到服务调用的源Socket的接收缓冲区中。
步骤14,参照上述步骤S18,由服务提供方的Sidecar容器通过快速回传TCP连接(在步骤6中建立或选择的)将接收到的服务调用响应数据转发完成后,将此次使用的快速回传TCP连接在快速回传TCP连接池中的状态设置为未占用。
可选的,在一个实施例中,对于上述按照提前约定的格式在目标服务数据对应的数据包中写入第一源地址信息和第一源端口信息的过程,还可以结合以下步骤进行说明:
在当服务提供方应用容器所在节点上的Linux内核产生BPF_SOCK_OPS_ACTIVE_ESTAB LISHED_CB事件时,服务提供方应用容器所在节点将BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB事件对应的Socket的BPF_SOCK_OPS_WRI TE_HDR_OPT_CB_FLAG属性设定为True。
当服务提供方应用容器所在节点上的Linux内核生成BPF_SOCK_OPS_HDR_OPT_LEN_CB事件时,服务提供方应用容器所在节点根据提前约定的TCP头部自定义选项格式向Linux内核告知数据包的TCP头部自定义选项的长度。
当服务提供方应用容器所在节点上的Linux内核生成BPF_SOCK_OPS_WRI TE_HDR_OPT_CB事件时,服务提供方应用容器所在节点将由BPF_SOCK_OPS_WRI TE_HDR_OPT_CB事件对应的Socket的本地IP地址、本地端口、远程IP地址和远程端口组成的四元组作为键,从四元组-二元组表中查找出此四元组所对应的二元组,以及从二元组中确定服务调用的源IP地址和源端口,并按照提前约定的格式将上述服务调用的源IP地址和源端口写入数据包的TCP头部的自定义选项中。
在本实施例中还提供了目标服务数据的传输系统,该系统用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的设备较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图8是根据本申请实施例的目标服务数据的传输系统的结构框图。如图8所示,目标服务数据的传输系统包括:
第一应用容器82,第二应用容器84,内部网关86;
其中,所述内部网关,用于接收所述第一应用容器发送的初始服务调用请求;通过在所述初始服务调用请求对应的数据包内增加进行服务调用所需的第一源地址信息和第一源端口信息对所述初始服务调用请求进行改写,得到服务调用请求;将所述服务调用请求转发给所述第二应用容器;
所述第二应用容器,用于接收所述内部网关转发的服务调用请求,确定所述服务调用请求对应的目标服务数据,并使用提前约定的格式在所述目标服务数据对应的数据包中写入第一源地址信息和第一源端口信息,以及通过所述第二应用容器对应的预设连接通道将所述目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器;
可选的,上述第二应用容器还用于接收其他系统服务转发的服务调用请求,确定所述服务调用请求对应的目标服务数据,并使用提前约定的格式在所述目标服务数据对应的数据包中写入第一源地址信息和第一源端口信息,以及通过所述第二应用容器对应的预设连接通道将所述目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器。
所述第一应用容器,用于基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
通过上述系统,通过内部网关接收第一应用容器发送的初始服务调用请求,通过在所述初始服务调用请求对应的数据包内增加进行服务调用所需的第一源地址信息和第一源端口信息对所述初始服务调用请求进行改写,得到服务调用请求,并将所述服务调用请求直接转发(或者通过其他系统服务转发)给第二应用容器,以使所述第二应用容器基于对应的预设连接通道将所述服务调用请求对应的目标服务数据发送至所述第一应用容器。通过使用内部网关对初始服务调用请求进行改写,可以额外传输服务调用所需的第一源地址信息和第一源端口信息,以使第一应用容器基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内,解决了在通过无服务器架构的集群内部服务调用来传输服务数据时,集群内部服务的调用延迟较高的问题。
在一个示例性实施例中,上述第一应用容器,还用于根据提前约定的格式提取出所述目标服务数据对应的数据包中包含的所述第一源地址信息和所述第一源端口信息;根据第一键值对应关系在第一对应关系组中增加新的键值对应关系,得到第二对应关系组,并根据所述第二对应关系组将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内,其中,所述第二对应关系组用于调用预置编程接口将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内;或者,根据所述第一键值对应关系更新所述第一对应关系组中已有的键值对应关系,得到第三对应关系组,并根据所述第三对应关系组将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内,其中,所述第三对应关系组用于调用预置编程接口将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
在一个示例性实施例中,上述第一应用容器,还用于根据所述第一源地址信息和所述第一源端口信息生成第一键值对应关系,其中,所述第一键值对应关系中的键元素是通过第一地址信息、第三端口信息、第二地址信息和第二端口信息生成的,所述第一键值对应关系中的值元素是通过所述第一地址信息、第一端口信息、内部网关服务地址和所述内部网关服务地址的端口信息生成的;其中,所述第一地址信息表示所述第一源地址信息对应的第一地址的信息,所述第二地址信息表示与所述第一地址相连通的第二地址的信息,所述第三端口信息表示第三端口的信息,所述第三端口是所述第一地址对应的所有端口中的提前约定的端口,所述第二端口信息表示第二端口的信息,所述第二端口是所述第二地址对应的所有端口中的任意一个未被占用的端口,所述第一端口信息表示第一源端口信息对应的第一端口的信息。
在一个示例性实施例中,上述第二应用容器,还用于接收内部网关或其他系统服务转发的服务调用请求;确定所述服务调用请求对应的目标服务数据,并使用提前约定的格式在所述目标服务数据对应的数据包中写入第一源地址信息和第一源端口信息;通过第二应用容器对应的预设连接通道将所述目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,以使所述第一应用容器基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
在一个示例性实施例中,上述第二应用容器,还用于在确定所述第二应用容器对应的预设连接通道内存在第一回传通道的情况下,通过所述第一回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,其中,所述第一回传通道为预先建立的用于将来自所述第二应用容器的数据发送至所述第一应用容器的通道;在确定所述第二应用容器对应的预设连接通道内不存在第一回传通道的情况下,基于所述第一源地址信息建立第二回传通道,通过所述第二回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,将所述第二回传通道加入所述第二应用容器对应的预设连接通。
在一个示例性实施例中,上述第二应用容器,还用于在通过所述第一回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器的同时,将所述第一回传通道的通道状态设置为已占用;或者,在通过所述第一回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器之后,将所述第一回传通道的通道状态设置为未占用;或者,在通过所述第二回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器的同时,将所述第二回传通道的通道状态设置为已占用;或者,在通过所述第二回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器之后,将所述第二回传通道的通道状态设置为未占用。
在一个示例性实施例中,上述第二应用容器,还用于从第二应用容器的所有地址中确定出与所述第一源地址信息对应的第一地址相连通的第二地址;从与所述第二地址对应的所有端口中确定出任意一个未被占用的端口,将所述任意一个未被占用的端口确定为第二端口;从与所述第一地址对应的所有端口中确定出提前约定的端口,将所述提前约定的端口确定为第三端口;向所述第一应用容器发送连接建立请求,以使所述第一应用容器根据所述连接建立请求建立所述第一地址和所述第二地址的传输通道,其中,所述传输通道的一端与所述第三端口连接,所述传输通道的另一端与所述第二端口连接;将所述传输通道确定为所述第二回传通道。
需要说明的是,在上述内部网关将初始服务调用请求对应的数据包转发到第二应用容器或其他系统服务之前,都可以根据提前约定的格式在初始服务调用请求对应的数据包中写入服务调用的源Socket的本地IP地址和本地端口信息(即第一源地址信息和第一源端口信息)。
也就是说,除了可以在内部网关执行这一数据改写操作,对于其他任何能够修改服务调用请求数据包的位置(如第一应用容器所在节点的操作系统、第一应用容器与内部网关之间的数据传输路径上的任何可编程硬件交换机或者软件交换机、内部网关及其所在节点的操作系统),也可以执行这一数据改写操作。即在本实施例中,可以选择内部网关将服务调用的源Socket的本地IP地址和本地端口信息写入初始服务调用请求对应的数据包中。或者,也可以选择其他能够修改服务调用请求数据包的位置将服务调用的源Socket的本地IP地址和本地端口信息写入初始服务调用请求对应的数据包中。
可选的,对于服务调用的源Socket的本地IP地址和本地端口信息,可以写入初始服务调用请求对应的数据包的任何位置。在该实施例中,如果第一应用容器发起的是HTTP服务调用,从实现难度上考虑,可以将服务调用的源Socket的本地IP地址和本地端口信息写入服务调用请求数据包的HTTP请求头中来降低数据包改写的难度。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个可读存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例的方法。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-On ly Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
本申请的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,向内部网关发送初始服务调用请求;
S2,在确定所述内部网关改写所述初始服务调用请求后得到服务调用请求,且向第二应用容器发送服务调用请求的情况下,接收所述第二应用容器通过预设连接通道发送的所述服务调用请求对应的目标服务数据,其中,所述目标服务数据对应的数据包中包括第一源地址信息和第一源端口信息;
S3,基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
或者,还可以被设置为通过计算机程序执行以下步骤:
S1,通过第二应用容器接收内部网关转发的服务调用请求;
S2,确定所述服务调用请求对应的目标服务数据,并使用提前约定的格式在所述目标服务数据对应的数据包中写入第一源地址信息和第一源端口信息;
S3,通过第二应用容器对应的预设连接通道将所述目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,以使所述第一应用容器基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
或者,还可以被设置为通过计算机程序执行以下步骤:
S1,接收第一应用容器发送的初始服务调用请求;
S2,通过在所述初始服务调用请求对应的数据包内增加进行服务调用所需的第一源地址信息和第一源端口信息对所述初始服务调用请求进行改写,得到服务调用请求;
S3,将所述服务调用请求转发给第二应用容器,以使所述第二应用容器基于对应的预设连接通道将所述服务调用请求对应的目标服务数据发送至所述第一应用容器。
在一个示例性实施例中,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述电子装置还可以被设置为通过计算机程序执行上述任一个实施例中的步骤S1,S2和S3。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (11)

1.一种目标服务数据的传输方法,其特征在于,应用于第一应用容器,包括:
向内部网关发送初始服务调用请求;
在第二应用容器接收到服务调用请求的情况下,接收所述第二应用容器通过预设连接通道发送的所述服务调用请求对应的目标服务数据,其中,所述目标服务数据对应的数据包中包括第一源地址信息和第一源端口信息,所述服务调用请求为内部网关改写所述初始服务调用请求后得到的;
基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
2.根据权利要求1所述的目标服务数据的传输方法,其特征在于,基于第一源地址信息和第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内,包括:
根据提前约定的格式提取出所述目标服务数据对应的数据包中包含的所述第一源地址信息和所述第一源端口信息;
根据第一键值对应关系在第一对应关系组中增加新的键值对应关系,得到第二对应关系组,并根据所述第二对应关系组将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内;
或者,根据所述第一键值对应关系更新所述第一对应关系组中已有的键值对应关系,得到第三对应关系组,并根据所述第三对应关系组将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
3.根据权利要求1所述的目标服务数据的传输方法,其特征在于,在根据第一键值对应关系在第一对应关系组中增加新的键值对应关系,得到第二对应关系组之前,所述方法还包括:
根据所述第一源地址信息和所述第一源端口信息生成第一键值对应关系,其中,所述第一键值对应关系包含的键元素是通过第一地址信息、第三端口信息、第二地址信息和第二端口信息生成的,所述第一键值对应关系中的值元素是通过所述第一地址信息、第一端口信息、内部网关服务地址和所述内部网关服务地址的端口信息生成的;
其中,所述第一地址信息表示所述第一源地址信息对应的第一地址的信息,所述第二地址信息表示与所述第一地址相连通的第二地址的信息,所述第三端口信息表示第三端口的信息,所述第三端口是所述第一地址对应的所有端口中的提前约定的端口,所述第二端口信息表示第二端口的信息,所述第二端口是所述第二地址对应的所有端口中的任意一个未被占用的端口,所述第一端口信息表示第一源端口信息对应的第一端口的信息。
4.一种目标服务数据的传输方法,其特征在于,应用于第二应用容器,包括:
通过第二应用容器接收内部网关转发的服务调用请求;
确定所述服务调用请求对应的目标服务数据,并使用提前约定的格式在所述目标服务数据对应的数据包中写入第一源地址信息和第一源端口信息;
通过第二应用容器对应的预设连接通道将所述目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至第一应用容器,以使所述第一应用容器基于所述第一源地址信息和所述第一源端口信息将所述目标服务数据重定向至所述第一源地址信息和所述第一源端口信息对应的内存缓冲区域内。
5.根据权利要求4所述的目标服务数据的传输方法,其特征在于,通过第二应用容器对应的预设连接通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,包括:
在确定所述第二应用容器对应的预设连接通道内存在第一回传通道的情况下,通过所述第一回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,其中,所述第一回传通道为预先建立的用于将来自所述第二应用容器的数据发送至所述第一应用容器的通道;
在确定所述第二应用容器对应的预设连接通道内不存在第一回传通道的情况下,基于所述第一源地址信息建立第二回传通道,通过所述第二回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器,将所述第二回传通道加入所述第二应用容器对应的预设连接通道。
6.根据权利要求5所述的目标服务数据的传输方法,其特征在于,所述方法还包括:
在通过所述第一回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器的同时,将所述第一回传通道的通道状态设置为已占用;
或者,在通过所述第一回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器之后,将所述第一回传通道的通道状态设置为未占用;
或者,在通过所述第二回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器的同时,将所述第二回传通道的通道状态设置为已占用;
或者,在通过所述第二回传通道将所述服务调用请求对应的目标服务数据,所述第一源地址信息和所述第一源端口信息共同发送至所述第一应用容器之后,将所述第二回传通道的通道状态设置为未占用。
7.根据权利要求5所述的目标服务数据的传输方法,其特征在于,基于所述第一源地址信息建立第二回传通道,包括:
从第二应用容器的所有地址中确定出与所述第一源地址信息对应的第一地址相连通的第二地址;
从与所述第二地址对应的所有端口中确定出任意一个未被占用的端口,将所述任意一个未被占用的端口确定为第二端口;
从与所述第一地址对应的所有端口中确定出提前约定的端口,将所述提前约定的端口确定为第三端口;
向所述第一应用容器发送连接建立请求,以使所述第一应用容器根据所述连接建立请求建立所述第一地址和所述第二地址的传输通道,其中,所述传输通道的一端与所述第三端口连接,所述传输通道的另一端与所述第二端口连接;
将所述传输通道确定为所述第二回传通道。
8.一种目标服务数据的传输方法,其特征在于,应用于内部网关,包括:
接收第一应用容器发送的初始服务调用请求;
通过在所述初始服务调用请求对应的数据包内增加进行服务调用所需的第一源地址信息和第一源端口信息对所述初始服务调用请求进行改写,得到服务调用请求;
将所述服务调用请求转发给第二应用容器,以使所述第二应用容器基于对应的预设连接通道将所述服务调用请求对应的目标服务数据发送至所述第一应用容器,其中,所述目标服务数据对应的数据包中包括第一源地址信息和第一源端口信息。
9.一种计算机可读的存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行所述权利要求1至8任一项中所述的方法。
10.一种电子装置,其特征在于,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至8任一项中所述的方法。
11.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8任一项中所述的方法。
CN202410397185.8A 2024-04-02 2024-04-02 目标服务数据的传输方法、系统、存储介质及电子装置 Pending CN118301214A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410397185.8A CN118301214A (zh) 2024-04-02 2024-04-02 目标服务数据的传输方法、系统、存储介质及电子装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410397185.8A CN118301214A (zh) 2024-04-02 2024-04-02 目标服务数据的传输方法、系统、存储介质及电子装置

Publications (1)

Publication Number Publication Date
CN118301214A true CN118301214A (zh) 2024-07-05

Family

ID=91673833

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410397185.8A Pending CN118301214A (zh) 2024-04-02 2024-04-02 目标服务数据的传输方法、系统、存储介质及电子装置

Country Status (1)

Country Link
CN (1) CN118301214A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118972476A (zh) * 2024-07-16 2024-11-15 网易(杭州)网络有限公司 一种报文处理方法、装置、计算机设备及存储介质
CN119892721A (zh) * 2024-12-12 2025-04-25 深圳开鸿数字产业发展有限公司 一种基于超级物模型的软总线多径传输控制方法及系统
CN120128592A (zh) * 2025-03-17 2025-06-10 紫金山实验室 服务调用请求传输方法、设备、存储介质和程序产品

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118972476A (zh) * 2024-07-16 2024-11-15 网易(杭州)网络有限公司 一种报文处理方法、装置、计算机设备及存储介质
CN119892721A (zh) * 2024-12-12 2025-04-25 深圳开鸿数字产业发展有限公司 一种基于超级物模型的软总线多径传输控制方法及系统
CN120128592A (zh) * 2025-03-17 2025-06-10 紫金山实验室 服务调用请求传输方法、设备、存储介质和程序产品

Similar Documents

Publication Publication Date Title
CN116405461B (zh) 一种数据处理方法、网元设备以及可读存储介质
US11277313B2 (en) Data transmission method and corresponding device
EP4009593B1 (en) Data transmission method and apparatus, network card and storage medium
CN118301214A (zh) 目标服务数据的传输方法、系统、存储介质及电子装置
US8261339B2 (en) Dynamic network tunnel endpoint selection
US20150295885A1 (en) Identifying End-Stations on Private Networks
KR101938623B1 (ko) 오픈 플로우 통신 방법, 시스템, 제어기 및 서비스 게이트웨이
CN109842559B (zh) 一种网络通信方法及系统
CN111786867B (zh) 一种数据传输方法及服务器
CN112491944A (zh) 边缘应用发现方法及装置、边缘应用服务支持方法及装置
CN111107672B (zh) 一种建立多路径连接的子流的方法、装置和系统
US20240259316A1 (en) Network load balancing method and apparatus, electronic device, medium, and program product
CN113296859A (zh) 页面加载方法及装置、存储介质、电子装置
WO2021008591A1 (zh) 数据传输方法、装置及系统
CN116074365A (zh) 建立连接的方法、装置、存储介质及电子装置
CN116546105A (zh) 数据传输方法、装置、设备和存储介质
CN115834684A (zh) 数据处理方法、云桌面系统、设备及存储介质
CN112887229A (zh) 一种会话信息同步方法及装置
CN111786869B (zh) 一种服务器之间的数据传输方法及服务器
CN111786868B (zh) 服务器之间的数据传输方法及strongswan服务器
CN112838983B (zh) 数据传输方法、系统、设备、代理服务器及存储介质
JP2025519927A (ja) 通信方法および装置
EP4331211B1 (en) Consistent hashing for communication devices
CN104780201A (zh) 一种ipvs集群中的数据包处理方法及装置
CN103746768A (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