您的位置:首页 > 数据库

腾讯潘安群:腾讯云金融级数据库TDSQL分析

2016-10-14 22:10 896 查看
SDCC 2015将于2015年11月19-21日在北京.朗丽姿西山花园酒店召开。在大会召开之际,笔者采访到了腾讯高级软件工程师潘安群,请他分享TDSQL在腾讯云金融领域的实践经验。

SDCC 2015将于2015年11月19-21日在北京.朗丽姿西山花园酒店召开。在大会召开之际,笔者采访到了腾讯高级软件工程师潘安群,请他分享[b]TDSQL在腾讯云金融领域的实践经验。 届时,[b]潘安群[/b][/b]将在新一代数据库调优实战论坛中带来《腾讯云金融级数据库[b]TDSQL分析[/b]》的主题分享,欢迎前来现场聆听【 点击这里抢票】。 



腾讯高级软件工程师

CSDN:首先请简单介绍下自己、公司以及目前所负责的领域。

潘安群:目前任职于腾讯TEG计费平台部,任技术总监一职,主要负责虚拟支付平台的相关研发工作。重点关注分布式数据库、大数据风控平台等领域。

[b]CSDN:可否介绍下目前腾讯主要使用的数据库有哪些?他们各自的优势是什么?[/b]

潘安群:腾讯的OLTP场景中,主要是两大思路:

基于MySQL的定制

这一类产品通常是在兼容MySQL接口协议的基础上,针对自己的业务场景做定制化,例如我们针对金融场景,定制出TDSQL,强调数据强一致性、零丢失、高可用等特性;游戏运营平台则基于游戏场景变化频繁的特点,定制出TMySQL,强调二进制字段压缩、在线DDL、快速回档(Binlog并行恢复)等特性;此外还有CDB,实现多租户管理,将DB云化,为公司私有云以及腾讯云提供数据库的PaaS服务。

自研的KV存储

这一类产品就更加特性化,与业务场景结合更紧,它们的最初出发点往往是性能与服务器成本的平衡。例如常见的Feeds流,通常都会做磁盘读写优化、冷热数据自动分离;而我们也针对游戏支付营销场景,开发了高性能的,全内存的金融级分布式存储系统(HOLD),在保证跨IDC强一致性的情况下,单机性能到20万TPS。当然也有通用的CKV系统,主要是KV系统云化,为公司私有云以及腾讯云提供对象存储的PaaS服务。

此外,也有业务使用MongoDB等数据库,这类文档型数据库胜在灵活,适合产品原型或发展初期,对于大规模的在线服务,我们并不推荐使用。

在OLAP场景下,基本上被TDW垄断。TDW(腾讯分布式数据仓库)是公司大数据平台的核心部件,基于开源软件HIVE和Hadoop进行了深度定制,目前该项目已经开源。

[b]CSDN:TDSQL是一款什么样的数据库?当初开发TDSQL的初衷是什么?主要有哪些特性?其开发架构是怎样的?它适合什么样的开发场景?[/b]

潘安群:TDSQL(Tencent Distributed mySQL - 腾讯分布式MySQL)是针对金融联机交易场景推出的高一致性数据库解决方案;产品形态为一个数据库集群,底层基于MySQL(MariaDB 10.0);对外的功能及接口表现上与MySQL兼容。

重点针对金融OLTP场景进行了如下增强:

通过多副本冗余和故障自动切换机制,解决单点问题,确保在单机、单IDC、甚至单个城市灾难时,服务持续可用;
对数据多个副本之间的一致性保障进行深度优化,实现数据访问、主备切换的一致性,确保在单机、单IDC故障时数据零丢失;
引入集群机制,实现自动的容量伸缩,确保在业务飙升时,数据库服务能力自动适配业务增长,保持对外服务的持续可用。

TDSQL整体上由三大核心模块组成:

DB。实际存储业务数据的MySQL实例。
Scheduler。存储DB实例的元数据,例如路由信息,授权信息、主备信息。此外它还负责容灾切换的调度、主备选举等。
Proxy。主要负责客户端请求的转发,屏蔽后端DB的容灾切换、分库分表等逻辑。

关于TDSQL架构的更多细节,期待您参与SDCC 2015数据库专场,与我们进一步讨论。

目前,在腾讯内部TDSQL主要用于对数据一致性要求最为苛刻的计费支付类业务(Midas),以及微众银行(WeBank)核心交易系统的数据层,此外也是腾讯云金融解决方案(QCloud)的数据库服务方案。

[b]CSDN:当初开发TDSQL的初衷是什么?[/b]

潘安群:腾讯计费平台从2003年以来,经过12年发展,数据库容灾架构经历4代演进,TDSQL是我们的第四代产品,2012年我们启动TDSQL这个项目,主要有下面几个动机:

易用性。我们前面几代产品,在易用性上均存在一定的问题,例如第二代产品,业务逻辑跟容灾逻辑耦合太紧,导致每个业务开发人员必须对整套容灾逻辑非常熟悉,开发难度和运营维护难度都很高,而且容易出错。而第三代产品HOLD,虽然将容灾逻辑下沉到存储层,业务与容灾充分解耦了,但仅能提供简单的GET/SET这类KV接口,不够灵活。
通用性。标准SQL接口比KV接口更加通用,使用范围更广。在推广第三代HOLD平台时,就面临了很多业务原本使用MySQL,现需改为KV接口,改造难度大,推广进展缓慢,而一些外部业务则根本就不愿意改造。所以存储平台必须更加标准和通用,才能让更多业务直接无缝割接到新平台。

