一种基于流计算的多主机行情系统的异常检测方法及系统与流程

文档序号:22616251发布日期:2020-10-23 19:16阅读:87来源:国知局
一种基于流计算的多主机行情系统的异常检测方法及系统与流程

本发明涉及证券行情系统的异常检测技术领域,具体来说是一种基于流计算的多主机行情系统的异常检测方法及系统。



背景技术:

上证所level-2行情是上海证券交易所推出的实时行情产品,主要提供在上海证券交易所上市交易的证券产品的实时行情数据。为了保证市场参与者实时获取丰富、准确的level-2行情,上证信息致力于打造高可用、低延时的level2行情系统。

面对复杂的网络环境和外部不可控因素,单中心单主机的行情系统无法满足全年99.99%的运行目标,因此,level-2行情系统采用双中心、多主机的方式进行设计和运行。单中心内两台主机互为主备,下游系统双路接入各中心的主用主机,如果单中心的主用主机异常,则切换到备用主机。这样的设计在提高高可用、降低依赖性方面,有了很好的提升,但是由于4台主机是单独运行、互不影响,及时发现单台或多台主机异常的难度也大大增加。主要难点在于,单主机的异常检测通常是将业务数据时间与服务器时间进行比较,偏差超过阈值则视为异常。但是业务数据是在多台服务器之间流转,从上游到下游,服务器时间很难保证一致性(即使有时钟同步,精确度难以满足),再加上阈值难以设置,导致出现异常的漏报或者误报。

因此,在提供高可用和低延时的前提下,为保证快速、及时发现行情系统的异常,需要设计一种基于流计算的多主机行情系统的异常检测方法及系统。



技术实现要素:

本发明的目的在于解决现有技术的不足,提供一种基于流计算的多主机行情系统的异常检测方法,以检测多主机情况下的延迟、中断等异常问题。

为了实现上述目的,设计一种基于流计算的多主机行情系统的异常检测方法,所述的方法通过采集服务器从各个主机中采集业务数据指标存入采集队列;通过计算服务器从采集队列中处理业务数据指标,并在流计算中过滤出待检测的业务数据指标,再进行业务数据指标的格式转换,并从总的数据流中获取两条数据流:基线流和检测流,所述的基线流用于计算异常基线,所述的检测流用于指标数据的实时检测。

对于所述的基线流,通过一个大小为n秒的时间窗口,对各个主机的业务数据指标进行聚合计算,并将计算值存入基线队列中。

在一个大小为n秒的窗口内,对各个主机的业务数据指标进行检测,若连续m个周期接收不到业务数据指标,则视为无数据异常;若实时值比基线值小,则视为有数据异常。

若有数据异常时,生成一条告警信息并发送给监控器;若无数据异常,则进入下一个窗口进行检测。

所述的方法包括如下步骤:

s101.获取各个主机的业务数据指标;s102.基于关键字进行过滤,筛选出待检测的业务数据指标;s103.根据待检测的业务数据指标的类型,将指标格式进行转换;s104.在基线流中进行基线计算并在检测流中进行异常检测。

所述的s103具体包括将窗口指标的时间格式转成yyyy-mm-ddhh:mm:ss,将作为计算指标的时间格式转成时间戳,将字符串转成长整型。

所述的s104具体包括如下步骤:初始化各个主机的数据流列表,并从一个周期中所收到的第一条消息开始,进行基线流的数据的获取;根据业务数据指标中的_datetime字段,进行窗口的划分,并在一个窗口中,对各个主机的指标状态值进行聚合计算,将计算的最大值作为value,_datetime+2n作为key,保存在基线值列表中。

所述的基线流的基线值列表采用将异常信息发送到统一监控系统中。

所述的s104具体包括如下步骤:在一个窗口内,按主机进行数据校验,收到消息的主机的指标状态值重置为n,未收到消息的主机的指标状态值减1;在一个窗口内,在基线值列表中找到当前窗口所对应的基线值,并将各个主机的指标状态值与基线值进行比较,若小于基线值,则该主机的指标状态值变为0;若大于或者等于基线值,则该主机的指标状态值保持不变;若主机状态值为0,则判定为异常,将异常信息发送到监控器中;若主机状态值不为0,则判定为无数据异常。

本发明还涉及一种用于所述的基于流计算的多主机行情系统的异常检测方法的系统,包括用于从各个主机中采集业务数据指标存入采集队列的采集服务器;用于从采集队列中处理业务数据指标,并在流计算中过滤出待检测的业务数据指标,再进行业务数据指标的格式转换,并从总的数据流中获取两条数据流的通过计算服务器,所述的两条数据流包括基线流和检测流,所述的基线流用于计算异常基线,所述的检测流用于指标数据的实时检测。

