分布式NewSQL数据库实践——民生银行经典案例


640?wx_fmt=gif


前言


此前,金融信息化建设主要依托原有集中型 IT 架构进行维护扩展,系统规模及复杂程度呈指数级增长,各类瓶颈逐渐暴露,日益增长的数字金融需求同旧式的系统架构缺陷之间的矛盾愈加凸显。

中国人民银行、中国银行保险监督管理委员会等金融监管部门逐渐推出分布式转型政策要求,金融企业开始兴起分布式转型浪潮。

民生银行作为中国第一家非国有企业所有的银行以及中国领先的零售银行,管理的总资产为 3.2 万亿人民币,运营 33 家分支和超过 700 家银行网点。在业务创新和技术创新上,民生银行一直走在业界的前列,尤其在人工智能、大数据领域,民生银行做出了很多积极的尝试,取得了不错的成效。

银行分布式转型需求


应用和业务层的压力,给商业银行IT和数据架构带来了新需求和挑战,分布式技术架构转型的需求也就应运而生。商业银行亟需分布式架构转型,主要体现在如下几个方面:

1

提升海量数据系统管理弹性。当商业银行系统内数据量急剧增大时,系统需要弹性地扩容以应对PB级别以上的数据管理,这种弹性容量调整可以实现让所有数据保持在线。


2

提升数据系统管理性能。针对客户的实时需求,商业银行数据系统需要满足高并发业务操作需求,实现海量数据超高性能读写以及实时访问查询。

3

满足多类型数据处理需求,提升系统效率。在跨业务的融合中,亟需实现对多模数据的统一管理,从结构化数据到半结构化数据再到非结构化数据,进而实现不同类型的数据统一融合管理,从而大大提升系统效率。

4

简化开发运维节约成本。随着应用的增多,更需要分布式架构支持,进行数据分区管理,实现业务有效隔离。同时,保持系统的弹性、兼容性,大大简化运维开发。

5

有能力支撑核心业务系统的国产产品。除了数据安全的要求和“技术先进”,对于核心业务,更重要的是对产品代码级具有控制力,这样可以保证产品针对用户共性需求不断进行迭代更新,也带来产品稳定性以及高效强力的技术支持。


民生银行新一代数据库应用情况


目前,在数据库领域,民生银行新一代数据库的应用目前主要分为三个领域。

      

  

数据库分库分表


针对数据弹性扩容和性能、高可用等要求,我们也针对数据库进行了分库分表改造。目前已经实现Oracle、IBM DB2以及MySQL数据库的分库分表改造,总分库数超过15,分表数超过500张。

 

  

传统数据库的跨中心分布和双活


我们针对IBM DB2等传统关系型数据库产品进行了跨中心分布和双活的改造。提升总体安全性,提升RTO,RPO,实现“5个9” ,降低风险提高效率,操作过程更简单透明,同时大大提高软硬件资源利用率,节约了建设成本。

 

 新型分布式数据库产品使用


除了传统数据库的分布式改造,民生银行也积极尝试新型分布式数据库产品。如国内的分布式数据库SequoiaDB,目前已经在海量数据查询、分布式影像平台和归档数据管理等在线业务系统中规模部署使用。


分布式NewSQL创新实践


当前分布式架构转型的改造已经取得相当成效,但随着我行各类业务负载的不断增大,以及直销银行、互联网金融和人工智能等创新业务的拓展,同时分布式数据库应用也需要向更核心的业务系统推进。当前方案面临新的挑战:


1

开发运维成本: 分库分表方案,在扩展性和性能、并发上仍有瓶颈,且开发投入的各项成本高。分库分表的方案需要预先根据业务对数据库进行切分,这样的方案丧失了较多的弹性,同时在运维层面,也需要投入不小的人力。


2

降低使用和运维成本: MySQL兼容性。开源数据库MySQL目前在互联网行业应用较广,许多应用也基于MySQL开发,但是目前的分布式数据库很多没有实现完全的MySQL兼容,因此在实际投产后,实际的使用和运维成本更高了。


3

进入核心业务场景: 使用开源数据库、中间件方案,由于没有商业化厂商的支持和行业积累,稳定性没有保证,再进入核心业务系统时存在一定风险。


4


国产化要求:在分布式数据库领域,不能过分依赖海外开源产品,需要着重考察国内自主可控的分布式数据库产品。


针对上述需求,我们在分布式NewSQL的创新实践中,经过测试和对比,我们最终选择巨杉的SequoiaDB。


SequoiaDB 3.0 版本,目前已经实现完整协议级别MySQL兼容,可以在数据库层面做到分布式并且对已有业务全兼容。同时,巨杉在金融行业已经有过大规模使用考验,在产品成熟度上更可靠。

 



分布式NewSQL数据库平台,在使用SequoiaDB 3.0 后,体现了几大业务优势:

  • 分布式可扩展性:存储层的分布式数据引擎,可以实现数据量的弹性扩容,灵活应对业务需求的调整。

  • 微服务架构:整个平台参考了微服务架构,接入层的SQL实例和存储层的存储节点都可以进行自由的配置,应用可以按需选择SQL实例和存储节点。

  • MySQL完全兼容:接入层实现了完全协议级兼容MySQL,应用无缝对接,大大降低使用和运维成本。

 