此外,也有几个契机,让我们重新基于MySQL来打造存储平台:

SSD在公司内开始大规模使用,SSD的IOPS相对于机械硬盘有质的变化,能满足大部分系统的性能需求。利用好SSD优势,能极大简化存储系统的架构体系。
以KV为代表的NoSQL无法形成业界标准及规范,反观以Oracle、MySQL为代表的传统关系型数据库生态完善,使用范围也更广,更容易被开发人员接受。
MySQL在5.5版本引入半同步复制,5.6版本引入GTID等机制,而且经过5.5,5.6,5.7等几个版本,开源的MySQL在性能、数据强一致性方面有了质的提升。

[b]CSDN:在开发TDSQL期间有没有遇到过困难点?又是如何克服的?你们目前的开发团队有多少人?[/b]

潘安群:TDSQL跟我们之前的三代产品在设计理念上有很大的不同,导致我们开发TDSQL时,除了前面三代系统积累的经验,没有其他可直接复用的模块,开发几乎是从零开始。而数据库开发本身是一个大项目,涉及的东西甚多,我们需要在很快的时间内完成第一个版本的开发,这在当时,对团队来说是一个很大的挑战。现在回头去看,当时采取的几个措施,还是相当有效的:

基于开源软件快速搭建。MySQL版本选用MariaDB、Proxy版本基于MySQL Proxy、Scheduler中元信息的存储选用Zookeeper等,这些开源软件相对成熟,只需要基于它们做小的定制开发即可。
聚焦、精简需求。第一个版本不求大而全。例如第一个版本我们就仅仅实现了强一致同步、主备切换等机制,而且实现方式也比较简单粗暴。
找到试点业务。做平台,必须持续有业务接入,才能获得现网的验证反馈。同时也能提升团队成员的成就感。如果长时间没有业务接入,没有客户的使用和反馈,团队成员容易疲乏。

此外,TDSQL第一个版本是采用的封闭开发模式,用时3个月,当时团队6个人左右。经过近4年发展,目前研发团队,包括开发测试运营等,在20人左右。

[b]CSDN:倡导7*24高可用、金融级分布式Cache是个什么样的系统?主要运用在哪些场景上?[/b]

潘安群:腾讯自研的金融级分布式存储产品HOLD(厚德,取意厚德载物),其实是TDSQL的前身,当时SSD并没有大规模使用,但在腾讯的计费业务中,还有很多场景,不仅要求很高的服务可用性和数据一致性,还需要超高的并发和极短的响应时延,比如2B账户的交易,最高每秒10万级的更新;又比如游戏的营销类赠送,浪涌式的并发请求量,当时的DB很难满足这类需求。

基于这样的需求,我们开始思考:在OLTP数据库领域深耕这么多年,是不是可以尝试去改变一些东西?于是,2010年,HOLD项目启动。目标:超高并发、超短时延的高一致分布式数据存储层。

首先,为了获得更快的访问速度,数据结构上剔除所有关系模型,直接采用KV格式,存储介质上使用纯内存。然后,把之前在DB中积累的经验溶入进来,后面TDSQL的架构和用到的所有重要技术,几乎都在这个项目里进行了系统性的验证,包括在数据底层实现跨IDC的强同步、跨城容灾、切换一致性保障、数据自动的Sharding、集群管理等。

HOLD在计费平台应用非常成功,支撑起了多个超高并发的应用。实际运营中,经历了多次软硬件或网络故障,没有发生过数据丢失问题;自动伸缩能力也得到了很好的验证,仅2014年就伸缩近500次,非常轻量化,完全无需人工干预。

[b]CSDN:你目前还会关注哪些新技术?[/b]

潘安群:目前关注的领域包括金融风控体系在大数据中的应用、基于业务的领域专用语言、高性能后台开发、分布式系统等。此外也对大规模集群管理技术,如容器、资源管理、服务管理等感兴趣。

[b]CSDN:你认为一名优秀的技术管理者应该具备怎样的素质?你所推崇的团队文化是什么?[/b]

作为一名技术管理者,我个人非常强调技术视野这一点。互联网技术日新月异,我们必须不断学习,持续了解业界前沿动态,开拓自身视野,才能确保决策是高效的。此外,无论是对于个人,还是团队成员,我都一直强调效率。抽象业务,通过工具化、平台话的思路持续提升整体研发效率,应是每个技术人的追求。

[b]CSDN:在本次SDCC 2015上想分享的话题是?[/b]

潘安群:在SDCC 2015上,个人将分享一下TDSQL在腾讯云金融领域的实践经验。也希望借此机会,跟业内其他数据库团队交流交流。

[b][b]CSDN:[/b]你最期待在本次SDCC 2015上听到哪些内容?[/b]

潘安群:SDCC 2015作为开发者的盛宴,希望能通过她了解到业界在数据库、编程语言、技术架构等领域的发展趋势。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: