一种API网关流量镜像方法与流程

专利2024-07-25  42


一种api网关流量镜像方法
技术领域
1.本发明实施例涉及api网关流量镜像方法领域,具体涉及一种api网关流量镜像方法。


背景技术:

2.将网关代理部署在api服务的前面,将需要观测的流量复制并转发到分析设备中,一般是基于nginx服务+lua脚本的框架。在log_by_lua的处理阶段中,将所关注的http事件完整内容进行组装(一般为json格式)并复制转发,这意味着在复制转发完成之前,nginx服务器上缓存所有的数据(包括服务器的请求与响应部分),尤其是响应部分,一般都会比较大,而且都保存在内存中,当并发会话较多的时,会占用较高的系统内存资源,进而影响处理性能。


技术实现要素:

3.为此,本发明实施例提供一种api网关流量镜像方法,通过尽最大可能性以减少对nginx本身的影响情况下将http事件部分内容尽快尽早地镜像出来,具体是在nginx处理http事件处理的各个阶段,将事件中的局部数据以批处理的转发到消息中间件,再由数据加工模块,将各阶段的数据组装原始的http事件。
4.为了实现上述目的,本发明实施例提供如下技术方案:一种api网关流量镜像方法,包括以下以下几部分内容:
5.分块数据结构的定义与格式:按照http事件类型,定义http事件请求头、http事件请求体、http事件响应头、http事件响应体等四个部分定义,每个部分都包含有事件唯一id,用于数据加工时的组装关联,约定两种格式的数据序列化格式,在序列化编码性能上,两者各有优势,可根据实的数据进行动态选择,纯文本类且数据量不太大的数据,json编码性能更好,二进制类的数据,protobuf编码性能更优;
6.代理核心模块:在access_by_lua阶段、header_filter_by_lua阶段或body_filter_by_lua阶段,可以根据当前http事件的数据量等信息,将http事件数据按照一定的策略进行分块传输;
7.分块与编码策略:对于访问/下载类型的http事件,第一个消息块数据包含有http事件请求头、http事件请求体、http事件响应头、http事件响应体的部分内容,之后每4kb的http事件响应体数据,将变成一个独立的消息块数据,进行编号后传输;
8.对于上传类型的http事件,每一个消息块数据包含有http事件请求头、http事件请求体的部分内容,之后每4kb的http事件请求体数据,将变成一个独立的消息块数据,进行编号后传输;
9.http事件流量镜像还原流程如下:
10.步骤一:在nginx的access_by_lua阶段,开头生成一个http事件的唯一id,存储到nginx会话的上下文变量,并将唯一id;
11.步骤二:在nginx的access_by_lua阶段,将收到http事件的请求头、请求体数据以及http事件的唯一id填充到分块数据结构,并发送到内部的批处理队列;
12.步骤三:在nginx的header_filter_by_lua阶段,将收到http事件的响应头以及http事件的唯一id填充到分块数据结构,并发送到内部的批处理队列;
13.步骤四:在nginx的body_filter_by_lua阶段,将收到http事件的响应体以及http事件的唯一id填充到分块数据结构,并发送到内部的批处理队列;
14.步骤五:在批处理队列满足发送条件时,将队列中的所有数据合并成一条或多条消息,发送到消息中间件;
15.步骤六:数据加工模块,从消息中间件,获取消息,将消息还原一个或多个分块数据,存储到一个全局缓存中,其中键为http事件的唯一id,值为同一id中所有相关的分块数据内容;
16.步骤七:当加工模块的全局缓存中的分块数据满足组装条件时,则取出同一事件id下的分块数据,组装成http事件结构,再发送到下游处理流程,实现流量的镜像;
17.步骤八:从全局缓存中删除已组装或超时未能组装的事件id对应的存储。
18.进一步地,所述约定两种格式的数据序列化格式具体为protobuf和json。
19.进一步地,所述对于访问/下载类型的http事件,第一个消息块数据包含有http事件请求头、http事件请求体、http事件响应头、http事件响应体的部分内容不超过2kb。
20.进一步地,所述对于上传类型的http事件,每一个消息块数据包含有http事件请求头、http事件请求体的部分内容不超过2kb。
21.进一步地,所述步骤一中存储在nginx会话的上下文变量所有和此事件的所有阶段都能够访问。
22.进一步地,所述步骤五中批处理队列满足发送条件为到达一定的数量或超过一定的时间。
23.进一步地,所述步骤六中的全局缓存具体为键值对结构。
24.进一步地,所述步骤八中加工模块的全局缓存中的分块数据满足组装条件为四个分块数据内容完整。
25.本发明实施例具有如下优点:
26.以protobuf协议来定义更高效的序列化结构,并将http事件的四个部分分别定义格式,在代理核心模块的处理阶段按照一定的策略进行转发,对于每个事件同时可以将分独立分成多条处理,也可以合并处理,并支持以批处理的方式,而非单个事件的处理,提升整体的呑吐性能,将部分事件还原的,后移到网关中的非代理核心模块中进行处理,进而减少代理核心模块的资源消耗,并提升稳定性。
27.1、以protobuf协议来定义,定义http事件请求头、http事件请求体、http事件响应头、http事件响应体,四个部分。
28.2、代理核心模块:access_by_lua阶段、header_filter_by_lua阶段或body_filter_by_lua阶段,可以根据当前http事件的数据量等信息,将http事件数据按照一定的策略进行分块传输,发送到消息中间件。
29.3、数据加工模块:根据http事件唯一id,将从消息中间件中的事件各部分的内容组装还原成完整的事件内容。
附图说明
30.为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引伸获得其它的实施附图。
31.本说明书所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容得能涵盖的范围内。
32.图1为本发明提供的api网关流量镜像方法示意图。
33.图2为本发明提供的api网关流量镜像方法流程图。
具体实施方式
34.以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
35.实施例1:
36.该实施例的一种api网关流量镜像方法,包括以下以下几部分内容:
37.分块数据结构的定义与格式:按照http事件类型,定义http事件请求头、http事件请求体、http事件响应头、http事件响应体等四个部分定义,每个部分都包含有事件唯一id,用于数据加工时的组装关联,约定两种格式的数据序列化格式,在序列化编码性能上,两者各有优势,可根据实的数据进行动态选择,纯文本类且数据量不太大的数据,json编码性能更好,二进制类的数据,protobuf编码性能更优;
38.代理核心模块:在access_by_lua阶段、header_filter_by_lua阶段或body_filter_by_lua阶段,可以根据当前http事件的数据量等信息,将http事件数据按照一定的策略进行分块传输;
39.分块与编码策略:对于访问/下载类型的http事件,第一个消息块数据包含有http事件请求头、http事件请求体、http事件响应头、http事件响应体的部分内容,之后每4kb的http事件响应体数据,将变成一个独立的消息块数据,进行编号后传输;
40.对于上传类型的http事件,每一个消息块数据包含有http事件请求头、http事件请求体的部分内容,之后每4kb的http事件请求体数据,将变成一个独立的消息块数据,进行编号后传输;
41.http事件流量镜像还原流程如下:
42.步骤一:在nginx的access_by_lua阶段,开头生成一个http事件的唯一id,存储到nginx会话的上下文变量,并将唯一id;
43.步骤二:在nginx的access_by_lua阶段,将收到http事件的请求头、请求体数据以及http事件的唯一id填充到分块数据结构,并发送到内部的批处理队列;
44.步骤三:在nginx的header_filter_by_lua阶段,将收到http事件的响应头以及
http事件的唯一id填充到分块数据结构,并发送到内部的批处理队列;
45.步骤四:在nginx的body_filter_by_lua阶段,将收到http事件的响应体以及http事件的唯一id填充到分块数据结构,并发送到内部的批处理队列;
46.步骤五:在批处理队列满足发送条件时,将队列中的所有数据合并成一条或多条消息,发送到消息中间件;
47.步骤六:数据加工模块,从消息中间件,获取消息,将消息还原一个或多个分块数据,存储到一个全局缓存中,其中键为http事件的唯一id,值为同一id中所有相关的分块数据内容;
48.步骤七:当加工模块的全局缓存中的分块数据满足组装条件时,则取出同一事件id下的分块数据,组装成http事件结构,再发送到下游处理流程,实现流量的镜像;
49.步骤八:从全局缓存中删除已组装或超时未能组装的事件id对应的存储。
50.进一步地,所述约定两种格式的数据序列化格式具体为protobuf和json。
51.进一步地,所述对于访问/下载类型的http事件,第一个消息块数据包含有http事件请求头、http事件请求体、http事件响应头、http事件响应体的部分内容不超过2kb。
52.进一步地,所述对于上传类型的http事件,每一个消息块数据包含有http事件请求头、http事件请求体的部分内容不超过2kb。
53.进一步地,所述步骤一中存储在nginx会话的上下文变量所有和此事件的所有阶段都能够访问。
54.进一步地,所述步骤五中批处理队列满足发送条件为到达一定的数量或超过一定的时间。
55.进一步地,所述步骤六中的全局缓存具体为键值对结构。
56.进一步地,所述步骤八中加工模块的全局缓存中的分块数据满足组装条件为四个分块数据内容完整。
57.虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。

