通过扩展NewSQL数据库增强游戏应用程序的能力

2021-03-11 昆仑 游戏

工业:游戏

作者:刘汉(昆仑IT运营总监)

Transcreator:黄了编辑器:汤姆政府高级官员

通过扩展NewSQL数据库增强游戏应用程序的能力

昆仑是一家行业领先的互联网公司,专注于游戏和信息。它的游戏平台,GameArk该公司在全球范围内开发并分销游戏,每月活跃用户超过1亿。

随着游戏业务的蓬勃发展,数据生成的速度也越来越快。为了存储和分析数据,我们尝试了各种数据库解决方案,从传统的RDBMS到NoSQL再到NewSQL。多亏了TiDB,一个mysql兼容的、水平可伸缩的NewSQL数据库,我们能够充分利用tb级数据,为我们的业务提供大数据分析

在本文中,我将与您分享我们如何与以前的MySQL解决方案斗争,以及为什么我们选择TiDB来取代它们。我还将介绍我们现在如何在我们的系统中使用TiDB。

我们的痛苦点

当用户玩在线游戏时,他们会产生大量数据。游戏的每个方面——玩家在游戏空间中的位置,他们完成的任务,他们的战斗,以及他们在游戏中的晋升等等——都会产生有意义的信息。随着业务的发展,我们需要存储和分析这些数据,以更好地了解我们的用户,促进营销和运营。

早在2008年,我们就使用MySQL来支持我们的数据分析系统。游戏应用程序将生成的数据实时发送到指定的接口,MySQL接收并存储数据。一开始,数据量小,对数据库没有太大的压力。然而,随着我们的用户基数的增长,MySQL中的一个表必须存储超过5000万行的数据,这导致读写速度变慢.因此,我们开始寻求一种数据库解决方案,可以横向扩展,以支持我们的业务。

优化SQL语句

考虑到我们的应用程序和系统架构,我们决定用尽可能少的代码更改来改革当前的MySQL数据库。第一个计划是优化SQL语句和查找慢的查询。

然而,随着表变得更大,我们无法显著提高SQL执行效率。创建更多的碎片可能在短期内有帮助,但它将带来一系列其他问题,例如跨节点SQL连接、跨节点分页、排序和函数。这很复杂,需要修改代码。实际上,这个计划是通过“添加补丁”来实现水平伸缩。

从独立MySQL到MySQL集群

MySQL集群是Oracle提供的无共享企业数据库解决方案。它解决了独立MySQL中的单点故障问题,并支持自动故障转移。此外,它还提供了更好的可伸缩性和更高的性能。

为了解决单点故障问题,我们从独立的MySQL迁移到MySQL集群。但是MySQL集群也有明显的缺点:

  • 成本太高。旧版本的MySQL集群将数据存储在内存中,因此一台机器需要512gb的内存,有时甚至更多。随着数据的积累,硬件的成本飞涨。
  • 限制功能。MySQL集群不支持外键,每行数据必须小于8kb。
  • 糟糕的备份和恢复方法。dba必须在每个节点上手动输入备份命令。此外,我们不能将备份数据存储在像Amazon S3这样的远程存储中。
  • 复杂的部署、管理和配置。让它在云上与我们的It基础设施一起工作是很困难的。

因此,MySQL集群对我们来说也不是一个理想的解决方案。

我们为什么选择TiDB

为了满足我们对性能、可伸缩性、云部署和维护的需求,我们决定采用TiDB,一个NewSQL数据库,因为:

  • TiDB与MySQL协议兼容.我们可以迁移到TiDB,只需要很少的代码更改。
  • TiDB可以弹性伸缩其计算和存储容量这要归功于将存储与计算分离的体系结构。它的每秒读写查询(QPS)和平均延迟满足我们的应用程序的要求。
  • TiDB已经一个强大的生态系统.我们可以将TiDB整合到Spark、Flink、Kafka等其他数据服务中,构建一站式数据平台。
  • TiDB可以降低硬件成本.TiDB支持云部署,与Amazon S3无缝对接。在将整个数据分析系统部署到云上之后,我们的硬件成本降低了50%。

我们目前与TiDB的关系

目前,GameArk已经部署了一个TiDB集群高可用性在公共云上支持高并发和水平可伸缩性.借助于TiDB数据迁移我们迁移数十TB的数据从多个MySQL数据库到TiDB集群,理论上提供了无限的可伸缩性。我们还将TiDB集群与Kafka、Flink、Hive、Spark、Aerospike等集成,建立了一个全面的数据系统:

昆仑TiDB建筑

昆仑TiDB建筑

未来,我们希望打造更加敏捷的数据服务:

  • 我们将通过使用分布式架构来提高数据库服务效率,以便数据库能够更好地服务于我们的应用程序。
  • 我们还将尝试将数据库应用程序层与底层基础设施层解耦,使应用程序更少地依赖基础设施技术,并降低整体IT构建和维护成本。

在TiDB的帮助下,一个云原生的NewSQL数据库,我们非常有信心建立一个满足我们需求的数据服务。

准备好开始使用TiDB了吗?