预启动:尽快维护真正的可交付成果是一项挑战
早上好
当我们在 Xbox 上推出 My Year 时,TrueAchievements 的注册量在 12 月份出现了同比增长,当然,每次注册都会带来更多流量以及需要处理的游戏数据!
TrueAchievements 与绝大多数游戏网站不同,因为我们提供许多页面的定制版本,显示用户在该游戏中的进度、成就或演练,当然还有用户的个人资料页面,该页面不仅收集他们的数据,还收集用户的数据。也是他们所有朋友的。 这意味着我们不能 “缓存” 这些页面位于我们的 CDN 中,每次有人(或网络爬虫或机器人)访问页面时都应该快速生成。
更复杂的是,由于我最初的“简单想法”是TA分数应该反映每场比赛中成就的稀有程度,所以我们几乎每天都必须重新计算成就、比赛和玩家的分数。
最重要的是,我们可能拥有地球上最复杂的 Xbox 排行榜系统,因为您可以在多达 17,000 个不同的排行榜上找到您的分数,其中大部分需要每天预先创建,以便足够快地显示在网站。
因此,我们有大量的流量(仅人类每天大约有一百万个页面浏览量)查看许多我们无法缓存的页面,并且针对在这些页面上查看的数据进行大量的数字处理。页面(我们目前有 在 232,541,069 场游戏中追踪了 3,287,979,385 项成就 在数据库中)。
这导致 12 月份网站速度显着下降,您可能已经注意到页面超时、扫描需要很长时间,或者只是浏览网站时普遍缓慢。
当然,这些挑战并不新鲜——自从代码发布之日起,我几乎重写或重构了代码。 为 5,000 个用户设计的数据库在有 120 万用户时就无法正常工作。 这也是一项很有趣的工作,因为您可以实际衡量您的更改并立即看到它们产生了多大影响。 它给我一种巨大的幸福感,然后我在这一天剩下的时间里感到快乐(公园生活!)。
自 12 月以来我们所做的性能更改
为了让事情再次顺利进行,自12月中旬以来我做了很多改变:
TrueAchievement 分数现在是数据库中的整数
从后端的角度来看,这可能是最简单的更改,但这可能是您首先注意到的更改。 TA 成绩分数始终存储到小数点后 4 位,但在显示在网站上的各个位置之前会进行四舍五入。 因此,该成绩可能显示为 17 TA 分数,但在数据库中存储为 17.3862。 现在它被存储为17。
尽管您在成就级别上不会注意到这种变化,但您可能会发现您的 TA 总分与游戏掉落的情况不同,因为您的 TA 的每个部分都会从该游戏的总分中删除。 我们将在下周左右处理游戏,在此期间,即使您已经完成了游戏,您也可能会发现游戏的最大 TA 与您在该游戏中的个人 TA 存在差异 – 所有这些都应该进行排序到了周末,当我们浏览游戏并处理它们时。
这一变化带来了很多好处:
- 它不再让用户感到困惑。 我们被问到的第一个问题是“我如何解锁一个价值 16 TA 的成就和一个价值 7 TA 的成就,但我在游戏中的分数是 24?”。 这是由于后端的舍入造成的,但必须不断地解释这是一种痛苦
- 存储空间已减少 – 整数存储约为我们之前使用的小数大小的三分之一,并且我们通常为每个游戏、玩家游戏、排行榜和竞赛拥有 3 组 TA 点(由于 DLC 设置) 和 玩家以及成就
- 当我们每次筛选某人时将所有结果相加时,处理速度会更快
- 当完成分数变化小于 1 时,我们不再需要更新游戏的所有玩家日志 – 这可能是此调整带来的最大性能提升
- 我们不再需要在网站上到处舍入数值
如果每场比赛都在未来几天内进行,则重新计算,在此期间您可能会注意到您的比赛得分与完成比赛后的得分之间存在差异。 这些结果将在本周恢复正常。
一些网站排行榜现在有最低玩家分数要求
随着时间的推移,该网站的每日排行榜创建时间不断增加,达到每天大约 3 小时,创建每周排行榜每天大约 5 小时。 创建这些图板时,网站速度显着减慢,因此我一直在寻找不同的方法来改进此过程。
我做的第一件事是仅将 Gamerscore 至少为 20,000 的玩家纳入流派/平台排行榜上。之前,我们纳入了大约 350,000 名低于此阈值的玩家。 对于玩家来说,这是一个巨大的处理量,因为他们的 Gamerscore 分数较低,可能并不关心他们在 Xbox One 上的第一人称射击游戏排行榜上排名第 207,976 位。 如果有的话,他们可能宁愿根本不知道这件事 🙂 如果他们想再次进入这些排行榜,现在获得超过 20k GS 是非常快速和容易的。
每个注册玩家仍然列在主网站的所有排行榜上。
我还重写了许多排行榜构建和构建调用,以使汇总表更小、更快,并对排行榜生成在服务器核心之间的分布方式进行了各种调整。
经过所有这些调整后,每日排行榜现在可以在 45 分钟内生成,而 12 月份需要 3 个小时以上。
玩家博客现在已缓存
我们有一些非常受欢迎的助教博主,我们的博主经常在他们的博客上发布大量指向助教页面的链接列表。 在查看这些博客时,我们将分析这些链接,然后在显示之前检查观看者在任何被视为成就的游戏上的进度。 这增加了大量的数据库调用(一些博客有大约 1000 个链接!),以便显示单个博客。 因此,我们决定缓存这些博客,不再显示查看者进度。 这是一个很小的功能损失,但当热门博客文章包含数百个链接时,它可以有效地保护网站免受 DDOS 攻击。
有些画现在只能在登录后才能查看
在过去的几年里,我们来自机器人和抓取工具的流量急剧增加。 根据我们的托管公司 Cloudflare 的说法, 在过去 24 小时内,我们收到了来自已验证或可疑机器人的约 350 万个 TrueAchievements 请求。。 我们屏蔽了一些最明显有害的内容,但有些内容实际上对我们有用(搜索引擎、Discord 预览卡、Twitter 等)。 但是,这些有用的机器人不需要查看非常复杂的面板(例如您朋友的提要),因此我们将其中一些非常繁重的面板设置为仅在您登录该网站时才可见。 这意味着机器人仍然可以读取页面,但不会给服务器带来太大的压力。
未来可能会有更多修改
TGN 开发团队将一月份的整个月都投入到性能工作中,以尽可能加快站点速度。 从用户的角度来看,这项工作的绝大多数不会导致任何明显的变化,除了速度的提高之外。 如果我们对功能进行进一步更改,您将能够首先在 TA 不和谐服务器因此,如果您尚未加入并想了解我们的最新工作,请加入。
新年快乐!
“极端问题解决者。旅行忍者。典型的网络迷。浏览器。作家。读者。无法治愈的组织者。”
More Stories
Android 15/One UI 7 正在针对 Galaxy A53、A54 等进行测试
《Helldivers 2》的重大更新招致了负面评价,而且玩家数量并未增加一倍
据报道,谷歌 Pixel 9 将获得一些新的 Gemini AI 功能