NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

工商银行实时大数据平台建设历程及展望

  • 2022-01-20
  • 本文字数:4239 字

    阅读完需:约 14 分钟

工商银行实时大数据平台建设历程及展望

分享嘉宾 | 袁一 中国工商银行大数据平台负责人


本篇内容将通过三个部分来介绍工商银行实时大数据平台建设历程及展望。


一、工行实时大数据平台建设历程

二、工行实时大数据平台建设思路

三、展望



一、工行实时大数据平台建设历程


工商银行从 2002 年开始建设数据集市,当时主要使用 Oracle 类单机版的关系型数据库。随着数据量不断增加,开始引入 TD、ED 等国外高端一体机。2014 年工行正式基于 Hadoop 技术建设了大数据平台,在其之上构建了企业级数据湖及数据仓库。2017 年,随着 AI 技术的兴起,又开始建设机器学习平台,2020 年开始建设数据中台和高时效类场景。



为了满足数据时效,以及企业级大规模普惠用数的诉求,企业内部的大数据平台需要不仅支持批量计算,还需要满足各类用数场景全栈覆盖的技术体系。以工行为例,大数据平台内部除批量计算之外,包含实时计算,联机分析、数据 API 等平台,主要以 Flink 作为内部引擎,用于缩短数据端到端闭环时间,形成联机高并发的访问能力,提升数据赋能业务的时效。除此之外,还包含数据交换、数据安全等面向特定技术领域的二级平台。在最上面一层,我们向开发人员、数据分析师、运维人员提供了可视化的支撑工具。



二、工行实时大数据平台建设思路


工行实时大数据平台建设思路,主要会围绕时效、易用、安全可靠和降本增效来展开。



在数据时效方面,上图是描述数据流向的示意图,原始数据从左上角的应用产生,经过蓝色和粉色两条链路。其中,蓝色链路是业务视角上端到端闭坏的链路,应用产生的数据会写入 MySQL 或者 Oracle 等关系型数据库,之后通过 CDC 相关技术,将数据库产生的日志复制到 Kafka 消息队列中,将同一份数据的共享,避免多次读取数据库日志。


在 Kafka 之后,是实时计算平台。实时计算平台除了实现对时效要求较高的计算处理场景之外,它还可以通过 Flink 结合 HUDI/IceBerg 等产品实现实时数据入湖。而且能将 Flink 的结果输出到 HBase\ES 等联机数据库中。将这部分数据以服务的形式暴露,即数据中台服务,从而提供给应用调用。


粉色链路的数据,最终回到数据分析师那里,是蓝色链路的衍生。各个应用产生的数据,通过 Flink 和 HUDI 的实时数据入湖,通过 Presto 或 CK 等分析型引擎,供数据分析师进行 BI 分析。通过这条链路,数据时效得以提升,让分析师访问到分钟级延时的热数据,更加实时、准确地做出运营决策。一般高时效的业务场景,都包含在这条技术链路的体系之内。



在余额变动场景,客户进行一次动账交易,可能触发多种通知内容,例如账户支出提醒、账户收入提醒、积分消费提醒等,造成客户手机连续收到短信提醒,用户体验不佳。因此,工行基于 Flink 多流合并和会话窗口的能力,将同一时刻发生的多条消息关联,将通知的逻辑合并在一起发送给客户。而当一条消息出现晚到的情况,通过会话窗口的 GAP 设置能自动降级,将逻辑分为两条消息发出去。大幅提升对用户的友好性。



每家商业银行在每年 12 月 31 日时需要出年报,所以那天银行需要对全年的利润分配等指标进行试算。工行和其它商业银行一样早期使用 DB2 主机实现核心交易,年终时的损益、预查询都在主机上实现。但主机是按 MIPS 收费,所以当这种预查询多次执行时,成本很高。


