本文收拾自网易互娱资深工程师, Flink Contributor, CDC Contributor 林佳,在 FFA 实时风控专场的分享。本篇内容主要分为五个部分:

  1. 实时风控事务会话
  2. 会话相关的 Flink 完结
  3. HTAP 风控途径建造
  4. 进步风控成果数据能效
  5. 开展历程与展望未来

​网易游戏实时 HTAP 计费风控平台建设

众所周知,网易互娱的中心事务之一是线上互动娱乐运用服务,比方咱们耳熟能详的梦境西游、阴阳师等都是网易互娱的产品。不管是游戏产品仍是其他运用,都需求做出好的内容来吸引用户进行运用内购买,然后发生盈利。

​网易游戏实时 HTAP 计费风控平台建设

当用户在商城里点击产品进行购买的时分,会弹出付出界面,进行验证、付出后,就能够收到道具了。这个进程关于用户来说往往都是一些十分简略的操作,但为了确保这个进程能够正确结算、发货,整个付出流程其实跨过了许多服务供给商和终端,走了一条适当杂乱的调用链路。这些不同的事务节点之间会发生许多彼此的调用联系,然后发生一些异构的日志、数据、记载。

由于经过了网络,其中的数据或许会有必定时刻水位线的不一致、推迟,乃至数据丢失的状况,且本身这些数据又很或许是异构的,就更增大了咱们对这些数据进行剖析和运用的难度。

假如咱们需求用这些数据进行高时效性的毛病排查或许危险控制,就势必需求研发一套计划,来适配这样技能需求。为了处理以上的问题,咱们以 Flink 为核算引擎构建了一套实时风控途径,并为他起名为 Luna,下面我将为咱们进行具体的介绍。

实时风控事务会话

​网易游戏实时 HTAP 计费风控平台建设

常见的线上付出逻辑是,当用户在运用上点击商城的道具进行运用内购买的时分,用户的客户端终端就会到计费体系进行下单,获得本次下单的订单信息。

​网易游戏实时 HTAP 计费风控平台建设

然后咱们的客户端会弹出付出界面,用户进行途径付款。

​网易游戏实时 HTAP 计费风控平台建设

当付出完结后,咱们会把途径回来给客户端的付出凭据回传给计费体系,计费体系会去途径验证凭据是否有用。

​网易游戏实时 HTAP 计费风控平台建设

假如是有用的,就会告诉游戏服务器发货,这个时分咱们的客户端才会收到道具。这便是从用户点击到终究收到道具的整个流程。

​网易游戏实时 HTAP 计费风控平台建设

从这个现已极度简化了的付出模型能够看到,不同的公司、服务供给商、部门、服务体系会发生了一系列会话下的数据。假如咱们能把这些数据搜集起来,进行必定的处理后,复原其时用户操作的现场。这将对运营运维人员在定位毛病、排查毛病,乃至整个事务环境的微观剖析都有着十分重要的价值。

而剖析的要害点是,咱们怎么复原这个行为的现场,咱们把这个行为的现场叫风控事务会话,即由一次用户行为所引发的,需求多个体系协作完结、同时触发多个请求、发生跨过多个服务供给方调用的全进程。

这儿需求留意的是,事务会话跨过了多个彼此独立的请求链路,且没有一致大局的 trace-id 能够被提早置入一切的数据中。

​网易游戏实时 HTAP 计费风控平台建设

由于咱们的事务会话需求跨过多个请求链路,所以在数据相关剖析的时分就存在许多难题。比方

  • 多服务、多请求发生的异构成果难以直接相关。
  • 调用次序杂乱,存在并发、异步的状况。
  • 时刻跨度大、事务水位不同步。

曾经在处理付出丢单、付出一次重复发货等问题的时分,往往只能经过运营人员去处理,这就十分依靠于运维人员的经验了。并且在这些很多的数据里,会有十分多冗余和无用字段,还有或许会有一些十分杂乱的嵌套联系。这些都有或许让运维人员在判断时发生错判和误判。此外,还会给运维人员带来十分多的重复性作业,然后使得人力能效低下,把时刻浪费在重复的事情上。

