一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据中添加来源信息的方法及相关装置与流程

2021-11-16 12:48:00 来源:中国专利 TAG:
一种数据中添加来源信息的方法及相关装置与流程

本申请涉及存储技术领域,特别涉及一种数据中添加来源信息的方法;还涉及一种数据中添加来源信息的装置、设备以及计算机可读存储介质。

背景技术

Kafka是一个开源的流处理平台,一种高吞吐量的分布式发布订阅消息系统。由于Kafka具有高吞吐消息以及横向扩展的能力,能承受中高并发的数据的写入于读取,特别适合实时流数据处理,因此已越来越广泛的将Kafka作为消息队列来使用。

对于Kafka使用最多就是高吞吐的消息队列功能。Kafka集群承载着来自各个地方的数据接入,在某些场景下,如果某个发送端因为故障导致发送的数据出现异常,此时需要找到该数据是从哪个客户端发送过来的。然而Kafka本身作为一个消息队列只负责存储消息本身并不负责维护该消息的来源信息,一旦发生异常数据需要追踪某些数据的来源,将是一件比较麻烦的事情,甚至无法追踪到数据的来源,由此给企业带来损失。

为了追踪数据的来源,常见的做法是:发送端发送数据时将本机的来源信息封装到数据中,然后再提交到Kafka集群中。但是这种方式存在诸多弊端,包括:1、客户端获取的来源信息,难以保证来源信息是正确的,也就难以根据该信息来进行数据追溯;2、发送数据的客户端通常只有发送功能,并没有收集来源信息的功能,无法发送来源信息;3、客户端过多的情况下改造成本过高;等。

因此,如何低成本、可靠的将来源信息添加到数据中已成为本领域技术人员亟待解决的技术问题。



技术实现要素:

本申请的目的是提供一种数据中添加来源信息的方法,低成本、可靠的将来源信息添加到数据中。本申请的另一个目的是提供一种数据中添加来源信息的装置、设备以及计算机可读存储介质,均具有上述技术效果。

为解决上述技术问题,本申请提供了一种数据中添加来源信息的方法,包括:

获取客户端请求的请求体;

获取所述客户端请求的来源信息;

将所述来源信息回写到所述客户端请求的所述请求体中;

将请求体包含所述来源信息的所述客户端请求转发到数据存储端。

可选的,所述获取所述客户端请求的来源信息包括:

获取所述客户端请求的IP、请求方式以及请求时间。

可选的,所述将请求体包含所述来源信息的所述客户端请求转发到数据存储端包括:

将请求体包含所述来源信息的所述客户端请求转发到kafka集群。

可选的,还包括:

判断客户端请求是否满足转发条件;

当所述客户端请求不满足转发条件时,记录异常日志。

可选的,所述转发条件为:

所述客户端请求携带的数据不是空数据,且能够获取到所述客户端请求的来源信息,且获取到的所述来源信息正常。

可选的,还包括:

通过配置nginx转发模块,引入lua脚本,以通过运行所述lua脚本执行获取客户端请求的请求体及后续操作。

为解决上述技术问题,本申请还提供了一种数据中添加来源信息的装置,包括:

第一获取单元,用于获取客户端请求的请求体;

第二获取单元,用于获取所述客户端请求的来源信息;

回写单元,用于将所述来源信息回写到所述客户端请求的所述请求体中;

转发单元,用于将请求体包含所述来源信息的所述客户端请求转发到数据存储端。

可选的,还包括:

判断单元,用于判断客户端请求是否满足转发条件;

记录单元,用于当所述客户端请求不满足转发条件时,记录异常日志。

为解决上述技术问题,本申请还提供了一种数据中添加来源信息的设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上任一项所述的数据中添加来源信息的方法的步骤。

为解决上述技术问题,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的数据中添加来源信息的方法的步骤。

本申请所提供的数据中添加来源信息的方法,包括:获取客户端请求的请求体;获取所述客户端请求的来源信息;将所述来源信息回写到所述客户端请求的所述请求体中;将请求体包含所述来源信息的所述客户端请求转发到数据存储端。

