一、项目全景与需求分析:金融图计算是什么?

大家好,我是这个项目的技术负责人。今天咱们聊聊金融图计算这个项目的第一章——全景与需求分析。

说实话,我第一次接触图计算的时候,脑子里也是一堆问号。图?不就是社交网络里那些好友关系吗?跟金融有啥关系?

后来真正做项目了才发现,金融领域里到处都是「关系」。你想想看,一个转账行为,背后涉及账户、交易、设备、IP、时间……这些实体之间天然就是一张网。用传统的关系型数据库去查「张三转给李四,李四又转给王五,王五跟张三有没有共同设备?」——这种多层关联查询,SQL 写出来能绕地球三圈,性能还惨不忍睹。

图计算,说白了就是专门处理这种「关系密集型」问题的技术。它把实体当成节点,把关系当成边,查询起来就像在脑子里画线一样自然。

项目背景:为什么非要用图?

这个项目来自一家中型支付公司。他们每天处理上千万笔交易,风控团队最头疼的问题就是「团伙欺诈」。

什么叫团伙欺诈?举个例子:

  • 一个设备登录了 50 个不同的账户
  • 这些账户又都向同一个新注册账户转账
  • 那个新账户的钱,几分钟内就分散到了几十个不同的银行卡

这种模式,用传统规则引擎很难抓到。因为每个单点看起来都「正常」——一个设备登录多个账户?可能是家庭共用。一个账户收很多钱?可能是电商收款。但把这些关系连起来看,异常就非常明显了。

核心痛点:传统风控系统只能做「单点检测」,无法做「关系挖掘」。团伙欺诈的识别率不到 30%。

我记得第一次跟业务方开会,风控总监直接说:「你们别跟我讲技术,我就问一个问题——能不能在 200 毫秒内,查出一个账户背后关联的所有可疑实体?」

嗯,这就是我们做这个项目的初衷。

核心业务需求:到底要解决什么问题?

经过几轮需求梳理,我们提炼出三个核心场景:

  1. 实时团伙检测:交易发生时,实时判断当前账户是否与已知黑名单账户存在「二度关联」或「三度关联」。
  2. 资金链路追踪:给定一个可疑账户,快速画出它的资金流入流出路径,找到最终的资金汇聚点。
  3. 设备指纹关联:通过设备、IP、手机号等维度,发现不同账户之间的隐藏关联。

这三个场景,每个都对查询性能有硬性要求。业务方给的 SLA 是:单次查询延迟不超过 500 毫秒,数据更新延迟不超过 1 秒

我的经验:需求阶段一定要把「性能指标」写死。我见过太多项目,技术选型时没考虑性能,上线后被业务方追着骂。你想想看,一个风控查询如果超过 1 秒,用户都完成转账了,查出来还有什么意义?

技术选型:Neo4j 还是 JanusGraph?

这是项目初期争论最激烈的问题。我直接说结论吧——我们最终选了 JanusGraph

为什么?我列个对比表你就明白了:

维度 Neo4j JanusGraph
存储引擎 自研本地存储 HBase / Cassandra / Bigtable
查询语言 Cypher Gremlin
水平扩展 有限(依赖企业版) 原生支持
事务支持 ACID 最终一致性
社区活跃度 中等
学习曲线

看到这里你可能会问:「Neo4j 学习成本低、社区活跃,为什么不选它?」

原因很简单——数据量。我们预估半年后节点数会超过 10 亿,边数超过 50 亿。Neo4j 的社区版单机最多支持几十亿节点,企业版虽然能集群,但授权费用高得离谱。而且,Neo4j 的集群方案本质上还是「主从架构」,写扩展性有限。

JanusGraph 就不一样了。它底层依赖 HBase 或 Cassandra,这些分布式存储天生就是为海量数据设计的。加节点就能线性扩展,成本可控。

避坑指南:我曾经在一个项目里选了 Neo4j,结果半年后数据量翻了三倍,单机扛不住了。迁移到 JanusGraph 的过程简直是噩梦——数据导出、Schema 重建、查询重写……所以这次我坚持一开始就选对。

当然,JanusGraph 也有缺点。Gremlin 查询语言比 Cypher 难学,调试起来也麻烦。但我觉得,技术选型不能只看「好不好学」,要看「能不能撑住业务」。

项目里程碑规划

整个项目我们分了四个阶段,每个阶段 3 个月:

  • 第一阶段(第 1-3 月):基础设施搭建
    • 部署 JanusGraph + HBase 集群
    • 完成数据模型设计(账户、交易、设备等节点和边的 Schema)
    • 实现基础数据导入管道
  • 第二阶段(第 4-6 月):核心查询开发
    • 实现「二度关联查询」和「资金链路追踪」
    • 性能优化,目标达到 500ms 以内
    • 编写 Gremlin 查询模板
  • 第三阶段(第 7-9 月):实时接入与联调
    • 对接消息队列(Kafka),实现实时数据写入
    • 与现有风控系统集成
    • 压力测试与稳定性调优
  • 第四阶段(第 10-12 月):灰度上线与迭代
    • 先接入 10% 的流量,观察效果
    • 根据反馈调整查询逻辑
    • 全量上线

关键节点:第二阶段结束时,我们做了一个内部演示。用真实数据跑了一个「二度关联查询」,从输入账户到返回结果,耗时 320 毫秒。业务方当场就拍板了——继续干!

说实话,这个里程碑规划看起来挺顺的,但实际执行中踩了不少坑。比如第一阶段,我们以为 HBase 部署很简单,结果 RowKey 设计不合理,导致数据倾斜严重。后来花了整整两周重新设计分区策略。

嗯,这些坑后面我会详细讲。今天先把全景图给你画清楚。

知识体系总览

下面这张图,是我做项目时自己画的。它把整个知识体系串起来了,你一看就明白:

金融图计算项目知识体系 业务需求层 实时团伙检测 | 资金链路追踪 | 设备指纹关联 技术选型层 JanusGraph(图引擎) + HBase(存储) + Kafka(消息队列) 数据模型层 节点:账户、交易、设备、IP、手机号 | 边:转账、登录、关联 查询与算法层 Gremlin 查询 | 二度关联 | 最短路径 | 社区发现 上线与运维层 灰度发布 | 监控告警 | 性能调优 | 数据备份

这张图从下往上看,就是项目的实施路径。从上往下看,就是需求到落地的映射关系。我个人习惯把这种图贴在工位旁边,每次开会讨论时直接指着图说——「我们现在卡在第三层,数据模型还没定好。」

好了,第一章的内容就到这里。项目全景和需求分析讲清楚了,后面我们会一步步深入每个环节。


专注资料整理