技术特征:
1.一种api网关流量镜像方法,其特征在于:包括以下以下几部分内容:分块数据结构的定义与格式:按照http事件类型,定义http事件请求头、http事件请求体、http事件响应头、http事件响应体等四个部分定义,每个部分都包含有事件唯一id,用于数据加工时的组装关联,约定两种格式的数据序列化格式,在序列化编码性能上,两者各有优势,可根据实的数据进行动态选择,纯文本类且数据量不太大的数据,json编码性能更好,二进制类的数据,protobuf编码性能更优;代理核心模块:在access_by_lua阶段、header_filter_by_lua阶段或body_filter_by_lua阶段,可以根据当前http事件的数据量等信息,将http事件数据按照一定的策略进行分块传输;分块与编码策略:对于访问/下载类型的http事件,第一个消息块数据包含有http事件请求头、http事件请求体、http事件响应头、http事件响应体的部分内容,之后每4kb的http事件响应体数据,将变成一个独立的消息块数据,进行编号后传输;对于上传类型的http事件,每一个消息块数据包含有http事件请求头、http事件请求体的部分内容,之后每4kb的http事件请求体数据,将变成一个独立的消息块数据,进行编号后传输;http事件流量镜像还原流程如下:步骤一:在nginx的access_by_lua阶段,开头生成一个http事件的唯一id,存储到nginx会话的上下文变量,并将唯一id;步骤二:在nginx的access_by_lua阶段,将收到http事件的请求头、请求体数据以及http事件的唯一id填充到分块数据结构,并发送到内部的批处理队列;步骤三:在nginx的header_filter_by_lua阶段,将收到http事件的响应头以及http事件的唯一id填充到分块数据结构,并发送到内部的批处理队列;步骤四:在nginx的body_filter_by_lua阶段,将收到http事件的响应体以及http事件的唯一id填充到分块数据结构,并发送到内部的批处理队列;步骤五:在批处理队列满足发送条件时,将队列中的所有数据合并成一条或多条消息,发送到消息中间件;步骤六:数据加工模块,从消息中间件,获取消息,将消息还原一个或多个分块数据,存储到一个全局缓存中,其中键为http事件的唯一id,值为同一id中所有相关的分块数据内容;步骤七:当加工模块的全局缓存中的分块数据满足组装条件时,则取出同一事件id下的分块数据,组装成http事件结构,再发送到下游处理流程,实现流量的镜像;步骤八:从全局缓存中删除已组装或超时未能组装的事件id对应的存储。2.根据权利要求1所述的一种api网关流量镜像方法,其特征在于:所述约定两种格式的数据序列化格式具体为protobuf和json。3.根据权利要求1所述的一种api网关流量镜像方法,其特征在于:所述对于访问/下载类型的http事件,第一个消息块数据包含有http事件请求头、http事件请求体、http事件响应头、http事件响应体的部分内容不超过2kb。4.根据权利要求1所述的一种api网关流量镜像方法,其特征在于:所述对于上传类型的http事件,每一个消息块数据包含有http事件请求头、http事件请求体的部分内容不超
过2kb。5.根据权利要求1所述的一种api网关流量镜像方法,其特征在于:所述步骤一中存储在nginx会话的上下文变量所有和此事件的所有阶段都能够访问。6.根据权利要求1所述的一种api网关流量镜像方法,其特征在于:所述步骤五中批处理队列满足发送条件为到达一定的数量或超过一定的时间。7.根据权利要求1所述的一种api网关流量镜像方法,其特征在于:所述步骤六中的全局缓存具体为键值对结构。8.根据权利要求1所述的一种api网关流量镜像方法,其特征在于:所述步骤八中加工模块的全局缓存中的分块数据满足组装条件为四个分块数据内容完整。

技术总结
本发明实施例公开了一种API网关流量镜像方法,具体涉及API网关流量镜像方法领域,包括以下以下几部分内容:分块数据结构的定义与格式:按照HTTP事件类型,定义HTTP事件请求头、HTTP事件请求体、HTTP事件响应头、HTTP事件响应体等四个部分定义,每个部分都包含有事件唯一ID,用于数据加工时的组装关联,约定两种格式的数据序列化格式。通过尽最大可能性以减少对nginx本身的影响情况下将HTTP事件部分内容尽快尽早地镜像出来,具体是在nginx处理HTTP事件处理的各个阶段,将事件中的局部数据以批处理的转发到消息中间件,再由数据加工模块,将各阶段的数据组装原始的HTTP事件。将各阶段的数据组装原始的HTTP事件。将各阶段的数据组装原始的HTTP事件。


技术研发人员:梁永喜
受保护的技术使用者:全知科技(杭州)有限责任公司
技术研发日:2022.06.22
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-8958.html

最新回复(0)