百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

海量数据的实时指标计算(海量数据算法)

ccwgpt 2024-10-26 08:43 35 浏览 0 评论

? 最近看了一本书叫《风控要略—互联网业务反欺诈之路》,这本书主要是讲互联网产品安全防范的,我之前做过一年情报数据分析的工作,当时觉得这方面工作很机密,网络上几乎没什么相关的资料,这本书让我与之前的工作产生了共鸣,因此还是推荐一下这本书。
? 对于海量数据库以及实时指标计算,我以前了解过一些大数据技术相关的知识,由于现在工作中涉及较少,因此写了一篇笔记了解实时指标计算方面的知识。

目录

  • 一、实时指标计算概述
  • 二、实时指标计算方案
  • 2.1 基于数据库SQL的计算方案
  • 2.2 基于事件驱动的计算方案
  • 2.3.基于实时计算框架的计算方案
  • 2.3.1 Storm介绍
  • 2.3.2 Spark Straming介绍
  • 2.3.3 Flink介绍

三、实时指标计算实践

3.1 数据拆分

3.2 分片计算

3.3 引入Flink

3.4 Lambda架构

四、参考文章

一、实时指标计算概述

? 在风控反欺诈业务中,为了实时进行业务事件的风险判断,要求指标计算延迟非常低,一般在毫秒或几十毫秒级别。常见的指标类型有下:

? 可以看到指标不仅包含关联个数求和统计,还包括诸如设备某段时间的移动距离、账号某段时间范围内的活跃天数等。指标的计算的核心逻辑是对一定时间范围内的业务事件进行统计计算。指标的生成逻辑可以抽象为时间窗口、事件、主属性、副属性、计算逻辑的组合。这些指标会作为风控模型的输入变量,或者作为专家规则集的一部分,参与对业务风险的综合判断。

? 在反欺诈业务中,为了能及时发现新的黑产行为,以上业务指标计算需要随时上线,而且时间窗口和计算维度组合均不确定。因此为了满足反欺诈系统快速响应的需求,就要构建实时的反欺诈指标计算系统,用于支持策略运营人员灵活配置和使用。

二、实时指标计算方案

? 实时指标计算方案常见的实现方法有基于数据库SQL的计算方案、基于事件驱动的计算方案和基于实时计算框架的计算方案三种。

2.1 基于数据库SQL的计算方案

? 关系数据库支持基于SQL语句进行统计计算,这种方式实现简单,但不够灵活,响应时间得不到保障。比如计算最近1小时内某ip注册账号个数的代码可以如下:

select count(1) from xxx where ip='x.x.x.x' and gmt_create>now()-1 hour

2.2 基于事件驱动的计算方案

? 注册、登录、交易等都是独立的事件,事件可以转化成消息进入kafka等消息系统中。比如以最近1小时内某IP注册账号个数为例,当注册事件到达时,可以在数据库或缓存中构造KV,代码如下:

112.3.10.6 :[{
"deviceId":"acefhahefbibv",
"account":"jack"
"timestamp":,1560745934747,
"eventType":"register"
},{
"deviceId":"acefhahefbibv",
"account":"jim"
"timestamp":,1560745934747,
"eventType":"login" },
{
"deviceId":"acefhahefbibv",
"account":"lily"
"timestamp":,1560745934747,
"eventType":"register"}]

? 当指标查询请求来到时,只需要进行一次KV查询,即可以获得全部相关数据,然后在内存中进行数据筛选,得出结算结果。
? 当时间跨度较大,数据量较大的情况下,可以采用差分计算的方法。比如,计算最近一小时内注册的手机号数量,可以预先10分钟做一次聚合,最后的查询优化统计为(最近几分钟明细+5个10分钟聚合数据+10分钟明细数据)。
? 这种计算方式的优点在于可以进行预计算,查询性能较好。缺点是每一个指标的计算都需要处理消息系统、中间结果存储系统、业务逻辑,需要针对不同的事件场景进行逻辑开发,且需要每次进行发布,而且需要进行大量的预计算。

2.3.基于实时计算框架的计算方案

