一、 TDSQL概述
TDSQL是一个稳固运行了十年之久的分布式数据库,不仅撑持了腾讯公司的计费业务,而且还在微众银行等金融单位的外围业务零碎稳固、高效地运行了四年之久。这几年,TDSQL在技术层面不断进步,研发了很多新个性,诸如多级分区、热点更新、隐含主键、分布式事务等,不仅无力的撑持了事务型的数据库利用,而且在体系结构上也朝Spanner架构上迈进,是一个货真价实的NewSQL零碎。
TDSQL分布式事务处理技术,有了长足进步,不仅体现在基于XA实现了2PC以反对分布式事务的原子提交,而且在MVCC技术的根底上,做了翻新,使得TDSQL的事务处理技术基于原创技术而一直倒退。
二、原创技术的出发点
TDSQL的原创技术,不是为技术而技术,而是基于业务的需要,为解决业务问题而进行的翻新。
腾讯公司的计费业务零碎,是世界上当先的金融云计费业务零碎。这个零碎包含SAAS、PAAS、IAAS三个层面。在SAAS层面,包含米巨匠、云商店、TDSQL等零碎。
TDSQL托管账户近280亿,米巨匠依靠TDSQL进行金融交易,腾讯充值及其相干合作伙伴的日流水量超过150亿条,每天解决的交易量超过100亿笔。金融数据在TDSQL数据库中进行结算、对账、审计、风控数据分析、构建用户画像等业务。如王者光荣游戏点券的对账业务、用户账户生产充值变动审计与风控业务等。
要进行诸如对账、审计等业务,数据起源有两局部。一部分数据起源是从不同零碎(关系数据库或NoSQL零碎)的日志数据中来,称为流水日志。但某个这样的零碎每天的日志流水数据近百G且从趋势看增量数据递增很快。另外,有些数据是在TDSQL中按工夫分表,需在一段时间完结后对按工夫分表的数据利用流水日志进行对账计算。
对账次要是解决几种异常情况:
- 零碎存在BUG,或者在故障时,未体现出预期的状况。这可能导致发货胜利扣款不胜利,或者扣款胜利未发货的状况。如腾讯视频VIP管理系统的充值、发货。
- 躲避黑客/外部危险。例如不法人员绕过业务零碎去给本人充值等舞弊行为。
这样的对账业务品种很多,不同的利用其日志流水格局不完全相同,TDSQL托管的账户须要定时对多级数千种业务和账户做数据一致性对账测验。
从技术的角度看,存在四个问题:
- 利用开发简单:应用业务日志,须要业务零碎一直产生日志信息,而后消耗计算资源对不同的日志格局进行解析,把日志信息存储到剖析零碎。由此带来了开发的累赘和资源的节约。
- 数据逻辑割裂:TDSQL中按工夫分表,只能按确定的时间段进行结算,不能灵便、不便的计算。如计算任意时间段内的数据,按时间段的分表在物理上割裂了数据按工夫的逻辑间断个性,须要指定若干个特定的分表能力进行计算。
- 实时个性失落:如上两个问题,隐含地,意味着进行计算的数据须要导入到一个新的剖析零碎进行计算,导出/导入数据的过程也带来了资源和工夫的耗费、使得剖析零碎难以具备实时计算个性。
- 数据管理简单:另外,日志等信息,是历史态数据,须要长期保留。在腾讯公司每日对不同格局的、超过150亿条流水日志进行生成、存储、解析与治理等,这成为一个微小的挑战。
古代的数据库系统只保留有数据的以后值,而因存储老本等起因,历史态数据被抛弃。而数据作为重要的资产,不论是以后数据,还是历史上已经存在过的数据,都具备重要价值。因而,历史态数据存储、被剖析、被开掘、被重复应用,是以后互联网等企业的需要。尤其是金融类历史态数据,因为平安、须要被屡次计算的起因,在腾讯公司的计费业务中,带有时态属性的数据被治理的需要日益旺盛。
业务痛点的解决,是基于数据库的特点和业务场景进行深入分析和思考而得以解决的。
因为数据有价值,所以TDSQL团队认为:历史数据富裕价值。这是TDSQL时态数据库T-TDSQL的外围价值观。因而,咱们给出了TDSQL对于数据的新的意识。
TDSQL认为:
数据的状态属性,标识数据的生命周期轨迹。数据的生命周期分为三个阶段,每个阶段刻画数据的不同状态属性,以标识数据的生命周期轨迹中所处的状态。
- 以后态(Current State):数据项的最新版本的数据,是处于以后阶段的数据。处于以后阶段的数据的状态,称为以后态。
- 历史态(Historical state):数据项在历史上的一个状态,其值是旧值,不是以后值。处于历史阶段的数据的状态,称为历史态。一个数据项的历史态,能够有多个,反映了数据的状态变迁的过程。处于历史态的数据,只能被读取不能再被批改或删除。
- 过渡态(Transitional State):不是数据项的最新的版本也不是历史态版本,处于从以后态向历史态转变的过程中。处于过渡态的数据,称为半衰数据。
这三个状态,涵盖了一个数据项的生命周期,合称为数据全态(full-state),或称为全态数据。在MVCC机制下,数据的三种状态均存在;在非MVCC机制下,数据只存在历史态和以后态。
- 以后态:MVCC或封闭并发访问控制机制下,事务提交后的数据的新值处于以后态。
- 历史态:MVCC机制下,以后沉闷事务列表中最小的事务之前的事务生成的数据,其状态处于历史态。在封闭并发访问控制机制下,事务提交后,提交前的数据的值变为历史态的值,即数据项的旧值处于历史态。
- 过渡态:MVCC机制下,被读取的版本上尚有沉闷事务(非最新相干事务)在应用,因最新相干事务批改了数据项的值,其最新值曾经处于一个以后态,被读取到的值绝对以后态曾经处于一个历史状态,故其数据状态介于以后态和历史态之间,所以称为过渡态。
数据的双时态属性,别离为无效工夫属性、事务工夫属性。
无效工夫属性示意数据表示的对象在工夫属性上的状况。如Kate中学起止工夫是2000-09-01到2003-07-30,而大学起止工夫是2003-09-01到2007-07-30,这里的工夫就是无效工夫。
事务工夫属性示意数据的某个状态的工夫产生时刻。数据具备其时态属性,即在何时数据库系统进行了什么样的操作。某项操作在数据库系统内被封装为事务,而事务具备原子性。因而,咱们采纳了事务标记来标识一个数据的事务时态属性。
从模式上看,无效工夫属性和事务工夫属性,在数据模型中用一般的用户自定义字段进行示意,只是用特定的关键字加以形容,供数据库引擎进行束缚检查和赋值。
TDSQL团队冀望,构建一个数据库系统,解决如上问题,新零碎应该提供的个性如下:
因而,基于TDSQL的T-TDSQL时态数据库,有了如下的个性,这些个性,可能涵盖双时态的数据利用、数据安全、数据分析、简化利用开发等四大方面的问题:
三、T-TDSQL的核心技术
T-TDSQL的核心技术之一,是数据模型的定义,全态数据模型和双时态数据模型的联合,造就了T-TDSQL。
1.T-TDSQL的核心技术一,数据模型
在这个模型中,全态数据体现在了数据项的历史版本上;时态数据不仅有事务时态、还有无效工夫时态。而全态数据的历史态数据,不仅能够追溯数据库系统的操作产生工夫,还能够追溯产生的操作类型,如下图中的“Operation”列,能够晓得在数据项上已经产生的DML操作是UPDATE还是INSERT还是DELETE。这是一个十分酷的个性,这使得用户在T-TDSQL零碎中能够实现“所有过往兼可追溯”的幻想。
2.T-TDSQL的核心技术二,历史数据转储机会
历史数据的存储机会,是T-TDSQL的另外一个核心技术。
T-TDSQL用全态的数据概念,奇妙地利用MySQL的回滚段和Purge机制,实现了历史态数据的转储。
3.T-TDSQL的核心技术二,一致性快照点
在PostgreSQL中,如果实现本技术,能够思考联合多版本的存储特点,实现以后态数据与历史态、过渡态的存储拆散,这须要批改已有的数据可见性判断算法、页面存储格局、数据的合并机会、缓冲区的读写和heap的结构形式等,更重要的是要实现新的数据一致性快照点。
而T-TDSQL基于MySQL实现了新的数据一致性快照点的构建,因此能够获取任何时间段(包含历史产生过的工夫)上的任何状态的数据。
作为原创技术,T-TDSQL的核心技术点及其思路,相干论文曾经在World Wide Web journal上以题为《Efficienttime-interval data extraction in MVCC-based RDBMS》发表,详情可参见:
https://link.springer.com/art…
四、T-TDSQL的典型利用
时态信息处理曾经成为许多新一代数据库与信息系统的关键技术,特地是在金融畛域 、电子商务、数据仓库、地籍管理系统、土地利用规划系统、地理信息系统中扮演着日益重要的角色。
电子商务、金融业务零碎中,存在大量的支出、收入、余额等数据,并且随着业务的推动,新数据源源不断地产生,这些数据将在对账、审计、用户画像等业务中施展重要作用。通过实现事务时态性能,T-TDSQL能疾速、精密、实时地获取这些数据。
在互联网金融业务中,对账业务是一个经典的业务。
T-TDSQL为腾讯的计费对账业务提供了完满的解决方案。
1.对账业务
互联网金融行业对数据的准确性要求极高,而在互联网环境中,数据不统一或数据谬误时有发生,因而,通过对账来升高账户余额等数据谬误造成的危险非常重要。
在腾讯计费业务中,采纳将账户余额表(user)和账户流水表(water)按小时/天为周期进行比对的形式,来发现账户余额与交易流水的不统一景象,从而及时对谬误交易进行修改。
传统的对账采纳按固定时间段(如分钟/小时/天)为单位进行对账。如现对2018年4月11日的交易进行对账,首先须要失去4月11日期初账户余额表和期末账户余额表,以及当天的交易流水表;而后对账户表通过按用户ID分组,并计算每个用户的期末余额减去期初余额,记为后果A,对流水表按用户ID分组,并将交易金额分组求和,记为后果B;最初将每个用户的后果A和后果B进行比对,如果A=B,则交易没有问题,否则该用户在当天的交易存在谬误。
对于按固定时间段对账,次要存在以下三个问题:
- 时效性差:对于谬误交易,不能立刻发现并反馈,提早了以固定时间段为单位的一段时间后能力发现错误。
- 对账不精准:定位谬误交易较简单。例如:如果用户在一天内产生的多笔交易,其中一笔呈现了谬误,通过按天对账的形式不能间接定位到具体的哪条交易呈现谬误,而只能定位到用户级别,即依然须要人工参加,将该谬误用户的当天交易都确认一遍,能力找到具体的谬误交易。
- 对账不灵便:按固定时间段对账,如以天为单位,则只能等这一天内的增量数据积淀下来,能力进行对账,如果有跨天对账需要(如昨天下午至今天上午),对账所用数据须要跨多个表能力执行,这可能扭转对账业务的流程。
2.对账优化
基于本文提出的数据模型和增量计算方法,能够很好的解决按天对账所存在的问题。联合3.1.2中的示例,咱们给出在互联网金融的对账业务中,增量计算的理论利用。
T-TDSQL能够基于增量计算的性能将账户余额表(user)和账户流水表(water)进行精准比对,进行流水级别的细粒度对账,从而即时发现交易谬误,并能够立刻定位到谬误的那一条交易,省去繁冗的谬误交易定位过程。
优化后的对账的核心思想是:总账算摘要、细账笔笔精。
优化后的对账的成果是:总账快对、细账准确、不受时限、任意对账[1]。
对账步骤1—总账对账:首先读取给出对账时间段[s_start,s_stop]内的所有账户表数据块,对每个数据块内数据采纳与传统对账形式相似的公式来确认账户状况,即进行“总期末余额-总期初余额=总交易变动”试算[2],总期初余额代表s_start时的总余额,总期末余额代表s_stop时的总余额,总交易变动代表每块内账户对应产生的流水,如果有数据块内的总账不平,意味着有细账谬误,因而要进行步骤2、3所形容的精准对账。
3.无效工夫的时态类利用
基于T-TDSQL的全时态核心技术,本次分享还从双时态的角度对典型利用做了介绍。如下图所示。
4.数据安全类利用
基于历史状态查问这一个性,T-TDSQL零碎在数据勘误、历史追踪等方面,提供灵便弱小的数据安全保障性能,能够大大简化和放慢审计、对账等业务。
查问时间段内插入的数据,用于数据统计和追踪,如统计新开账户、异样记录何时被增加等。
查问时间段内删除的数据,在平安保障和数据统计等方面作用显著,如复原误删的数据、统计销户人数等。
查问时间段内更新的数据,可能追踪数据异样的产生工夫和产生异样前的数据,用于数据异样的修复。
综合查问所有状态的历史态数据,在数据重演方面,能够辅助灾后复原,或用于线下演练;数据统计方面,因反对任意时空节点的数据计算,对对账等业务大有裨益;平安保障方面,简化了谬误数据、误删数据的追踪和复原。
除此之外,基于全时态态数据,实现数据重演、更有价值的数据分析和开掘、应用AI技术对系统主动调优等成为可能。
五、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并不提倡业务为王的观点,而是左手盾右手剑,两手都要硬。但仅是左手盾右手剑,行走在技术的江湖,这只能成就技术人行侠仗义的幻想。其背地,还短少灵魂的支柱。
而历史数据富裕价值,在(金融/腾讯/互联网/所有…)业务中,开掘数据的价值,更是富裕意义。
然而,百尺竿头更进一步。
数据的发明是由用户和其业务决定的,他们是发明数据的甲方。数据库承载了数据的治理职责,是否数据库系统也能够参加到数据的发明环节中来呢?
在TDSQL团队看来,全时态这一概念,正是数据库系统参加到数据发明环节的最佳契机。数据库系统为数据赋于了事务时态、赋于了DML操作过程中的事件源,甚至可能为数据之间赋于关联关系(如下图中的5W、Lineage),这使得数据库系统也成为了数据的创造者。
这就是咱们、TDSQL团队在技术和业务背地的驱动因素:“为数据赋能”的理念。
发表回复