为数据赋能:腾讯TDSQL分布式金融级数据库前沿技术

欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~算法

简介:李海翔,网名“那海蓝蓝”,腾讯金融云数据库技术专家。中国人民大学信息学院工程硕士企业导师。著有《数据库事务处理的艺术:事务管理和并发访问控制》、《数据库查询优化器的艺术:原理解析与SQL性能优化》,广受好评。spring

2018年5月11日,腾讯TDSQL团队为中国数据库技术大会DTCC带来了腾讯最新的数据库核心技术:TDSQL原创的全态数据的概念和基于历史态数据的可见性判断算法。sql

腾讯专家工程师李海翔在DTCC上作了主题为“为数据赋能---腾讯TDSQL分布式金融级数据库前沿技术”的技术内容分享。本次分享,基于数据库事务处理的核心技术并发访问控制技术,TDSQL原创性提出了全态数据的概念和基于历史态数据的可见性判断算法,并基于此实现了全时态数据库。数据库

以下是本次分享的主要内容。主要包括:TDSQL背景介绍、T-TDSQL原创技术出发点、T-TDSQL核心技术点、T-TDSQL典型应用、T-TDSQL核心理念、项目致谢六个部分。安全

1、 TDSQL概述

TDSQL是一个稳定运行了十年之久的分布式数据库,不只支撑了腾讯公司的计费业务,并且还在微众银行等金融单位的核心业务系统稳定、高效地运行了四年之久。这几年,TDSQL在技术层面不断进步,研发了不少新特性,诸如多级分区、热点更新、隐含主键、分布式事务等,不只有力的支撑了事务型的数据库应用,并且在体系结构上也朝Spanner架构上迈进,是一个名副其实的NewSQL系统。性能优化

img

TDSQL分布式事务处理技术,有了长足进步,不只表如今基于XA实现了2PC以支持分布式事务的原子提交,并且在MVCC技术的基础上,作了创新,使得TDSQL的事务处理技术基于原创技术而不断发展。微信

2、原创技术的出发点

TDSQL的原创技术,不是为技术而技术,而是基于业务的需求,为解决业务问题而进行的创新。架构

腾讯公司的计费业务系统,是世界上领先的金融云计费业务系统。这个系统包括SAAS、PAAS、IAAS三个层面。在SAAS层面,包括米大师、云商店、TDSQL等系统。并发

TDSQL托管帐户近280亿,米大师依托TDSQL进行金融交易,腾讯充值及其相关合做伙伴的日流水量超过150亿条,天天处理的交易量超过100亿笔。金融数据在TDSQL数据库中进行结算、对帐、审计、风控数据分析、构建用户画像等业务。如王者荣耀游戏点券的对帐业务、用户帐户消费充值变化审计与风控业务等。分布式

要进行诸如对帐、审计等业务,数据来源有两部分。一部分数据来源是从不一样系统(关系数据库或NoSQL系统)的日志数据中来,称为流水日志。但某个这样的系统天天的日志流水数据近百G且从趋势看增量数据递增很快。另外,有些数据是在TDSQL中按时间分表,需在一段时间结束后对按时间分表的数据利用流水日志进行对帐计算。

对帐主要是解决几种异常状况:

  1. 系统存在BUG,或者在故障时,未表现出预期的状况。这可能致使发货成功扣款不成功,或者扣款成功未发货的状况。如腾讯视频VIP管理系统的充值、发货。

  2. 规避黑客/内部风险。例如不法人员绕过业务系统去给本身充值等舞弊行为。

这样的对帐业务种类不少,不一样的应用其日志流水格式不彻底相同,TDSQL托管的帐户须要定时对多级数千种业务和帐户作数据一致性对帐检验。

