“分布式透明化”在杭州银行核心系统上线之思考

导读

随着金融行业数字化转型的需求,银行核心系统的升级改造成为重要议题。杭州银行成功上线以 TiDB 为底层数据库的新一代核心业务系统,该实践采用应用与基础设施解耦、分布式透明化的设计开发理念,推动银行核心系统的整体升级。

本文聚焦银行核心系统演进,结合 TiDB在杭州银行新一代核心的实践,深入解析“分布式透明化”理念,希望能为同行业的转型升级提供参考。

本文作者:韩锋 ,CCIA(中国计算机协会)常务理事,前 Oracle ACE、腾讯 TVP、阿里云 MVP。有着丰富的一线数据库架构、软件研发、产品设计、团队管理经验。曾担任多家公司首席 DBA、数据库架构师等职。在云、电商、互金、互联网、银行等行业均有涉猎,精通多种关系型数据库,对 NoSQL 及大数据相关技术也有涉足,实践经验丰富。曾著有数据库相关著作《SQL 优化最佳实践》、《数据库高效优化》。《韩锋频道》公众号作者。

作为国家支柱性行业,金融业在国民经济中发挥着举足轻重的作用。近些年来金融业的运营模式和服务方式都发生了很大变化,这对于金融科技提出更高要求。与此同时,国内金融机构还面临国产化诉求,用以应对脱钩、断供等潜在风险。作为数据应用高地,金融企业普遍存在业务复杂、可用性要求高等特点,尤其是以银行核心系统为代表。对银行核心系统提供做架构升级、国产化改造是风险极大的一项工程。

近期,国内杭州银行新一代核心系统成功上线,引起业内普遍关注。行方从开始就秉承着应用与基础设施解耦架构思想、分布式透明化的设计开发理念,通过与国产分布式数据库 TiDB 的通力合作,完成此次核心系统的成功上线。这为国内广大同类型银行升级,带来积极参考意义;其背后的实践过程也很值得思考。

银行核心系统演进及观察

银行核心系统,也称为 Core Banking,是银行处理存款、贷款业务为主的核心 IT 系统。作为支撑业务营运的关键系统和银行信息化的重要组成部分,被称作银行 IT 系统的“心脏”。同时,银行核心在整个银行 IT 系统架构中是其他业务子系统的基础,处于承上启下的关键位置。核心系统在金融服务能力、处理性能等方面,对银行日常经营的业务与流程优化、提升客户体验度、推动业务改革或创新等方面起着决定性作用。

从历史演进来看,银行核心系统经历了从手工时代到 PC 时代,到联网联机、数据大集中,再到以客户为中心的发展历程。从上世纪九十年代开始,银行核心系统技术架构从数据集中路线演进而来的 “胖核心” 时期;到本世纪头十年因核心系统庞大且耦合严重,将辅助功能拆分后形成的 “瘦核心” 时期;再到近十年来互联网对银行业务产生影响,银行开始构建分布式核心,形成以稳态集中式架构与敏态分布式架构并存的情况。特别是在 2017 年,中国人民银行提出发展规划,鼓励实施架构转型,包括采用分布式架构,这一趋势推动了分布式核心系统的发展。分布式核心系统的关键目标是突破单机系统的数据存储和处理能力上限,同时减小单点故障对整个系统的影响。这通过多机分片处理数据库来实现,提高了银行系统的健壮性和可用性。

在推动分布式核心发展中,以“微服务、单元化”为代表的架构设计理念成为主流。 前者是一种软件架构风格,其应用程序被拆分为一组小型、松耦合的、自治的服务。每个服务都可以独立地进行开发、部署和扩展,并通过轻量级的通信机制(如 HTTP、消息队列等)进行互相通信。其核心原则是将复杂的单体应用程序拆分成更小、更可管理的部件,每个部件专注于完成一个特定的业务功能。后者则通过把一部分计算资源和一部分数据资源进行逻辑上的绑定,形成一个标准化的处理单元。每个处理单元具备完整的业务能力,但只处理全量数据中的一部分,简单理解一个单元就相当于一个小分行。其核心原则是将业务拆分更为细小的处理单元,并可根据需要进行扩展。

无论采取两种架构之一或兼而有之,都对底层基础设施提出更高的要求,特别是数据的主要载体-数据库。 相对而言,单元化更倾向于通过数据拆分,将数据形成一个自包含的处理单元,对数据库的承载体量、处理能力可以通过单机或集中式数据库完成。但由于单元化架构学习、实施成本很高,比较适合于体量较大或有异地多活规划的银行。对以城商行为代表的广大中小规模银行来说,因其技术底子相对较薄、业务系统多以外购或合作开发为主且财力投入相对有限,上述原因都造成了单元化对于中小行不太适合,那么中小行也更多采用“微服务+分布式数据库”的道路。

