HTAP 数据库在国有大行反洗钱场景的应用

导读

在金融领域,随着数字化服务的深入和监管要求的提高,反洗钱工作变得尤为关键。洗钱活动不仅威胁金融安全,也对社会秩序构成挑战。本文深入探讨了国产 HTAP 分布式数据库 TiDB 在某国有大行反洗钱系统中的应用实践。

依托 TiDB 构建的新一代反洗钱系统每日处理上亿笔增量数据和千万笔实时查询,管理着百 TB 级数据,架构上实现了高并发数据访问和多技术栈融合,提升了业务连续性和数据处理效率;有效地确保了金融交易的透明度和监管合规性,同时显著提升了客户体验。

引言

谈及“洗钱”,很多人认为它只出现在影视作品中,然而,洗钱活动可能就潜藏在我们的日常生活中,通过艺术品交易、跨境投资、赌博、证券交易等多种渠道进行。“反洗钱”是指为了预防通过各种方式掩饰、隐瞒各类犯罪所得及其收益的来源和性质的洗钱活动,依照反洗钱相关法规制定采取相关措施的行为。

业务挑战

银行经营模式正在发生重大的转变,金融服务呈现线上化、数字化、智能化等特点。在监管力度加大的背景下,监管部门对金融机构的反洗钱工作提出了更加严格的要求,包括严格核实客户身份、详细记录和妥善保存客户及交易信息、主动监测并及时报告可疑交易、以及定期进行风险评估和采取相应措施等,给反洗钱工作带来了巨大的挑战。

  • 监管范围与数据存储跨度不断扩展

监管要求金融机构在反洗钱工作中,需根据客户特性或账户属性,合理评定洗钱和恐怖融资风险等级,并据此执行相应的控制措施。同时,金融机构必须确保历史交易记录的完整性与准确性,例如部分跨境汇款业务记录,至少需保存五年。

  • 上报时效性和数据准确性要求不断提升

监管机构对交易数据的上报时限提出更高要求,如 5 至 10 个工作日内完成报送(部分场景要求 T+1 日数据报送)。金融机构需采用高效的数据处理方式以满足时效性要求,并实现复杂的识别与监测规则,进行大量量化指标的计算。

  • 监管规则变更频繁

面对不断创新的业务模式,反洗钱系统需采用规则引擎来配置灵活的监测模型,对数据进行筛选、分析,并生成反洗钱报告。系统设计需确保在监管规则变更时,能够迅速适应,避免因技术限制如“分片键”阻碍业务规则的及时更新。

某国有大行原有的反洗钱业务系统基于多个数据技术栈和异构数据库构建,存在高开发维护成本、OLTP 与 OLAP 混合处理能力的不足、大规模弹性存储和高可用性缺失,以及数据时效性差等问题。为了解决这些问题,行方重新构建了一套服务全球业务的反洗钱系统,基于国产 HTAP 分布式数据库 TiDB,创新性地融合了流式计算与批量处理,支持高并发数据访问和在线交互式多维查询,实现了多技术栈的融合,并确保了业务连续性。

新一代反洗钱业务的构建

业务架构

反洗钱系统****事中系统:主要面向客户发起交易的实时监控,即通过接口方式接收上游联机系统的交易请求,登记并实时进行规则集匹配(如累计交易中涉及客户送检交易和历史交易的金额、笔数),若匹配则生成案例信息,最终将处理结果实时返回调用方。该系统属于关键业务系统(数据 5 副本),并搭建灾备集群。反洗钱事中业务包括联机和批量业务,按业务维度包括客户尽调、交易尽调等模块。

**客户尽调:**涉及的数据表包括客户信息表 6 亿、客户评级历史表百亿(存量 6 年)、案例表(规模 10 亿)。日间交易约 70 万笔,以客户维度插入或更新客户信息表。批量转联机模式以联机接口形式处理,瞬时并发会较高,主要是基于客户号维度的操作,包括客户信息表的 insert、update 操作,以及案例表作为驱动表与其它多张表的关联。批量计算功能基于交易记录、合并后的客户信息表、以及其它表通过关联的方式计算结果集,计算维度多,结果集会放大,预期当日内完成。

**交易尽调:**涉及的数据表包括:以交易表、案例表、拦截信息表、行为类报文表为主(其中数据规模在亿级,行为类表数据量更大)。业务功能包括对柜员提供拦截信息表的写入和更新类操作;对柜员提供灵活的数据查询,涉及多表关联,包括表单形式的分页查询、以及轻度 AP 类聚合查询为主。

反洗钱业务系统架构

图 1:反洗钱业务系统架构示意图

数据架构