业务场景测试结果


为了体现NewSQL平台的优势,我们选取了SequoiaDB在几个主要业务场景下的一些测试数据进行说明,这些业务场景可以代表我行的许多重要交易场景:


 渠道复杂查询场景


此场景以查询为主,查询语句较复杂,涉及4张表的关联,其中包括2张大的流水表的关联操作,每张表记录数达到数亿条,最终匹配结果达到数百条记录。


640?wx_fmt=png


在实际测试中系统的业务处理能力仍然可达到平均每分钟3,916.45笔,并且运行过程系统的吞吐量表现非常平稳。

 

 高频交易流水查询场景


此场景以高频查询为主,主要针对近期的流水记录,查询频率较高。共涉及3张表,其中小流水表和资料表记录条数分别为3000万条,大流水表为3亿条。


640?wx_fmt=png


通过测试,在该场景下,每分钟的业务处理能力可达到1,886,184.03笔,如此高的吞吐量仍然能够在整个过程中持续保持平稳。


 柜台业务办理场景


此业务以查询和更新为主,执行频率高,对响应时间要求高。其中查询业务涉及3张表,其中两张资料表为1000万,3000万条数据,维度表数据为1万条;更新操作则涉及资料表1000万条记录和维度表 1万条记录。


640?wx_fmt=png


混合查询和更新,在执行过程中可能出现不同事务对同一条记录的读写冲突,因此吞吐量表现出现一些小幅度波动,但总体平均每分钟的业务处理仍然可达到51,090.03笔。


 计费业务场景


此业务场景以插入、更新和查询为主,执行频率高,对响应时间要求高。其中查询涉及两张资料表和两张维度表,资料表记录数分别为1000万与3000万;插入操作涉及两张流水表,记录数分别为3000万与900万;更新则涉及一张维度表与一张流水表,记录数约为1万与1亿。


640?wx_fmt=png


业务场景较为复杂,每笔业务至少包含50余个数据库操作,混合着插入、更新以及查询等多种操作,平均每分钟的业务处理仍然可达到9,861.57笔。,相对波动也比较小。

 

小结


SequoiaDB 3.0 的MySQL兼容性较为优秀,扩展能力较好,总体性能满足重要交易系统的要求。后续,我们将会把更多现有分库分表方案难以处理的业务向NewSQL平台迁移。

 

我们也会持续评估未来大规模使用分布式数据库的可能性,充分发挥NewSQL数据库的优势,帮助我们的业务、技术创新,同时也希望我行在分布式数据库建设过程中的可以分享更多成功经验。

作者简介


周鹏,现就职于中国民生银行信息科技部,负责全行数据库维护及分布式数据库平台建设等工作,具有多年的数据类系统架构设计及调优经验。对于新型分布式数据库、大数据生态系统研究具有浓厚兴趣。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「拨云见日」英特尔揭秘短视频背后的二三事

“像一棵海草海草,随风飘摇,海草海草,浪花里舞蹈……”看到这样魔性的歌词,你是不是有立刻跟着唱的冲动,甚至还很想起来跳一段呢?去火锅店点餐,你会掏出手机告诉服务员按照视频内容操作吗&#…

36套java精品高级课_Dubbo-ZooKeeper“走一波”

随着科技的发展,服务器受到来自客户端的“压力”与日俱增,而使用分布式技术无疑是解决这一问题的不二选择,今天我们就介绍一款分布式解决--基于Dubbo-ZooKeeper的分布式解决方案。本文主要是如何安装Dubbo-ZooKeeper。Dubbo是什么&#xff1f…

英特尔助力金山云带你畅游云端的游戏世界

科技的发展让人们可以在任意时间、任意地点与不同的玩家一同畅游游戏世界。不论是拥挤的通勤路上,还是热闹的餐厅,都少不了痴迷于手游的玩家。来自《2017年中国游戏产业报告(摘要版)》的数据表明,去年中国游戏市场全年…

java date 实例_Java Date 和 Calendar 实例

