工商银行近20年实时大数据平台建设历程「建议收藏」

工商银行近20年实时大数据平台建设历程「建议收藏」全文共4000个字,建议阅读10分钟一、工行实时大数据平台建设历程工商银行从2002年开始建设数据集市,当时主要使用Oracle类单机版的关系型数据库。随着数据量不断增加,开始引入TD、ED等国外高端一体机。2014年工行正式基于Hadoop技术建设了大数据平台,在其之上构建了企业级数据湖及数据仓库。2017年,随着AI技术的兴起,又开始建设机器学…

大家好,又见面了,我是你们的朋友全栈君。

63112a58f7e7468142978d0b9ef7499e.png

全文共4000个字,建议阅读10分钟

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

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

c98d0c3526dba59847301994812933d1.png

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

5e756528f81aefd1959b14273b001d42.png

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

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

17dba1fd1ade4b23cf720551ce93e80a.png

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

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

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

c89e6ff744f8a0544820e120848788f6.png

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

69be4f649c20c7ec06ed5fd679a58645.png

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

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

c8057b54815f866c1abf4e7e5843141d.png

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

a58cb5694351e7e377ffbb630aa79c21.png

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

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

234e5c3f39cb70f657144372d9007b55.png

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

dce9f45a6d61488c2af8192f4627202a.png

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

dd9be6575867ba59ffd872d6918d86e6.png

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

2a6ceb888fb9332afe50ccd460ff0801.png

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

06f328f04d5873729fb569d67e2f0ad9.png

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

5021082df2fd3c1cc03abcce9040be1e.png

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

cefea420e9ca775168377076475c4e2d.png

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

7dc5d3d5a16d40aaa4d1391a7ae0762a.png

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

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

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

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

ce57d2f46cf9c5ebf42153dfc2ed4696.png

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

38484dc2c4d358336414c437a5eff5ae.png

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

2cdb64d95b5ca36efe77ddbaf9fbdec0.png

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

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

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

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

三、展望

b0ffa4f99b6d01b375db23ed875e0f44.png

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

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

243af05e6869f18d8463b3fe83af1b68.png

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

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

作者丨袁一

来源丨公众号:InfoQ(ID:infoqchina)

公众号推送规则变了

点击上方公众号名片,收藏公众号,不错过精彩内容推送!

a0950445c8bcbe465774c0eeef71a4a5.gif

往期推荐

100页大数据技术白皮书.pdf

京东大数据技术白皮书.pdf

大数据平台数据治理规划方案.pdf(300页)

100页Flink超全知识总结.pdf

数据资产及业务价值实现白皮书.pdf

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134002.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Oracle PL/SQL编程详解之七:程序包的创建与应用

    Oracle PL/SQL编程详解之七:程序包的创建与应用Oracle PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) 本篇主要内容如下:第七章  程序包的创建和应用7.1  程序包简介7.2  程序包的定义7.3  包的开发步骤7.4  包定义的说明7.5  子程序重载7.6  加密实用程序7.7  删除包7.8  包的管理  7.1  程序包简介    程序

  • linux下chmod +x的意思?为什么要进行chmod +x

    linux下chmod +x的意思?为什么要进行chmod +x上周在工作中接触到chmod+x这个命令,如下图:首先对start.sh这个启动文件删除,然后使用rz命令上传了新的start.sh,然后发现还有进行下一步,chmod+xstart.sh这一步是什么意思呢?经过上网查询(说的比较复杂,引申太多)和咨询我们研发(还是研发说的通俗易懂)chmod+x的意思就是给执行权限LINUX下不同的文件类型有不同的颜色,这里…

  • 判断一个数是否为素数(质数) c语言[通俗易懂]

    质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数。最小的质数是2,它也是唯一的偶数质数。原理:number只需被(2~根号下number)之间的每一个整数去除就可以了(包括根号下number这个数)。如果nummber不能被(2~根号下number)间任一整数整除,number必定是素数#include”stdio.h”#include”math.h”main(){ intnumber,i,n; printf(“请输入一个正整数:

  • LDAP 服务器搭建

    LDAP 服务器搭建1、Nginx反向代理服务器:这种方式比较简单。网上有很多文章。需要安装JDK、Git、Gerrit、Nginx、apache2-utils和gitweb等。需要配置gerrit.config。创建gerrit账号用命令行的形式,必须登录一遍才能加入到gerit数据库,很不方便。2、Apache2代理服务器:这种方式稍微复杂点,我搜了很多资料才完成。需要安装JDK、Git、Ger

  • 深入浅出的讲解傅里叶变换(真正的通俗易懂)「建议收藏」

    深入浅出的讲解傅里叶变换(真正的通俗易懂)「建议收藏」我保证这篇文章和你以前看过的所有文章都不同,这是12年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者……  这篇文章的核心思想就是:  要让读者在不看任何数学公式的情况下理解傅里叶分析。  傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对

  • MFC线程同步—— CCriticalSection类使用

    MFC线程同步—— CCriticalSection类使用多个线程访问临界区时,可以使用临界区对象。临界区对象是一个独占性共享资源,任一时刻只有一个线程可以拥有临界区。拥有临界区的线程可以访问被保护起来的资源或代码段,其他希望进入临界区的线程将被挂起等待,直到拥有临界区的线程放弃临界区时为止。CCriticalSection类的用法:方法一:(1)定义CCriticalSection类的一个全局对象(以使各个线程均能访问):

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号