如上图所示,反洗钱国内事中部分按业务领域垂直拆分为联机交易、批量分析两部分,分别对应独立的 TiDB 分布式数据库集群,每套集群包含了 TiKV 行存和 TiFlash 列存两种存储引擎。

  • AMLT 集群:主集群五副本配置,对应联机交易部分,即客户尽调、交易尽调、公共服务等模块,以客户维度联机、内部前端场景为主。主要应对客户开户、维护场景的尽调,以及跨境汇款类交易的尽调。批量行为以 T-1 日客户信息、交易信息合并入主表为主。

  • AMLA 集群:主集群三副本配置。对应批量分析部分,即 SS、公共服务模块,以内外部名单加工批处理为主的数据消费类系统,加工结果表用于内部业务人员的在线灵活查询。因涉及内外部黑名单,故系统重要程度也较高,必须确保业务连续性。

  • 外围系统:包括了近百个上游联机交易类系统,通过 API 接口方式将符合反洗钱门槛的交易进行送检和筛查。

数据库集群部署

行方在 A 城市跨机房部署 TiDB 主集群,在 B 城市部署 TiDB 灾备集群,主集群采用同城双机房 3+2 模式部署。

  • 联机采用双活模式,应用侧双机房都会有实际的业务读写流量,相关表可采用双机房均匀分布 leader 的方式。

  • 重点关注的是批量作业,应用侧数据迁移、日常数据加载、批量处理、数据导出,优先将纯跑批涉及的表绑定单边 leader,保证应用、TiDB leader 副本亲和性访问,TiFlash 副本也是同理,可有效降低跨机房网络流量。

  • 对于联机、批量都会使用的表,若使用 TiKV 且不涉及复杂 join、子查询等场景可维持现状,也可根据实际业务情况按需开启就近读功能。

分布式架构图

图 2:TiDB 分布式数据库集群部署架构图

应用成效

新一代反洗钱业务系统对接了全行近百个上下游系统,存储了百 TB 级数据,在支撑日均上亿笔增量数据、千万笔 T+0 实时查询的基础上,实现了超长跨度查询、以及更完整准确的交易全景视图,大幅提升了移动互联时代全天候、多样化、高时效的综合数据服务能力和客户体验。

  • 高并发能力大幅提升了业务查询分析效率

得益于 TiDB 的高并发、高吞吐特性,确保了预期目标的顺利实现,同时系统展现出良好的读写性能和稳定性,没有出现延迟或故障问题。

  • 可弹性水平扩展提升了数据库计算、存储能力

TiDB 的原生分布式架构支持按需灵活扩展计算能力,并且集群的扩展过程对应用程序完全透明,简化了运维管理,有效解决了单机 Oracle 容量告警的难题。

  • Spark 高速数据库读写引擎,大幅提升了批处理计算效率

Spark 组件提供索引支持,多种计算下推使 Spark 能够高效的读取 TiKV 中的数据,可大幅提升批处理业务的性能,Spark 还提供了海量数据的更新功能并保证更新事务的原子性。

  • 高效的数据写入实现数据快速导入

支持上游 Hive 数仓推送文件载入,在 Spark 批处理并行直写 TiKV 的技术加持下,数据导性能得到了大幅提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/793557.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++初阶知识——类和对象(1)

目录 1.类和对象 1.1 类的定义 1.2 访问限定符 1.3 类域 2.实例化 2.1 实例化概念 2.2 对象大小 内存对齐规则 3.this指针 1.类和对象 1.1 类的定义 (1)class为定义类的关键字,Stack为类的名字,{}中为类的主体&#xf…

python怎么调用cmd命令

关于python调用cmd命令: 1、python的OS模块 OS模块调用CMD命令有两种方式:os.popen()、os.system()都是用当前进程来调用。 OS.system是无法获取返回值的。当运行结束后接着往下面执行程序。用法如:OS.system("ipconfig"). OS.…

前台线程和后台线程(了解篇)

在多线程编程中,理解线程的不同类型对于编写高效、稳定的程序至关重要。特别地,前台线程(Foreground Threads)与后台线程(Background Threads)在行为上有着根本的区别,这些区别直接影响到程序的…

【Linux 线程】线程的基本概念、LWP的理解

文章目录 一、ps -L 指令🍎二、线程控制 一、ps -L 指令🍎 🐧 使用 ps -L 命令查看轻量级进程信息;🐧 pthread_self() 用于获取用户态线程的 tid,而并非轻量级进程ID;🐧 getpid() 用…

(CVPR-2024)SwiftBrush:具有变分分数蒸馏的单步文本到图像扩散模型

SwiftBrush:具有变分分数蒸馏的单步文本到图像扩散模型 Paper Title:SwiftBrush: One-Step Text-to-Image Diffusion Model with Variational Score Distillation Paper 是 VinAI Research 发表在 CVPR 24 的工作 Paper地址 Code:地址 Abstract 尽管文本…

前端工程化(01):10款自动化构建工具初识。

前端工程化自动化构建工具是用于简化前端开发流程、提高开发效率和优化项目质量的工具。市面上的工具多种多样,贝格前端工场先介绍一下什么是前端工程化,为什么要前端工程化,以及常用工具,后面会对各种工具逐一介绍。 一、什么是…

【数据结构】一文了解七大排序算法