因此工行做了架构改造,通过 CDC 数据复制技术,将主机实时发生的数据复制到大数据平台,通过 Flink 进行实时 ETL,数据搬运过来之后,充分利用大数据平台海量的计算能力,大幅提升预查询效率。原来每天跑 10 轮,现在每天可以跑 30 轮,原来每轮 30 分钟,现在每轮只要 10 分钟,既提升了时效又节省了成本。



实时大屏场景一般都是基于日志采集或 CDC 技术实现数据的统一汇集,基于 Flink 进行实时的业务量统计。工行也是通过这种方式实现的实时大屏,并使用了 Flink 的 mini-batch 的特性。虽然 Flink 能逐条实时处理数据,但在大部分场景,它会有 1ms 和 100ms 的延时,mini-batch 的特性类似于 Spark Streaming 微批的处理方式,在增加小量数据延时的情况下,大幅提升海量数据的吞吐能力,非常适用于实时大屏的场景。



在银行业早期,大家基于 DB2 主机支撑核心业务。随着国内去 IOE 以及自主可控转型的浪潮,各家商业银行都开始将主机上的业务,迁移到分布式体系上,通过服务化接口的调用,满足不同业务系统之间的协作。业务迁移到分布式体系后,在调用多个服务化接口时,由于网络抖动等影响,会出现交易中,部分环节失败的情况。


为了解决这个问题,工行基于 Flink 研发了业务一致性对账中心,将服务化接口调用过程中的调用日志,统一汇集到 Kafka。基于 Flink 会话窗口的特性,判断交易中各个环节的调用是否完整。如果发现不完整的情况,会触发业务上的补账 / 核对动作,及时消除对客户账务的影响。



早期的实时计算模型都是基于 Java 等高级语言进行开发。在 Spark Dataframe 以及 Flink SQL 出现之后,开发人员可以通过 SQL 来开发实时计算模型。随着分布式体系以及数据中台的发展,很多实时计算模型在处理业务逻辑过程中,需要访问外部联机接口。



工行将调用的 HTTP、Dubbo、Redis 等外部接口,抽象成一张张外部表。直接通过一句 SQL 就能将 Kafka 中的流表与 Dubbo 的维表关联,然后将结果送到 HTTP 接口,大幅提升开发效率。



接下来,给大家分享一下工行在用数支撑工具方面的实践。在业务研发方面,通过借鉴业界 DataOps 的理念,工行打造了一条集开发、测试、版本制作及发布于一体的研发流水线。



相比于早期大数据工程师基于 UltraEdit 开发的模型,这种可视化 IDE 的开发效率至少提升 10 倍以上。同时工行的开发平台也于今年通过了中国信通院“数据开发平台”的认证测评,信通院在 12 月 10 日通过官方公众号公布了测评的结果。



在生产运维方面,工行为运维人员提供多个用于展示平台健康状态的仪表盘。同时,并通过机器学习和专家规则相结合的方式,实现了面向多类场景的故障根因自动分析的能力,降低运维门槛。



对于开发人员来说,他们更关心作业中断后运维平台能否帮助分析问题,所以在作业中断时,为开发人员提供问题诊断能力,95% 以上的常见问题都可以自动完成分析。



在 BI 平台,工行面向业务人员提供了自助数据分析探索的能力。主要解决用数最后一公里的问题。分析结果提供了多样化的展示仪表盘,不但支持基于拖拉拽的多维分析,而且支持数据下钻挖掘等功能。



接下来,给大家介绍工行在大数据平台安全可靠性方面的实践。


近几年各个行业对数据安全的重视程度都越来越高,而大数据平台作为全集群数据的汇集地,对数据安全保障方面能力的建设就显得更加重要。大数据平台不但要存储很多数据,而且要提供的各式各样的数据访问方式。


因此工行设计了一套全生命周期用数监控审计,类似于 Ngnix 的 access.log,主要用于事后追溯审计。当用户将数据拖回到本地时,平台会对数据加上水印,当有些数据被非正常公开后,就可以知晓数据泄漏的来源,同时对身份证、手机号、卡号等敏感字段,在返回时动态脱敏,比如 11 号的手机号中间几位都会变成“********”。