前文也说到了开源 Tracing 计划,往往需求依靠大局的 trace-id。关于新的体系,咱们能够提早规划 trace-id 打点。但是关于有历史包袱的体系来说,他们往往不愿意批改盯梢来盯梢打点,那么这个时分传统的计划就走不通了。

​网易游戏实时 HTAP 计费风控平台建设

在这种状况下,假如咱们要进行事务会话复原,就需求规划一套新的计划。这套计划咱们期望能够具有以下功用:

  • 实时微观事务会话检索与查错。
  • 实时微观事务环境核算与风控。
  • 事务会话级数据能效发掘与进步。

​网易游戏实时 HTAP 计费风控平台建设

从复原事务会话到运用数据做 HTAP 实时风控途径的全进程,咱们运用 Flink 消费原始数据,依据途径上提早装备好的剖析模板,实时复原出事务会话。然后把事务会话的成果存储存起来,并为它打上咱们提早设置好的一些定论模型,发生的风控定论。

关于存储起来的这些微观会话进一步被聚合,然后发生整个事务环境上的微观核算量,以支撑咱们在整个途径上的风控剖析需求。

会话相关的 Flink 完结

Flink 是实时核算的施行标准,依据此咱们毫无疑问地挑选了它。

​网易游戏实时 HTAP 计费风控平台建设

那么实时事务会话相关在 Flink 体系上,咱们期望能够做出怎样的作用呢?

  • 榜首,零侵入。即无需对现有事务进行改动,也无需有大局的盯梢 ID,就能够做到事务会话的复原。
  • 第二,跨数据源。由于咱们的事务往往需求跨过 n 种数据源,所以咱们期望这 n 种数据源都能够被这个体系所支撑,比方日志、维表、现实表、REST 接口等。
  • 第三,实时。实时发生成果,无需等候 T+1。
  • 第四,低代码。咱们期望依据剖析需求,能够经过导游式的装备,来发生实时的剖析模板,并对微观核算报表,能够装备式的进行多维度聚合。

​网易游戏实时 HTAP 计费风控平台建设

上图展现的是 JFlink-SDK,它是网易自研的一套流管理途径以及它的开发手脚架 SDK。咱们能够把它了解成是一套能够模块化装备式开发的流作业手脚架,实时相关剖析的引擎便是依据这套手脚架开发出来的。

​网易游戏实时 HTAP 计费风控平台建设

回到在运用事务会话复原的问题上。来自各个数据源的数据事务点,经过各种方式被同步搜集到数据仓库的存储层中,咱们有多种数据存储搜集这些数据。针对各式各样的数据存储,Flink 有十分丰富的 connect 能够进行消费。然后 JFlink-SDK 又对它进行了二次封装,界说异构数据。使其在读取到 Flink 的时分,能够被转化成一致的视图。

​网易游戏实时 HTAP 计费风控平台建设

这些数据视图是咱们提早建造好的一些数据管理体系和途径,数据管理体系会为 JFlink-SDK 供给数据读取的规范。

​网易游戏实时 HTAP 计费风控平台建设

当经过 SDK Source 读取后,他们就会被一致转化成事务视图,这样就十分便利咱们后续对这些原始异构的数据进行相关了。

​网易游戏实时 HTAP 计费风控平台建设

它的数据结构是以基准和非基准一起构成的一种规划。在进行事务数据点相关的时分,它的基本思想是基准+弥补。所以咱们在挑选事务时,会挑选最为中心的风控阶段作为基准,也就意味着,基准是整个事务中最要害的过程,能够用仅有的 ID 相关起来。

关于经过事务 ID 相关起来的基准,咱们会构成一个类似图的数据结构,这个东西咱们称之为基准簇,它由同一种数据来源的基准和弥补所相关得到的一个雪花状数据结构。

​网易游戏实时 HTAP 计费风控平台建设