? 实时计算框架解决了方法二的痛点,将数据流、中间结果存储、性能和可靠性交给框架本身解决,它提供易用的不同层次抽象的API,甚至可以通过SQL完成一个计算指标的上线。业界流行的三大实时计算框架:Storm、Spark Streaming和Flink。
先了解两组基础概念:

1.实时计算和离线计算
实时计算对延迟要求较高,要求在秒级甚至毫秒级就给出结果。离线计算一般指天级别(T+1)或小时级别(T+H)给出计算结果。
2.批计算和流计算
批计算是按照数据块进行计算,一般需要累积一定时间或一定的数据量再进行计算,有一定延迟。流计算是针对数据流进行计算,1条数据处理完成后立刻发给后续计算节点,延迟较低。批计算如果时间间隔很短,处理速度很快,也可以称为某种意义上的准实时计算。

2.3.1 Storm介绍

? Storm是比较早出现的实时计算框架。主要概念有Spout(产生数据源)、Bolt(消息处理者)、Topology(网络拓扑)、Tuple(元祖)。
? Storm提交运行的程序称为Topology,Topology处理的最小消息单位是一个Tuple,也就是一个任意对象的数组。在Storm中,数据像流水一样,源源不断地从一个处理模型完成处理后,快读流向下一处理模块。

2.3.2 Spark Straming介绍

? Spark Streaming是Spark核心API的一个扩展,可以实现高吞吐量、具备容错机制的实施流数据的处理。它支持从Kafka、Flume、ZeroMQ等多种数据源获取数据,然后使用map、reduce和join函数进行复杂算法的处理,最后将处理结果存储到文件系统、数据库等。
? Spark Streaming本质上是基于核心Spark Core的,它接受实时流的数据,并根据一定的时间间隔拆分成一批批的数据,通过Spark Engine处理这批数据,整体框架如下:

2.3.3 Flink介绍

? Flink在数据处理方式上和Storm类似,并没有采用小批量处理的方式,把所有的任务当成流来处理,是真正的流式系统。此外它也是一个流批一体的计算框架。

? 从本质上说,Storm和Flink是真正意义的流式计算,延迟在毫秒级。Spark Streaming采用微小批的方式进行计算,延迟在秒级,对延迟要求不高的业务场景适用。

三、实时指标计算实践

? 在某个风控反欺诈业务场景中,需要计算基于设备号主属性的多个指标如下“

设备在最近5分钟登录次数。
设备在最近1小时登录过的账户个数。
设备在最近1天登录过的账户个数。
设备在最近1天使用过的IP个数。
设备在最近1天的GPS位置移动距离。

? 实时指标计算引擎的数据结构如下:

? 当新的业务事件到来时,实时指标计算引擎不断更新Value数据。然后根据事件驱动的计算方案进行KV查询,在内存中对筛选过后的数据进行计算。实际操作中,还可以结合数据压缩、应用缓存、数据截断等方式提升效率。比如用户设备最近1天登录1000次和10000次的风险是没有区别的,因此可以只存储最近1000次的数据。

数据拆分

? 为了对实时指标计算引擎进行优化,可以对数据进行拆分计算。比如将设备ID的数据拆分gps、ip、账户等维度,实际计算时只需查询设备ID账户维度的数据,不需要返回无用多余的数据。但是这种方式使得数据的复用性较差,导致NoSQL数据库占用较大的内存和存储,是一种空间换时间的优化方式。

分片计算

? 对于"频度-关联个数统计"类指标,由于需要去重,因此需要业务事件的明细数据。但是对于频度-出现次数统计类指标,本质上只是个数的计算,因此不需要去重,可以进一步优化,这种方法上面也提及到。

? 当业务事件触发风控规则时,只需要查询多个时间分片的数据,进行聚合累加即可。

引入Flink

? 通过代码配置指定计算任务,将各种复杂业务逻辑都交给Flink框架处理,计算过程完全交给框架实现。以"IP最近1小时登录次数"为例,对应的Flink示例代码如下:

Lambda架构

? 在实践场景中,有些指标需要回溯的时间较长,因此如果全部使用实时指标计算引擎的话,时间窗口很长,对系统的压力很大。Lmabda架构可以将一个时间跨度较长的实时指标计算转化为一个"较短时间窗口的实时指标"+"历史数据的离线指标"的聚合结果。实时指标用Flink做实时流处理,历史数据用Spark做批处理,Lambda架构分为实时层、批量层以及服务聚合层3层。