动态控权是因为有些数据访问权限控制粒度较细,工行实现了一套 SQL 改写引擎,在运行时对 SQL 进行解析,根据用户与表权限的对照关系,对 SQL 加上控制条件及脱敏函数,避免数据被越权访问。敏感数据识别是基于专家规则或 ML 模型,自动识别海量数据中的敏感信息,并自动进行分类分级。同时,提醒管理员对敏感信息和分类分级结果进行核实确认。



在大数据平台建设的早期,大家主要将一些非关键的增值类业务放到大数据平台。随着技术的不断成熟,很多机构开始将核心的业务部署到大数据平台。为此工行在上海外高桥和嘉定两个数据中心建立了双活的大数据平台,通过系统级复制确保两边基础数据同步。对于部分关键业务会在两边同时运行,通过这种架构来确保关键业务的稳定。



上图是数据离线备份架构。金融机构在监管方面,对于数据存储可靠性的要求很高,所以,我们将 NBU 磁带备份系统和 Hadoop 以及 MPPDB 数据库的接口做了集成,实现了类似于 Oracle RMAN 的数据存储,增量备份的能力。



根据国家监管的要求,大部分金融机构的大数据平台一般都以私有化的部署方式为主。在早期 Hadoop 技术刚出现时,大数据平台的设备选型以物理机 + 本地磁盘为主,尽可能实现本地计算。目前,主流的公有云大数据云服务以存算分离的架构为主。那么在建设金融机构大数据私有云时,到底应为物理机 + 本地磁盘为主,还是以存算分离架构为主呢?


在公有云实现存算分离的最重要的原因就是:资源的超分配。超分配就是,假设公有云上有 10 个租户,每个租户分别申请了一个 10 节点的集群,但由于这 10 个租户的资源使用都会存在错峰的情况,因此云平台只要准备 50 台设备就可以满足上述需求,并不需要实际准备 100 台设备,这就是超分配。


私有云的大数据平台,一般会按业务线来划分集群。每个集群可能是数百台设备的规模,并不会出现大量的小租户、小集群,但集群间确实会存在一定错峰的情况。


对于这种情况,工行更倾向于使用固定资源 + 弹性资源混合部署架构。如图所示,左边基于裸金属的固定资源池,用于满足日常的资源需求。右边基于容器的弹性资源池,用于满足特定事件发生时突增的需求。同时,这部分弹性资源池,可以在不同的集群之间,动态调配复用。


三、展望



我们先来讲讲 Flink 1.14 版本中发布的 HybridSource 能力。目前,在上线一新的实时模型时,如果涉及到历史数据的统计指标,以金融行业为例,在一个反欺诈模型里,需要最近 7 天累计交易额的统计指标。这种情况下,我们一般会先跑 Hive,批量算出前 6 天的统计值,放进 Redis,然后基于 Flink 读取 Kafka 中的数据,统计当天的增量数据,再进一步汇总成最近 7 天的统计值。这个过程,需要分两个作业来实现。


而通过 HybridSource 可以将 Hive 和 Kafka 中的数据抽象成一张表,通过一个作业就可以统计出最近 7 天的值,在 Flink 内部自动实现类似于 union 的功能,大幅提升研发效率。



关于动态资源调整,随着平台规模越来越大,资源利用率的关注度就越来越高。实时计算在一定特定的场景,会出现交易量突增的情况。对于这类情况,工行目前还是采用手工扩容,或者通过业务侧将批和流结合的方式解决。比如在双十一大促之前,工行都会提前一周对交易相关的实时计算模型,进行手工扩容,大促之后再手工缩容。这个过程,总体比较复杂。


因此后续希望 Flink 通过具备动态扩缩容的自适应能力,配置 min 和 max,引擎可以自动根据数据量的负载在 min-max 之间,调整使用的资源量从而提高整个平台的资源利用率。


【点击链接】查看分享的完整视频并获取分享 PPT