从技术的角度看,存在四个问题:

  1. 应用开发复杂:使用业务日志,须要业务系统不断产生日志信息,而后耗费计算资源对不一样的日志格式进行解析,把日志信息存储到分析系统。由此带来了开发的负担和资源的浪费。

  2. 数据逻辑割裂:TDSQL中按时间分表,只能按肯定的时间段进行结算,不能灵活、方便的计算。如计算任意时间段内的数据,按时间段的分表在物理上割裂了数据按时间的逻辑连续特性,须要指定若干个特定的分表才能进行计算。

  3. 实时特性丢失:如上两个问题,隐含地,意味着进行计算的数据须要导入到一个新的分析系统进行计算,导出/导入数据的过程也带来了资源和时间的消耗、使得分析系统难以具有实时计算特性。

  4. 数据管理复杂:另外,日志等信息,是历史态数据,须要长期保存。在腾讯公司每日对不一样格式的、超过150亿条流水日志进行生成、存储、解析与管理等,这成为一个巨大的挑战。

现代的数据库系统只保留有数据的当前值,而因存储成本等缘由,历史态数据被丢弃。而数据做为重要的资产,无论是当前数据,仍是历史上曾经存在过的数据,都具备重要价值。所以,历史态数据存储、被分析、被挖掘、被反复使用,是当前互联网等企业的需求。尤为是金融类历史态数据,由于安全、须要被屡次计算的缘由,在腾讯公司的计费业务中,带有时态属性的数据被管理的需求日益旺盛。

基于上述缘由,腾讯公司基于TDSQL关系型数据库研发了时态数据库 T-TDSQL,由数据库系通通一管理海量的全时态数据、当前数据,解决了上述四个业务中的问题。

img

业务痛点的解决,是基于数据库的特色和业务场景进行深刻分析和思考而得以解决的。

img

由于数据有价值,因此TDSQL团队认为:历史数据富有价值。这是TDSQL时态数据库T-TDSQL的核心价值观。所以,咱们给出了TDSQL对于数据的新的认识。

TDSQL认为:

数据的状态属性,标识数据的生命周期轨迹。数据的生命周期分为三个阶段,每一个阶段刻画数据的不一样状态属性,以标识数据的生命周期轨迹中所处的状态。

  1. 当前态(Current State):数据项的最新版本的数据,是处于当前阶段的数据。处于当前阶段的数据的状态,称为当前态。

  2. 历史态(Historical state):数据项在历史上的一个状态,其值是旧值,不是当前值。处于历史阶段的数据的状态,称为历史态。一个数据项的历史态,能够有多个,反映了数据的状态变迁的过程。处于历史态的数据,只能被读取不能再被修改或删除。

  3. 过渡态(Transitional State):不是数据项的最新的版本也不是历史态版本,处于从当前态向历史态转变的过程当中。处于过渡态的数据,称为半衰数据。

这三个状态,涵盖了一个数据项的生命周期,合称为数据全态(full-state),或称为全态数据。在MVCC机制下,数据的三种状态均存在;在非MVCC机制下,数据只存在历史态和当前态。

  1. 当前态:MVCC或封锁并发访问控制机制下,事务提交后的数据的新值处于当前态。

  2. 历史态:MVCC机制下,当前活跃事务列表中最小的事务以前的事务生成的数据,其状态处于历史态。在封锁并发访问控制机制下,事务提交后,提交前的数据的值变为历史态的值,即数据项的旧值处于历史态。

  3. 过渡态:MVCC机制下,被读取的版本上尚有活跃事务(非最新相关事务)在使用,因最新相关事务修改了数据项的值,其最新值已经处于一个当前态,被读取到的值相对当前态已经处于一个历史状态,故其数据状态介于当前态和历史态之间,因此称为过渡态。

数据的双时态属性,分别为有效时间属性、事务时间属性。

有效时间属性表示数据表示的对象在时间属性上的状况。如Kate中学起止时间是2000-09-01到2003-07-30,而大学起止时间是2003-09-01到2007-07-30,这里的时间就是有效时间。

事务时间属性表示数据的某个状态的时间发生时刻。数据具备其时态属性,即在什么时候数据库系统进行了什么样的操做。某项操做在数据库系统内被封装为事务,而事务具备原子性。所以,咱们采用了事务标志来标识一个数据的事务时态属性。