基准是事务会话中最要害的过程,它通常是公共带着的某种标志过程。比方以计费下单为场景,客户端的下单,翻开付出界面、上传凭据、付出完结是四个最为要害的过程。他们都打上了履行这些过程的订单号,这四个过程就能够作为整个事务规划的中心过程,也便是基准。由于数据是不按次序抵达的,所以呈现这是个过程中的恣意一个咱们都能够开启事务会话。

​网易游戏实时 HTAP 计费风控平台建设

而下单记载、产品概况、途径回调记载等等一些辅助性的数据,他们对问题定位起不了要害作用,并且它们或许没有基准中订单号的字段,所以就没有资历被选为基准。

但它们中也有一些字段能够和基准中的字段进行相关。比方途径回调日志,途径商在一些辅助性的数据上打了 trans_id 字段。它虽然没有 order_id,但它能够经过 trans_id 与基准中的 trans_id 树立一一映射的联系,也便是咱们能够经过 trans_id 相关起这份数据与基准簇的联系。

所以经过基准+弥补,咱们就能够处理目前线上体系,无法为一切数据打上一致 ID 埋点的痛点。

​网易游戏实时 HTAP 计费风控平台建设

在 Stream API 中基准相关的完结,咱们运用的是 Session Window。它是 Flink 供给给咱们的标准时刻窗口之一,能够在有数据流入的时分进行窗口时刻超时的重置。除此之外,假如整条流的事务水位线,越过了整个超时时刻的鸿沟,它就会触发窗口核算。这种成果就十分合适由用户触发的会话窗口,也合适咱们基准数据构造的逻辑。

但用户引起的这种行为,往往时刻是不固定的,所以带有特点的会话窗口就十分适配这种特性。比方风控事务会话的复原,和阅读产品到终究下单付出的整个付出运用轨迹的追踪,都十分合适用这种形式来进行窗口核算。

这儿的 Flink Session Window 其实便是前文说到的构造结束的基准簇,它包含了一切被相关进来的原始数据,以及按照必定规矩处理好的二级字段。至于它怎么在相关的时分进行字段抽取呢,后续再来评论这个规矩,此处就先认为,在窗口完结的时分就把簇核算出来了,并完结了所需字段核算和抽取。

​网易游戏实时 HTAP 计费风控平台建设

一般用户的付出意愿窗口往往在 1020 分钟,假如咱们直接运用 Event Time Session Window 来进行核算,就会发现假如用户很快完结了下单,但体系依然需求等候 1020 分钟,才能使会话窗口进行核算,这就大大降低了数据的时效性。

对此 Flink 也为咱们供给了一口入口,咱们能够自界说窗口的 Trigger 来设置窗口触发的时机和事务会话提早结束的断定。

举个比方,一些数据量极少的场景,它的水位线或许一直没有向前推进,这种状况咱们就能够加上 Process Timeout 和 FIRE & UPDATE 语义。这就能够让事务会话在水位线没有推进的状况下,先进行核算,往后发送。然后在下游进行确保,即当上游重复 fire 的时分,能够进行 update 的语义。

再举个比方,咱们能够在风控的剖析模板中装备一下。当事务会话满意某些条件的时分,就不用再等候超时了。比方当一切的节点都被相关上时,假如继续等候也不会等到任何节点,这个时分就无需等候超时时刻,能够立即 fire 出成果。

​网易游戏实时 HTAP 计费风控平台建设

当事务会话存在一些特殊且极端的状况,比方客户端付出到一半崩溃了,等了十分久才起来,这个时分很或许就会被拆分为两个事务会话,由于前一个事务会话现已超时了。这种时分咱们会挑选把两个被分裂的会话 fire 出来,然后由运维人员进行兼并或许保持原样。

​网易游戏实时 HTAP 计费风控平台建设

接下来咱们来评论一下,关于弥补的数据咱们又是怎么构造的。基准数据拥有公共 ID,所以它们能够被 Key By 到数据窗口里进行核算。但是弥补数据点往往是各自用各自不同的 ID 进行相关,所以这个时分咱们就能够类比数据库里的多表 join 了。不同的弥补数据就类似于一张不同的表,经过不同的字段与基准数据簇进行 join 操作。