四、参考文章

《风控要略 互联网业务反欺诈之路》

相关推荐

十分钟让你学会LNMP架构负载均衡(impala负载均衡)

业务架构、应用架构、数据架构和技术架构一、几个基本概念1、pv值pv值(pageviews):页面的浏览量概念:一个网站的所有页面,在一天内,被浏览的总次数。(大型网站通常是上千万的级别)2、u...

AGV仓储机器人调度系统架构(agv物流机器人)

系统架构层次划分采用分层模块化设计,分为以下五层:1.1用户接口层功能:提供人机交互界面(Web/桌面端),支持任务下发、实时监控、数据可视化和报警管理。模块:任务管理面板:接收订单(如拣货、...

远程热部署在美团的落地实践(远程热点是什么意思)

Sonic是美团内部研发设计的一款用于热部署的IDEA插件,本文其实现原理及落地的一些技术细节。在阅读本文之前,建议大家先熟悉一下Spring源码、SpringMVC源码、SpringBoot...

springboot搭建xxl-job(分布式任务调度系统)

一、部署xxl-job服务端下载xxl-job源码:https://gitee.com/xuxueli0323/xxl-job二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库三、启动...

大模型:使用vLLM和Ray分布式部署推理应用

一、vLLM:面向大模型的高效推理框架1.核心特点专为推理优化:专注于大模型(如GPT-3、LLaMA)的高吞吐量、低延迟推理。关键技术:PagedAttention:类似操作系统内存分页管理,将K...

国产开源之光【分布式工作流调度系统】:DolphinScheduler

DolphinScheduler是一个开源的分布式工作流调度系统,旨在帮助用户以可靠、高效和可扩展的方式管理和调度大规模的数据处理工作流。它支持以图形化方式定义和管理工作流,提供了丰富的调度功能和监控...

简单可靠高效的分布式任务队列系统

#记录我的2024#大家好,又见面了,我是GitHub精选君!背景介绍在系统访问量逐渐增大,高并发、分布式系统成为了企业技术架构升级的必由之路。在这样的背景下,异步任务队列扮演着至关重要的角色,...

虚拟服务器之间如何分布式运行?(虚拟服务器部署)

  在云计算和虚拟化技术快速发展的今天,传统“单机单任务”的服务器架构早已难以满足现代业务对高并发、高可用、弹性伸缩和容错容灾的严苛要求。分布式系统应运而生,并成为支撑各类互联网平台、企业信息系统和A...

一文掌握 XXL-Job 的 6 大核心组件

XXL-Job是一个分布式任务调度平台,其核心组件主要包括以下部分,各组件相互协作实现高效的任务调度与管理:1.调度注册中心(RegistryCenter)作用:负责管理调度器(Schedule...

京东大佬问我,SpringBoot中如何做延迟队列?单机与分布式如何做?

京东大佬问我,SpringBoot中如何做延迟队列?单机如何做?分布式如何做呢?并给出案例与代码分析。嗯,用户问的是在SpringBoot中如何实现延迟队列,单机和分布式环境下分别怎么做。这个问题其实...

企业级项目组件选型(一)分布式任务调度平台

官网地址:https://www.xuxueli.com/xxl-job/能力介绍架构图安全性为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;调度中心和执...

python多进程的分布式任务调度应用场景及示例

多进程的分布式任务调度可以应用于以下场景:分布式爬虫:importmultiprocessingimportrequestsdefcrawl(url):response=re...

SpringBoot整合ElasticJob实现分布式任务调度

介绍ElasticJob是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管控、...

分布式可视化 DAG 任务调度系统 Taier 的整体流程分析

Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关...

SpringBoot任务调度:@Scheduled与TaskExecutor全面解析

一、任务调度基础概念1.1什么是任务调度任务调度是指按照预定的时间计划或特定条件自动执行任务的过程。在现代应用开发中,任务调度扮演着至关重要的角色,它使得开发者能够自动化处理周期性任务、定时任务和异...

取消回复欢迎 发表评论: