写点什么

数据规模超 1PB ,揭秘网易游戏规模化 TiDB SaaS 服务建设实践

  • 2024-12-31
    北京
  • 本文字数:4164 字

    阅读完需:约 14 分钟

大小:149.70K时长:00:51
数据规模超 1PB ,揭秘网易游戏规模化 TiDB SaaS 服务建设实践

在网易游戏的数据库服务生态中,TiDB 当前已成为一个重要组成部分,支撑了游戏周边业务的服务运营。目前,TiDB 集群的数量超过 100+ 套,最大单集群节点数达到 60 个以上,数据总规模超过 1PB。


本文作者田维繁,TiDB 社区的老朋友,在网易游戏负责包括 MySQL、TiDB 等关系型数据库的运维与平台开发工作,他在 TiDB 地区交流深圳站上分享了《网易游戏规模化 TiDB SaaS 服务建设》,深入探讨网易游戏在规模化 DB SaaS 服务运维方面的丰富经验,以及在处理高并发业务时的实践策略,本文根据其演讲实录进行整理。


文章将从网易游戏 DB SaaS 服务的概览开始,详细介绍 TiDB SaaS 服务的具体实践,并深入讨论针对高并发请求业务的优化措施和问题解决方案。


我主要和大家分享网易游戏在规模化 TiDB SaaS 服务运维以及处理高并发业务方面的实践经验。我的介绍将围绕三个核心方面展开:


  • 首先是对网易游戏 DB SaaS 服务的概览

  • 其次是我们在实施 TiDB SaaS 服务过程中的具体做法

  • 最后是针对高并发请求业务的优化措施和问题解决方案

数据库现状


我们为网易游戏及其周边服务提供一站式数据库管控服务:



  • 平台服务层, DMS 负责数据维护和治理,DTS 负责数据库之间的数据迁移,比如 MySQL 到 TiDB 之间的迁移以及到 kafka 迁移等。DaaS,主要负责服务管理,包括调度和备份。

  • 在数据库服务层面,提供了包括 MongoDB、Redis、MySQL、TiDB 等在内的多种 数据库 SaaS 服务。根据最新的统计数据,TiDB 集群的数量已超过 100 套,TiDB 的数据总规模超过了 1PB,在网易游戏中的应用中已经达到了相当的规模和深度。

TiDB 在网易游戏的使用场景



TiDB 在网易游戏的应用场景非常广泛和复杂。包括基础架构服务、云存储、内部管理和质量治理等 OLTP 场景;以及上游是 MySQL,下游 TiDB 作为读扩展的业务场景;重 OLAP 场景下的业务,比如使用 TiSpark 直接请求 PD 进行报表统计计算;利用 TiDB 的横向扩展能力, 进行数据归档。

TiDB SaaS 平台服务介绍

套餐定制

针对多样化的业务场景,我们提供定制化的服务套餐,以满足不同计算和存储需求。我们的 SaaS 服务根据具体的业务需求,设计了多种专属套餐。



  • 高并发请求的 OLTP 场景,如游戏服务,我们推出了高性能套餐。例如,18 核 CPU 和 180GB 内存的配置,专为满足高并发业务需求而设。

  • 高存储套餐,主要针对大型业务场景的数据归档需求,同时兼容 OLAP 业务需求。

  • 普通套餐适用于常规业务场景,常规的的 TP 和 AP 业务。

  • 测试套餐,采用较小规格 6C 主机或云虚拟机,以支持业务的测试和验证环境。

虚拟化与资源隔离



资源隔离有几个点需要考虑:


1. CPU 隔离

不同实例使用不同 cpu 资源,实例间使用 cpu 互不影响。

2. 内存隔离

不同实例使用不同的内存段,实例间使用内存互不影响。

3. 磁盘 IO 隔离

独占实例间使用不同的磁盘,独占实例间磁盘互不影响,独占实例可以动态进行扩容。

4. 虚拟节点请求独立

实例间的进程和数据互不可见,实例有独立的请求入口,实例间安装的依赖包互不依赖互不可见。



