根据 Flink Pravega 游戏服务器监控调节系统设计

2023-11-16

675452ea8944a1a56035b3feafc53d78.png


01

背景介绍

浏览赛题�团队讨论将应用领域锁定在服务器优化࿰上c;一是因为这方面很有趣󿀌此外,它是团队中长期使用爱发电的成员[1] 开服,对此非常有商业经验。

1.1 团队简介

四个团队都是本科生,相识于 Topview 工作室大数据组,现在广东工业大学入学。

温嘉诚:大三本科生󿀌承担整体架构的设计和数据处理。

温嘉诚:大三本科生�承担整体架构的设计和数据处理。

胡锦峰:大三本科生�承担整体架构设计和日志采集部分。

郑子游:大二本科生󿀌承担数据传输部分。

邓媚:大二本科生󿀌承担数据显示部分。 各种改进方案的游戏服务端,大多是出于 IO/CPU 改进消耗方向,不同的游戏也没关系

通用方案

。每个人都希望借助 Flink 实时,从数据分析和信息监控的角度进一步深化࿰的扩展c;以数据分析的形式快速找到需要优化的中心点,即时处理服务端卡顿问题#xff0c;提升玩家体验#xff00c;降低人工监督调整成本。࿰很重要c;其应用领域不局限于某款游戏,只需要同类型的游戏

完成给定的日志接口和反馈插口

,所有这些都可以通过这个系统来改进。

团队系统以 Minecraft 例,因为游戏生态丰富,易于开发。

acf64d3c51d2f8abba163dba00d226a0.jpeg

(

你甚至可以在格子的世界里前进四次

[2]

,这款游戏是一款完美的实验产品,Flink 最好与之融合

)

1.2 一些定义

  • Minecraft 游戏实体包括三部分,落物实体、格子实体、生物实体,少量玩家在线,无模块服务器的平均值每分钟都有成千上万的实体升级。

  • 当玩家增加时,#xff00c;玩家放置的格子,玩家旁边的实体会进行 tick 测算(1 秒=20 tick)。由于一些历史执行顺序,区块形成、实体计算等加起来比例超过 60%部分,࿰在一个主线程上实施c;市场上大多数服务端࿰试图分割计算多线程c;因为一些无缘无故的原因 bug (破坏“游戏机制” 或是 导致一些线程安全、执行顺序、多线程可以降低的问题) 而不是生气。

  • 大型服务器,一切 bug 都可能导致严重伤害󿀌本方案基本不伪造游戏机制󿀌防止遇到上述情况 bug。

  • 大型打怪场 / 大型红石机 / 刷石机刷铁机 /.https://blog.csdn.net/huzechen/article/ 过度存活的建筑包括过量的格子实体。头、箱、信标、品牌、发射器、投掷器、旗、盔甲架等都属于格子实体,每 1/20 每秒参加一次计算。头、箱、信标、品牌、发射器、投掷器、旗、盔甲架等都属于格子实体,每 1/20 每秒参加一次计算。
让这个东西聚在一起发生󿀌显然,服务端不好,会影响服务器TPS(Tick Per Second)

。不适合直接从服务端计算,这将严重影响玩家的体验。

ee3a7a832b63d5fbf3dc59b66fc28fde.jpeg

1.3 方案目的

  1. 目前统计服务端集群实体异常点,选用指定
  2. 消除或限制

    战略解决异常点,提高服务端运算效率,提升玩家体验。

将 Minecraft 日志发送到大数据后面,根据 Flink 进行算法统计,算法参数󿀌输出结果输入数据库表格查询#xff0c;或者将数据动态调优反馈给服务端,如生物形成。


02

设计

2.1 整体架构

该系统的简化架构如下图:51a4aced3d055db2931a9463a26af547.jpeg

2.2 日志收集和反馈机制

日志接口和反馈插口,在大数据后面连接

146d9711151bcbb1cba066a84290ea38.jpeg