从形式上看,有效时间属性和事务时间属性,在数据模型中用普通的用户自定义字段进行表示,只是用特定的关键字加以描述,供数据库引擎进行约束检查和赋值。

TDSQL团队指望,构建一个数据库系统,解决如上问题,新系统应该提供的特性以下:

img

所以,基于TDSQL的T-TDSQL时态数据库,有了以下的特性,这些特性,可以涵盖双时态的数据应用、数据安全、数据分析、简化应用开发等四大方面的问题:

img

3、T-TDSQL的核心技术

T-TDSQL的核心技术之一,是数据模型的定义,全态数据模型和双时态数据模型的结合,造就了T-TDSQL。

1.T-TDSQL的核心技术一,数据模型

在这个模型中,全态数据体如今了数据项的历史版本上;时态数据不只有事务时态、还有有效时间时态。而全态数据的历史态数据,不只能够追溯数据库系统的操做发生时间,还能够追溯发生的操做类型,以下图中的“Operation”列,能够知道在数据项上曾经发生的DML操做是UPDATE仍是INSERT仍是DELETE。这是一个很是酷的特性,这使得用户在T-TDSQL系统中能够实现“一切过往兼可追溯”的梦想。

img

2.T-TDSQL的核心技术二,历史数据转储时机

历史数据的存储时机,是T-TDSQL的另一个核心技术。

T-TDSQL用全态的数据概念,巧妙地利用MySQL的回滚段和Purge机制,实现了历史态数据的转储。一个原理图以下:

img

3.T-TDSQL的核心技术二,一致性快照点

在PostgreSQL中,若是实现本技术,能够考虑结合多版本的存储特色,实现当前态数据与历史态、过渡态的存储分离,这须要修改已有的数据可见性判断算法、页面存储格式、数据的合并时机、缓冲区的读写和heap的构造方式等,更重要的是要实现新的数据一致性快照点。

而T-TDSQL基于MySQL实现了新的数据一致性快照点的构建,于是能够获取任什么时候间段(包括历史发生过的时间)上的任何状态的数据。

img

img

做为原创技术,T-TDSQL的核心技术点及其思路,相关论文已经在World Wide Web journal上以题为《Efficienttime-interval data extraction in MVCC-based RDBMS》发表,详情可参见:

https://link.springer.com/article/10.1007/s11280-018-0552-7

4、T-TDSQL的典型应用

时态信息处理已经成为许多新一代数据库与信息系统的关键技术,特别是在金融领域 、电子商务、数据仓库、地籍管理系统、土地利用规划系统、地理信息系统中扮演着日益重要的角色。

电子商务、金融业务系统中,存在大量的收入、支出、余额等数据,而且随着业务的推动,新数据源源不断地产生,这些数据将在对帐、审计、用户画像等业务中发挥重要做用。经过实现事务时态功能,T-TDSQL能快速、精细、实时地获取这些数据。

在互联网金融业务中,对帐业务是一个经典的业务。

T-TDSQL为腾讯的计费对帐业务提供了完美的解决方案。

1.对帐业务

互联网金融行业对数据的准确性要求极高,而在互联网环境中,数据不一致或数据错误时有发生,所以,经过对帐来下降帐户余额等数据错误形成的风险十分重要。

在腾讯计费业务中,采用将帐户余额表(user)和帐户流水表(water)按小时/天为周期进行比对的方式,来发现帐户余额与交易流水的不一致现象,从而及时对错误交易进行修正。

传统的对帐采用按固定时间段(如分钟/小时/天)为单位进行对帐。如现对2018年4月11日的交易进行对帐,首先须要获得4月11日期初帐户余额表和期末帐户余额表,以及当天的交易流水表;而后对帐户表经过按用户ID分组,并计算每一个用户的期末余额减去期初余额,记为结果A,对流水表按用户ID分组,并将交易金额分组求和,记为结果B;最后将每一个用户的结果A和结果B进行比对,若是A=B,则交易没有问题,不然该用户在当天的交易存在错误。

