课时4:Tair在游戏行业的应用

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 课时4:Tair在游戏行业的应用

Redis入门训练营:课时4:Tair在游戏行业的应用

课程地址:https://developer.aliyun.com/trainingcamp/5fd706c381604c09bebaf774a6290c5a?spm=a2cwt.28190922.J_8357884230.1.1e817127ycWQyx

Tair在游戏行业的应用

 

内容介绍

一、课程概述

二、 Tair在游戏行业的总览

三、游戏数据存储:JSON数据的处理

四、 游戏中的全文索引功能

五、排行榜——多维排行榜(实操)

六、 游戏在Tair中的常见运维

七、 课程总结

 

一、课程概述

本节课程学习 Tair 在游戏行业的应用,将从以下几个方面介绍:首先是总览,介绍 Tair 在游戏架构中的位置和亮点功能,接着展开讲在一款游戏的设计中是如何使用 Tair 的,具体介绍 JSON 的数据处理,全文索引和排行榜的设计,最后一部分将会介绍 Tair 在游戏中的运维。

 

二、Tair在游戏行业的总览

1、游戏架构

image.png

这代表了典型的游戏架构,用户的手机或者 PC 通过接入层接入,之后进入 Game Server 处理。为了用户的体验更快速、更流畅,许多计算和数据存储任务都希望在内存中完成,并且快速返回

例如对战匹配、实时的单局排行榜、分布式锁、角色选择或者预览等功能可以直接在 Tair 中完成。分布式锁、角色选择和游戏难度调整等功能也可以在其中实现。然而,有一部分数据需要持久化到RDS(关系型数据库服务)中,例如游戏日志、用户背包数据、流程日志以及进度存档等数据可以通过 Tair 加速读取过程,以便后续读取。除了核心系统,一些周边系统,如Admin Server,负责游戏分服分区管理、版本控制和全局活动,也可以直接依赖 Tair作为数据库进行操作。还有一些跨服数据,如对战、邮箱和聊天服务,Tair 的 Pub Sub 功能则可以完成,并且性能是 Redis 的三倍,完全可以承载大流量的消息推送和接收。

最后,还有一些游戏数据需要与 data 的 Warehouse 进行联动分析和运营,这部分产生的结果同时也可以在 Tair 中进行快速查询和展示。
2、Tair 在游戏行业的功能亮点

image.png

接下来,我们来看看Tair在游戏行业的亮点和功能。根据橙色板块,可以将其主要功能分为四个部分。

首先,第一部分是全兼容 Redis,并且性能达到 Redis 的三倍,包括核心的 Pub Sub  Lua 脚本功能性能都经过了优化。其次,Tair拥有自研的11种企业级数据结构,有助于业务快速创新,包括 JSON 数据的处理、全文搜索和排行榜等,这三种数据结构已经开源,会在后面提供开源地址。

第三,Tair 支持数据闪回功能,通过自研的 Log 协议,Tair 的数据闪回可以指定时间点(最少度为秒级别),同时 TimeShift 功能可以在数据恢复过程中手动调整数据新的过期时间。最后,Tair拥有全球多核功能,确保全球多地域的数据一致性,有助于容灾和业务架构优化,以及提供多用户的连接体验,右侧是 Tair 的一些游戏合作伙伴,下面将详细介绍一些方面,首先是JSON数据的处理。


三、游戏数据存储:JSON数据的处理

1、JSON 的重要性

image.png

首先探讨 JSON 在游戏数据中的重要性,JSON 作为一种数据交换格式,JSON被游戏数据广受欢迎,许多客户选择在 Tair 中存储游戏的 JSON 数据,常见的比如用户信息、背包内容、技能数据的存储,游戏配置元数据以及需要频繁修改的数据的存储Tair 还支持完 JSON 标准,在内存中存储二进制的数据,数据查询速度毫秒级,并支持两种常见 RFC 的查询语法,即JSONPath 和 JSONPointer

以右侧的添加好友信息举例,首先可以通过 JSON.SET 将用户信息存储在 Tair 中,可以看到刚加入的用户信息中的 friend 字段为空,然后使用 JSON.ARRAPPEND 可以向两个用户之间添加好友,注意这里的操作并不是整体的 JSON,而通过特定路径(friends)从而操作 JSON 的子元素 friends 部分,这也就避免了对整个JSON 进行序列化和反序列化,这样可以节省开销,添加完成后,可以再次查看用户信息,发现 Tom  Denny 已经互为好友,并且在对方的好友列表中,接下来实际演示添加好友的操作。

2、添加好友信息 Tair 教程实操

image.png

