腾讯关系型数据库达成“双百”里程碑——6大企业级MySQL特性全面解析

2020-12-10 10:10:10 浏览数 (1)

腾讯关系型数据库-企业级MySQL(原CDB,腾讯云TencentDB for MySQL)达成了 百万核 和 百PB 的“双百”里程碑!存储规模同比增速高达 80% ,连续两年在全球 TOP5 公有云厂商中增速位列第一!作为腾讯云规模最大的数据库产品,在11月携手腾讯云数据库入选Gartner云数据库管理系统魔力象限,意味着腾讯云数据库进入全球顶级序列!截止目前,已经为Bilibili、水滴筹、小红书、微盟、富途证券、云集、畅游等多家大客户提供服务,支撑了618、双11等大型活动的突发保障,实现了10倍流量的弹性扩容能力。同时在内部也服务了多款腾讯明星产品,如 微信、王者荣耀、微视、腾讯会议等。

腾讯关系型数据库品牌升级为“腾讯关系型数据库Tencent Database SQL企业级MySQL”,将进一步汇聚公司数据库方面的专家力量,助力CDB/CynosDB的成长和发展!

随着规模、行业覆盖率的爆发式增长,CDB在性能、稳定性、成本和SaaS产品能力上面临更大的挑战。因此,围绕着企业级云数据库的目标,持续完善CDB的六大企业级能力:定制的企业级内核、企业级高可用高可靠、企业级数据安全、企业级扩展性、智能调优、自研存储引擎。

企业级定制的内核

传统的 Oracle MySQL 社区版内核以及企业版内核已不能满足 CDB/CynosDB 产品的快速发展,有很多的业务或运维问题在官方都得不到有效解决,如电商秒杀场景的性能问题,删除大表所导致的性能抖动问题、游戏业务加减字段所导致的业务停服问题等。为了解决云上业务所面临的问题,降低用户操作复杂性,提升运维效率,我们定义并实现了云数据库内核——(TXSQL) Tencent MySQL。TXSQL有以下的优势:

  1. 领先的性能 & 极致业务场景性能优化 TXSQL 对 SQL 语句的执行流程进行了全链路的优化,在查询优化器、算子下推、主备一致性、存储引擎(并发访问控制、日志系统、锁系统、回滚段、crash recovery)等进行了一系列的优化。测试表明,在高并发场景下,CDB 的读写性能是官方性能的 150% 以上,大内存实例的启动时间是官方版本的 1/5 ;计算与存储分离的产品 CynosDB for MySQL,其读性能是 CDB 的 120%,写性能是 CDB 的 2 倍。 在服务业务的过程中,我们解决了很多业务的性能问题,如电商秒杀场景的性能问题、游戏对表变更时的停服问题、高并发压力下 crash recovery 速度慢的问题、主备延迟问题等,同时,我们将20 的Patch优化也贡献给了官方 & MariaDB,并得到了官方的认可。
  2. 丰富的企业级特性 完善的企业级特数据库能力。如金融行业要求的数据审计、加密、数据强一致,台富云所要求的自定义密钥以及密钥管理服务、游戏行业所要求的高并发、电商行业所要求的极限性能等 多样化的存储引擎。TXSQL 为了满足业务的多样化需求,不仅满足于传统的事物处理能力,还做了以下两个存储引擎:
    • 支持基于LSM-Tree的TxRocks 高压缩引擎,Innodb & TxRocksDB 可以共存,无缝满足用户降低存储空间的要求。此功能已经微信红包上使用两年有余,相较InnoDB引擎,只使用了之前 1/5 的机器,极大的节约了成本;
    • 支持列存引擎 CStore,具备轻量级单机事务处理能力,用户不需要解决异构数据库之间的数据同步问题,直接可以使用 CDB 的列存引擎,进行数据分析,极大的降低了业务在TP和AP之间做数据同步的复杂性。

企业级高可用高可靠

可用性是CDB的生命线,当前可用性达到了99.99%以上。故障切换每月达1300 ,平均切换时间33秒,50%以上的切换在20秒内完成。但随着规模的快速增长,我们发现原来单一的读写探测机制已经无法满足用户对可用性更高的要求。实例不可用不仅表现为探测不通,也可能是请求缓慢的积压、整机硬件的异常、实例快速的反复重启……这些异常,原有的探测机制并不能很好的发现。为此在故障发现方面,我们做了大量的优化。核心目标是尽可能快的发现确定性的、具备共性的故障:

  • [✓] 实时监听TXSQL错误日志。TXSQL内部新增了多个监控指标,例如监听IO和锁等待延迟,在实例出现请求堆积但还未崩溃前实现切换
  • [✓] 实时监听系统日志,例如端口频繁up/down、softlookup
  • [✓] 检测整机磁盘异常,例如坏块、hang盘、慢盘、只读
  • [✓] 实例快速反复Crash。探测无法覆盖,但实际业务影响很大。
  • [✓] 高负载场景。高负载场景下,复制线程可能分配不到CPU,导致主备无法同步,可能造成数据丢失