​网易游戏实时 HTAP 计费风控平台建设

这便是咱们遇到的应战,它不仅相关字段不同,水位线的推进速度也很或许不相同,这都是无法把它们两者放到同时刻窗口中核算的要害因素。

那么怎么去处理这个问题呢?怎么依据扩展的基准先进常识,相关回没有公共 ID 的弥补数据呢?这正是整个处理没有公共 trans_id 还能构成会话的要害所在。

​网易游戏实时 HTAP 计费风控平台建设

类比 join 操作,Flink 现已为咱们供给了十分好用的算子,叫做 Interval Join。即两种输入数据分别取自己的特定字段作为 key,然后经过这个 key 把他们分到同一分组上,进行时刻区间内的 join。

Flink Event Time Interval Join 是把其时流和对手输入流里,指定上下鸿沟的区间内数据进行 join,这种特性就十分适用于咱们这种场景,由于当咱们从基准数据簇中取一个字段,和从非基准的弥补中取一个字段,假如它们等值,那就意味着它们属于同事务会话,它们应该进行相关。

这个时分就能够用 Interval Join 算子进行相关,并且 Interval Join 不会翻开时刻窗口,由于每条流的 GC Watermark 是依据对手流加上咱们提早装备的鸿沟时刻区间来进行的,这种结构就十分合适两种数据流时刻水位线推进不一致的状况。

​网易游戏实时 HTAP 计费风控平台建设

但是还有别的一种状况,便是当某一条数据来源有推迟的状况下,这笔数据会被丢失,这是 Flink 1.16 正式版之前的状况。在 Flink 1.17 版本中,社区的小伙伴现已把这个代码兼并进去了,后续很期待在新版本中运用这个功用。

​网易游戏实时 HTAP 计费风控平台建设

当数据推迟进行补回的时分,咱们的处理方式是,把推迟数据和其时相关的上下文,放到音讯队列里,经过流从头消费出来,并依据其时相关的上下文,从头从数据存储里把写进去的会话查回来,然后用相同的逻辑从头把这笔数据补回更新,写回数据库。

这样整个进程中无论是实时相关,仍是推迟数据的补回,用的逻辑都是彻底相同的,确保了咱们处理逻辑的简洁和一致性。

​网易游戏实时 HTAP 计费风控平台建设

终究咱们用 Flink 实时相关出来的事务会话会被存储起来以供检索,并经过 Luna 途径以行为树的方式进行展现。

HTAP 风控途径建造

当咱们完结了算法可行性测验,并运用 Flink 完结了技能原型后。接下来便是怎么把这一整套结构途径化,使其成为快捷、精确、丰富的风控途径。

​网易游戏实时 HTAP 计费风控平台建设

风控途径需求做到以下这些功用。

支撑微观排障,能够具体查询某一笔订单、事务会话其时的事务场景,把它复原出来;支撑从微观上核算整个环境的各种数据量。且装备和查询都需求是自助、导游式的。

​网易游戏实时 HTAP 计费风控平台建设

依据以上的考虑,咱们规划了 HTAP 实时风控途径 Luna。依据这个途径,用户就能够自己从各种异构数据源中挑选,装备事务行为树和剖析模板。然后途径会依据装备好的模板,起 Flink 流算出事务会话的成果,构成会话成果存到存储层。且支撑用户从途径上进行条件检索,进行多维度的聚合。

​网易游戏实时 HTAP 计费风控平台建设

剖析模板的装备咱们是做了自动更新,也便是一切途径上的更新都无需人工运维。

从上图中能够看到,中心组件是核算层的 Flink,加上存储层的 TiDB,加上咱们自己依据 JavaScript 的途径服务体系。目前能够达到微观查询是毫秒级,多维度的风控聚合成果在年级别都能够做到秒级查询。

​网易游戏实时 HTAP 计费风控平台建设

咱们的途径支撑,用户从不同的数据源中选出,需求参与这一次相关剖析的数据和重视抽取的字段进行装备。装备好后,Flink 会依据这些装备,自动生成出 Flink 的 Source 和 Sink。