首先需要打开阿里云的Shell,等待Shell启动完毕后,将获得一个命令行界面 tutorial,在这里可以执行一些简单的命令,执行完简单的命令后,只需复制下面的第二条命令,这是一个已准备好的教程,将这个命令复制并粘贴到Shell中。

在右侧将会出现一个 Tair 教程,其中包含以下几个步骤,可以按照这些步骤来操作,首先是快速入门部分。

image.png

首先,需要创建 Tair 实例,设置白名单,然后连接到管理界面。第一部分是准备 Tair 实例,可以选择使用训营提供的实例或自己创建一个实例。如果需要自己创建实例,可以购买内存型实例,以支持所有 Tair 高级数据结构。

第二部分是设置白名单,设置完白名单后,可以开始连接实例,由于教程是在阿里云 Shell 中执行的,因此需要申请一个公网访问地址,在申请完公网访问地址后,可以在实例详情页面找到公网访问地址。将地址记录下来就可以进行后续的操作了。

步连接 Tair 实例,有两种方法可以连接到 Tair 实例,一种是通过 Redis-cli 进行连接,另一种是通过DMS在 Tair 实例的详情页中的“登录数据库”功能进行连接。跳转到 DMS 登陆平台之后也可以执行 Tair 命令。

使用第一种方法演示,点击右侧的“执行命令”按钮,将命令自动粘贴到左侧的命令框中,-h指定连接数据库的地址,-A可以指定密码,然后按回车键可以看到数据库已经链接Ping 已经返回说明数据库连接成功。

image.png

 

四、游戏中的全文索引功能

1、全文索引功能介绍

接下来开始执行教程教程展示的是用户添加好友的操作。首先,需要存储用户 Denny 信息,通过基层点 SET 命令,可以通过执行命令将此信息存储在 Tair 中。命令将被粘贴到右侧的 tutorial 中。

通过 JSON.Set 的方式将 Tom 的信息存储在 Tair 中,其内容是一个JSON字符串,其中的好友列表是一个空数组。

按回车键后,会看到“OK”表示成功存储,接下来将以同样的方式存储 Denny的信息,之后可以使用 ARRAPEND 操作将 Tom 添加为Denny的好友,返回的数字1表明已经成功地往 friends 中添加成功的元素。

操作完成后,可以再次查看Tom和Denny的信息,可以看到在 Tom 的信息中 friends 已经有了 Denny,同理获取 Denny信息发现 friends 已经有了Tom,确认已经互为好友。 

这就是关于 JSON 数据存储的示例。关于 Tair 存储 JSON 数据的优势在于,第一点不需要将整个数据进行遍历,可以通过两种 JSONPointer 或者 JSONPast 语法描述只操作 JSON 的一部分,无需将整个 JSON 数据序列化和反序列化,这有助于节省计算成本,这是它最大的优势。此外,它的语法知识比较丰富,除了进行点更改之外还可以进行一些搜寻操作,可以关注 JSON Past 用法来完成这一部分的功能。

 

2、游戏中的全文索引功能

image.png

下面再来探讨游戏中的全文索引场景,在游戏中全文索引场景主要涉及游戏产生的各种数据,包括社区数据、攻略数据以及用户行为数据。

通过建立索引,这些数据能够提供给游戏玩家、论坛用户、游戏运维团队以及游戏运营人员提供用于充分分析和处理的能力。
Tair的全文索引在这个过程中具有以下几个特点:

首先,它实现了低延迟和高性能,能够提供毫秒级的写入和全文搜索能力。其次,它支持多种聚合查询,包括 terms,metrics  filter等聚合算子。

第三,它能够支持增量和局部更新,而无需更新整个文档。对于 JSON 文档而言,这意味着对于大型数据集合而言,不需要像其他系统(比如ES)一样重新写入整个文档,同时支持 incrby 等常见的操作。

第四,它支持前缀模糊搜索和自动补全功能。此外,全文索引的查询语法非常灵活,类似于 Elastic Search,并且可以支持高级查询,也可以支持像 bool,match,term 这种翻页。

最后,全文索引内置了常见语言的分词器,例如中文的分词器和一些主流英语的分词器。同时,它还提供了定制化分词器的能力。

image.png

3、全文索引——论坛搜索和实操

接下来以一个游戏论坛为例进行演示和实操,以展示 Tair 在全文搜索的强大能力。