文章目录 前言一.直接插入排序插入排序思想插入排序代码实现插入排序总结 二.希尔排序希尔排序思想希尔排序代码实现希尔排序总结 三.选择排序选择排序思想选择排序代码实现选择排序总结 四.堆排序堆排序思想堆排序代码实现堆排序总结 五、冒泡排序冒泡排序思想冒泡排序代码实现…

深化信创存储 ,XEDP 与 飞腾腾云 S5000C 完成兼容性认证

近日,XSKY星辰天合的统一数据平台 XEDP 与飞腾信息技术有限公司的高性能服务器 CPU 飞腾腾云 S5000C 完成兼容性互认证。 经过严格的测试与评估,双方产品在技术上兼容良好,运行稳定且性能优异,融合双方优势构筑的软件定义存储系统…

SpringBoot实战:轻松实现接口数据脱敏

一、接口数据脱敏概述 1.1 接口数据脱敏的定义 接口数据脱敏是Web应用程序中一种保护敏感信息不被泄露的关键措施。在API接口向客户端返回数据时,系统会对包含敏感信息(如个人身份信息、财务数据等)的字段进行特殊处理。这种处理通过应用特…

Go-知识测试-模糊测试

Go-知识测试-模糊测试 1. 定义2. 例子3. 数据结构4. tesing.F.Add5. 模糊测试的执行6. testing.InternalFuzzTarget7. testing.runFuzzing8. testing.fRunner9. FuzzXyz10. RunFuzzWorker11. CoordinateFuzzing12. 总结 建议先看:https://blog.csdn.net/a1879272183…

智能家居开发新进展:乐鑫 ESP-ZeroCode 与亚马逊 ACK for Matter 实现集成

日前,乐鑫 ESP-ZeroCode 与亚马逊 Alexa Connect Kit (ACK) for Matter 实现了集成。这对智能家居设备制造商来说是一项重大进展。开发人员无需编写固件或开发移动应用程序,即可轻松设计符合 Matter 标准的产品。不仅如此,开发者还可以在短短…

Python(四)---序列

文章目录 前言1.列表1.1.列表简介1.2.列表的创建1.2.1.基本方式[]1.2.2.list()方法1.2.3.range()创建整数列表1.2.4.推导式生成列表 1.3. 列表各种函数的使用1.3.1.增加元素1.3.2.删除元素1.3.3.元素的访问和计数1.3.4.切片1.3.5.列表的排序 1.4.二维列表 2.元组2.1.元组的简介…

内网安全:域内信息探测

1.域内基本信息收集 2.NET命令详解 3.内网主要使用的域收集方法 4.查找域控制器的方法 5.查询域内用户的基本信息 6.定位域管 7.powershell命令和定位敏感信息 1.域内基本信息收集: 四种情况: 1.本地用户:user 2.本地管理员用户&#x…

短链接day4

短链接管理 创建短链接数据库表 URI、URL和URN区别 : URI 指的是一个资源 ;URL 用地址定位一个资源; URN 用名称定位一个资源。 举个例子: 去寻找一个具体的人(URI);如果用地址:XX省XX市XX区…

使用 Google 的 Generative AI 服务时,请求没有包含足够的认证范围(scopes)

题意: Google generativeai 403 Request had insufficient authentication scopes. [reason: "ACCESS_TOKEN_SCOPE_INSUFFICIENT" 问题背景: I have tried the simple POC for generativeai on its own to do generate_content and it works…

【初阶数据结构】2.顺序表

文章目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1.线性表 线性表(linear list)是n…

JavaFx+MySql学生管理系统

前言: 上个月学习了javafx和mysql数据库,于是写了一个学生管理系统,因为上个月在复习并且有一些事情,比较忙,所以没有更新博客了,这个项目页面虽然看着有点简陋了,但是大致内容还是比较简单的,于是现在跟大家分享一下我的学生管理系统,希望对这方面有兴趣的同学提供一些帮助 &a…

19185 01背包问题

解决这个问题的关键是使用动态规划的方法。我们可以创建一个二维数组dp[i][j],其中i表示考虑前i件物品,j表示背包的容量。dp[i][j]的值表示在考虑前i件物品,且背包容量为j时能获得的最大价值。 ### 算法步骤 1. 初始化一个二维数组dp&#x…

Qt常用基础控件总结—容器部件(QGroupBox类)

五、容器部件 按钮框控件QDialogButtonBox 类(很少用) 按钮组控件QButtonGroup 类(很少用) 组框控件QGroupBox 类 QGroupBox 类介绍 QGroupBox(组框),直接继承自 QWidget 类,因此使用该类创建的对象,可作为窗口使用,组框在外观上是可见的。 QGroupBox 类(组框),…

数据平滑处理(部分)

一、 移动平均(Moving Average) 是一种最简单的数据平滑方法,用于平滑时间序列数据。它通过计算一定窗口内数据点的平均值来减少噪音,同时保留数据的趋势。移动平均包括简单移动平均(SMA)或指数加权移动平均…