【巨杉数据库SequoiaDB】省级农信国产分布式数据库应用实践
本文转载自《金融电子化》
原文链接:https://mp.weixin.qq.com/s/WGG91Rv9QTBHPsNVPG8Z5g
随着移动互联网的迅猛发展,分布式架构在互联网IT技术领域广泛应用并积累了大量实践经验。在互联网金融快速发展和利率市场化的大环境下,建设能够支持海量客户、具有弹性扩展能力、高效灵活的分布式架构应用系统已成为国内金融行业迫切的需要。
分布式数据库应用大势所趋
我社普惠金融平台建设,旨在“充分运用金融科技手段,优化信贷流程和客户评价模型,降低企业融资成本,纾解民营企业、小微企业融资难融资贵问题,增强金融服务实体经济能力”。
普惠金融服务是典型的互联网应用,其与传统信贷系统不同,具有互联网场景接入能力,如果沿用集中式的技术架构,在应对海量客户的互联网应用场景和总拥有成本等方面存在以下的潜在问题:
集中式架构普遍缺乏弹性伸缩的能力。随着交易量和数据量的增长,系统整体吞吐量会遇到硬件或技术的瓶颈。尤其在支持面向互联网客户相关业务时,不能有效处理瞬时爆发的高并发交易,制约了客户获取以及大规模业务营销。
集中式架构采用单体应用设计。软件开发和运行管理的最小单元是应用,管理力度较粗,容易“牵一发而动全身”,应用的开发过程不易践行轻量化敏捷开发理念,系统在运行过程中容易出现单点故障,难以有效进行故障隔离。
集中式架构系统的基础设施通常使用高端服务器和存储设备,以及传统关系型数据库。硬件和软件采购成本高,开发和运维主要依赖于服务厂商,服务成本高,也无法做到完全自主掌控。
技术体系封闭,技术的发展高度依赖于厂商,特别是依赖国外厂商,商业银行的IT团队缺乏自主可控能力,在一定程度上存在信息安全风险。
我社在规划新一代普惠金融平台建设时,从战略高度对上述问题进行深入分析与思考,立足长远发展规划,从横纵两个角度看待该分布式系统的研发,即在数据方面着眼于分布式数据库,在功能层面则引入微服务架构,进而真正实现全方位分布式框架的金融服务底层系统。同时,响应国家对技术自主可控的要求,选择国产分布式数据库,有效控制IT成本和实现技术自主可控。
国产分布式数据库应用实践
普惠金融平台与传统业务系统不同,具有互联网场景接入能力,获客方式发生了变化。为了满足客户申请贷款的爆发式增长,在审批方式和流程上有所改变,对企业征信和智能风控的要求更高。随着细分领域竞争的加剧,平台应用需要不断调整、随时迭代。
经过仔细而严格的评选,最终我社采用国产分布式数据库—SequoiaDB巨杉数据库作为底层分布式数据库平台。
平台应用利用分布式数据库计算-存储层分离技术,将协议解析、计算等模块与底层存储解耦,存储层通过多维分区实现弹性扩张,计算层采用无状态设计,独立部署,通过动态增加数据库实例线性提升计算能力,有效应对瞬时爆发的高并发海量交易,分布式数据库平台同时完整兼容MySQL、PosgreSQL和SparkSQL针对应用提供较高兼容性。
平台应用开发基于Spring Cloud微服务框架,业务逻辑从传统的单一中间件被拆解成众多微服务组件,分布式数据库实例服务层提供了可选择、可适配、可动态伸缩的标准数据库计算引擎,可根据应用的场景灵活选择。应用开发采用数据库分布式计算引擎,面向联机交易的业务场景,采用兼容MySQL的计算实例,批处理业务场景选用兼容SparkSQL的计算实例。实例通过访问分布式数据库不同的数据副本,实现对数据的并行处理和多元利用(一份数据,多种用途)。
以下是联机业务应用分布式数据库的几个技术要点:
1.分布式架构下的应用设计
分布式数据库的核心机制即是将海量数据通过某种算法切分到一个或多个分区中。每个数据分区可以使用不同的物理服务器,通过网络设备将服务器连接到一起,以构成一个逻辑上对外统一的数据库服务。因此,如何将数据进行均匀切分、如何在切分后对数据进行快速检索,是分布式策略必须优先保障的内容。
分布式数据库切分规则包括:
(1)散列分区:散列分区指的是在数据写入的过程中,针对指定分区字段的值进行散列后,判断其数据物理存放分区的规则。
(2)范围分区:范围分区指的是在数据写入的过程中,针对指定分区字段的值判断其所在范围,根据数据所在范围对应的数据分区,判断其物理位置的规则。
(3)多维混合分区:多维混合分区是散列分区与范围分区的结合。在多维混合分区中,用户在建表时可以指定两个不同的字段,首先根据第一个字段进行范围的判定,之后再根据第二个字段在该范围所对应的一系列物理服务器中进行散列判断其位置。
在我社新一代普惠金融服务平台项目中,对于数据库表结构的设计面向数据特征有针对性地定义分区字段与规则。在实践的过程中,极大提升应用的效率与并发能力,避免了传统架构中数据库成为瓶颈与热点的问题。
2.分布式微服务架构下的数据一致性保证
在利用分布式数据库系统实现底层业务支撑时,会带来很多传统集中式数据库无法比拟的特性,例如:分布式容错能力、弹性可扩展能力等,这些都是对银行等金融行业来说至关重要的优化因素。分布式数据库系统之所以能够具有这些能力,主要是因为它的分布式存储特性,即每个节点保存完整数据库的一部分,而在其它若干节点上部署它的副本。那么,为了实现这样的分布式数据库系统,使之发挥应有的能力,很重要的一环就是在于它的一致性策略。
在实践的过程中,我社重点研究并解决了行业内公认的分布式环境下端到端数据一致性与数据安全的难题:
(1)利用柔性事务保证微服务之间的数据一致性;
通过平台对分布式数据库在银行领域应用策略的研究,深入了解分布式底层技术,利用柔性事务TCC实现微服务之间数据一致性。普惠金融平台应用开发基于Spring Cloud微服务框架,应用程序微服务开发规范明确了每组微服务必须提供try-confirm-cancel接口,遵循对微服务的分布式事务所提出的RESTful TCC解决方案,结合Spring Cloud Netflix和分布式柔性事务实现微服务之间的数据一致性。
(2)在微服务内部,通过分布式数据库技术实现自动化事务一致性保障;
结合普惠金融系统业务数据的特点,合理运用数据多维分区策略,并利用分布式数据库技术,在两阶段提交(2PC)基础之上,针对异常故障场景,实现自动化的事务一致性保障。
为了保证数据的一致性,需要维护一个全局唯一性的ID来区别并发的事务,标识产生或变更的数据,实现这样一个全局唯一的ID通常结合事务发起的时间,依赖时间戳加上其他的一些标识位。国产分布式数据系统,专门设计了一套全分布的逻辑时钟机制,避免了强制所有参与节点从GTM中获取唯一ID的步骤,同时又能满足分布式存储和处理的要求。
3.分布式数据库跨同城数据中心部署
基于分布式数据库完善的多副本数据同步机制,实现跨同城双中心部署,支持数据的容灾与高可用,实现新一代普惠金融平台应用跨数据中心运行,当主中心出现灾难时,数据零丢失,分布式数据库自动容灾切换,对应用系统完全透明。下图是省联社普惠金融平台分布式数据库应用的双活部署示意图:
项目创新成果
1.分布式架构转型与金融国产化
分布式数据库提供灵活、弹性、便捷、融合的数据服务能力,应对瞬时爆发型业务量增长,与微服务架构相结合,为应用的敏捷迭代开发打下了良好的基础,快速推出创新、差异化、跨界的金融服务和产品。
利用国产分布式数据库巨杉数据库,对底层代码完全自主可控,替换国外数据库产品,避免核心技术的绑定,从软件与硬件两个方面、性能和效率两个层面、短期应用的战术最优化和长远发展的战略最优化两个角度实现了整体的全面提升。另外,考虑到异地灾备,通过分布式数据与应用相结合的多活部署与实践,为各地农信社和其它金融机构未来多活数据中心建设探索出了一条切实可行的道路。
2.分布式环境下端到端数据一致性
在实践的过程中,我社重点研究并解决了行业内公认的分布式环境下端到端数据一致性与数据安全的难题:(1)利用柔性事务保证微服务之间的数据一致性;(2)在微服务内部,通过分布式数据库技术实现自动化事务一致性保障;(3)利用分布式数据库多活体系解决跨数据中心数据一致性与高可用问题。
在虚拟化云环境中微服务框架下,我社完成了分布式系统的多层次数据一致性,进而实现了高效弹性易扩展、事务处理的最终一致性、微服务级别的数据保障以及多活异地容灾等优良的特性,为金融科技背景下银行等金融系统的进一步升级与改革提供了强大动力和发展潜力。
3.实现社会与经济效益最大化
我社对互联网融资行业进行了深入调研,将互联网融资业务的共性进行提炼,基于建弹性多层次混合平台系统推出了一个强大稳定的集客户账户、产品创新、全周期核算、业务自动化审批、智能风控等为一体的普惠金融平台。该平台为客户提供差异化配置金融服务,完成互联网跨界的产品整合、服务交互、产品核算等功能。不仅提供了全方位的一揽子普惠金融、互联网融资服务,而且为企业互联网金融业务的快速发展奠定了坚实的基础。
【巨杉数据库SequoiaDB】省级农信国产分布式数据库应用实践的更多相关文章
- 【巨杉数据库SequoiaDB】巨杉Tech | 分布式数据库千亿级超大表优化实践
01 引言 随着用户的增长.业务的发展,大型企业用户的业务系统的数据量越来越大,超大数据表的性能问题成为阻碍业务功能实现的一大障碍.其中,流水表作为最常见的一类超大表,是企业级用户经常碰到的性能瓶颈. ...
- 开源分布式数据库SequoiaDB在去哪儿网的实践
编者注: 中国的数据库行业也迎来了一波新的热点事件.分布式数据库这块新消息不断,也让大家开始关注中国的分布式数据库.首先是短短一周内,Pingcap和SequoiaDB巨杉数据库陆续宣布了C轮的数千万 ...
- 【巨杉数据库Sequoiadb】点燃深秋,巨杉数据库亮相DTC数据技术嘉年华大会
2019年11月15日,第九届数据技术嘉年华大会在北京隆重召开,本次大会以 “开源 • 智能 • 云数据 - 自主驱动发展 创新引领未来” 为主题,探索数据价值,共论智能未来.SequoiaDB 巨 ...
- 【巨杉数据库SequoiaDB】巨杉Tech | 四步走,快速诊断数据库集群状态
1.背景 SequoiaDB 巨杉数据库是一款金融级分布式数据库,包括了分布式 NewSQL.分布式文件系统与对象存储.与高性能 NoSQL 三种存储模式,分别对应分布式在线交易.非结构化数据和内容管 ...
- 巨杉Talk | 拒绝数据碎片化,原生分布式数据库灵活应对数据管理需求
2019年7月19-20日,以“运筹帷幄,数揽未来”为主题的DAMS中国数据智能管理峰会在上海青浦区成功举办.在DAMS峰会上,巨杉数据库为大家带来了题为“云架构下的分布式数据库设计与实践”的主题分享 ...
- 打造基于 PostgreSQL/openGauss 的分布式数据库解决方案
在 MySQL ShardingSphere-Proxy 逐渐成熟并被广泛采用的同时,ShardingSphere 团队也在 PostgreSQL ShardingSphere-Proxy 上持续发力 ...
- Amoeba:开源的分布式数据库Porxy解决方案
http://www.biaodianfu.com/amoeba.html 什么是Amoeba? Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件 ...
- ThinkPHP 数据库操作(五) : 存储过程、数据集、分布式数据库
存储过程 5.0支持存储过程,如果我们定义了一个数据库存储过程 sp_query ,可以使用下面的方式调用: $result = Db::query('call sp_query(8)'); 返回的是 ...
- Redis_NoSql分布式数据库CAP原理
前文简单介绍了NoSql数据库的四大分类以及常用的数据库技术,本文简单介绍分布式数据库CAP原理. 一.传统的CAID是什么 1. A(Atomicity)原子性:事务里的所有操作要么全部做完,要么都 ...
随机推荐
- num12---组合模式
案例描述: 学校下有多个学院,每个学院下有多个专业系. 把学校.院系.专业 全都看成某个组织类型,含有添加add方法,删除remove方法,显示print方法. 如果有新增的院系.专业,新增加对应的 ...
- Entity Framework 实体状态
从今天开始我们开始讲解EF中的实体状态和数据操作,这篇文章先讲解实体状态. 我们通过前面的学习,知道EF通过上下位负责跟踪实体的状态,实体状态的位置是在命名空间 System.Dat.Entity 里 ...
- SSL公钥证书传递进行隐匿传输数据
title: 使用X.509公钥证书传递进行隐匿传输数据 date: 2018-02-11 17:47:50 tags: --- 使用X.509公钥证书传递进行隐匿传输数据 看到国外一篇有关于在ssl ...
- step1:准备歌词之《前端开发是个啥》
以下是给大家介绍前端开发的填词,曲子是李圣杰的<最近>,大家喜欢可以试试唱. 点赞关注超过100的平台,我后续上来发本人原唱视频(目前正在练习中...),另外大家觉得哪些词写得不好的,欢迎 ...
- 获取本机网卡ip地址
import sys, os import socket, struct, fcntl import six import psutil def get_ip(iface="enp0s3&q ...
- apache主配置文件httpd.conf详解
[root@lamp conf]# vi httpd.conf.bak 1 # 2 # This is the main Apache HTTP server configuration file. ...
- [Python]List 过滤
获取数据库列表屏蔽系统自带数据库 # 原代码 db_list_result = [('master', ), ('tempdb', ), ('model', ), ('msdb', ), ('stud ...
- 珠峰-cookie相关的东西
#### md5 #### #####
- Spring ioc(4)---如何解决循环依赖
前面说到对象的创建,那么在创建的过程中Spring是怎么又是如何解决循环依赖的呢.前面提到有个三级缓存.就是利用这个来解决循环依赖.打个比方说实例化A的时候,先将A创建(早期对象)放入一个池子中.这个 ...
- 跨域打开页面:Uncaught DOMException: Blocked a frame with origin
Uncaught DOMException: Blocked a frame with origin 使用postMessage()方法可以解决跨域传值的问题 Api: https://develop ...