CN116208558A - 微服务架构中的流量处理方法、装置、介质和计算设备 - Google Patents
微服务架构中的流量处理方法、装置、介质和计算设备 Download PDFInfo
- Publication number
- CN116208558A CN116208558A CN202310200443.4A CN202310200443A CN116208558A CN 116208558 A CN116208558 A CN 116208558A CN 202310200443 A CN202310200443 A CN 202310200443A CN 116208558 A CN116208558 A CN 116208558A
- Authority
- CN
- China
- Prior art keywords
- script
- application layer
- layer filter
- target application
- processing
- 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
Links
- 238000003672 processing method Methods 0.000 title description 12
- 238000013515 script Methods 0.000 claims abstract description 218
- 238000012545 processing Methods 0.000 claims abstract description 192
- 230000006870 function Effects 0.000 claims abstract description 81
- 238000000034 method Methods 0.000 claims abstract description 74
- 230000004044 response Effects 0.000 claims abstract description 69
- 238000005111 flow chemistry technique Methods 0.000 claims abstract description 24
- 230000008569 process Effects 0.000 claims description 32
- 238000004590 computer program Methods 0.000 claims description 3
- 239000003795 chemical substances by application Substances 0.000 description 95
- 230000007246 mechanism Effects 0.000 description 14
- 238000011144 upstream manufacturing Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000011423 initialization method Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 238000007639 printing Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000005669 field effect Effects 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000004984 smart glass Substances 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/12—Avoiding congestion; Recovering from congestion
- H04L47/125—Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering
-
- 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/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
- H04L69/329—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明的实施方式提供了一种微服务架构中的流量处理方法、装置、介质和计算设备,应用于微服务架构中作为数据面的Envoy代理;Envoy代理包括基于C++语言的目标应用层过滤器,目标应用层过滤器中嵌入了基于Lua语言的虚拟机,虚拟机中加载了基于Lua语言的SDK和基于Lua语言的脚本;该方法包括:响应于获取到HTTP报文,在目标应用层过滤器为用于对HTTP报文进行处理的应用层过滤器的情况下,执行目标应用层过滤器,由目标应用层过滤器调用脚本,以在虚拟机中执行脚本,由脚本通过调用SDK中的配置获取逻辑,获取与脚本对应的配置信息,并按照配置信息,对HTTP报文进行与脚本的功能对应的处理。本发明支持对Envoy代理中的Lua插件的动态扩展和动态配置。
Description
技术领域
本发明的实施方式涉及微服务技术领域,更具体地,本发明的实施方式涉及一种微服务架构中的流量处理方法、装置、介质和计算设备。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
在互联网体系下,出于安全、性能、负载均衡等需求的考虑,凡是需要对外暴露的系统几乎都需要网络代理。较早出现的HAProxy、Nginx等代理至今仍在流行,而在进入微服务时代之后,功能更丰富、管控能力更强的API(Application Programming Interface,应用程序接口)网关作为流量代理,成为了流量入口必备组件,负责处理流量、提供流量治理能力。
两个相互独立的局域网之间通过路由进行通信,中间的路由也就被称为网关。一个应用系统如果需要被其他系统调用,就需要对外暴露API;一个API代表着一个功能点。如果在互相通信的两个系统中间增加一个中介者用来协助API的调用,那么这个中介者就是API网关。通常,API网关可以部署在两个系统之间,也可以部署在客户端与服务端之间;API网关作为系统的唯一入口,意味着进入系统的所有流量都需要经过API网关。
微服务架构中的API网关可以封装系统内部架构,对外提供系统内部服务访问的统一入口,一般具备负载均衡、服务熔断、限流、统一认证、审计等功能。因此,在微服务架构中具体如何实现API网关,以通过API网关对进入系统的流量进行与特定功能对应的处理,也就成为了备受关注的问题。
发明内容
在本上下文中,本发明的实施方式期望提供一种微服务架构中的流量处理方法、装置、介质和计算设备。
在本发明实施方式的第一方面中,提供了一种微服务架构中的流量处理方法,应用于微服务架构中作为数据面的Envoy代理;所述Envoy代理包括基于C++语言的目标应用层过滤器,所述目标应用层过滤器中嵌入了基于Lua语言的虚拟机,所述虚拟机中加载了基于Lua语言的SDK和基于Lua语言的脚本;
所述方法包括:
响应于获取到HTTP报文,在所述目标应用层过滤器为用于对所述HTTP报文进行处理的应用层过滤器的情况下,执行所述目标应用层过滤器,由所述目标应用层过滤器调用所述脚本,以在所述虚拟机中执行所述脚本,由所述脚本通过调用所述SDK中的配置获取逻辑,获取与所述脚本对应的配置信息,并按照所述配置信息,对所述HTTP报文进行与所述脚本的功能对应的处理。
在本发明实施方式的第二方面中,提供了一种微服务架构中的流量处理装置,应用于微服务架构中作为数据面的Envoy代理;所述Envoy代理包括基于C++语言的目标应用层过滤器,所述目标应用层过滤器中嵌入了基于Lua语言的虚拟机,所述虚拟机中加载了基于Lua语言的SDK和基于Lua语言的脚本;
所述装置包括:
处理模块,用于响应于获取到HTTP报文,在所述目标应用层过滤器为用于对所述HTTP报文进行处理的应用层过滤器的情况下,执行所述目标应用层过滤器,由所述目标应用层过滤器调用所述脚本,以在所述虚拟机中执行所述脚本,由所述脚本通过调用所述SDK中的配置获取逻辑,获取与所述脚本对应的配置信息,并按照所述配置信息,对所述HTTP报文进行与所述脚本的功能对应的处理。
在本发明实施方式的第三方面中,提供了一种介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一微服务架构中的流量处理方法。
在本发明实施方式的第四方面中,提供了一种计算设备,包括:
处理器;
用于存储处理器可执行程序的存储器;
其中,所述处理器通过运行所述可执行程序以实现上述任一微服务架构中的流量处理方法。
根据本发明的实施方式,Envoy代理中可以包含基于C++语言的目标应用层过滤器;该目标应用层过滤器中可以嵌入基于Lua语言的虚拟机,使得该目标应用层过滤器支持Lua语言;该虚拟机中可以加载基于Lua语言的SDK,以及由用户根据需要在Envoy代理中扩展出的功能,基于Lua语言编写的脚本;此时,该目标应用层过滤器可以作为该Envoy代理中扩展出的Lua插件。该Envoy代理可以响应于获取到需要处理的流量中的HTTP报文,在该目标应用层过滤器为用于对该HTTP报文进行处理的应用层过滤器的情况下,执行该目标应用层过滤器,由该目标应用层过滤器调用该脚本,以在该虚拟机中执行该脚本,由该脚本调用该SDK中的配置获取逻辑,获取与该脚本对应的配置信息,并按照该配置信息,对该HTTP报文进行与该脚本所要实现的功能对应的处理。
采用上述方式,一方面,可以使用户基于Lua语言编写脚本,并由基于C++语言的、嵌入了基于Lua语言的虚拟机的应用层过滤器在该虚拟机中执行该脚本,以将该应用层过滤器转变成Lua插件,而不需要对该应用层过滤器本身的、基于C++语言的代码进行更改,因此可以支持对Lua插件的动态扩展。另一方面,在该应用层过滤器中嵌入的基于Lua语言的虚拟机中加载了基于Lua语言的、提供配置获取逻辑的SDK,使得在该虚拟机中执行该脚本时,可以由该脚本调用该SDK中的配置获取逻辑,获取与该脚本对应的配置信息,由此实现了对已经加载到该虚拟机中的该脚本的配置信息进行更改,因此可以支持对Lua插件的动态配置。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
图1示意性地示出了根据本发明实施方式的一种微服务架构中的流量处理系统的示意图;
图2示意性地示出了根据本发明实施方式的一种微服务架构中的流量处理方法的流程图;
图3示意性地示出了根据本发明实施方式的另一种微服务架构中的流量处理方法的流程图;
图4示意性地示出了根据本发明实施方式的一种微服务架构中的数据初始化方法的流程图;
图5示意性地示出了根据本发明实施方式的另一种微服务架构中的流量处理方法的流程图;
图6示意性地示出了根据本发明实施方式的另一种微服务架构中的流量处理方法的流程图;
图7示意性地示出了根据本发明实施方式的另一种微服务架构中的流量处理方法的流程图;
图8示意性地示出了根据本发明实施方式的一种介质的示意图;
图9示意性地示出了根据本发明实施方式的一种微服务架构中的流量处理装置的框图;
图10示意性地示出了根据本发明实施方式的一种计算设备的示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本发明更加透彻和完整,并且能够将本发明的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本发明可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施方式,提出了一种微服务架构中的流量处理方法、装置、介质和计算设备。
在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
发明概述
Envoy代理因为其优异的性能、可扩展性、可观察性等优势,成为了大多数微服务架构中的数据面选型。其中,数据面通常指真正负责处理流量、提供流量治理能力的组件;与之相应地,在微服务架构中通常由控制面负责给数据面下发服务、路由、插件等的相关信息。在这种情况下,可以基于Envoy代理实现API网关。
Envoy代理作为微服务架构中的数据面,可以承接微服务集群中东西向的流量(即集群内服务与服务之间的流量)和南北向的流量(即集群内与集群外服务之间的流量),实现微服务集群的全流量接管,并在此基础上提供丰富的多协议代理能力、流量治理能力以及可观测能力。Envoy代理除了流量代理所需的基本功能外,还实现了很多流量代理所需的高级功能,例如:高级负载均衡、服务熔断、限流等。
基于Envoy代理实现的API网关已经具备了较为丰富的功能,可以满足大多数应用或者业务的需求。然而,在API网关的实际应用场景下,某些应用或者业务会根据自身的需求扩展出新的功能,例如对HTTP请求报文的报文头(header)进行一些简单的处理,或者对接自身的可观测性平台等等,因此通常要求API网关具有可扩展能力,以支持应用或者业务根据自身的需求在API网关上扩展相应的功能。
需要说明的是,对于基于Envoy代理实现的API网关而言,其可扩展能力依赖于Envoy代理提供的可扩展能力。
Envoy代理基于C++语言编写而成,以无侵入的Sidecar模式部署。Envoy代理提供的功能将包括:L3/L4(OSI模型的中的第三层/第四层,即网络层/传输层)代理、L7(OSI模型的中的第七层,即应用层)代理、顶级的HTTP(Hyper Text Transfer Protocol,超文本传输协议)2.0支持、gRPC支持、服务发现、健康检查、高级负载均衡、前端/边缘代理、最佳的可观察性和xDS动态配置等。
与Envoy代理相关的概念包括主机(Host)、下游(Downstream)、上游(Upstream)、集群(Cluster)、运行时配置、监听器(Listener)、监听器过滤器(Listener filter)等。
其中,主机是能够进行网络通信的实体,例如:在终端设备或者服务器等上的应用程序。下游主机向Envoy代理发送HTTP请求报文,并通过Envoy代理获得相应的HTTP响应报文。上游主机通过Envoy代理获得HTTP请求报文,并向Envoy代理返回相应的HTTP响应报文。集群是Envoy代理连接到的一组逻辑上相似的上游主机;Envoy代理通过服务发现来发现集群中的成员。运行时配置是与Envoy代理一起部署的带外实时配置系统,可以在无需重启Envoy代理或者更改Envoy代理主配置的情况下,实现部分配置的更改。监听器是命名网络地址(例如,端口、UNIX Domain Socket等);Envoy代理暴露一个或者多个监听器给下游主机连接。监听器过滤器是由监听器使用来处理流量的元数据,用于在不更改Envoy代理的核心功能的情况下,在Envoy代理中添加更多的集成功能。
对于监听器而言,其核心是过滤器链(Filter Chain)。过滤器链中的每个过滤器都能够控制流量的处理流程,也即能够控制具体如何对流量中的报文进行处理。过滤器链中的过滤器分为网络过滤器(Network Filters)和HTTP过滤器(HTTP Filters)。
其中,网络过滤器也被称为L3/L4过滤器,工作在网络层/传输层,是Envoy代理中的流量处理的核心,处理的是原始字节,分为Read、Write和Read/Write三类处理。HTTP过滤器也被称为L7过滤器,工作在应用层,由特殊的网络过滤器(HTTP Connection Manager)管理,专门处理HTTP1/HTTP2/gRPC报文,它将原始字节转换成HTTP格式,从而可以对HTTP协议进行精确控制。
以HTTP报文为例,HTTP Connection Manager在完成对HTTP报文数据解析之后,会依次调用HTTP Filters提供的接口,对解析得到的HTTP数据进行进一步处理,其中简单的处理如替换header,复杂的处理如限流、错误注入、缓存等。
Envoy代理丰富而强大的功能很多都是依赖过滤器来实现的。在大部分情况下,在对Envoy代理进行扩展时,也是通过扩展过滤器来实现的。
以HTTP过滤器为例,用户可以根据需要在Envoy代理中扩展出的一种功能,在Envoy代理中扩展出一个HTTP过滤器,以在Envoy代理中实现该功能。
xDS是一个关键概念,它是一类发现服务的统称,主要包括:CDS(ClusterDiscovery Service),用于动态发现上游集群信息;EDS(Endpoint Discovery Service),用于动态发现服务端点;SDS(Secret Discovery Service),用于动态发现证书;RDS(RouteDiscovery Service)用于动态发现路由配置;LDS(Listener Discovery Service),用于动态发现监听器。Envoy代理通过xDS协议与控制面之间实现配置信息的交换。
需要说明的是,虽然过滤器本身并没有专门的xDS服务来发现配置,但是过滤器的配置信息通常可以嵌入在通过LDS、RDS和CDS发现的配置信息中,因此也可以将通过xDS协议更改过滤器的配置信息。
Envoy代理在处理流量时,具体会在获取到该流量中的报文后,先为该报文确定一条过滤器链,以通过该过滤器链中的各L3/L4/L7过滤器对该报文进行处理,再将处理后的该报文路由到指定的集群,并通过负载均衡获取一个该集群中的地址,以将处理后的报文转发到该地址。
在Envoy代理中,可以通过扩展HTTP过滤器,实现对Envoy代理的功能扩展,而一个HTTP过滤器可以被视为一个插件。也即,Envoy代理对外提供了插件扩展机制,使得用户可以通过编写与插件对应的代码,并将该插件添加到Envoy代理中,在Envoy代理中扩展出与该代码对应的功能。
相关技术中,Envoy代理提供了以下两种插件扩展机制:原生C++插件扩展机制,以及社区Lua插件扩展机制。
由于Envoy代理是基于C++语言编写而成的,也就意味着Envoy代理中的HTTP过滤器也应当是基于C++语言编写而成的。因此,在Envoy代理中扩展插件时,具体可以由用户直接编写与作为原生C++插件的HTTP过滤器对应的、基于C++语言的代码,并将该原生C++插件添加到Envoy代理中。这种插件扩展机制即为原生C++插件扩展机制。
为了将原生C++插件添加到Envoy代理中,需要在将与原生C++插件对应的代码添加到Envoy代理的原始代码中后,重新对Envoy代理的更改后的代码进行编译,再完成Envoy代理的部署,因此原生C++插件扩展机制不支持插件的动态扩展。但是,原生C++插件扩展机制支持通过xDS协议对插件进行动态配置。此外,原生C++插件扩展机制还要求用户具备C++语言的开发能力。
在实际应用中,Envoy代理中可以包含支持Lua语言的HTTP过滤器。该HTTP过滤器可以加载并执行基于Lua语言的脚本,由此该HTTP过滤器也就从原生C++插件转变成了Lua插件。因此,在Envoy代理中扩展插件时,具体还可以由用户编写基于Lua语言的脚本,并由Envoy代理中支持Lua语言的HTTP过滤器加载并执行该脚本。这种插件扩展机制即为社区Lua插件扩展机制。
社区Lua插件扩展机制使得用户可以基于Lua语言开发插件。并且,社区Lua插件扩展机制在本质上不需要对HTTP过滤器本身的、基于C++语言的代码进行更改,因此支持插件的动态扩展,即可以在Envoy代理的运行过程中进行插件扩展。但是,在基于Lua语言的脚本中,除了逻辑之外,还包括一些配置信息,由于在将该脚本加载到支持Lua语言的HTTP过滤器中后,只能在该HTTP过滤器中执行该脚本,而无法再对该脚本的配置信息进行更改,导致社区Lua插件扩展机制不支持通过xDS协议对插件进行动态配置。
本发明提出了一种涉及微服务架构中的流量处理的技术方案,支持由微服务架构中作为数据面的Envoy代理通过Lua插件进行流量处理,并且支持对该Envoy代理中的Lua插件的动态扩展和动态配置。
在上述技术方案中,Envoy代理中可以包含基于C++语言的目标应用层过滤器;该目标应用层过滤器中可以嵌入基于Lua语言的虚拟机,使得该目标应用层过滤器支持Lua语言;该虚拟机中可以加载基于Lua语言的SDK,以及由用户根据需要在Envoy代理中扩展出的功能,基于Lua语言编写的脚本;此时,该目标应用层过滤器可以作为该Envoy代理中扩展出的Lua插件。该Envoy代理可以响应于获取到需要处理的流量中的HTTP报文,在该目标应用层过滤器为用于对该HTTP报文进行处理的应用层过滤器的情况下,执行该目标应用层过滤器,由该目标应用层过滤器调用该脚本,以在该虚拟机中执行该脚本,由该脚本调用该SDK中的配置获取逻辑,获取与该脚本对应的配置信息,并按照该配置信息,对该HTTP报文进行与该脚本所要实现的功能对应的处理。
采用上述方式,一方面,可以使用户基于Lua语言编写脚本,并由基于C++语言的、嵌入了基于Lua语言的虚拟机的应用层过滤器在该虚拟机中执行该脚本,以将该应用层过滤器转变成Lua插件,而不需要对该应用层过滤器本身的、基于C++语言的代码进行更改,因此可以支持对Lua插件的动态扩展。另一方面,在该应用层过滤器中嵌入的基于Lua语言的虚拟机中加载了基于Lua语言的、提供配置获取逻辑的SDK,使得在该虚拟机中执行该脚本时,可以由该脚本调用该SDK中的配置获取逻辑,获取与该脚本对应的配置信息,由此实现了对已经加载到该虚拟机中的该脚本的配置信息进行更改,因此可以支持对Lua插件的动态配置。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。
应用场景总览
参考图1,图1示意性地示出了根据本发明实施方式的一种微服务架构中的流量处理系统的示意图。
在实际应用场景下,上述微服务架构中的流量处理系统可以包括服务端,以及通过任一类型的有线或者无线网络接入该服务端的至少一个客户端(例如:客户端1-N)。该微服务架构中的流量处理系统还可以包括在客户端与服务端之间部署的Envoy代理,该Envoy代理可以用于实现API网关。
上述服务端可以部署在包含一台独立的物理主机的服务器或者由多台互相独立的物理主机构成的服务器集群上;或者,上述服务端可以是基于云计算服务搭建的服务端。
上述客户端可以对应于智能手机、平板电脑、笔记本电脑、PC(PersonalComputer,个人电脑)、掌上电脑(PDAs,Personal Digital Assistants)、可穿戴设备(例如:智能眼镜、智能手表等)、智能车载设备或游戏机等终端设备。
对于Envoy代理而言,各客户端可以作为下游主机,用于部署服务端的各物理主机或者各云主机可以作为上游主机。
用户可以在Envoy代理中扩展Lua插件,从而使Envoy代理可以通过该Lua插件进行流量处理。
在具体实现时,上述Envoy代理可以作为微服务架构中的数据面,包含至少一个基于C++语言的应用层过滤器,这至少一个应用层过滤器中可以进一步包含至少一个支持Lua语言的应用层过滤器。以基于C++语言的、支持Lua语言的任一应用层过滤器(可称之为目标应用层过滤器)为例,该目标应用层过滤器中可以嵌入基于Lua语言的虚拟机,该虚拟机中可以加载基于Lua语言的SDK(Software Development Kit,软件开发工具包),以及由用户根据需要在Envoy代理中扩展出的功能,基于Lua语言编写的脚本。在这种情况下,该目标应用层过滤器可以在该虚拟机中执行该脚本和调用该SDK,因此该目标应用层过滤器可以作为该Envoy代理中扩展出的Lua插件。
上述Envoy代理可以响应于获取到需要处理的流量中的HTTP报文,在上述目标应用层过滤器为用于对该HTTP报文进行处理的应用层过滤器的情况下,执行该目标应用层过滤器,以由该目标应用层过滤器调用上述脚本。具体地,该目标应用层过滤器可以在上述虚拟机中执行该脚本,以由该脚本调用上述SDK中的配置获取逻辑,获取与该脚本对应的配置信息,并按照该配置信息,对该HTTP报文进行与该脚本所要实现的功能对应的处理。
示例性方法
下面结合图1的应用场景,参考图2至图7来描述根据本发明示例性实施方式的用于微服务架构中的流量处理的方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。
参考图2,图2示意性地示出了根据本发明实施方式的一种微服务架构中的流量处理方法的流程图。
上述微服务架构中的流量处理方法可以应用于微服务架构中的Envoy代理。其中,该Envoy代理可以作为该微服务架构中的数据面。
在本实施例中,上述Envoy代理中可以包含至少一个基于C++语言的应用层过滤器,这至少一个应用层过滤器中可以进一步包含至少一个支持Lua语言的应用层过滤器。以基于C++语言的、支持Lua语言的任一应用层过滤器(可称之为目标应用层过滤器)为例,该目标应用层过滤器中可以嵌入基于Lua语言的虚拟机,该虚拟机中可以加载基于Lua语言的SDK和基于Lua语言的脚本。其中,该脚本具体可以是由用户根据需要在Envoy代理中扩展出的功能,基于Lua语言编写的脚本。在这种情况下,该目标应用层过滤器可以在该虚拟机中执行该脚本和调用该SDK,因此该目标应用层过滤器可以作为该Envoy代理中扩展出的Lua插件。
在实际应用中,服务网格提供了一种一致的方式来连接、保护和观察微服务,而Istio是服务网格的一个开源实现。因此,一些实施方式中,上述微服务架构可以包括Istio服务网格。
上述微服务架构中的流量处理方法可以包括以下步骤:
步骤201:响应于获取到HTTP报文,在所述目标应用层过滤器为用于对所述HTTP报文进行处理的应用层过滤器的情况下,执行所述目标应用层过滤器,由所述目标应用层过滤器调用所述脚本,以在所述虚拟机中执行所述脚本,由所述脚本通过调用所述SDK中的配置获取逻辑,获取与所述脚本对应的配置信息,并按照所述配置信息,对所述HTTP报文进行与所述脚本的功能对应的处理。
在本实施例中,上述Envoy代理可以响应于获取到需要处理的流量中的HTTP报文,先确定上述目标应用层过滤器是否为用于对该HTTP报文进行处理的应用层过滤器。
在上述目标应用层过滤器为用于对上述HTTP报文进行处理的应用层过滤器的情况下,上述Envoy代理可以执行该目标应用层过滤器,以由该目标应用层过滤器调用上述脚本。具体地,该目标应用层过滤器可以在上述虚拟机中执行该脚本,以由该脚本调用上述SDK中的配置获取逻辑,获取与该脚本对应的配置信息,并按照该配置信息,对该HTTP报文进行处理。
其中,上述SDK中的配置获取逻辑,可以以API(Application ProgrammingInterface,应用程序接口)的方式,提供给上述脚本以供其调用。
需要说明的是,对上述HTTP报文所进行的处理,即为与上述脚本所要实现的功能对应的处理。例如,假设该脚本所要实现的功能为限流,则与该脚本对应的配置信息可以是限流阈值,而对该HTTP报文所进行的处理可以是将根据该限流阈值对该HTTP报文进行限流。
在实际应用中,可以仅针对同一流量中的首个HTTP报文,先调用上述SDK中的配置获取逻辑以获取与上述脚本对应的配置信息,再按照该配置信息对该HTTP报文进行处理。与之相应地,针对该流量中的后续所有HTTP报文,在该配置信息未发生变化的情况下,都可以直接按照该配置信息对这些HTTP报文进行处理。但是,如果该配置信息发生了变化,则可以重新调用上述SDK中的配置获取逻辑以获取与上述脚本对应的配置信息,再按照该配置信息对新获取到的HTTP报文进行处理。
在微服务架构中,可以由数据面负责处理流量、提供流量治理能力的组件,而由控制面负责给数据面下发服务、路由、插件等的相关信息。由于上述Envoy代理是上述微服务架构中的数据面,在一些实施例中,与上述脚本对应的配置信息可以由该微服务架构中的控制面下发给该Envoy代理。具体地,可以将与该脚本对应的配置信息作为通过LDS、RDS和CDS发现的配置信息中的一部分,例如:可以将该配置信息嵌入在通过LDS、RDS和CDS发现的配置信息中。
而上述Envoy代理在获取到由上述控制面下发的上述配置信息时,可以进一步地将该配置信息存储在上述目标应用层过滤器中。在这种情况下,在获取与上述脚本对应的配置信息时,具体可以获取存储在该目标应用层过滤器中的该配置信息,从而可以降低配置信息获取的流程复杂度,提高配置信息获取的效率。
在实际应用中,上述目标应用层过滤器和上述SDK可以作为面向用户提供的、Envoy代理中的插件扩展框架。用户可以使用该插件扩展框架,在Envoy代理中根据实际需求扩展插件,以在Envoy代理中扩展出与该插件对应的功能。
根据本发明的实施方式,Envoy代理中可以包含基于C++语言的目标应用层过滤器;该目标应用层过滤器中可以嵌入基于Lua语言的虚拟机,使得该目标应用层过滤器支持Lua语言;该虚拟机中可以加载基于Lua语言的SDK,以及由用户根据需要在Envoy代理中扩展出的功能,基于Lua语言编写的脚本;此时,该目标应用层过滤器可以作为该Envoy代理中扩展出的Lua插件。该Envoy代理可以响应于获取到需要处理的流量中的HTTP报文,在该目标应用层过滤器为用于对该HTTP报文进行处理的应用层过滤器的情况下,执行该目标应用层过滤器,由该目标应用层过滤器调用该脚本,以在该虚拟机中执行该脚本,由该脚本调用该SDK中的配置获取逻辑,获取与该脚本对应的配置信息,并按照该配置信息,对该HTTP报文进行与该脚本所要实现的功能对应的处理。
采用上述方式,一方面,可以使用户基于Lua语言编写脚本,并由基于C++语言的、嵌入了基于Lua语言的虚拟机的应用层过滤器在该虚拟机中执行该脚本,以将该应用层过滤器转变成Lua插件,而不需要对该应用层过滤器本身的、基于C++语言的代码进行更改,因此可以支持对Lua插件的动态扩展。另一方面,在该应用层过滤器中嵌入的基于Lua语言的虚拟机中加载了基于Lua语言的、提供配置获取逻辑的SDK,使得在该虚拟机中执行该脚本时,可以由该脚本调用该SDK中的配置获取逻辑,获取与该脚本对应的配置信息,由此实现了对已经加载到该虚拟机中的该脚本的配置信息进行更改,因此可以支持对Lua插件的动态配置。
Envoy代理在处理流量时,具体可以在获取到该流量中的HTTP报文后,为该HTTP报文确定一条过滤器链,以通过该过滤器链中的各应用层过滤器对该报文进行处理。因此,在一些实施例中,可以在图2的基础上,参考图3,图3示意性地示出了根据本发明实施方式的另一种微服务架构中的流量处理方法的流程图。
上述微服务架构中的流量处理方法可以包括以下步骤:
步骤301:响应于获取到HTTP报文,构造与所述HTTP报文对应的应用层过滤器链;所述应用层过滤器链中的各应用层过滤器用于对所述HTTP报文进行与所述应用层过滤器的功能对应的处理。
在本实施例中,上述Envoy代理可以响应于获取到需要处理的流量中的HTTP报文,先构造与该HTTP报文对应的应用层过滤器链。此时,对于所构造的该应用层过滤器链中的任一应用层过滤器而言,该应用层过滤器也就用于对该HTTP报文进行与该应用层过滤器的功能对应的处理。
步骤302:在所述应用层过滤器链包括所述目标应用层过滤器的情况下,执行所述目标应用层过滤器,由所述目标应用层过滤器调用所述脚本,以在所述虚拟机中执行所述脚本,由所述脚本通过调用所述SDK中的配置获取逻辑,获取与所述脚本对应的配置信息,并按照所述配置信息,对所述HTTP报文进行与所述脚本的功能对应的处理。
在本实施例中,由于为上述HTTP报文构造了上述应用层过滤器链,因此为了确定上述目标应用层过滤器是否为用于对该HTTP报文进行处理的应用层过滤器,可以直接确定该应用层过滤器链中是否包含该目标应用层过滤器。
在上述应用层过滤器链中包含上述目标应用层过滤器的情况下,说明该目标应用层过滤器为用于对上述HTTP报文进行处理的应用层过滤器,从而可以执行后续步骤,即可以执行该目标应用层过滤器,由该目标应用层过滤器调用上述脚本,以在上述虚拟机中执行该脚本,由该脚本通过调用上述SDK中的配置获取逻辑,获取与该脚本对应的配置信息,并按照该配置信息,对该HTTP报文进行与该脚本的功能对应的处理。
通过确定所构造的与上述HTTP报文对应的应用层过滤器链中是否包含上述目标应用层过滤器,来确定该目标应用层过滤器是否为用于对该HTTP报文进行处理的应用层过滤器,在兼容了相关技术中Envoy代理确定用于对HTTP报文进行处理的应用层过滤器的具体实现的同时,避免了多次确定该目标应用层过滤器是否为用于对该HTTP报文进行处理的应用层过滤器,从而可以降低流程复杂度,提高效率。
如图3所示的实施例中部分步骤的具体实现,可以参考如图2所示的实施例,在此不再赘述。
为了将上述SDK和上述脚本加载到上述虚拟机中,在一些实施例中,可以在图2的基础上,参考图4,图4示意性地示出了根据本发明实施方式的一种微服务架构中的数据初始化方法的流程图。
上述微服务架构中的数据初始化方法可以包括以下步骤:
步骤401:对所述目标应用层过滤器进行与所述脚本对应的初始化处理,以由所述目标应用层过滤器将所述SDK和所述脚本加载到所述虚拟机中。
在本实施例中,上述Envoy代理可以对上述目标应用层过滤器进行与上述脚本对应的初始化处理,以促使该目标应用层过滤器将上述SDK和该脚本本身加载到该目标应用层过滤器中嵌入的虚拟机中。
由于Envoy代理在处理流量时,可以预先通过对上述目标应用层过滤器进行初始化处理,促使该目标应用层过滤器将上述SDK和上述脚本加载到该目标应用层过滤器中嵌入的虚拟机中,使得后续该目标应用层过滤器可以直接在该虚拟机中执行该脚本和调用该SDK,而无需再将该SDK和该脚本加载到该虚拟机中,因此可以降低对报文进行处理时的流程复杂度,提高对报文进行处理时的效率。
步骤402:响应于获取到HTTP报文,在所述目标应用层过滤器为用于对所述HTTP报文进行处理的应用层过滤器的情况下,执行所述目标应用层过滤器,由所述目标应用层过滤器调用所述脚本,以在所述虚拟机中执行所述脚本,由所述脚本通过调用所述SDK中的配置获取逻辑,获取与所述脚本对应的配置信息,并按照所述配置信息,对所述HTTP报文进行与所述脚本的功能对应的处理。
在将上述SDK和上述脚本加载到了上述虚拟机中后,上述Envoy代理可以执行步骤402。步骤402的具体实现,可以参考如图2所示的实施例,在此不再赘述。
在实际应用中,HTTP报文可以分为HTTP请求报文和HTTP响应报文。
在上述HTTP报文为HTTP请求报文的情况下,在一些实施例中,可以在图2的基础上,参考图5,图5示意性地示出了根据本发明实施方式的另一种微服务架构中的流量处理方法的流程图。
上述微服务架构中的流量处理方法可以包括以下步骤:
步骤501:响应于获取到HTTP请求报文,在所述目标应用层过滤器为用于对所述HTTP请求报文进行处理的应用层过滤器的情况下,执行所述目标应用层过滤器,由所述目标应用层过滤器调用所述脚本,以在所述虚拟机中执行所述脚本,由所述脚本通过调用所述SDK中的配置获取逻辑,获取与所述脚本对应的配置信息,并按照所述配置信息,通过执行所述脚本中的请求头处理逻辑和请求主体处理逻辑,对所述HTTP请求报文进行与所述脚本的功能对应的处理。
在本实施例中,在对上述HTTP请求报文进行处理时,具体可以通过执行上述脚本中的请求头(header)处理逻辑和请求主体(body)处理逻辑,对该HTTP请求报文进行与所述脚本的功能对应的处理。其中,请求头处理逻辑可以是on_request_header逻辑,请求主体处理逻辑可以是on_request_body逻辑。
具体地,上述Envoy代理可以在流量处理的Decode阶段,执行上述目标应用层过滤器,由该目标应用层过滤器调用上述脚本中的请求头处理逻辑和请求主体处理逻辑,以在上述虚拟机中执行该脚本,由该脚本通过调用上述SDK中的配置获取逻辑,获取与该脚本对应的配置信息,并按照该配置信息,通过执行该请求头处理逻辑和该请求主体处理逻辑,对上述HTTP请求报文进行与该脚本的功能对应的处理。
由于可以通过执行上述脚本中的请求头处理逻辑和请求主体处理逻辑,对HTTP请求报文进行与该脚本的功能对应的处理,而该脚本中的请求头处理逻辑和请求主体处理逻辑可以由用户根据实际需求自行编写,因此可以实现对HTTP请求报文的可配置化处理。
在一些实施例中,在通过执行上述脚本中的请求头处理逻辑和请求主体处理逻辑,对上述HTTP请求报文进行与该脚本的功能对应的处理时,具体可以由该脚本通过调用上述SDK中的请求头处理逻辑和请求主体处理逻辑,对该HTTP请求报文进行与该脚本的功能对应的处理。
其中,上述SDK中的请求头处理逻辑和请求主体处理逻辑,可以以API的方式,提供给上述脚本以供其调用,从而使用户在编写上述脚本时,仅需编写简单的调用逻辑,通过该调用逻辑实现对SDK中的请求头处理逻辑和请求主体处理逻辑的调用即可,而无需再自行编写请求头处理逻辑和请求主体处理逻辑,因此可以减少用户在编写脚本时的工作量,为用户提供便利,提升用户体验。
在实际应用中,在对上述HTTP请求报文进行的与上述脚本的功能对应的处理时,具体可以先从该HTTP请求报文中提取出报文头和报文主体,再根据与该脚本对应的功能,对该报文头和该报文主体进行特定的处理。
因此,在一些实施例中,对该HTTP请求报文所进行的处理,具体可以包括以下示出的任一或多种处理:获取该HTTP请求报文的报文头;重写该HTTP请求报文的报文主体。
如图5所示的实施例中部分步骤的具体实现,可以参考如图2所示的实施例,在此不再赘述。
在上述HTTP报文为HTTP响应报文的情况下,在一些实施例中,可以在图2的基础上,参考图6,图6示意性地示出了根据本发明实施方式的另一种微服务架构中的流量处理方法的流程图。
上述微服务架构中的流量处理方法可以包括以下步骤:
步骤601:响应于获取到HTTP响应报文,在所述目标应用层过滤器为用于对所述HTTP响应报文进行处理的应用层过滤器的情况下,执行所述目标应用层过滤器,由所述目标应用层过滤器调用所述脚本,以在所述虚拟机中执行所述脚本,由所述脚本通过调用所述SDK中的配置获取逻辑,获取与所述脚本对应的配置信息,并按照所述配置信息,通过执行所述脚本中的响应头处理逻辑和响应主体处理逻辑,对所述HTTP响应报文进行与所述脚本的功能对应的处理。
在本实施例中,在对上述HTTP响应报文进行处理时,具体可以通过执行上述脚本中的响应头(header)处理逻辑和响应主体(body)处理逻辑,对该HTTP响应报文进行与所述脚本的功能对应的处理。其中,响应头处理逻辑可以是on_response_header逻辑,响应主体处理逻辑可以是on_response_body逻辑。
具体地,上述Envoy代理可以在流量处理的Encode阶段,执行上述目标应用层过滤器,由该目标应用层过滤器调用上述脚本中的响应头处理逻辑和响应主体处理逻辑,以在上述虚拟机中执行该脚本,由该脚本通过调用上述SDK中的配置获取逻辑,获取与该脚本对应的配置信息,并按照该配置信息,通过执行该响应头处理逻辑和该响应主体处理逻辑,对上述HTTP响应报文进行与该脚本的功能对应的处理。
由于可以通过执行上述脚本中的响应头处理逻辑和响应主体处理逻辑,对HTTP响应报文进行与该脚本的功能对应的处理,而该脚本中的响应头处理逻辑和响应主体处理逻辑可以由用户根据实际需求自行编写,因此可以实现对HTTP响应报文的可配置化处理。
在一些实施例中,在通过执行上述脚本中的响应头处理逻辑和响应主体处理逻辑,对上述HTTP响应报文进行与该脚本的功能对应的处理时,具体可以由该脚本通过调用上述SDK中的响应头处理逻辑和响应主体处理逻辑,对该HTTP响应报文进行与该脚本的功能对应的处理。
其中,上述SDK中的响应头处理逻辑和响应主体处理逻辑,可以以API的方式,提供给上述脚本以供其调用,从而使用户在编写上述脚本时,仅需编写简单的调用逻辑,通过该调用逻辑实现对SDK中的响应头处理逻辑和响应主体处理逻辑的调用即可,而无需再自行编写响应头处理逻辑和响应主体处理逻辑,因此可以减少用户在编写脚本时的工作量,为用户提供便利,提升用户体验。
在实际应用中,在对上述HTTP响应报文进行的与上述脚本的功能对应的处理时,具体可以先从该HTTP响应报文中提取出报文头和报文主体,再根据与该脚本对应的功能,对该报文头和该报文主体进行特定的处理。
因此,在一些实施例中,对该HTTP响应报文所进行的处理,具体可以包括以下示出的任一或多种处理:获取该HTTP响应报文的报文头;重写该HTTP响应报文的报文主体。
如图6所示的实施例中部分步骤的具体实现,可以参考如图2所示的实施例,在此不再赘述。
上述目标应用层过滤器可以将内部的功能和数据,以接口的方式,提供给上述SDK以供其调用。在这种情况下,在上述虚拟机中执行上述脚本时,可以由该脚本通过该SDK,调用该目标应用层过滤器所提供的内部的功能和数据。因此,在一些实施例中,可以在图2的基础上,参考图7,图7示意性地示出了根据本发明实施方式的另一种微服务架构中的流量处理方法的流程图。
上述微服务架构中的流量处理方法可以包括以下步骤:
步骤701:响应于获取到HTTP报文,在所述目标应用层过滤器为用于对所述HTTP报文进行处理的应用层过滤器的情况下,执行所述目标应用层过滤器,由所述目标应用层过滤器调用所述脚本,以在所述虚拟机中执行所述脚本,由所述脚本通过调用所述SDK中的配置获取逻辑,获取与所述脚本对应的配置信息,并按照所述配置信息,通过所述SDK,调用所述目标应用层过滤器中的报文处理逻辑,以对所述HTTP报文进行与所述脚本的功能对应的处理。
在本实施例中,在对上述HTTP报文进行处理时,具体可以通过上述SDK,调用上述目标应用层过滤器中的报文处理逻辑,以对该HTTP报文进行与该脚本的功能对应的处理。
由于上述目标应用层过滤器可以将上述报文处理逻辑,以接口的方式,提供给上述SDK以供其调用,可以使用户在编写上述脚本时,仅需编写简单的调用逻辑,以实现通过该SDK对该目标应用层过滤器中的报文处理逻辑的调用即可,而无需再自行编写报文处理逻辑,因此可以减少用户在编写脚本时的工作量,为用户提供便利,提升用户体验。
需要说明的是,由于上述目标应用层过滤器本身是基于C++语言的,上述SDK是基于Lua语言的,因为在通过该SDK调用该目标应用层过滤器中的报文处理逻辑时,需要实现基于Lua语言的代码对基于C++语言的代码的调用。
因此,在一些实施例中,上述目标应用层过滤器可以将上述报文处理逻辑,以CAPI接口的方式,提供给上述SDK以供其调用。
对于通过CAPI接口实现的基于Lua语言的代码对基于C++语言的代码的调用而言,在每次调用时都会有一个栈空间(即向Heap申请的一块连续内存),通过该栈空间传递调用参数和调用结果。因此,在调用上述目标应用层过滤器中的报文处理逻辑时,具体可以调用与该目标应用层过滤器中的报文处理逻辑对应的CAPI接口,基于与本次调用对应的栈空间传递调用参数和调用结果,以基于该报文处理逻辑,对上述HTTP报文进行与上述脚本的功能对应的处理。
或者,在一些实施例中,上述虚拟机具体可以是LuaJIT(其中JIT指的是Just-In-Time);与之相应地,上述目标应用层过滤器可以将上述报文处理逻辑,以FFI接口的方式,提供给上述SDK以供其调用。
对于通过FFI接口实现的基于Lua语言的代码对基于C++语言的代码的调用而言,可以直接在基于Lua语言的代码中调用基于C++语言的代码,而LuaJIT可以对这些代码进行编译,并执行编译后的代码。因此,在调用上述目标应用层过滤器中的报文处理逻辑时,具体可以调用与该目标应用层过滤器中的报文处理逻辑对应的FFI接口,将该报文处理逻辑编译为机器码,并执行该机器码,以基于该报文处理逻辑,对上述HTTP报文进行与上述脚本的功能对应的处理。
在一些实施例中,与上述报文处理逻辑对应的代码,可以分为热点代码和非热点代码。其中,热点代码可以是多次执行的代码,非热点代码则可以是除了热点代码之外的其他代码。
上述LuaJIT可以运行在Just-In-Time模式下。在Just-In-Time模式下,该LuaJIT中可以存储与上述报文处理逻辑中的热点代码对应的机器码(可称之为第一类机器码),而该LuaJIT在将该报文处理逻辑编译为机器码,并执行该机器码时,具体可以获取该第一类机器码,将该报文处理逻辑中的非热点代码编译为机器码(可称之为第二类机器码),并执行该第一类机器码和该第二类机器码。
由于LuaJIT可以将多次执行的热点代码编译成的第一类机器码存储在本地,使得后续可以直接执行所存储的第一类机器码,而无需再对热点代码进行编译,因此可以提升Envoy代理的流量处理性能,从而可以提高流量处理的效率。
在一些实施例中,对上述HTTP报文所进行的处理,具体可以包括以下示出的任一或多种处理:获取或修改该HTTP报文;调用与该HTTP报文对应的第三方服务;打印与该HTTP报文对应的日志。
在实际应用中,这些处理方式通常是流量处理中较为常见且适用范围较广的处理方式,因此可以将这些处理方式作为上述目标应用层过滤器内部的功能,由该目标应用层过滤器将这些处理方式,以接口的方式,提供给上述SDK以供其调用。
如图7所示的实施例中部分步骤的具体实现,可以参考如图2所示的实施例,在此不再赘述。
示例性介质
在介绍了本发明示例性实施方式的方法之后,接下来,参考图8对本发明示例性实施方式的、用于微服务架构中的流量处理的介质进行说明。
在本示例性实施方式中,可以通过程序产品实现上述方法,如可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
该程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。
可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RE等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如C语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
示例性装置
在介绍了本发明示例性实施方式的介质之后,接下来,参考图9对本发明示例性实施方式的、用于微服务架构中的流量处理的装置进行说明。
下述装置中各个模块的功能和作用的实现过程具体参见上述方法中的对应步骤的实现过程,在此不再赘述。对于装置实施例而言,其基本对应于方法实施例,因此相关之处参见方法实施例的部分说明即可。
参考图9,图9示意性地示出了根据本发明实施方式的一种微服务架构中的流量处理装置。
上述微服务架构中的流量处理装置可以应用于微服务架构中作为数据面的Envoy代理;所述Envoy代理包括基于C++语言的目标应用层过滤器,所述目标应用层过滤器中嵌入了基于Lua语言的虚拟机,所述虚拟机中加载了基于Lua语言的SDK和基于Lua语言的脚本;
所述装置包括:
处理模块901,用于响应于获取到HTTP报文,在所述目标应用层过滤器为用于对所述HTTP报文进行处理的应用层过滤器的情况下,执行所述目标应用层过滤器,由所述目标应用层过滤器调用所述脚本,以在所述虚拟机中执行所述脚本,由所述脚本通过调用所述SDK中的配置获取逻辑,获取与所述脚本对应的配置信息,并按照所述配置信息,对所述HTTP报文进行与所述脚本的功能对应的处理。
可选地,所述处理模块901具体用于:
构造与所述HTTP报文对应的应用层过滤器链;所述应用层过滤器链中的各应用层过滤器用于对所述HTTP报文进行与所述应用层过滤器的功能对应的处理;
在所述应用层过滤器链包括所述目标应用层过滤器的情况下,执行所述目标应用层过滤器。
可选地,所述装置还包括:
初始化模块902,用于对所述目标应用层过滤器进行与所述脚本对应的初始化处理,以由所述目标应用层过滤器将所述SDK和所述脚本加载到所述虚拟机中。
可选地,所述HTTP报文为HTTP请求报文;
所述处理模块901具体用于:
通过执行所述脚本中的请求头处理逻辑和请求主体处理逻辑,对所述HTTP请求报文进行与所述脚本的功能对应的处理。
可选地,所述处理模块901具体用于:
由所述脚本通过调用所述SDK中的请求头处理逻辑和请求主体处理逻辑,对所述HTTP请求报文进行与所述脚本的功能对应的处理。
可选地,所述对所述HTTP请求报文进行与所述脚本的功能对应的处理,包括以下示出的任一或多种处理:
获取所述HTTP请求报文的报文头;
重写所述HTTP请求报文的报文主体。
可选地,所述HTTP报文为HTTP响应报文;
所述处理模块901具体用于:
通过执行所述脚本中的响应头处理逻辑和响应主体处理逻辑,对所述HTTP响应报文进行与所述脚本的功能对应的处理。
可选地,所述处理模块901具体用于:
由所述脚本通过调用所述SDK中的响应头处理逻辑和响应主体处理逻辑,对所述HTTP响应报文进行与所述脚本的功能对应的处理。
可选地,对所述HTTP响应报文进行与所述脚本的功能对应的处理,包括以下示出的任一或多种处理:
获取所述HTTP响应报文的报文头;
重写所述HTTP响应报文的报文主体。
可选地,所述处理模块901具体用于:
通过所述SDK,调用所述目标应用层过滤器中的报文处理逻辑,以对所述HTTP报文进行与所述脚本的功能对应的处理。
可选地,所述处理模块901具体用于:
调用与所述目标应用层过滤器中的报文处理逻辑对应的CAPI接口,基于与本次调用对应的栈空间传递调用参数和调用结果,以基于所述报文处理逻辑对所述HTTP报文进行与所述脚本的功能对应的处理。
可选地,所述虚拟机为LuaJIT;
所述处理模块901具体用于:
调用与所述目标应用层过滤器中的报文处理逻辑对应的FFI接口,将所述报文处理逻辑编译为机器码,并执行所述机器码,以基于所述报文处理逻辑对所述HTTP报文进行与所述脚本的功能对应的处理。
可选地,所述LuaJIT中存储了与所述报文处理逻辑中的热点代码对应的第一类机器码,所述热点代码为多次执行的代码;
所述处理模块901具体用于:
获取所述第一类机器码,将所述报文处理逻辑中的非热点代码编译为第二类机器码,并执行所述第一类机器码和所述第二类机器码。
可选地,所述对所述HTTP报文进行与所述脚本的功能对应的处理,包括以下示出的任一或多种处理:
获取或修改所述HTTP报文;
调用与所述HTTP报文对应的第三方服务;
打印与所述HTTP报文对应的日志。
可选地,所述装置还包括:
获取模块903,用于获取由所述微服务架构中的控制面下发给所述Envoy代理的所述配置信息,并将所述配置信息存储在所述目标应用层过滤器中。
可选地,所述微服务架构包括Istio服务网格。
示例性计算设备
在介绍了本发明示例性实施方式的方法、介质和装置之后,接下来,参考图10对本发明示例性实施方式的、用于微服务架构中的流量处理的计算设备进行说明。
图10显示的计算设备1000仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图10所示,计算设备1000以通用计算设备的形式表现。计算设备1000的组件可以包括但不限于:上述至少一个处理单元1001、上述至少一个存储单元1002,连接不同系统组件(包括处理单元1001和存储单元1002)的总线1003。
总线1003包括数据总线、控制总线和地址总线。
存储单元1002可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)10021和/或高速缓存存储器10022,可以进一步包括非易失性存储器形式的可读介质,例如只读存储器(ROM)10023。
存储单元1002还可以包括具有一组(至少一个)程序模块10024的程序/实用工具10025,这样的程序模块10024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
计算设备1000也可以与一个或多个外部设备1004(例如键盘、指向设备等)通信。
这种通信可以通过输入/输出(I/O)接口1005进行。并且,计算设备1000还可以通过网络适配器1006与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图10所示,网络适配器1006通过总线1003与计算设备1000的其它模块通信。应当理解,尽管图中未示出,可以结合计算设备1000使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
应当注意,尽管在上文详细描述中提及了微服务架构中的流量处理装置的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (10)
1.一种微服务架构中的流量处理方法,应用于微服务架构中作为数据面的Envoy代理;所述Envoy代理包括基于C++语言的目标应用层过滤器,所述目标应用层过滤器中嵌入了基于Lua语言的虚拟机,所述虚拟机中加载了基于Lua语言的SDK和基于Lua语言的脚本;
所述方法包括:
响应于获取到HTTP报文,在所述目标应用层过滤器为用于对所述HTTP报文进行处理的应用层过滤器的情况下,执行所述目标应用层过滤器,由所述目标应用层过滤器调用所述脚本,以在所述虚拟机中执行所述脚本,由所述脚本通过调用所述SDK中的配置获取逻辑,获取与所述脚本对应的配置信息,并按照所述配置信息,对所述HTTP报文进行与所述脚本的功能对应的处理。
2.根据权利要求1所述的方法,所述在所述目标应用层过滤器为用于对所述HTTP报文进行处理的应用层过滤器的情况下,执行所述目标应用层过滤器,包括:
构造与所述HTTP报文对应的应用层过滤器链;所述应用层过滤器链中的各应用层过滤器用于对所述HTTP报文进行与所述应用层过滤器的功能对应的处理;
在所述应用层过滤器链包括所述目标应用层过滤器的情况下,执行所述目标应用层过滤器。
3.根据权利要求1所述的方法,所述方法还包括:
对所述目标应用层过滤器进行与所述脚本对应的初始化处理,以由所述目标应用层过滤器将所述SDK和所述脚本加载到所述虚拟机中。
4.根据权利要求1所述的方法,所述HTTP报文为HTTP请求报文;
所述对所述HTTP报文进行与所述脚本的功能对应的处理,包括:
通过执行所述脚本中的请求头处理逻辑和请求主体处理逻辑,对所述HTTP请求报文进行与所述脚本的功能对应的处理。
5.根据权利要求1所述的方法,所述HTTP报文为HTTP响应报文;
所述对所述HTTP报文进行与所述脚本的功能对应的处理,包括:
通过执行所述脚本中的响应头处理逻辑和响应主体处理逻辑,对所述HTTP响应报文进行与所述脚本的功能对应的处理。
6.根据权利要求1所述的方法,所述对所述HTTP报文进行与所述脚本的功能对应的处理,包括:
通过所述SDK,调用所述目标应用层过滤器中的报文处理逻辑,以对所述HTTP报文进行与所述脚本的功能对应的处理。
7.根据权利要求1所述的方法,所述方法还包括:
获取由所述微服务架构中的控制面下发给所述Envoy代理的所述配置信息,并将所述配置信息存储在所述目标应用层过滤器中。
8.一种微服务架构中的流量处理装置,应用于微服务架构中作为数据面的Envoy代理;所述Envoy代理包括基于C++语言的目标应用层过滤器,所述目标应用层过滤器中嵌入了基于Lua语言的虚拟机,所述虚拟机中加载了基于Lua语言的SDK和基于Lua语言的脚本;
所述装置包括:
处理模块,用于响应于获取到HTTP报文,在所述目标应用层过滤器为用于对所述HTTP报文进行处理的应用层过滤器的情况下,执行所述目标应用层过滤器,由所述目标应用层过滤器调用所述脚本,以在所述虚拟机中执行所述脚本,由所述脚本通过调用所述SDK中的配置获取逻辑,获取与所述脚本对应的配置信息,并按照所述配置信息,对所述HTTP报文进行与所述脚本的功能对应的处理。
9.一种介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的方法。
10.一种计算设备,包括:
处理器;
用于存储处理器可执行程序的存储器;
其中,所述处理器通过运行所述可执行程序以实现如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310200443.4A CN116208558A (zh) | 2023-02-27 | 2023-02-27 | 微服务架构中的流量处理方法、装置、介质和计算设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310200443.4A CN116208558A (zh) | 2023-02-27 | 2023-02-27 | 微服务架构中的流量处理方法、装置、介质和计算设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116208558A true CN116208558A (zh) | 2023-06-02 |
Family
ID=86518910
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310200443.4A Pending CN116208558A (zh) | 2023-02-27 | 2023-02-27 | 微服务架构中的流量处理方法、装置、介质和计算设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116208558A (zh) |
-
2023
- 2023-02-27 CN CN202310200443.4A patent/CN116208558A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102120567B1 (ko) | 컨테이너들에서 고립된 애플리케이션들의 모니터링 | |
CN111131037B (zh) | 基于虚拟网关的数据传输方法、装置、介质与电子设备 | |
CN110032392B (zh) | 服务治理方法及装置、存储介质和电子设备 | |
US8010973B2 (en) | Class loader for managing a network | |
JP5046161B2 (ja) | ネットワーク・エッジ・コンピューティング向けのアプリケーション分割 | |
CN106713469B (zh) | 用于分布式容器的动态加载方法、装置及系统 | |
US10817284B2 (en) | Melding of mediation flow service component architecture (SCA) components | |
CN114363170A (zh) | 容器服务网络配置方法及相关产品 | |
CN113301116A (zh) | 微服务应用跨网络通信方法、装置、系统及设备 | |
CN110688674A (zh) | 一种访问对接器、系统及应用该访问对接器的方法及装置 | |
US10579366B2 (en) | Data upgrade framework for distributed systems | |
WO2021220226A1 (en) | Systems and methods for decentralization of blockchain-based processes employing a blockchain-associated front end or blockchain-associated user interface | |
CN114979303B (zh) | 网络数据包的服务质量处理方法、装置、设备和可读介质 | |
CN113778897A (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
CN114816672A (zh) | 虚拟机的创建方法、装置、电子设备和存储介质 | |
CN114489622A (zh) | 静态资源管理方法、Node.js应用、电子设备和存储介质 | |
Kochnev et al. | Surviving Java for mobiles | |
CN116208558A (zh) | 微服务架构中的流量处理方法、装置、介质和计算设备 | |
US10489121B2 (en) | Method and apparatus for determining system information in a device having a plurality of processors, each including virtual machines and some located on separate insertable boards | |
CN114510323A (zh) | 在容器中运行虚机的网络优化实现方法 | |
CN113641641A (zh) | 文件存储服务的切换方法、切换系统、设备及存储介质 | |
CN115225693A (zh) | 一种容器间的通信方法及相关产品 | |
US7743385B2 (en) | System and method for simplification of data structure in wireless communications | |
CN114726719B (zh) | 网元操作系统部署方法、装置、电子设备及存储介质 | |
CA2544032C (en) | System and method for simplification of data structure in wireless communications |
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 | ||
CB02 | Change of applicant information |
Address after: 310052 Room 301, Building No. 599, Changhe Street Network Business Road, Binjiang District, Hangzhou City, Zhejiang Province Applicant after: Hangzhou NetEase Shuzhifan Technology Co.,Ltd. Address before: 310052 Room 301, Building No. 599, Changhe Street Network Business Road, Binjiang District, Hangzhou City, Zhejiang Province Applicant before: HANGZHOU LANGHE TECHNOLOGY Ltd. |
|
CB02 | Change of applicant information |