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

2023-11-04

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

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


腾讯高级软件工程师

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

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

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

潘安群:腾讯的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进行了深度定制,目前该项目已经开源。

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

潘安群: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)的数据库服务方案。

CSDN:当初开发TDSQL的初衷是什么?

潘安群:腾讯计费平台从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在性能、数据强一致性方面有了质的提升。

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

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

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

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

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

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

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

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

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

CSDN:你目前还会关注哪些新技术?

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

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

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

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

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

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

潘安群:SDCC 2015作为开发者的盛宴,希望能通过她了解到业界在数据库、编程语言、技术架构等领域的发展趋势。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

腾讯潘安群:腾讯云金融级数据库TDSQL分析 的相关文章

  • 如何将 php Web 应用程序转换为桌面应用程序并保留数据库 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们有一个用 PHP 开发的 Web 应用程序 但大多数客户并没有一直连接到互联网 那么 有没有办法将应用程序转换为桌面应用程序 以便
  • 更新重复密钥上的复合密钥 [重复]

    这个问题在这里已经有答案了 我需要更新新行 如果两者都满足 date dat and empId who 作为复合键 但如果其中之一或两者不同 则插入 sql INSERT INTO history SET endtimestamp now
  • 本地数据库缓存的最佳实践?

    我正在开发一个应用程序 该应用程序的部分内容依赖于 MySQL 数据库 在某些情况下 应用程序将在互联网连接 UMTS 有限的环境中运行 特别是延迟较高的环境 应用程序的用户能够登录 并且应用程序用户界面的大部分内容都是从 MySQL 数据
  • Laravel Sum 列数据库 Eloquent

    尝试获取我的一个表中 int 字段的总和应该非常容易 不幸的是 事实并非如此 因为无论我使用 Laravel MySQL 还是 Excel 我都会得到不同的结果 Laravel 5 4 给了我20506 Table sum field na
  • PHP 的 PDO 可以限制为单个查询吗?

    PHP 的 PDO 允许通过 query 方法或作为准备好的语句同时执行多个查询 以下两个示例均有效 Two SQL queries query SELECT FROM table DROP table Execute via query
  • Laravel Group By 和 Order By 不起作用

    我尝试制作一个Laravel 5 8项目 项目中的数据是这样的 id purch name prcvalue 1 10234 Nabila 100 2 10234 Nadeera 450 3 10234 Nabila 540 4 10234
  • 我可以在一个查询中更新/选择表吗?

    我需要在查看页面时选择数据并更新 视图 列 有没有一种方法可以在一个查询中执行此操作 或者我是否必须使用不同的查询 如果您不想 不需要使用事务 则可以创建一个存储过程 该过程首先更新视图计数 然后选择值并将其返回给用户
  • 让 Prometheus 发送 SQL 查询

    我正在尝试使用普罗米修斯 https prometheus io 监视我的 MySQL 数据库 但似乎找不到添加 SQL 查询的区域 例如 我想运行一个返回值的 SQL 查询 然后将该值添加到图表中 发送警报 有没有办法让 Promethe
  • SQL:查找每个跑步者跑步之间的平均天数

    因此 如果我们给出下表 runner ran Carol 2011 02 01 Alice 2011 02 01 Bob 2011 02 01 Carol 2011 02 02 Bob 2011 02 02 Bob 2011 02 03 B
  • MySQL 中的 UDF 性能

    我注意到 当查询在 SELECT 或 WHERE 子句中调用 UDF 时 MySQL 查询执行时间的性能会呈指数级下降 有问题的 UDF 查询本地表以返回标量值 因此它们不仅执行算术表达式 而且充当相关子查询 我通过简单地删除 UDF 并使
  • MySQL:空间查询查找纬度/经度点是否位于给定边界内

    我正在研究谷歌地图搜索功能 其目的是找出 地理位置 点是否位于多边形内 如下图所示 我使用带有 Spatial 扩展的 mysql 5 6 20 我知道它内置有用的几何函数 因此我可以直接从数据库查询地理编码位置 我的目的是熟悉地理空间函数
  • PHP + MySQL 队列

    我需要一个充当队列的简单表 我的 MySQL 服务器限制是我不能使用 InnoDB 表 只能使用 MyISAM 客户 工人将同时工作 他们每次都需要接受不同的工作 我的想法是执行以下操作 伪代码 job lt SELECT FROM que
  • MySQL 选择第一个字符在哪里

    如何选择单元格的第一个字符并使用它来定义返回的内容 看看MySQL 字符串 和 控制流 功能 http dev mysql com doc refman 5 1 en functions html 例如 SELECT IF LEFT myF
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 将java应用程序与在线托管的mysql数据库连接

    我已经用java构建了一个应用程序 应用程序是一个 将在3个不同的系统上使用 因此 该应用程序的数据库必须在线 以使所有 3 个应用程序都具有最新的数据库 In starting I developed my application bas
  • 无法打开 phpmyadmin,require_once(./libraries/common.inc.php):无法打开流:没有这样的文件或目录

    当我做php usr share phpmyadmin index php 我明白了 PHP 警告 require once libraries common inc php 无法打开流 第 33 行 usr share phpmyadmi
  • MySQL:为什么 IN 子句中的第 5 个 ID 会极大地改变查询计划?

    给出以下两个查询 Query 1 SELECT log id FROM log WHERE user id IN 188858 188886 189854 203623 204072 and type in 14 15 17 ORDER B
  • 如何使用 MySQL 和 PHP 在数据库中存储标签?

    我想创建一个数据库来存储用户为其问题输入的标签 然后为发布的每个单独问题显示所有标签 像这里这样的东西 这是现在为我做所有事情的表 CREATE TABLE questions tags id INT UNSIGNED NOT NULL A
  • binary_log_types.h:没有这样的文件或目录

    我正在编译一个小型 mysql C 项目并且 遇到以下错误 C Program Files x86 MySQL MySQL Server 5 7 include mysql com h 22 30 fatal error binary lo
  • Python MySQL 模块

    我正在开发一个需要与 MySQL 数据库交互的 Web 应用程序 但我似乎找不到任何真正适合 Python 的模块 我特别寻找快速模块 能够处理数十万个连接 和查询 所有这些都在短时间内完成 而不会对速度产生重大影响 我想我的答案将是游戏领