对于按固定时间段对帐,主要存在如下三个问题:

  1. 时效性差:对于错误交易,不能当即发现并反馈,延迟了以固定时间段为单位的一段时间后才能发现错误。

  2. 对帐不精准:定位错误交易较复杂。例如:若是用户在一天内发生的多笔交易,其中一笔出现了错误,经过按天对帐的方式不能直接定位到具体的哪条交易出现错误,而只能定位到用户级别,即仍然须要人工参与,将该错误用户的当天交易都确认一遍,才能找到具体的错误交易。

  3. 对帐不灵活:按固定时间段对帐,如以天为单位,则只能等这一天内的增量数据沉淀下来,才能进行对帐,若是有跨天对帐需求(如昨天下午至今天上午),对帐所用数据须要跨多个表才能执行,这可能改变对帐业务的流程。

2.对帐优化

基于本文提出的数据模型和增量计算方法,能够很好的解决按天对帐所存在的问题。结合3.1.2中的示例,咱们给出在互联网金融的对帐业务中,增量计算的实际应用。

T-TDSQL能够基于增量计算的功能将帐户余额表(user)和帐户流水表(water)进行精准比对,进行流水级别的细粒度对帐,从而即时发现交易错误,并能够当即定位到错误的那一条交易,省去繁杂的错误交易定位过程。

优化后的对帐的核心思想是:总帐算摘要、细帐笔笔精。

优化后的对帐的效果是:总帐快对、细帐精确、不受时限、任意对帐[1]。

对帐步骤1—总帐对帐:首先读取给出对帐时间段[s_start,s_stop]内的全部帐户表数据块,对每一个数据块内数据采用与传统对帐方式相似的公式来确认帐户状况,即进行“总期末余额-总期初余额=总交易变更”试算[2],总期初余额表明s_start时的总余额,总期末余额表明s_stop时的总余额,总交易变更表明每块内帐户对应产生的流水,若是有数据块内的总帐不平,意味着有细帐错误,所以要进行步骤二、3所描述的精准对帐。

对帐步骤2—精准对帐—对帐过程:执行以下SQL,将帐户余额块和对应帐户流水块进行“快照差链接”,返回结果集中每条记录将含有{交易前余额,交易后余额,交易变更}。对应的执行效果图下图所示:

img

img

精准对帐示意图

对帐步骤3—精准对帐—精准之意:对步骤2结果里的每一条返回记录进行“交易后余额-交易前余额=交易变更”的试算[3](After-Before=Change),便可确认交易是否有误。若是有不知足此等式的状况存在,即为错误交易。

错误交易主要分为帐户表错误和流水表错误两种。例如,上图中,结果集中第2条元组,不知足试算公式,代表流水ID为2的交易进行了错误的账户余额更新或流水记录的交易变更值出错。结果集中的第4条元组,Change字段的值为NULL,表明该条交易的流水缺失。经过上图中的表,咱们对各类错误状况进行总结,这些错误,都须要在对帐过程当中进行报警。

3.有效时间的时态类应用

基于T-TDSQL的全时态核心技术,本次分享还从双时态的角度对典型应用作了介绍。以下图所示。

img

img

4.数据安全类应用

基于历史状态查询这一特性,T-TDSQL系统在数据订正、历史追踪等方面,提供灵活强大的数据安全保障功能,能够大大简化和加快审计、对帐等业务。

查询时间段内插入的数据,用于数据统计和追踪,如统计新开帐户、异常记录什么时候被添加等。

查询时间段内删除的数据,在安全保障和数据统计等方面做用显著,如恢复误删的数据、统计销户人数等。

查询时间段内更新的数据,可以追踪数据异常的发生时间和发生异常前的数据,用于数据异常的修复。

综合查询全部状态的历史态数据,在数据重演方面,能够辅助灾后恢复,或用于线下演练;数据统计方面,因支持任意时空节点的数据计算,对对帐等业务大有裨益;安全保障方面,简化了错误数据、误删数据的追踪和恢复。

以下是一些安全方面的示例:

img

除此以外,基于全时态态数据,实现数据重演、更有价值的数据分析和挖掘、使用AI技术对系统自动调优等成为可能。