Java 之 Date 和 Calendar 实例package com.homer.learn;import java.text.DateFormat;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;public class TimeTest {publ…

数据洪流时代,企业转型需要修建自己的“都江堰”

科技的进步推动着人类文明的进化,从农业采集社会到如今的网络智能社会,文明的进化也同样带动了企业的“进化”。今天,人工智能、云计算、大数据等技术的不断突破,让网络产生的数据量呈爆发式增长,数据洪流汹涌奔来&…

java $1参数_jmap命令详解----查看JVM内存使用详情

linux获取java进程PID:https://www.cnblogs.com/sxdcgaq8080/p/10734752.html如果命令使用过程中报错,可能解决你问题的方案:https://www.cnblogs.com/sxdcgaq8080/p/11089179.htmlhttps://www.cnblogs.com/sxdcgaq8080/p/10675966.html1、jmap命令基本概…

时代变了

阅读文本大概需要 2.6 分钟。最近一段时间,经常有人问我这么一个问题,说,张哥,现在市面上有各种付费网课和付费专栏,但我总觉得只有看书学习才是正途,不知道张哥怎么看?到底哪种学习方式最好呢&…

java properties读取缓存_java 读取 properties文件的各种方法

1。使用java.util.Properties类的load()方法示例: InputStream in lnew BufferedInputStream(new FileInputStream(name));Properties p new Properties();p.load(in);2。使用java.util.ResourceBundle类的getBundle()方法示例: ResourceBundle rb Re…

终于有人把什么是云计算、大数据和人工智能讲明白了!云计算是什么?

今天跟大家讲讲云计算、大数据和人工智能。为什么讲这三个东西呢?因为这三个东西现在非常火,并且它们之间好像互相有关系,可是很多人却不知道什么是云计算或者云计算应用在哪:一般谈云计算的时候会提到大数据、谈人工智能的时候会…

java 堆栈信息_每天学习一个命令:jstack 打印 Java 进程堆栈信息

Jstack 用于打印出给定的 java 进程 ID 或 core file 或远程调试服务的 Java 堆栈信息。这里需要注意的是 Java 8 引入了 Java Mission Control,Java Flight Recorder,和 jcmd 等工具来帮助诊断 JVM 和 Java 应用相关的问题。推荐使用最新的工具以及 jcm…

数据洪流来袭,企业转型势不可挡,如何四两拨千斤?

在漫长的历史里,文明的进步都是伴随着科技的发展,企业也在不断进化,无论是商业战略还是商业模式,在科技的推动下与时俱进,不断更迭创新。历史的长河流入数据洪流的时代,人工智能、大数据、云计算等新技术掀…

java写出http数据包_java用jpcap怎么识别出http和https的数据包?

问题简述:利用java的第三方库jpcap写抓包程序,求解怎么识别出http和https的数据包(就只要能判断出是http协议或https协议即可)。测试的解法:1.在tcp包(jpcap自带TCPPacket类比较方便识别tcp包)的基础上用80端口和443端口区分http和https&…

福利 | 2018 OpenInfra Days China限量版免费票任性放出

号外号外!福利来袭,手速up up up~春困夏乏秋盹冬眠暑气炎炎,OpenInfra帮你提神醒脑——特别好礼限量放送Ready?Go!2018 年 6 月 21-22 日,OpenInfra Days China将于国家会议中心北京升级回归,汇…

开源不止,前进不息:2018 OpenInfra Days China来了!

OpenStack Days China是由一群热衷并专注于开源的中国志愿者为中国开源社区组织和举办的年度社区活动。近两年来,志愿者团队成功激起广泛关注,获得了中国各行各业和来自全球开源开发者社区的巨大支持。会议注册人数共计超过 1 万人,参与人数逾…

java 中创建数据端口_java 如何在服务器端用socket创建一个监听端口,并对接受的数据进行处理,端口号为3333,请高手指点一下...

匿名用户1级2011-09-10 回答我百度HI你好了public class Test {public static void main(String[] args) {Test1 tnew Test1();t.start(); //启动线程}}/*** 继承一个线程类* author Administrator**/class Test1 extends Thread{private ServerSocket server null;public Tes…

短暂相逢却回味无穷,全球最具影响力的以太坊技术会议视频,你保存了吗!...

关注我们,了解更多精彩内容自2008年中本聪发表的那篇仅短短9页的比特币白皮书后,毁誉参半的比特币对当今互联网及物联网的世界格局产生了重大的影响,其后延伸出来的区块链技术成为了全球最时髦的名词。相比比特币,以太坊是区块链技…

java函数式编程 map_函数式编程-对Java 8流进行分区

将任意源流划分为固定大小的批次是不可能的,因为这会加重并行处理。 并行处理时,您可能不知道拆分后第一个子任务中有多少个元素,因此您无法为下一个子任务创建分区,直到完全处理第一个子任务。但是,可以从随机访问ofS…

互联网+2.0:技术有多强 梦想才有多近

在过去不到十年的时间里,互联网行业高速发展。先是以手机、pad等智能终端为主的移动互联网打破了PC端互联网商业发展瓶颈,实体经济也依托互联网进行改造升级,“互联网”成为行业图腾和符号。后是随着人工智能、大数据、云计算等技术的融入&am…

java定时器 并发_【java多线程与并发库】— 定时器的应用 | 学步园

定时器的应用1、 定时器主要涉及到两个类(java.util包中)-》public class Timer extendsObject(一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。 )-->public abstract class TimerTask extendsObjectimple…

java返回object的类型_为什么标准java类的clone()返回Object而不是实际的类型

在java中允许指定函数返回的类型,例如下面的代码public class Test {static class Dad {Dad me() {return this;}}static class Son extends Dad {Son me() {return this;}}}已验证.我们来看看ArrayList类.它已经覆盖了clone()函数(至少我看到它在Oracle jdk 1.7源代码)public …