常见的游戏论坛中通常包括用户发布的文本帖子也会进行帖子的搜索,这个过程涉及到索引的创建、帖子的发布以及帖子的搜索这三个关键步骤。在创建索引阶段,对游戏帖子的内容的不同字段进行索引创建,比如游戏帖子中 title 是它名字,Content 是它的内容,时间是一个数字,author 作者是一个文本字段以及它的热度创建索引的时候可以看见右上角将 title 映射成 key word一个关键字,内容 content 就是一个文本,分词器使用 jieba 分词器,时间字段按照 long 来区分,作者 author 字段也是一个 key word,热度也是一个 integer。然后可以添加不同的内容也就是发帖操作。建立完索引之后可以对索引进行搜索,右下角的搜索是按照热度高低进行的排序操作。

搜索的时候从内容上 match 了 paypal,work 以及 code 这三个关键字。回到教程点击下一步就是游戏论坛搜索的帖子,可以先 create 一个 index,之后就可以向 index 插入数据,插入的每一条数据都会被自动索引。比如插入第一条返回值是一个 ID,这就是文档唯一的 ID,同理插入第二条数据得到第二条 ID。

接下来进行搜索,搜索的时候如果是按照 order 降序,搜索的关键字是这三个关键字,因为这三个关键字在帖子中都出现,都会被搜索出来。为了使其更好的展示进行一个格式化校验,校验之后搜索出来的第一个文本热度为100,第二个文本热度是10,第三个文本热度为2。

对于关键字而言第一个文本还有 code 关键字,因此它被搜索出来;第二个文本的关键字是 Collect,以及 work;第三个文本的关键字实际上是 paypal,因此搜索结果是准确的。如果想按照热度的升序进行,只需要换 ASC,此时出来结果就是按照升序进行排列,可以看到热度最小的成为了最低,接下来是热度为十的第二个帖子,接下来是热度为100第三个帖子。

4、全文索引——商品道具搜索

除了论坛的搜索之外,整个全文索引也可以进行商品道具的搜索,包括创建索引也发布一些商品的道具,包括搜索一些商品的道具,都在游戏中的功能非常的常见。
image.png

5、Tair 对此其余搜索产品性能

Tair 的全文索引性能非常的高,测试展示了在维基百科上的英文摘要的搜索性能,Tair 在写入和搜索上的 QPS 分别是Redis search和 ES 的两倍和四倍,RT 只有 Redis search1/2和1/6。
image.png

 

 

五、排行榜——多维排行榜(实操)

1、游戏排行榜设计

下面来看游戏中排行榜的设计。

image.png

游戏中经常会有各种排序的需求,无论是总体排名或者类似于赛车游戏单局结束后的排名,这都是 Tair 非常擅长领域。Redis 只能支持一维数据的排序,但 Tair的排行榜则可以最大支持256维度的排序,同时兼容原生的Redis所有的 API ,毫秒级别的 RT。目前,它已经在 GitHub 上开源。

常见的排行榜场景例如在游戏中,当玩家的称号相同时,需要按照胜率进行排序;在奥运奖牌排行榜中,当金牌数量相同时,需要按照银牌排序,否则按照铜牌排序;或者在主播排行榜中,当热度相同时,需要按照收到的点赞数量进行排序。下面将为大家展示游戏中的多维排行榜。同样切换到最后一个教程,展示游戏中的多维排行榜,其中的示例是在游戏中,当玩家的等级相同时,需要按照胜率进行排序,否则再按照积分进行排序。