本发明同现有技术相比,其优点在于:相比较单主机判断自身异常的方法,多主机异常检测方法提高了主机异常检测的准确率、缩减了主机异常检测的时间;并且采用队列作为内部模块通信的方式,降低了模块之间的耦合度,保证系统的高可用和扩展性;以多进程的方式处理主机异常检测,有助于提高异常检测的并行处理能力。

附图说明

图1是本发明实施例1中多主机行情系统异常检测方法的流程示意图。

图2是本发明实施例1中的异常情况1(无数据)的检测状态图。

图3是本发明实施例1中的异常情况2(有数据)的检测状态图。

具体实施方式

下面结合附图对本发明作进一步说明,这种装置及方法的结构和原理对本专业的人来说是非常清楚的。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本实施方式提供了一种基于流计算的多主机行情系统的异常检测方法及系统,能够解决现有技术中多主机状况下的延迟、中断等异常情况的发现问题。

该方法部署于统一监控系统中,该系统由若干台用于采集、计算、存储的服务器组成,包括:用于从各个主机中采集业务数据指标存入采集队列的采集服务器;用于从采集队列中处理业务数据指标,并在流计算中过滤出待检测的业务数据指标,再进行业务数据指标的格式转换,并从总的数据流中获取两条数据流的通过计算服务器;以及用于存储各数据的存储服务器。

其中,采集服务器负责从各个主机中采集业务数据指标存入采集队列,计算服务器从采集队列中处理业务数据指标,并在流计算中先过滤出所需要的关键的指标,再进行指标的格式转换。计算服务器从数据流中拷贝出两条数据流,一条是基线流,负责计算异常基线,一条是检测流,负责指标数据的实时检测。

在所述的基线流中,通过一个大小为n秒(默认1s)的时间窗口,对多主机的指标进行聚合计算,计算值存入基线队列中。每个周期的聚合计算过程中所得数据主要有两个用途,一是求得最大值作为基线值用于后续比较,二是与当前基线值比较,这个当前基线值是前述计算的最大值。

而在所述的检测流中的检测,主要分为无数据的异常检测和有数据(数据无更新或者慢更新)的异常检测。在一个窗口内,对若干路主机的业务数据指标进行检测,若连续m个(默认2)周期接收不到指标,则视为无数据异常。若实时值比基线值小,则视为有数据(无更新或者慢更新)异常。两种异常均能产生一条告警发送给统一监控。若无两种异常,则进入下一个窗口进行检测,以此类推。

实施例1

本实施例提供了一种基于流的多主机行情系统异常检测方法的实施例,本方法用于解决多主机行情系统的指标异常检测的问题,确保及时发现行情系统中的异常。

所有的行情系统主机从不同的数据源接收公有行情数据、私有行情数据,各自处理接收到的数据并且下发到下游系统。正常运行期间,因此各主机接收到的数据无法完全一致,以接收到的数据中公有时间为例,无法保证同一时间点各主机收到的公有时间一致,无法简单通过时间确认哪台主机是正常或者异常。

在以下实施方式中,在level-2生产环境中进行,在统一监控中部署。图1示出了该系统的流程示意图,该方法包括如下步骤:

s101:获取多主机的秒级业务数据指标。

s102:基于关键字进行过滤,筛选出待检测的业务指标。

s103:根据待检测业务指标的类型,为了后续进行窗口切分和指标计算,将指标格式进行转换,如作为窗口指标的时间格式转成yyyy-mm-ddhh:mm:ss、作为计算指标的时间格式转成时间戳(长整型)、字符串转成长整型等。

s104:在基线流中进行基线计算并在检测流中进行异常检测。具体步骤如下:

(1)初始化:窗口大小和滑动步长初始化为n秒(默认为1),初始化各主机的数据状态列表,参考图2和图3。

(2)从当天收到第一条消息开始,作为当天流处理的开始,初始化基线值列表。为提高查询效率,所述的基线值列表采用hashmap结构。

(3)证券的数据消息中具有表示时间的_datetime字段,因此,可以根据消息中_datetime字段,进行窗口的划分。

(4)在一个窗口中,对各个主机的set0_publictime指标进行聚合计算(求最大值)。

(5)将计算的最大值,_datetime+2n作为key,最大值作为value,保存在基线值列表中。

(6)参考图2所示,异常情况1检测,即检测是否无更新,在一个窗口内,按主机进行数据校验,收到消息的主机状态重置为n,未收到消息的主机状态减1。

(7)参考图3所示,异常情况2检测,即检查是否慢更新,在一个窗口内,去基线值列表中找到当前窗口对应的基线值,各主机的set0_publictime与基线值进行比较,若小于基线值,则主机状态变为0;若大于或者等于基线值,则主机状态保持不变。

(8)若主机状态值为0,则判定是一个异常,跳转到步骤(9);若主机状态值不为0,则正常结束,跳转到步骤(10)。

(9)将异常信息发送到统一监控系统中。

(10)结束。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1