可见,本申请所提供的数据中添加来源信息的方法,针对每一个客户端请求,在接收到客户端请求之后,会首先获取客户端请求的请求体以及来源信息,并将来源信息回写到请求体中,即对客户端请求携带的数据进行重新的封装,然后再将客户端请求转发给数据存储端,此时数据存储端接收到的客户端请求携带的数据是包含来源信息的数据。上述过程在客户端与数据存储端的中间环节完成,对来自各客户端的客户端请求均会在来自客户端的数据中添加来源信息,不需要客户端添加来源信息,客户端不需要修改任何配置,可做到客户端无感知,也不需要数据存储端来添加来源信息,可以实现低成本、可靠的将来源信息添加到数据中。

本申请所提供的数据中添加来源信息的装置、设备以及计算机可读存储介质均具有上述技术效果。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例所提供的一种数据中添加来源信息的方法的流程示意图;

图2为本申请实施例所提供的一种数据中添加来源信息的装置的示意图;

图3为本申请实施例所提供的一种数据中添加来源信息的设备的示意图。

具体实施方式

本申请的核心是提供一种数据中添加来源信息的方法,低成本、可靠的将来源信息添加到数据中。本申请的另一个核心是提供一种数据中添加来源信息的装置、设备以及计算机可读存储介质,均具有上述技术效果。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参考图1,图1为本申请实施例所提供的一种数据中添加来源信息的方法的流程示意图,参考图1所示,该方法主要包括:

S101:获取客户端请求的请求体;

具体的,本申请所提供的数据中添加来源信息的方法可在采用ngx_kafka_module模块接收数据的方式的基础上实现。为此在Nginx中间件中集成lua-nginx-module模块,lua-nginx-module模块是支持nginx中增加lua代码的模块组件。配置nginx转发模块。通过配置nginx转发模块,引入lua脚本,以通过运行lua脚本执行获取客户端请求的请求体及后续操作。采用Nginx实现本技术方案,可以降低技术人员的技术门槛。

其中,Nginx中间件中集成lua-nginx-module模块包括:

首先,下载lua-nginx-module的程序包,以及相关依赖包,如LuaJIT、ngx_devel_kit等,并将程序包以及相关依赖包放在/usr/local目录。

然后,进入nginx源码目录重新编译nginx,编译命令:

./configure--prefix=/usr/local/nginx--with-http_v2_module

--with-ld-opt=\"-Wl,-rpath,/usr/local/LuaJIT/lib/\"

--add-module=/usr/local/lua-nginx-module

--add-module=/usr/local/ngx_devel_kit

--add-module=/usr/local/ngx_kafka_module/--with-stream

make&make install

配置nginx转发模块包括:

修改/usr/local/nginx/conf/nginx.conf文件,在提供kafka接收服务的位置增加lua脚本的引入:

rewrite_by_lua_file/usr/local/nginx/api/post.lua。

编写lua脚本:

新建脚本文件:/usr/local/nginx/api/post.lua。

完成上述配置以及脚本编写之后,运行lua脚本,每次接收到客户端请求后,从本次接收到的客户端请求中获取客户端请求的请求体,该请求体实则为客户端发送的数据。

其中,获取客户端请求的请求体,即获取客户端发送的数据的lua脚本可以如下:

ngx.req.read_body();

local str=ngx.req.get_body_data();

S102:获取所述客户端请求的来源信息;

具体的,本步骤旨在获取客户端请求的来源信息,具体可以从客户端请求的请求头部获取来源信息,以进一步将来源信息添加到客户端发送的数据中。

其中,在一种具体的实施方式中,获取客户端请求的来源信息包括:获取所述客户端请求的IP、请求方式以及请求时间。

具体而言,本实施例中,来源信息具体包括IP、请求方式以及请求时间。其中,获取IP的lua脚本可以如下:

local headers=ngx.req.get_headers();

local ip=headers[\"X-REAL-IP\"]or headers[\"X_FORWARDED_FOR\"]or ngx.var.remote_addr or\"0.0.0.0\"。

可以明白的是,来源信息包括IP、请求方式以及请求时间的实施例仅为本申请提供的一种实施方式,而不作为唯一限定,对于来源信息的内容可以进行差异性设置。例如,来源信息可以只包括IP,也可以为IP、请求方式以及请求时间的任意组合,还可以包括其他表征来源的内容。

S103:将所述来源信息回写到所述客户端请求的所述请求体中;

S104:将请求体包含所述来源信息的所述客户端请求转发到数据存储端。

具体的,在获取到请求体即数据,以及来源信息后,首选将所获取的来源信息回写到客户端请求的请求体中,即将来源信息添加到数据中,形成新的数据。然后,在将所述来源信息回写到所述客户端请求的所述请求体中后,进一步再将包含来源信息的客户端请求转发到数据存储端,此时数据存储端接收到的客户端请求携带的数据是包含来源信息的数据。后续一旦发现异常数据,可以根据其中的来源信息追踪发送数据的客户端。

其中,将来源信息回写到请求体,形成新的数据的lua脚本可以如下:

ngx.req.set_body_data(str..\"-=-=-=-=-=-=-\"..ip)。

另外,在一种具体的实施方式中,将请求体包含所述来源信息的所述客户端请求转发到数据存储端的可以包括:将请求体包含所述来源信息的所述客户端请求转发到kafka集群。

也就是说,本实施例中,数据存储端为kafka集群,在将来源信息回写到请求体之后,调用kafka接口,将包含来源信息的客户端请求转发到kafka集群,kafka集群接收包含来源信息的数据,并存储包含来源信息的数据。

其中,为实现将客户端请求转发到kafka集群,可在nginx配置文件中加入转发到kafka的配置,具体表示如下:

kafka_topic demo。

进一步,在上述实施例的基础上,作为一种具体的实施方式,还包括:

判断客户端请求是否满足转发条件;

当所述客户端请求不满足转发条件时,记录异常日志。

其中,所述转发条件可以为:

所述客户端请求携带的数据不是空数据,且能够获取到所述客户端请求的来源信息,且获取到的所述来源信息正常。

具体而言,接收客户端请求,并从中获取请求体,即获取数据。如果客户端请求携带的数据是空数据,则此时记录异常日志。如果客户端请求携带的数据不是空数据,但是未能获取到来源信息,则此时同样记录异常日志。如果客户端请求携带的数据不是空数据,且能够获取到来源信息,但是获取到的来源信息异常,例如获取到的IP为伪造的IP,则此时还会记录异常日志。当客户端请求不满足转发条件时,此时可不转发该不满足转发条件的客户端请求。

综上所述,本申请所提供的数据中添加来源信息的方法,包括:获取客户端请求的请求体;获取所述客户端请求的来源信息;将所述来源信息回写到所述客户端请求的所述请求体中;将请求体包含所述来源信息的所述客户端请求转发到数据存储端。可见,本申请所提供的数据中添加来源信息的方法,针对每一个客户端请求,在接收到客户端请求之后,会首先获取客户端请求的请求体以及来源信息,并将来源信息回写到请求体中,即对客户端请求携带的数据进行重新的封装,然后再将客户端请求转发给数据存储端,此时数据存储端接收到的客户端请求携带的数据是包含来源信息的数据。上述过程在客户端与数据存储端的中间环节完成,对来自各客户端的客户端请求均会在来自客户端的数据中添加来源信息,不需要客户端添加来源信息,客户端不需要修改任何配置,可做到客户端无感知,也不需要数据存储端来添加来源信息,可以实现低成本、可靠的将来源信息添加到数据中。

本申请还提供了一种数据中添加来源信息的装置,下文描述的该装置可以与上文描述的方法相互对应参照。请参考图2,图2为本申请实施例所提供的一种数据中添加来源信息的装置的示意图,结合图2所示,该装置包括:

第一获取单元10,用于获取客户端请求的请求体;

第二获取单元20,用于获取所述客户端请求的来源信息;

回写单元30,用于将所述来源信息回写到所述客户端请求的所述请求体中;

转发单元40,用于将请求体包含所述来源信息的所述客户端请求转发到数据存储端。

具体而言,每次接收到客户端请求后,第一获取单元10从本次接收到的客户端请求中获取客户端请求的请求体,该请求体实则为客户端发送的数据。第二获取单元20获取客户端请求的来源信息,具体可以从客户端请求的请求头部获取来源信息。在第一获取单元10获取到请求体以及第二获取单元20获取到来源信息的基础上,回写单元30进一步将获取到的来源信息回写到客户端请求的请求体中,即将来源信息添加到数据中,形成新的数据。然后,在回写单元30将所述来源信息回写到所述客户端请求的所述请求体中后,转发单元40进一步再将包含来源信息的客户端请求转发到数据存储端,此时数据存储端接收到的客户端请求携带的数据是包含来源信息的数据。

在上述实施例的基础上,可选的,所述第二获取单元20具体用于:

获取所述客户端请求的IP、请求方式以及请求时间。

具体而言,本实施例中,来源信息具体包括IP、请求方式以及请求时间。

在上述实施例的基础上,可选的,所述转发单元40具体用于:

将请求体包含所述来源信息的所述客户端请求转发到kafka集群。

具体而言,本实施例中,数据存储端为kafka集群,回写单元30在将来源信息回写到请求体之后,转发单元40调用kafka接口,将包含来源信息的客户端请求转发到kafka集群,kafka集群接收包含来源信息的数据,并存储包含来源信息的数据。

在上述实施例的基础上,可选的,还包括:

判断单元,用于判断客户端请求是否满足转发条件;

记录单元,用于当所述客户端请求不满足转发条件时,记录异常日志。

在上述实施例的基础上,可选的,所述转发条件为:

所述客户端请求携带的数据不是空数据,且能够获取到所述客户端请求的来源信息,且获取到的所述来源信息正常。

具体而言,接收客户端请求后,第一获取单元10从中获取请求体,即获取数据。如果客户端请求携带的数据是空数据,则此时记录单元记录异常日志。如果客户端请求携带的数据不是空数据,但是第二获取单元20未能获取到来源信息,则此时记录单元同样记录异常日志。如果客户端请求携带的数据不是空数据,且第二获取单元20能够获取到来源信息,但是第二获取单元20获取到的来源信息异常,例如获取到的IP为伪造的IP,则此时记录单元还会记录异常日志。当客户端请求不满足转发条件时,此时转发单元可不转发该不满足转发条件的客户端请求。

在上述实施例的基础上,可选的,还包括:

配置单元,用于通过配置nginx转发模块,引入lua脚本,以通过运行所述lua脚本执行获取客户端请求的请求体及后续操作。

本申请所提供的数据中添加来源信息的装置,针对每一个客户端请求,在接收到客户端请求之后,会首先获取客户端请求的请求体以及来源信息,并将来源信息回写到请求体中,即对客户端请求携带的数据进行重新的封装,然后再将客户端请求转发给数据存储端,此时数据存储端接收到的客户端请求携带的数据是包含来源信息的数据。上述过程在客户端与数据存储端的中间环节完成,对来自各客户端的客户端请求均会在来自客户端的数据中添加来源信息,不需要客户端添加来源信息,客户端不需要修改任何配置,可做到客户端无感知,也不需要数据存储端来添加来源信息,可以实现低成本、可靠的将来源信息添加到数据中。

本申请还提供了一种数据中添加来源信息的设备,参考图3所示,该设备包括存储器1和处理器2。

存储器1,用于存储计算机程序;

处理器2,用于执行计算机程序实现如下的步骤:

获取客户端请求的请求体;获取所述客户端请求的来源信息;将所述来源信息回写到所述客户端请求的所述请求体中;将请求体包含所述来源信息的所述客户端请求转发到数据存储端。

对于本申请所提供的设备的介绍请参照上述方法实施例,本申请在此不做赘述。

本申请还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现如下的步骤:

获取客户端请求的请求体;获取所述客户端请求的来源信息;将所述来源信息回写到所述客户端请求的所述请求体中;将请求体包含所述来源信息的所述客户端请求转发到数据存储端。

该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

对于本申请所提供的计算机可读存储介质的介绍请参照上述方法实施例,本申请在此不做赘述。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、设备以及计算机可读存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的数据中添加来源信息的方法、装置、设备以及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围。

再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献