第一步是添加数据,各维度的分数之间需要用井号(#)进行分隔。这个井号就是各个维度之间的分隔符。例如,用户的等级是60级,胜率是30,积分是20,那么可以使用60#30#20这种格式将数据插入。EXADD 命令插入一个排行榜,Leader board 是排行榜的名称,这也是 key 的名称分别有6个用户,他们的分数以及名分别被记录下来。执行完插入操作后,可以看到数据返回的是0,这是因为此时的 Leader board 已经存在于排行榜中

可以将它删除,删除后再次进行演示,此时返回的是6,表示成功插入的元素数。插入这些元素数之后,可以获取某个用户的排名,例如 user1user2。对于user1user2等级都是60级,是相同的,因此需要按照胜率进行再次排序,user2的胜率较低,因此它排在后面。如果想按照胜率从低到高排序,也是可以的,只需要将API改成EXZRANKEXZRANK 会按照从低到高的顺序排名,所以 user2实际上是第四名,而user1是第三名,因为实际上user1的胜率比user2高。

如何获取top用户?可以使用 EXZERVRANGTE 这个API来获取,它默认按照从高到低的顺序便利用户,只需指定两个起始点内要获取相应的用户,例如获取top三的用户是 EXZERVRANGTE 从0到2。同样如果想要获取逆序的排名,即从小到大的排名,只需使用 EXZERVRANGTE 即可,排名方式会相应反转。如果想获取所有用户的排名,只需指定从0到-1的过程即可,则可以获取所有用户从高到低排名的列表。

同样,如果您想获取从低到高的排名,只需使用 EXZERVRANGTE即可。Tair 是一个按照 key 进行哈希分片的数据库,因此,一个 key 只能存在于一个分片上。如果用户在单个 key 上存储的数据过多,不仅会影响查询性能,还会导致迁移和运维变得困难。

2、排行榜——分布式架构排行榜

image.png

因此,分布式架构的排行榜旨在解决上万用户排名场景。这是在 Tair 开源客户端上开发的功能,用户可以通过构建分布式排行榜对象,从而底层会自动创建多个排行榜。例如用户可以创建一个分布式排行榜对象,用户可以使用 "new" 命令来创建它。

用户有一个 distribute leaderboard,用户的写入会被分摊到多个排行榜中,比如左侧的图表中,插入了7个 useruser1 user5被插入到第一个排行榜,user2user6被插入到第二个排行榜中。当需要获取全局第一名时,它会查询所有子排行榜的top one,然后在本地进行简单的数据排序即可完成。通过这种方式,Tair 可以解决上万用户排序的问题。

3、排行榜——日榜/周榜/月榜
image.png

此外,除了普通的排行榜,游戏中常见的每日榜单、周榜单和月榜单也可以轻松构建,只需要使用不同的数据维度来表示不同的时间范围即可。

 

六、游戏在Tair中的常见运维

1、数据闪回

image.png

最后,介绍一下在游戏中常见的 Tair 的运维操作。数据闪回可以游戏运营中出现问题,数据丢失或用户被盗号做简单的数据处理。Tair 可以支持从一个 key 到部分 key 再到多个 key 所有的全维度的数据闪回并且通过 Tair 自研的 BING Log 协议可以支持以秒级粒度恢复数据。如右侧图所示,可以进行全量数据或特定键的闪回,还可以创建新实例或从原实例直接闪回。

2、游戏在 Tair 中的常见运维——大 key 分析
image.png

在游戏线上运维的过程中,有时问题的出现会随着某个 key 的数据量逐渐增大,对CPU和内存造成压力,导致查询超时。大 key 分析功能,可以通过离线数据分析,让用户洞悉数据中的一切,按内存大小、数量、key 的前缀等多种方式来组织数据,以优化性能。

3、游戏在 Tair 中的常见运维——热点处理
image.png

遇到爆款的装备则可能出现热点问题,QPS 达到几十万,Tair 也可以从容应对,可以通过实例的读写分离版本和 Query Cache 功能来解决热点问题,助力业务直线增长。


七、课程总结

本期课程主要介绍了 Tair 在游戏行业的架构和亮点功能,详细介绍了 JSON 数据处理、全文索引、排行榜设计以及游戏运维操作。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
存储 NoSQL Redis
课时7:Tair生态及开源module的使用
课时7:Tair生态及开源module的使用
166 0
|
存储 缓存 运维
课时6:Tair在雪球和作业帮的使用剖析
课时6:Tair在雪球和作业帮的使用剖析
163 0
|
存储 人工智能 NoSQL
课时5:AIGC时代,Tair向量检索助力AI
课时5:AIGC时代,Tair向量检索助力AI
264 0
|
监控 NoSQL 数据库
课时2:Tair的实操流程及常见问题
课时2:Tair的实操流程及常见问题
185 0
|
存储 缓存 NoSQL
课时1:Redis(Tair) 产品介绍
课时1:Redis(Tair) 产品介绍
256 0
|
存储 缓存 NoSQL
Tair 整体介绍及在阿里集团的应用 | 学习笔记
快速学习 Tair 整体介绍及在阿里集团的应用
1208 0
Tair 整体介绍及在阿里集团的应用 | 学习笔记
|
存储 JSON 运维
Tair 在游戏行业的应用 | 学习笔记
快速学习 Tair 在游戏行业的应用
245 0
Tair 在游戏行业的应用 | 学习笔记
|
NoSQL Redis
直播预告 | Tair(Redis)行业场景深度剖析-生活出行的计算与应用
Tair(Redis)行业场景深度剖析-生活出行的计算与应用
341 0
直播预告 | Tair(Redis)行业场景深度剖析-生活出行的计算与应用
|
14天前
|
NoSQL Cloud Native Linux
通过 RIOT 将 AWS ElastiCache 迁移到阿里云 Tair
通过 RIOT 将 AWS ElastiCache 迁移到阿里云 Tair