随机推荐

  • 菠萝狗四足机器人使用手册

    菠萝狗手册 一 菠萝狗的组装和使用 1 1 各菠萝狗的操作步骤 1 2 具体教程 二 b站的视频教程 全集目录 第一章 入门导论 第二章 开源菠萝狗制造组装篇 第三章 边玩边了解四足基本理论知识 三 总体项目的介绍 四 交流群 一 菠萝狗的
  • error: No rule to make target 'image/资源.qrc', needed by 'debug/qrc_资源.cpp'. Stop

    使用Qt添加资源文件 出现上述错误 原因是把 qrc文件的位置放错了 根本原因是创建资源文件的时候路径选择错了 解决办法 1 将你所添加的资源文件删掉 直接在项目中 2 在文件中以记事本的方式打开 pro文件 删除所添加的资源信息 因为在项
  • CGAL 入门基础

    目录 一 点和线段基础操作 1 概述 2 整型坐标 3 浮点型坐标 二 点序列的凸包 1 在数组Array中提取凸包点 2 在向量Vector中提取凸包点 三 关于kernel和Traits类 四 概念与模型 本文是提供给了解c 和几何算法
  • Windows下jdk的下载和安装详细步骤及解决javac无法使用的问题

    Windows下jdk的下载和安装详细步骤及解决javac无法使用的问题 一 简介 其实我最开始安装jdk是为了学习Java 而学习Java的初衷是为了开发安卓APP 但是当我接触多了之后 我才发现 Java和安卓APP是两码事 安卓原生A
  • 项目中如何修改element-ui的默认样式

    Vue项目中 通常我们在写样式的时候为了避免全局污染 我们会给当前组件的样式加上scoped 让当前的样式只作用域当前组件 但是在写项目的时候会发现一个问题 当我们需要在局部组件中修改第三方组件库样式 而又不想去除scoped属性造成的组件
  • 人工智能各领域跨界能手——Transformer

    导读 Transformer源自于AI自然语言处理任务 在计算机视觉领域 近年来Transformer逐渐替代CNN成为一个热门的研究方向 此外 Transformer在文本 语音 视频等多模态领域也在崭露头角 本文对Transformer
  • 如何用SD-WAN实现多地组网?

    SD WAN技术可以通过虚拟化和自动化的方式 实现多地点之间的网络互联 以下是如何使用SD WAN实现多地组网的步骤 部署SD WAN设备 在每个地点部署SD WAN设备 并将设备连接到各自的局域网中 设备可以是物理设备或虚拟设备 这取决于
  • 糊里糊涂进了微盟Java内招群,抱着试试的想法投了简历,没想到面试通过了

    不久前登录QQ的时候忽然发现自己进了微盟内招群 我一脸懵逼不知道什么时候进入的 在里面划水了一段时间 抱着试一试的心态就投了简历 昨天进行了一面二面 然后就 就通过了 我也挺惊讶的 等着三面吧 把面试经验分享给大家 希望我们都能成功 一面5
  • Elasticsearch出现field expansion matches too many fields异常

    7 4 2的集群里面执行query string 语句时 异常信息 报了 reason field expansion matches too many fields limit 1024 got 15448 表示子查询数量大于1024 对
  • Java中的迭代器Iterator接口详解

    Iterator对象称为迭代器 设计模式的一种 主要用于遍历 Collection 集合中的元素 迭代器模式的定义为 提供一种方法访问一个容器 container 对象中各个元 素 而又不需暴露该对象的内部细节 迭代器模式 就是为容器而生
  • k8s发布模板

    deployment apiVersion apps v1 kind Deployment metadata labels app datasource config name name datasource config name nam
  • 2020DCIC智慧海洋建设算法赛学习01-赛题北京及地理数据分析常用工具

    序 本系列的博客旨在学习2020DCIC智能算法赛 智慧海洋建设的优秀方案 对地理数据分析问题积累一些思路和经验 作为这一系列博客的开篇 这篇博客主要内容包括对赛题的解析和对项目中会用到的一些常用的地理数据分析工具的简要介绍 1 赛题背景
  • 想学C语言却不知道怎么如何下手?(最全c语言学习路径带你指明方向)

    C语言小白学习攻略 C语言入门 目标 就如同英语学习 需要学习单词 短语 长句 文章 最后口语练习 该阶段学习完成后 能够熟练掌握C常见关键字与数据类型 单词 掌握常见语法结构 短语 熟悉面向过程函数式编程 长句 达到能够读懂他人编写的C程
  • Unity Andriod调试

    一 查看手机运行日志 1 调试原理 https docs unity cn cn 2019 4 Manual LogFiles html 2 调试工具 Andriod LogCat 在Unity PackageManager中下载 3 调试
  • Matlab机器人工具箱机械手建模详解(同知乎)

    关于使用Matlab机器人工具箱建立机械手模型的一些经验分享给大家 使用软件版本为matlab2015a和rvctools9 8 matlab机械人工具箱下载地址 http petercorke com wordpress toolboxe
  • vue中的ref之间的通信

    vue文档对ref的官方解释是 ref 被用来给元素或子组件注册引用信息 引用信息将会注册在父组件的 refs 对象上 如果在普通的 DOM 元素上使用 引用指向的就是 DOM 元素 如果用在子组件上 引用就指向组件实例 p hello p
  • 从用户登录谈谈测试用例设计

    等价类划分和边界值分析方法是最常用 最典型并且是最重要的黑盒测试方法 一 功能测试用例 针对 用户登录 功能测试 基于等价类划分和边界值分析方法 能够设计的功能测试用例有 1 输入已注册的用户名和正确的密码 验证是否登录成功 2 输入已注册
  • 干货满满!MES生产制造管理全流程分析

    阅读本文您将了解 1 什么是MES生产管理流程 2 MES生产管理流程具体步骤 3 实施MES生产管理流程优势 4 MES生产管理流程中可能会遇见的问题 一 什么是MES生产管理流程 MES生产管理系统 又称制造执行系统 是一种集成了计划
  • C语言--库函数qsort排序

    文章目录 一 C语言 库函数qsort排序 1 1 冒泡排序 1 2 qsort排序 二 模拟实现qsort函数 一 C语言 库函数qsort排序 假设我们要对一个数组元素进行排序 如果是一个整型数组 我们首先可以想到的是冒泡排序 但其实C
  • 腾讯潘安群:腾讯云金融级数据库TDSQL分析

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