随着近十年国产分布式数据库的快速发展,其成熟度、稳定性等已趋于完善,开始在金融核心系统为代表的重要业务系统中尝试使用。当然, 这一新架构产品对架构、开发、运维等都带来很多变化 。特别是架构、研发层面,之前业务系统在设计上多是以集中式数据库能力为基础进行的,对于分布式架构存在诸多差异。如何降低这一差异,尽量复用之前架构设计,甚至做到将应用与底层基础架构解耦成为关键。这里提出一种新的观点-“分布式透明化”,即在分布式架构下仍然可沿用单机或集中式数据库的开发设计习惯,做到完全无感。这里不是简单的与某种数据库的语法、运维兼容的问题,而是从架构之初就可以透明处理。正是这种分布式透明化能力给城商行等中小银行的核心系统国产化及升级改造,提供了一条平滑的创新之路。

TiDB 在杭州银行新一代核心的实践

近期,杭州银行以 TiDB 为底层数据库的新一代核心业务系统成功投产上线 ,也是业内首个实际投产的云原生、分布式、全栈国产化的银行核心系统上线,是金融科技领域突破关键核心技术应用的重大实践,标志着杭州银行核心业务系统实现完全自主可控和架构升级。这一实践中正是遵循了“分布式透明化”这一理念,为广大同业建设核心系统架构转型提供了参考。杭州银行此次核心系统升级,在规划之初就将业务与基础设施解耦放在首要因素,从多角度对底层数据库提出很高要求。

从架构角度来看, 首要问题就是解决所谓透明化问题,即对数据库建模、设计、开发过程仍可沿用之前的实践,尽量减少因引入分布式数据库所造成的差异。一方面业务系统开发中很难避免人员的更迭,另一方面很多业务系统也是采用合作开发模式。透明化对于最大化保留原有开发积累,有着重要意义。其次就是需要数据提供全面的兼容能力,对上可以兼容新型应用架构,包括微服务、云原生及可能会有单元化;向下可兼容具备自主创新能力的基础平台。第三则是希望数据库提供标准而非定制化能力,这也是基于业内实践,很多国产数据库当面临功能不足时会提供定制开发已解决问题,但这是不利于用户长期技术战略的。

从研发角度来看, 针对数据分片后不可避免的分布式事务问题,在框架层尚无成熟完善的分布式事务解决方案下,充分利用底层数据库的分布式事务能力来解决,这样开发简化很多。弱化对数据库特性功能的依赖,将很多功能前置到框架层来解决。例如针对数据库中常用的序列功能,即可在框架层提供分布式全局发号器来解决,不再依赖数据库实现。针对数据库经常需面对的热点问题,虽然分布式架构能在一定程度上缓解这一问题,但在开发方面仍可以有多重手段去前置解决。例如,通过缓存与数据库的结合,降低对数据库热点对象的访问。通过将业务处理异步化,将对数据库压力分散开来。这些措施都可以有效解决热点问题。

针对具备金融特点的跑批类业务,通过将处理工作打散并行可以有效提高吞吐量,消除批量热点,充分利用分布式数据库的丰富算力。例如针对银行核心系统日终及日间批量处理采用带有业务属性的分布式调度器,充分发挥分布式数据库 TiDB 支持多会话及高并发处理特性,在原有作业流程基础上由调度器使用分段 SQL 语句或分片算法将任务平均分配,并将分片任务同时下发到多个执行器节点并行处理提升批量处理性能;同时批量任务执行器节点和 TiDB 数据库节点均可实现弹性水平扩展,保证杭州银行在未来业务快速增长、数据规模急剧扩大的情况下,批量处理性能不降级。

从运维角度来看, 引入分布式数据库会带来不小的挑战,当然同时也有着明显收益。从数据完整性角度来看,以 TiDB 为代表的原生分布式架构产品提供的是基于共识协议的多副本机制,能保障数据的强一致性和完整性。从可行性来看,分布式数据库产品多通过三中心仲裁方式来提供整体高可用性,但这一方式成本较高。TiDB 在实现上提供了更为经济的强双中心方案,即当满足同城低延迟的条件下,可通过两中心提供同样的可用性保障能力。通过同城强双中心与异地备份的结合,最终达到 RPO=0 的可用性标准。这也是很多金融行业用户最终选择分布式数据库架构的原因,其不仅可提供高并发、高扩展性,其整体较高的可用性及容灾能力也是被选择关键理由之一。同时这一架构还提供跨中心的多写多读能力,这对于业务侧实现业务同城多活具备重大意义。