使用 Bukkit 事件监听器系统󿀌监控游戏中实体的形成和消退信息,完成我们的日志接口和反馈插口

  1. 埋点࿰落物、生物和情况格子c;获得它唯一的标志

  2. 按时获取服务器 tps、gc 信息,输出到大数据后面

  3. 实时获取玩家数据信息c;记录玩家聊天信息,交互信息等

  4. 从 mysql 获取大数据后输出异常点󿀌采用不同的对策来解决

实时获取 mysql 数据库中的服务端动态配置信息,调整生物刷新率󿀌减少服务器负载


2.3 传送数据

ffc62eb69455506d8b143268af336abb.jpeg

    这部分采用 Pravega 出于以下考虑,:
  1. 与传统相比 Kafka+Flume 组成,应用 Pravega 可简化系统处理架构。Pravega 它可以自动将数据从热存储转换为冷存储,不需要额外的 ETL 开发。Pravega 它可以自动将数据从热存储转换为冷存储,不需要额外的 ETL 开发。

  2. Pravega 对于高吞吐量的历史数据和低延迟的实时动态,有一致的浏览方法,能有效实现离线计算和实时计算的统一。Pravega 方便以后扩展批数据处理业务󿀌例如,深度学习模型训练是根据长期数据进行的。

  3. Pravega 相较于 Kafka 可节省文件存储费用。数据在 Pravega 只需存放一份󿀌而 Kafka 团本必须存放。

  4. 系统内部将 Pravega 作为存储引擎和信息队列󿀌可自动伸缩的特,可以很好的替代 Kafka,同时通过 Pravega Flink Connectors 可以使其与 Flink 中间连接顺畅。

选择学习的目的 Pravega。Pravega 批流一体化存储设计具有很大的发展潜力。

这儿应用 Springboot 载入收集到的数据 Pravega(demo 以下):

1c07ef6de042c1104db34fea0b23936b.jpeg

Flink 根据 Connectors 对 Pravega 消耗数据。使用这部分跟随 Kafka 类似,十分方便。

b8c2d8cc36ede11321bad61d31cb465c.jpeg

2.4 数据处理

64a045a28ef1426d1578c39d831036fd.jpeg

进行数据 ETL

清理数据丢失的日志10b785e5f103d62f92cfb68ed837.jpeg

  • 按类型分流整体日志流,计算各实体总数,便于后续分析

在数据处理中,需要统计当前期间各种坠落物的数量和当前座标

    以 Item 掉落物类为例󿀌设计理念如下:
  1. 主输出流收集当前期间掉落物总数,每一个游戏日志,确定是否有坠落物,假如是,区分日志类型的爆发或拾取,加上各自的跌落 amount 或者减去捡起 amount。

  2. 侧输出流收集当前期限内掉落物品类型及其坐标位置,每次都有一个游戏日志,确定是否有坠落物,假如是,把掉落的物种和它们的座标放进去 map 中导出。

各自写下主输出流和测输出流 MySQL 中,作为数据显示。

4faac945e1627fcb5a74b5a3ac14746e.jpeg

    Entity 生物实体及其 tileEntity 网格实体数据处理与 Item 类似,这里就不一一列举了
    • 应用 DBSCAN 实时分析数据点的聚类算法
    • 考虑到服务器中的数据点是不规则的,而 DBSCAN 根据密度的聚类算法࿰,可以解决随意形状的空间聚类问题c;所以选择了这个系统 DBSCAN 分析数据。DBSCAN 该算法还具有无需区分类型数量和处理噪声点的特点。

  • 这里用的是 org.apache.commons.math3.stat.clustering.DBSCANClusterer<T>