在实施套餐定制后,我们对节点进行虚拟化处理。在此过程中,资源隔离至关重要。我们采用轻量级 LXC 虚拟化技术,以实现 CPU 和内存的有效隔离。对于 IO 密集型节点,例如 TiKV 节点,我们在 SSD 盘上创建不同的 LVM,并将其挂载至不同虚拟机下,确保磁盘响应的独立性。至于网卡流量隔离,得益于多张万兆网卡的配置,通常流量不会成为限制因素。

套餐升级

平台支持套餐升级,以适应业务量的增长。如果需要从标准套餐升级至更高性能的套餐,会根据宿主机的资源情况,提供动态扩容服务。包括动态调整 CPU、内存和磁盘资源。若宿主机资源不足,后端服务将执行节点的增加和删除操作。虽然这一过程可能较长,但通过新增节点、负载均衡后再删除旧节点,确保整个升级过程的顺利进行。  

备份

快照备份

在 TiDB SaaS 平台上,备份快照服务扮演着至关重要的角色。尤其在 OLTP 场景中,快速备份和恢复的能力对于数据回档等操作至关重要。用户可以通过简单的操作,在进行游戏维护或其他业务操作时,实现整个系统的完整备份,而不会对业务流程造成任何干扰。



快照服务使用 LVM 技术来创建 snapshot,用户只需一键操作,即可生成快照并继续进行其他任务,无需等待复杂的备份流程完成。根据需要,生成的快照可以被复制到备份盘,或者上传至 S3 存储,这一过程完全由用户自行选择。这样的设计使得备份过程轻量且快速,对业务的影响降到最低。


然而,快照备份作为一项可选操作而非默认备份方式,是因为它存在一些局限性。例如:


  • 可能会造成一定的空间浪费,因为数据盘需要预留空间给 snapshot;

  • 不支持库表级别的备份;

  • 恢复时,必须在相同规模的 TiKV 节点集群中进行

尽管如此,快照备份仍然满足了一部分业务需求。

BR 备份



我们也提供 TiDB 官方的 BR 备份作为常规备份方式。BR 备份操作简便,直接备份至远程 S3 存储。我们广泛使用公有云服务,如 AWS、GCP、阿里云和微软云等,对于支持 S3 的云服务,我们直接备份至 S3;对于不支持的,则采用快照备份方式。

BR 备份的优点包括灵活简单的备份操作,支持库表级别的备份,以及稳定的 5.0 以上版本。此外,它无需预留数据盘空间,并且恢复过程相对灵活,无需指定同等规模的 TiKV 节点。

恢复过程



对于不同的备份方式,采取不同的恢复策略。


  • 快照备份,我们会下载每个节点的备份,然后使用 TiDB 的 recover 工具将其恢复至 TiDB 集群。为防止数据覆盖,我们会为 alloc_id 赋予较大的值,确保恢复过程中数据的完整性。

  • BR 备份的恢复则更为直接,只需从 S3 拉取备份并恢复至 TiDB 集群即可。


通过这些备份与恢复策略,确保了数据的安全性和可靠性,为用户提供了灵活的数据保护解决方案。

DTS

MySQL 与 TiDB 数据流向的闭环



在 TiDB SaaS 平台中,我们经常需要在 TiDB 集群与 MySQL 之间进行数据同步。为此,我们提供了 DTS 服务,允许用户直接在 MySQL 中指定库表,并根据预设的规则进行同步,如同步特定表、更改库名等,通过我们封装的 DM 服务实现与 TiDB 集群的同步。若需反向同步,即从 TiDB 同步回 MySQL,用户可以通过 TiCDC 服务进行注册,实现指定表的反向同步,确保数据迁移的完整性和正确性。

异构数据的同步



此外,我们还支持异构数据的同步。通过 TiCDC,我们可以根据用户定义的规则,将增量或全量数据同步至 Kafka 集群,并进一步同步到其他非关系型数据库。提供了一个全面的异步数据同步解决方案,满足不同数据同步需求。

定制化监控调度服务