2022-01-20 16:375277
用户头像
蔡芳芳 InfoQ主编

发布了 781 篇内容, 共 496.2 次阅读, 收获喜欢 2749 次。

关注

评论 1 条评论

发布
用户头像
敢不敢写点能落地的内容,哈哈
2022-01-21 10:20
回复
没有更多了
发现更多内容

从云数据迁移服务看MySQL大表抽取模式

华为云开发者联盟

MySQL JVM JDBC 数据迁移

2. 无门槛学会数据类型与输入、输出函数,滚雪球学 Python

梦想橡皮擦

Python python 爬虫 2月春节不断更 python入门

Arthas 使用的各类方式

阿里巴巴云原生

Java 微服务 云原生 中间件 Arthas

从0到1实现一个简单计算器

codevald

Java 项目 计算器 动手实践

Serverless 场景下 Pod 创建效率优化

阿里巴巴云原生

Docker Serverless 容器 云原生 k8s

无意间发现 Google 代码模板,分享给大家!

C语言与CPP编程

c++ JavaScript objective-c 代码规范 Python 编码格式

缓存设计的好,服务基本不会倒

万俊峰Kevin

缓存 微服务 microservice Go 语言

Kubernetes 原生 CI/CD 构建框架 Tekton 详解

字节跳动 Kubernetes 云原生 Tekton CI/CD

最好的IDEA debug长文?看完我佛了

YourBatman

eclipse debug IntelliJ IDEA 远程调试

执行、管理、领导做不好,都有懒的因素

刘华Kenneth

领导力 管理 软件开发

区块链还可以这么玩?“点亮莫高窟”背后的腾讯云区块链

CECBC

区块链

Ebean ORM框架介绍-1.增强注解

Barry的异想世界

Spring Boot jpa ORM Ebean

排查指南 | 当 mPaaS 小程序真机扫码时提示 "应用更新错误(50002)"

蚂蚁集团移动开发平台 mPaaS

小程序 问题排查 mPaaS

架构师训练营第十一周作业

zamkai

架构2期-大作业(一)

浮生一梦

大作业 2组 架构师训练营第2期

架构2期-大作业(二)

浮生一梦

大作业 2组 架构师训练营第2期

前端必学必会-多媒体-本地存储-浏览器与服务器的交互-通信功能

我是哪吒

学习 程序员 面试 大前端 2月春节不断更

逼疯UE设计师,不可不知的提升产品用户体验的10个测试方法

华为云开发者联盟

产品 测试 UI 用户体验

前端开发:Node版本引起的报错问题

三掌柜

vue.js 大前端

产品经理训练营笔记-业务流程与产品文档(一)

.nil?

产品经理训练营

对话京东科技算法科学家吴友政:回望2020,NLP技术发展速度强劲

京东科技开发者

人工智能 自然语言处理

架构师训练营第六周作业

跳蚤

欢度春节|新用户专属福利

InfoQ写作社区官方

热门活动

几幅图拿下 ARP 协议

飞天小牛肉

Java 程序员 计算机网络 网络协议 2月春节不断更

搜索引擎简述

跳蚤

一文总结GaussDB通信原理知识

华为云开发者联盟

数据库 通信 框架 GaussDB 计算

Spring Boot 微服务性能下降九成!使用 Arthas 定位根因

阿里巴巴云原生

Java 微服务 云原生 中间件 Arthas

字节跳动架构师讲解Android开发!2021年展望Android原生开发的现状,分享一点面试小经验

欢喜学安卓

android 程序员 面试 移动开发

停车、投票、领证,区块链如何在「智慧城市」建设中大显身手?

CECBC

区块链

中国移动工程师浅析:KubeEdge在国家工业互联网大数据中心的架构设计与应用

华为云开发者联盟

大数据 数据采集 工业智能体 边缘数据中心管理 EDCM

字节跳动面试必问:从外包月薪5K到阿里月薪15K,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

工商银行实时大数据平台建设历程及展望_语言 & 开发_袁一_InfoQ精选文章