5、T-TDSQL的核心理念,为数据赋能

为何T-TDSQL要去实现全时态数据库?

原创技术的背后,是什么在驱动着T-TDSQL团队作出这样的一个全时态数据库系统?

这些问题,其实更为重要。挖掘这些问题的缘由,为倡导原创而努力,当是TDSQL团队致力于技术分享时更看重的价值因素。

在TDSQL团队看来,“数据富有价值,历史数据富有价值”。在业务当中,挖掘数据的价值是很是重要的一环,这也是不少人在思考的内容,认为任何数据都有价值是颇有意义的。

所以,T-TDSQL项目的思考以后的观点是“Historical data are valuable. Business is a sword, Technology is only ashield.”。那么,什么是盾?什么是剑?盾和剑之间有什么关系呢?

在TDSQL看来,技术只是一个防守工具,用于把梦想变成现实。梦想是技术人想利用各类高大上、高精尖的技术解决现实问题的美好愿景,诸如分布式、一致性、快照、RDMA、NVM、AI、全数据挖掘等各类技术的炫酷使用。业务只是一个进攻的工具,用于发现梦想。TDSQL并不倡导业务为王的观点,而是左手盾右手剑,两手都要硬。但仅是左手盾右手剑,行走在技术的江湖,这只能成就技术人行侠仗义的梦想。其背后,还缺乏灵魂的支柱。

img

而历史数据富有价值,在(金融/腾讯/互联网/一切…)业务中,挖掘数据的价值,更是富有意义。

可是,百尺竿头更进一步。

数据的创造是由用户和其业务决定的,他们是创造数据的甲方。数据库承载了数据的管理职责,是否数据库系统也能够参与到数据的创造环节中来呢?

在TDSQL团队看来,全时态这一律念,正是数据库系统参与到数据创造环节的最佳契机。数据库系统为数据赋于了事务时态、赋于了DML操做过程当中的事件源,甚至可能为数据之间赋于关联关系(以下图中的5W、Lineage),这使得数据库系统也成为了数据的创造者。

这就是咱们、TDSQL团队在技术和业务背后的驱动要素:“为数据赋能”的理念。

img

在“为数据赋能”这个理念的支撑下,基于TDSQL的T-TDSQL所以而诞生。为数据赋能,于是能让数据拥有更多的价值,让数据库变成数据的生产者,参与数据的创造。下图代表,为数据赋能,T-TDSQL从5W角度,让数据拥有了时间(双时态,WHEN)、地点(存储的历史表,WHERE)、人物(用户ID,WHO)、对象(全态数据,WHAT)、缘由(DML等操做,WHY)等要素,使得数据再也不仅仅是用户使用CREATETABLE语句所建立的数据,而是包含了多种由数据库系统所创造的数据、且在数据的生命周期中融入了数据历史使其富有纵深的有价值的所有数据。

img

有了这些,数据库系统可以更加主动地追溯数据的历史,推演数据的变迁,预测数据(世界)的将来。

6、致谢

本项目在腾讯立项,研究内容和实现过程获得中国人民大学教育部数据工程和知识工程重点实验室和腾讯公司的参与和支持,特别向项目参与人、支持者致谢。

为从思惟、理念、技术等多个角度为本项目作出贡献的人致敬!

[1]不受时限、任意对帐:对帐的SQL语句中指定快照差便可,FROM子句中涉及的表名等不发生变化,即对帐使用的数据源没有改变,故不影响对帐流程。

[2]试算(Spreadsheet)为会计程序中其中的一个流程,它简单的定义就是在检查日记簿的全部交易分录的借方、贷方金额是否有错误之情形。可是在作试算检查时,应每笔交易分录纪录后即作此一动做。

[3]试算(Spreadsheet)为会计程序中其中的一个流程,它简单的定义就是在检查日记簿的全部交易分录的借方、贷方金额是否有错误之情形。可是在作试算检查时,应每笔交易分录纪录后即作此一动做。

此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/developer/article/1122906?fromSource=waitui

欢迎你们前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

相关文章
相关标签/搜索