​网易游戏实时 HTAP 计费风控平台建设

然后进行行为树的界说。界说整个事务行为会发生的动作,实质便是用人力运维排障方法论进行沉积和泛化,将装备的方式固化下来。之后这些装备模板就会用于生成 Flink 流的 UDF 装备,并被实时同步到运行中的 Flink 流中。

​网易游戏实时 HTAP 计费风控平台建设

除此之外,装备界面还供给了预览功用,即能够一边装备一边预览整个行为树。

​网易游戏实时 HTAP 计费风控平台建设

风控场景上的剖析模板批改后,假如不触及数据源的增减,咱们的流能够经过 broadcast stream 的特性进行自动同步和改变。

​网易游戏实时 HTAP 计费风控平台建设

从架构图中能够看出,咱们挑选了 TiDB 作为相关成果的存储层。那么咱们是怎么考虑的呢?

  • 数据成果需求灵敏可拓展,且适配索引。这样用户就能快速的自由装备抽取字段。
  • 频繁的更新操作。由于咱们的核算逻辑决议了咱们会构造基准数据,再构造弥补数据,以一种异步的方式写到数据库,所以需求频繁更新。
  • 齐备的聚合函数。由于微观核算需求做各式各样的聚合,以满意咱们数据剖析核算的需求。
  • 满意事务需求的写入/读取速度。

这样就能够运用列转行的结构,存储到咱们的联系数据库里了。

​网易游戏实时 HTAP 计费风控平台建设

列转行是把会频繁发生增减字段的 DDL 转化为 DML,就能够支撑咱们灵敏的数据结构。

​网易游戏实时 HTAP 计费风控平台建设

每个字段都需求索引这样的特性,这在数据量继续增大的表上,就有着十分优异的特性。

​网易游戏实时 HTAP 计费风控平台建设

在这样一种存储结构上,咱们的微观事务会话查询就能够做到毫秒级,灵敏结合多种条件进行检索,以协助运维人员快速查看线上危险和或许发生的毛病原因。

​网易游戏实时 HTAP 计费风控平台建设

当咱们点击查看任何具体的事务会话时,公共途径就会展现出其时这个事务会话的事务行为树,并抽取出有助于排障的一些要害字段和二级目标,极大便利了咱们的运维人员排查具体问题的场景。关于常见的问题,咱们乃至还会用定论模型直接给出风控定论,让咱们的运维人员进去就能立刻看出问题所在。

​网易游戏实时 HTAP 计费风控平台建设

关于微观核算,咱们必定也想到能够运用 SQL 作用在上面来进行核算了,究竟咱们把数据存在了联系型数据库 TiDB 里,但这儿还存在着一些坑点。

​网易游戏实时 HTAP 计费风控平台建设

当咱们的数据量超过 10 亿的时分,咱们的数据聚合时刻会呈现一些变化。比方当粒度是一小时,聚合时刻是一天的时分,咱们数秒能够完结。但当咱们把时刻拉到 60 天,几乎就出不来了。

在查看数据存储层的时分会发现,TiKV 现已 IO 满了,并且 CPU 飙升,由于咱们做的数据量实在是太大了。

​网易游戏实时 HTAP 计费风控平台建设

经过剖析整个履行计划能够看到,TiKV 运用惯例的形式进行 SQL 把一切数据捞到 TiDB 层进行聚合核算。这样做获取的数据函数会十分多,跟着咱们时刻区间的增大会越来越缓慢,这样咱们必定是不能承受的。

​网易游戏实时 HTAP 计费风控平台建设

那么咱们来回看一下风控的 AP 需求,咱们需求读取很多实时的相关的数据点;支撑有杂乱的聚合函数,且咱们的查询不应该影响到 Flink 流进行 TP 写入。

这个时分就会想到,TiDB 有一个叫 TiFlash 的组件,它能够完结 TiDB 的 HTAP 特性。也便是 AP 和 TP 相同用 SQL 来完结,且它是物理阻隔的,这就十分的适用于这样的场景。