针对在具体运维工作中普遍比较头疼的大表 DDL 变更、分布式监控问题,TiDB 也通过特有的对象在线变更技术及可观测技术解决了整体的维护性。金融行业作为涉及国计民生的重要行业,对于供应链安全尤为重视,因此希望数据库产品能提供底层适配能力。TiDB 在这方面提供了多种架构 CPU 的适配能力,可满足用户未来可能的迁移需求,从根本解决“断供”问题。

杭州银行核心系统升级,正是从架构、研发、运维多角度出发,在充分考虑新型分布式数据库能力的同时,结合自身技术发展现状及长远规划,最终选择 TiDB 作为核心系统的数据库,并通过近两年与厂商的通力协作成功上线。杭州银行新一代核心系统上线以来运行安全稳定,大幅提升了业务处理效率, 已支撑日均交易量 1000+ 万笔,平均交易耗时小于 100 毫秒,较原核心业务系统缩减 54%,日终跑批的处理速度为原核心业务系统的 2.1 倍 ,能够有效支撑未来业务的快速发展。

杭州银行实践带来的思考

杭州银行核心系统的成功上线,为广大同业者及数据库行业带来很多思考。中国有数千家金融机构,随着业务发展及技术演进,都正面临架构升级改造的工作。但由于各金融机构,体量差异巨大、发展阶段不同、技术路线各异,很难找到通用性、标准化的路径。与此同时,数据库的发展近年来也呈现“井喷式”发展,一方面采用新架构、新理念的分布式数据库不断涌现;另一方面传统单机、集中式数据库也纷纷推陈出新。上述问题,共同造成金融用户在架构升级改造中很多痛点。

近日杭州银行核心系统上线,走出了一条的适合自己的实践道路, 其秉承的 应用与基础设施解耦 的架构思想, 分布式透明化 的设计开发理念对同行业具有很 大参考意义。在既保持了原有使用习惯的基础上,又在整体架构路线方面选择了可持续创新的架构。未来,希望广大金融 IT 从业者,在面临国产化升级的整体规划上,既需要考虑企业当前现状,也能充分瞄准未来架构的延伸性,以创新的思维推动银行核心系统的整体升级,共同助力中国金融的数字化转型。

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

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

相关文章

【Effective Objective - C 2.0】——读书笔记(五)

文章目录 二十九、理解引用计数三十、以ARC简化引用计数三十一、在dealloc方法中只释放引用并解除监听三十二、编写异常安全代码时留意内存管理问题三十三、以弱引用避免保留环三十四、以”自动释放池块“降低内存峰值三十五、用"僵尸对象"调试内存管理问题三十六、不…

【C语言】实现队列