在我们使用的初期,在实际业务的应用中也遇到了很多问题,比如:


  • 监控探测不够灵敏:发现探测不够灵敏,业务访问 TiDB 出现严重卡顿情况时,探测没有任何报警

  • 热点问题频发:业务热点问题频繁,没有很好的方式去打散,需要人工干预处理

  • 空间异常暴涨:长事务或者 TiCDC 异常导致,GC 清理异常,空间暴涨

  • TiKV leader 频繁抖动:海量 region,PD 根据空间占比进行调度


针对这样的情况,我们也因此打造了定制化的监控调度服务。



  • 我们实现了秒级的心跳探测机制,通过简单的写操作来实时监测实例状态,防止实例卡顿无法发现。同时,为了避免单点探测的不准确性,我们采用了多点多次探测策略,大多数情况下只有在多次探测均出现问题时才会触发报警,在一些特殊的业务实例中,我们也会根据敏感性来配置单次探测失败的告警。

  • 针对热点问题,我们采取了主动监控和自动处理的策略。监控 TiKV 的 CPU 使用情况,判断是否存在热点。一旦发现热点,会实时查询并尝试 split region。对于使用特定字段作为主键的业务场景,我们会主动打散热点,无需人工干预

  • 对于空间异常问题,我们通过监控 GC 的运行状态和长事务来预防空间暴涨。如果 GC 运行不正常或存在长期未提交的事务,我们会及时报警,避免空间异常。

  • 针对 TiKV leader 抖动问题,我们虽然不会直接处理,但根据各种可能存在的情况提供了一系列的解决方案。例如,优化 raft-base-tick-interval 参数,开启静默 region,或根据版本加大 region merge 的力度,以减少抖动现象。   

高并发请求运维

业务背景

接下来分享一些我们在高并发场景下的运维实践。




在处理高并发请求的场景中,我们积累了一系列运维实践经验。以网易内部某项目为例,在业务启动初期,我们预估并发量可能超过 10 万,而实际生产环境中,该业务已达到 36 万 QPS,高峰期甚至超过 40 万。同时,插入和更新操作的数量巨大,高峰期间的 I/O 需求极为严苛。此外,大规模数据的过期清理也对数据库性能构成了挑战。

前期优化准备

因此,在真正投入使用前的设计阶段,我们就考虑到不仅要从数据库层面,也要从业务角度尽量去优化和避免这些问题。

  • 针对大量写入,我们与业务团队合作,确保所有表使用 AUTO_RANDOM 策略来分散热点,减少单个热点的影响。

  • 实施了分区表策略,根据业务需求设定过期时间,定期清理过期数据表,以减轻 GC 压力。

  • 限制了单个 KV 的 region 数量,以避免过大的 region 导致的性能抖动。

碰到的问题与解决方案

在业务规划初期,我们遇到了几个主要问题:


  • 使用 TiDB 5.1 版本时,GC 清理速度慢,导致数据堆积和空间异常增长,TiKV 节点不断增加,成本过高;

  • 单个 TiDB Region 过大,一些更新非常频繁的表单个 region 可达 300G 以上(正常的 region 大小不会超过 96M),影响了数据的备份和升级;以及高并发请求下的 raft 抖动问题,会导致业务的波动。


为解决这些问题,我们采取了以下措施:

1. 从 TiDB 5.1 升级至 TiDB 6.1.7 版本,优化了 GC 清理效率,减少了 1/4 的空间占用,并降低了成本。


2. 在面对庞大集群的升级任务时,我们无法通过建立新集群并进行数据同步的传统方法来实现。因此,我们采取了滚动升级的策略,确保在新版本经过充分验证后,逐步对集群进行升级。在此过程中,我们会先创建快照,以便在升级过程中出现问题时能够迅速回滚到升级前状态。针对因 Region 过大而无法进行 split 和备份的问题,通常会在业务流量较低的时段,创建一个新的表并将数据迁移过去。然后执行删除操作(drop table),以此来减少 Region 的大小,并允许正常的数据备份和升级流程进行。