​网易游戏实时 HTAP 计费风控平台建设

TiFlash 伪装成一个 Raft Learner TiKV 节点,参加 Raft Group,参与数据实时、事务性同步。这样就能够做到 AP 和 TP 的物理阻隔,并且它还支撑事物,这样就能够在履行 SQL 的时分无感进行 HTAP 了。

​网易游戏实时 HTAP 计费风控平台建设

在进行这样的优化后咱们能够看到,当咱们的查询包含多层 join,乃至有分位数核算的时分,90 天聚合时刻,粒度查询能够在十秒内回来和完结,这能够说是一次质的飞跃。

​网易游戏实时 HTAP 计费风控平台建设

最后,咱们把微观核算供给给用户。在 TiFlash 的助力下,咱们的途径能够做到秒级的 AP 多维度聚合查询。这种聚合查询出来的成果能够让咱们的数据剖析人员,从更高层次对整个事务环境的危险进行识别。

进步风控成果数据能效

当咱们能够实时发生事务会话的成果,并在途径上展现的时分,接下来咱们将经过以下几点进步数据效能。

  • 风控定论生成:节约重复人力本钱
  • 标签和核算:将概况数据归类核算为微观数据
  • 数据打宽:添加剖析维度
  • 可视化展现:发掘数据规则

​网易游戏实时 HTAP 计费风控平台建设

那么咱们为什么把数据存储在 TiDB 这样的一种联系型数据库里呢?

由于 TiDB 作为一个分布式数据库,被咱们广泛存储各项事务的现实和维度数据了。假如咱们把风控数据簇也放在这儿面,经过简略的专业操作咱们就能够完结数据的拓展,丰富咱们的数据报表。

​网易游戏实时 HTAP 计费风控平台建设

不仅是发生离线报表的时分能够这么便利的转,咱们在实时核算的时分,也进行了 Async Join,经过 Async Join 转 UDF 进行实时数据打宽,同时咱们支撑多种存储介质。

​网易游戏实时 HTAP 计费风控平台建设

关于这种 Async Join,咱们利用了 Flink 的 Async IO 的特性,并在 join 的时分进行了一些优化。比方进行批的 join,不同时刻水位线的缓存 join 以及 timeup 数据的侧输出等等,这些都为数据的精确性供给了保证。

​网易游戏实时 HTAP 计费风控平台建设

经过数据打宽后,咱们的风控核算剖析维度就能够更上一层楼了。之前经过 ID 无法做到的特殊聚合,现在把数据打宽,都能够进行可视化的一些剖析和展现了。

​网易游戏实时 HTAP 计费风控平台建设

​网易游戏实时 HTAP 计费风控平台建设

除此之外,关于常见问题,咱们支撑预先装备定论模型。当运维人员实时查询微观会话时,直接为他们给出定论。

​网易游戏实时 HTAP 计费风控平台建设

得到定论后,咱们就能够从更高的角度,调查和核算整个事务环境的微观状况了,乃至能够进行实时的事务环境监控。然后进步毛病的发现率、预警率、预警的精确率以及整个运维人力的能效。并且经过可视化的展现能够使咱们的风控途径更精确的供给服务。

开展历程与展望未来

​网易游戏实时 HTAP 计费风控平台建设

早在 2017 年咱们就对实时核算开端调研了,并在 2018 年构成了双向开展的规划,分别是途径化和 SDK 手脚架的改造,经过多层的迭代,终究构成咱们的一站式运维途径。

​网易游戏实时 HTAP 计费风控平台建设

跟着途径和 SDK 的开展,咱们的实时事务线也越来越广泛。比方从最早的日志剖析监控,到通用的解析 ETL,到用户画像,到杂乱的相关剖析,再到如今的实时风控途径,咱们也是在实时领域越走越远,这都是 Flink 给咱们带来的革新。

未来咱们期望,能够实时风控途径能够支撑更多的功用。比方咱们期望支撑用 Flink-SQL 即席查询风控成果;用户反馈驱动的风控模型批改;结合 Flink-ML 发掘更深层次数据价值。