通过上述措施,我们已经覆盖了已知的97.71%极端故障场景,为此我们还在进一步优化。但故障切换毕竟是已经影响了使用,为此我们结合了公司网管的相关告警策略,当机器有故障或预警时,我们提前将隐患机器隔离并触发切换。

数据可靠性上,支持跨园区部署和园区故障自动切换。在CDB完成了对等节点的架构升级后,单实例内的节点可以任意扩展、独立指定园区部署。经典的部署方式是,1主1备同园区,另1备跨园区。当主机故障时,可以实现快速切换,当主园区故障时,可以实现分钟级自动切换至跨园区节点。因为公有云VPC网络控制面使用的数据库是CDB,极端情况下CDB跨园区切换会出现相互依赖的场景。为了解决网络侧的跨园区自动切换,CDB也配合业务一起做全链路的跨园区容灾方案。跨园区实例间如何避免双写,是保证数据一致性的关键问题。为此,TXSQL内核全版本实现了work mode工作模式和租约机制。当园区隔离时,单园区内的机器可能是连通的,园区间网络不通。通过同机部署的ha_agent保持跟TXSQL有T1的租约,ha_agent跟ZK有T2的租约,保证2T1 < T2。当到达T1未续租时,TXSQL处于offline mode,不接受用户请求,当到达T2时刻,可以确认此时原master一定不可写,安全进行故障切换。

企业级数据安全

数据安全重于泰山,围绕数据安全,CDB团队从数据备份、部署模型、访问控制和权限分离四方面进行建设。

  1. CDB备份系统九鼎,提供了以下企业级备份恢复能力:
  • [✓] 高性能备份恢复能力。备份速度700MB/s,回档速度(克隆实例,包含了增量数据同步)540MB/s。以1TB的数据为例,备份约25分钟,回档约33分钟。
  • [✓] 在线热备。支持Backup Lock和Binlog Lock,仅在备份完成瞬间阻塞写入,备份期间对用户几乎无影响。
  • [✓] 无锁备份。采用Binlog幂等回放的机制,在InnoDB表有唯一键场景下,备份不加锁。
  • [✓] 流式备份,“zero storage”。备份数据流式上传,无需本地中转。
  • [✓] 压缩备份。采用quicklz压缩,压缩比3:1。
  • [✓] 整实例/指定部分库表备份。任意指定库表备份。
  • [✓] 排除部分库表备份。排除指定库表备份,例如mysql库等。
  • [✓] 多级资源控制。备份带宽跨AZ负载均衡,单机流控和资源强隔离。
  • [✓] 支持MySQL TDE。支持加密数据的备份和恢复。
  1. 部署模型。实例内节点跨机架跨交换机部署;跨园区多节点部署;跨城灾备实例;置放群组功能,不同的业务可以指定不同群组,群组之间做跨机器和交换机的部署。
  1. 访问控制。企业级的数据审计能力。在极限压测场景下,性能损失在 3% 以内,提供了每个语句级的SQL执行路径,包括消耗的CPU、扫描/返回行数、锁等待时间、IO消耗等一系列内部执行的指标。除了事后审计外,可以通过SQL限流来控制服务并发,甚至拒绝某一类SQL的运行,可以达到事前拦截的效果。
  1. TDE数据加密,即使备份数据被泄露,在没有密钥的情况下,依然保证数据不被泄露。

权限分离。线上生产环境数据和备份数据权限分离。生产环境权限由运维审批并记录,备份数据采用“一次写入多次读取”的权限控制,确保研发以及备份系统只有数据写入权限,避免人为造成的数据丢失。

企业级扩展性

扩展性包括了两部分,单节点读写能力扩展和多节点读扩展。TXSQL内核提供了thread-pool功能。支持10万连接,以及在减少线程运行时切换消耗和创建销毁的消耗的同时,避免高并发场景下,多线程争抢系统资源造成的性能急剧下降,从而显著提升高并发下的系统性能。

TXSQL线程池