e5bbecd902af23018c73f2c3490c9afb.jpeg

    • 实际分析,保存旧数值需要#xff0c;当新数据到来时,可以根据旧结论计算升级。我们采用的方案是:将每个 cluster 密度 ρ(cluster 内部数据等级//cluster 面积)做为 cluster 中心点计算权值󿀌通过聚类计算,可以获得一批数据点 cluster 中心点集,包括核心点的坐标和权值,把它存储在 Flink 的 在State中。当新数据点到来时,将和State 聚类,并将新的中心点集更新到 State。

  • 当某定位点 ρ 大于设定的阀值,确定是必须清洗的点,将此点导出至 MySQL 表中。服务器检测出表数据将清除定位点所属区块的数据。

35461b7c28b78adb624e496d19bd8aee.jpeg

f7eeeb2ce7dc8cb7f22648b29cc4b349.jpeg

网络检测到密集点座标,清理掉落物(鸡肉属于不同类型的牛肉,因此不会被清洗)

dc16aa1ed50e6dde3fa7c447aa09f84b.jpeg

系统密集点属于区块生物清洗

ffbfe988dd87978b553b8be53585c2a6.jpeg

目前,服务端可以调节动态配置参数

2.5 效果展示

95333b9533441262b9186e936748a5bc.jpeg

    该部分使用 Quick BI 实时载入 MySQL 显示中间的数据。

服务端将实体座标信息传输到大数据后面󿀌输出到报告系统,实时查看地图上的生物信息。完成卫星地图效果

673fb30e3b07a82818685e0eeeebe4a6.png

Entity(#xff09生物类型;数据的遍布

6b5ebf0a8300f0d1a4a1a106c640e73d.jpeg

tileEntity(格子类型)数据的遍布

2128f6a09f2b667a31cf97025efca626.jpeg

实体数据统计图

19ac50d712ffddc5ff64e3a23565037c.jpeg

如果你有足够的耐心,您可以在服务器中使用格子实体来放置这种图片

清除前 TPS:df070908ef37077cb7dfea7eed6b9293.jpeg

清理后 TPS:75889b44a33be6f9e01721115691577f.jpeg

03

结语

3e390699aaa0f412b4c37edf1c79ce9b.jpeg

    离去 Minecraft,对于大多数网络游戏来说,,Flink 实时非常适合游戏标准的即时操作,许多原本存在于游戏服务器端的计算资源,所有这些都可以解放,由 Flink 后面的代理解决方案,快速将结果返回服务端。我们可以想到一些对即时要求较高的例子;
  1. 大型网络游戏的实时任务系统

  2. Boss 实时调整掉落物,物件推荐

  3. 服务端无法快速响应的类型重返预测

NPC自然语言理解任务

事实上,游戏中有无数的并行处理需求,Flink 能做的远不止这个,随着更多需求的探索和转移,Flink 或者网络游戏带来一次"前行四"。

总的来说,,该系统成功实现了优化游戏的想法,我们认为我们在这次比赛中学到了很多,意识到与巨头的区别。下面要准备好测试月,期待明年有机会参加 Flink 争霸赛༌与参赛者和评委的思想和技术碰撞!

参照

  •  结构流存放 — Pravega(https://flink-learning.org.cn/article/detail7a9cfcbcf3c01ad0b38a89249cfb7e9)

    根据 Flink Pravega 游戏服务器监控调节系统设计

MCBBS-插件开发教程#xff08;https://www.mcbbs.net/thread-1051397-1-1.html)

[1] 爱发电所指的低利润或无利可图仍然坚持做某事,这里指的是我们团队开服务器

[2] 图片来源于网络动画《我的三体章北海传》,改编自刘慈欣的科幻小说《三体》 2:黑暗森林,动画初期,发烧友依靠游戏 Minecraft 拍照。在作品中,章北海威胁亚洲舰队旗舰飞船发出飞船前行四的命令。在作品中,章北海威胁亚洲舰队旗舰飞船发出飞船前行四的命令。前进四,是飞船最大的加速档,最高速度为光速的15%。
标签: 系统设计   数据