目录 (一)队列 (二)头文件 (三) 功能实现 (1)初始化 (2) 销毁队列 (3) 入队 (4)出队 (5&a…

论文阅读:四足机器人对抗运动先验学习稳健和敏捷的行走

论文:Learning Robust and Agile Legged Locomotion Using Adversarial Motion Priors 进一步学习:AMP,baseline方法,TO 摘要: 介绍了一种新颖的系统,通过使用对抗性运动先验 (AMP) 使四足机器人在复杂地…

luigi,一个好用的 Python 数据管道库!

🏷️个人主页:鼠鼠我捏,要死了捏的主页 🏷️付费专栏:Python专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前言 大家好,今天为大家分享一个超级厉害的 Python 库 - luigi。 Github地址:https://github.com/spotify/luigi 在大数据时代,处理海量数据已经成…

NVIDIA 刚刚揭秘了他们的最新大作——Eos,一台跻身全球十强的超级计算机

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

android获取sha1

1.cmd在控制台获取 切换到Android Studio\jre\bin目录下执行keytool -list -v -keystore 签名文件路径例如: 2.也可以在android studio中获取 在Terminal中输入命令:keytool -list -v -keystore 签名文件路径获取 获取到的sha1如下:

ubuntu屏幕小的解决办法

1. 安装vmware tools , 再点自适应客户机 执行里面的vmware-install.pl这个文件 :sudo ./vmware-install.pl 执行不了可以放到家目录,我放在了/home/book 里面 最后点这个自适应客户机 然后我这里点不了是因为我点了控制台视图和拉伸客户机&#xff0c…

ClickHouse--07--Integration 系列表引擎

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Integration 系列表引擎1 HDFS1.1 语法1.2 示例: 2 MySQL2.1 语法2.2 示例: 3 Kafka3.1 语法3.2 示例:3.3 数据持久化方法 Integ…

Leetcode 94.二叉树的中序遍历

题目 给定一个二叉树的根节点 root ,返回 它的中序 遍历 。 输入:root [1,null,2,3] 输出:[1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 递归遍历 递归遍历就是一个很简单的中序遍历 /*** Definitio…

LEETCODE 69. x 的平方根

class Solution { public:int mySqrt(int x) {int left0;int rightx;int midleft(right-left)/2;int ans-1;while(left<right){midleft(right-left)/2;if((long long)mid*mid<x){ansmid;leftmid1;}else{rightmid-1;}}return ans;} };*(long long)

GPT SOVITS项目 一分钟克隆 (文字输出)

步骤流程&#xff1a;&#xff08;首先使用UVR 提取人声文件&#xff0c;然后按下面步骤进行&#xff09; 注意这里提交的音频是参考的音频

【简写MyBatis】01-简单映射器

前言 新开一个坑&#xff0c;为了学习一下MyBatis的源码&#xff0c;写代码是次要的&#xff0c;主要为了吸收一下其中的思想和手法。 目的 关联对象接口和映射类的问题&#xff0c;把 DAO 接口使用代理类&#xff0c;包装映射操作。 知识点 动态代理简单工厂模式Invocati…

Web APIs -05

js执行机制 js是单线程&#xff0c;同一个时间只能做一件事情&#xff0c;所有任务需要排队所以有时候会渲染不连贯 同步任务 都在主线程上执行&#xff0c;形成一个执行栈 异步任务 js的异步是通过回调函数实现的分为三类&#xff1a;1.普通事件&#xff1a;click等&…

课时31:内容格式化_输出格式化_printf格式化

1.1.3 printf格式化 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 场景需求 虽然我们能够通过 echo的方式实现信息某种程度的格式化输出&#xff0c;但是很多信息的输出偏重于手工的干预&#xff0c;效率太慢。我们需要一种功能…

“构建安全高效的前端权限控制系统:确保用户访问合适的内容“

✨✨ 欢迎大家来到喔的嘛呀的博客✨✨ &#x1f388;&#x1f388;希望这篇博客对大家能有帮助&#x1f388;&#x1f388; ✨✨ 一个正在努力的人&#xff0c;期待您的关注✨✨ 目录 引言 一、背景介绍 二 、具体实现方法 &#xff08;1&#xff09;用户角色管理 1. 安装依…

FL Studio21.2水果软件官方中文版网站

FL Studio 21&#xff0c;通常被称为“水果”音乐制作软件&#xff0c;是一款功能强大的数字音频工作站&#xff08;DAW&#xff09;。这款软件起源于“Fruity Loops”&#xff0c;最初的设计初衷是针对采样循环操作&#xff0c;自1998年发布以来&#xff0c;它已经从一款针对M…

Rust中不可变变量与const有何区别?

Rust作者认为变量默认应该是immutable&#xff0c;即声明后不能被改变的变量。这一点是让跨语言学习者觉得很别扭&#xff0c;不过这一点小的改变带来了诸多好处&#xff0c;本节我们来学习Rust的变量。 什么是变量&#xff1f; 如果你初次学习编程语言&#xff0c;变量会是一…

stm32:pwm output模块,记录一下我是用smt32,输出pwm波的记录--(实现--重要)

我是实现了输出pwm波&#xff0c;频率固定&#xff0c;占空比可以不断调整的方法&#xff0c;将PA0接到示波器上&#xff0c;可以看到是一个标准的PWM波&#xff0c;如图下面示波器图。 1&#xff0c;首先是ioc的配置 我刚开始设置的分频的倍数是7199&#xff0c;使得分频的太…

【项目实现】自主HTTP服务器

自主HTTP服务器 项目介绍网络协议栈介绍协议分层 数据的封装与分用数据的封装与分用 HTTP相关知识介绍HTTP的特点 URL格式URI、URL、URNHTTP的协议格式HTTP的请求方法HTTP的状态码HTTP常见的Header CGI机制介绍CGI机制的概念CGI机制的实现步骤CGI机制的意义 日志编写套接字相关…

嵌入式内核链表list_head,如何管理不同类型节点的实现

在Linux内核中&#xff0c;提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的&#xff0c;但是list_head的引入&#xff0c;使得内核数据结构也可以拥有面向对象的特性&#xff0c;通过使用操作list_head 的通用接口很容易实现代码的重用&#xff0…