3. 关于 raft 性能抖动,TiDB 6.1 版本会默认开启 raft engine,以降低 raft 平均时延,但随之而来的性能抖动是我们的业务难以接受的,所以我们选择关闭 raft engine,回归到 rocksdb 的默认写入方式,有效解决了性能抖动问题。


通过这些措施,我们确保了在高并发场景下的业务稳定性和数据库性能,为用户提供了更加可靠的服务。

2024-12-31 17:2213781
用户头像
李冬梅 加V:busulishang4668

发布了 990 篇内容, 共 596.2 次阅读, 收获喜欢 1150 次。

关注

评论

发布
暂无评论

入职阿里定级P7,2021年最新最全180道高级岗面试题及答案

Java架构师迁哥

【布道 API】REST 从来都不是基于 CRUD

devpoint

Rest crud 6月日更

腾讯官方出品,国内首款免费VPN,ios+安卓,永久免费不限速

程序员生活志

爱奇艺于首届MediaAIAC与首届高新视频创新应用大赛斩获三项权威大奖,技术实践领跑行业创新

爱奇艺技术产品团队

大赛 视频修复 MediaAIAC

记录response.Body.Close()引发的goroutine泄漏

王博

2021年最新版Java后端最全面试攻略,全面对标BATJ

Java 程序员 架构 面试

centos7使用

xujiangniao

Linux

华为鸿蒙 OS 正式发布,未来是否会对安卓市场造成“威胁”?| 话题

xcbeyond

鸿蒙 话题讨论 HarmonyOS 6月日更

一个超牛逼的 GitHub 项目,标星高达55.3Kstar,附项目源代码

Java架构师迁哥

涵盖了所有计算机底层知识总结与操作系统的实战教程,你确定不看看吗

Java架构师迁哥

如何判断老板是在给员工画饼?

石云升

创业 职场经验 6月日更

本文是为了帮大家快速回顾了Java中高级知识点,只需收藏不用看!

Java架构师迁哥

已删除的回收站文件恢复方法

淋雨

实用工具 数据恢复 EasyRecovery

浪潮云洲工业互联网平台市场地位、发展能力连续两年蝉联双料第一

云计算

​浅谈云上攻防之元数据服务带来的安全挑战

腾讯安全云鼎实验室

安全攻防 网络安全 #腾讯云

用 CloudQuery 管理和操作数据库,更高效更安全

BinTools图尔兹

运维 dba 数据库管理工具

入夏以来,nginx中国首场技术盛宴!nginx社区线下沙龙-北京专场圆满举办

爱极客侠

开源之夏来啦,欢迎报名 Apache APISIX 项目!

API7.ai 技术团队

开源 后端 技术人生 API 网关

《原则》(九)

Changing Lin

6月日更

赋能实体成区块链重中之重 供应链、溯源和数据等迎来政策红利期

CECBC

区块链发展迎来新机遇

CECBC

创业邦南立新:搭建创新生态,是奔向万亿美金市值的必经之路

创业邦

阿里工作8年,肝到P8就剩这份学习笔记了,已助朋友拿到10个Offer

Java 程序员 架构 面试

深入分析Linux操作系统对于TCP/IP栈的实现原理与具体过程

奔着腾讯去

c++ socket 网络协议

上架Steam一周的付费游戏,开源了!其实你能“薅”的不止一只羊

程序员生活志

如何利用GitHub Pages快速构建免费网站?

程序员生活志

【源码系列】Spring Bean 循环依赖

Alex🐒

spring 源码 Spring Framework

超全!阿里首发内部微服务架构笔记,再也不用为“微服务”苦恼了

Java架构师迁哥

在外包5年,每天读写删改,突然发现跳不出来了

Java架构师迁哥

大厂招聘程序员都是“有章可循”你Get到了吗?

Java架构师迁哥

【源码系列】Spring Boot 条件配置

Alex🐒

spring 源码 StringBoot

数据规模超 1PB ,揭秘网易游戏规模化 TiDB SaaS 服务建设实践_数据库_田维繁_InfoQ精选文章