多节点读扩展,节点间根据wrr算法做负载均衡和容灾。当只读节点不可用,或者到达设置的主从延迟阈值,将在 30秒 内完成容灾剔除。为了避免全部节点被剔除,可以设置只读最少保留数,防止实例高负载引起的雪崩。当只读节点恢复可用,并且延迟低于阈值,会自动触发加回策略,重新负载均衡。

添加只读节点后,会出现两个地址,需要业务层进行读写分离。为此,CDB即将上线数据库代理服务,业务只需要一个读写地址,自动做读写分离和读负载均衡。

智能调优

性能是数据库一个关键指标,除了SQL优化和索引优化等方法外,参数调优(Tuning)也是提升数据库性能的重要手段。以前依靠专家经验,人时成本很高,加上MySQL参数有400多个,参数组合空间非常大。数据库参数智能调优服务应运而生,它使用深度强化学习( Deep RL)方法调优数据库参数相比现存方法,CDBTune无需细分负载类型,无需积累大量样本,可以智能学习参数调优过程,获得较好的参数调优效果

CDBTune_arch

通过精心设计的负载重放和并行调优,可以对业务无损的进行指定负载下的参数并行调优,小时级即可推荐一套较好的参数模板,达到相同资源消耗情况下,TPS更高RT更低

以读写场景为例,使用CDBTune调参后TPS提高33%,RT下降了70%。

相关结果也发表在了 数据库顶会SIGMOD《An End-to-End Automatic Cloud Database Tuning System Using Deep Reinforcement Learning》

自研存储引擎(TxRocks和CSTORE)

TxRocks是TXSQL团队基于RocksDB的事务型存储引擎,得益于RocksDB LSM Tree存储结构,既减少了InnoDB页面半满和碎片浪费,又可以使用紧凑格式存储,因此TxRocks在保持与InnoDB接近的性能的前提下,存储空间相比InnoDB可以节省一半甚至更多,非常适合对事务读写性能有要求,且数据存储量大的业务。

CSTORE是TXSQL内核团队面向OLAP场景研发的列存引擎,通过CSTORE,用户可以完成大型数据的查询与分析,可以适用于历史存档数据、日志数据、大数据、更新不频繁的OLTP数据和数据仓库和分析处理,数据处理量达到PB级别。在性能方面,通过高压缩比、快速加载、针对性的查询优化这些技术实现,向用户提供高效的服务,从而达到单节点可支持百亿行记录的秒级查询。TXSQL的列存储可以达到 10:1 的压缩比,通过减少磁盘空间的使用,实现大批量数据的秒级写入和读取。在已有MySQL查询优化的基础上,利用多种形式的稀疏索引过滤数据实现高速的数据过滤于选择。并利用多列并行处理的方式,高速完成数据的加载与处理。

云原生数据库CynosDB

在MySQL的架构下,依然有几朵乌云一直无法散去:主备延迟不可控、扩容依赖单机容量上限、备份/Crash Recovery时间长、资源利用率较低。为此,CDB/CynosDB团队推出了新一代计算和存储分离架构的数据库CynosDB for MySQL,采用Log is Database的Share Storage架构,100%兼容MySQL语法。

通过计算和存储分离,实现资源池化,弹性伸缩,资源利用率可以突破单机限制,实现秒级扩容

主备同步不再经过Binlog,而是通过Redo进行物理复制。从根源上解决了主备延迟问题,将延迟控制在了毫秒级别

底层存储采用TXStore多副本存储的方式,备份采用快照方式秒级备份,直接避免了备份加锁导致的主备延迟和性能影响。

寻人启事

由于篇幅有限,有些实现细节并没有详细地阐述,如果大家对具体的实现感兴趣,可以关注我们的微信公众号“腾讯数据库技术”,我们会定期推送和分享数据库领域专业知识、线上经验沉淀,与大家共同成长。另外如果大家有数据库技术相关的问题或新的功能需求,欢迎给我留言或在码客中提问,我们会努力地为大家答疑。

公众号:腾讯数据库技术

最后打个广告,数据库是一个很有吸引力的领域,在这里你可以管理数十万的数据库实例,做极致的高可用和弹性伸缩,可以重新定义新一代的数据库代理服务,可以用AI实现数据库参数调优、SQL调优等 AI4DB 的自治数据库。如果你对数据库有着浓厚的兴趣、对数据库的原理比较清楚、又有着比较好的 C 或 C 的基础,最重要的,你有挑战各种困难的勇气与强烈的责任感,那么你就是我们要找的人,没有专业限制、没有条条框框,我们将会一起努力,见证 数据库 在云上的魅力!

简历请投递至 baohuawang@tencent.com ,我们期待您的加入!

0 人点赞