How Blitz scaled their game coaching app with lower latency and leaner operations 是一家快速增长的初创公司,为 League of Legends、Valorant 和 Fortnite 等游戏提供个性化的培训,旨在通过实时见解和比赛后分析帮助玩家成为 League of Legends 传奇。 闪电 当玩家玩游戏时,该应用程序做出了相当多的工作。它捕捉了现场比赛数据,快速分析它,并使用它进行实时游戏屏幕覆盖以及个性化的游戏后培训。 由于人们对Blitz的流行的统计数据和游戏培训应用程序的认识越来越大,他们不断增长的用户群将原来的Postgres和Elixir架构推向了极限,这篇博客文章解释了他们最近如何利用Rust和ScyllaDB来翻新他们的League of Legends数据后端。 为了为其不断增长的用户群提供低延迟、高可用性和水平可扩展性,他们最终: TL;DR 从Elixir迁移到Rust的后端服务。 用 ScyllaDB Cloud 取代 Postgres。 极大地减少了他们的足迹。 删除他们的Riak集群。 代替队列处理与实时处理。 从一百多个微服务核心到四个n4‐标准‐4 Google Cloud 节点的综合基础设施(加上一个小 Redis 实例用于边缘缓存) 作为额外的奖励,这些变化最终削减了Blitz的基础设施成本,并减少了他们的工程人员的数据库负担。 闪电背景 正如Naveed Khan(Blitz工程主管)解释的那样,“我们从游戏出版商和游戏过程中收集了大量数据,例如,如果您正在玩League of Legends,我们使用Riot的API来提取匹配数据,如果您安装我们的应用程序,我们也实时监控游戏。 上一篇: 过去的邮局 Blitz 系统的一个关键部分是 Playstyles API,该 API 分析了队友和对手的比赛前数据。 这个密集的过程评估了每位球员的 20 场比赛,每场比赛运行 9 次(每场比赛中每位球员一次)。 团队战略性地重新设计和整合了许多微服务以提高性能,但数据量仍然强劲。 根据Brian Morin(Blitz 首席后端工程师)的说法,“找到能够处理这个查询量的数据库解决方案至关重要。 他们最初使用了Postgres,这早就很好地为他们服务了。然而,随着他们重量级的工作负载的扩张,Google Cloud的运营复杂性和成本显著增加了。此外,扩展Postgres变得相当复杂。Naveed分享说:“我们尝试了各种东西来扩展。我们在Postgres周围建立了多种服务,以获得我们所需要的规模:一个Redis群集,一个Riak群集和Elixir Oban队列,这些队列偶尔过剩。 随着初创公司规模的增加,他们经常从“只使用Postgres”切换到“只使用NoSQL”。合适地,Blitz团队考虑转移到MongoDB,但最终排除了它,“我们在团队中有很多MongoDB经验,我们中的一些人真的很喜欢它。 将为其特定的工作负荷和预期增长创造瓶颈。 MongoDB的主要和次要架构 测试显示,它会满足他们的延迟需求,所以他们执行了所需的数据(重新)建模,并从Postgres迁移了几款较小的游戏到RocksDB,然而,他们最终决定反对RocksDB,因为规模和高可用性问题。 为什么 ScyllaDB 他们的后端工程师之一建议ScyllaDB,所以他们接触并运行了一项概念验证,他们主要寻找一种解决方案,可以处理写入量,水平尺度,并提供高可用性。 他们首先在自己的硬件上测试了它,然后迁移到ScyllaDB云。 Per Naveed说:“成本相当接近自助托管,我们获得了完全的免费管理,所以这不是一件好事。我们现在有一个显著减少的Redis集群,我们还摆脱了Riak集群和Oban队列的依赖性。 在性能方面,这一转变满足了用户体验水平提升的目标,也简化了他们的工程团队的生活。布莱恩补充说:“ScyllaDB表现出色,在优化后提供强大的性能,可以节省。我们的联盟产品达到约5k ops/sec,集群报告负荷低于20%。我们最大的限制是磁盘使用,我们已经部署了多个更新来缓解。新系统现在通常可以立即返回结果,而不是依靠缓存数据,为其他玩家提供更多的最新信息,甚至可以识别频繁的队友。这种迁移的结果令人印象深刻:超过一百个核心的微服务已经被四个n4标准4节点和一个最小的Redis实例替换了缓存。此外,一个3xn2high ScyllaDB集群有效地取代了以前的关系数据库基础设施,需要 High-Level Architecture of Blitz Server with Rust and ScyllaDB 重写 Elixir 服务到 Rust 作为一项重大后端翻新的一部分,Blitz团队开始重新考虑他们的整个基础设施 - 超越之前描述的从Postgres到高性能和分布式ScyllaDB的转变。 除了这个数据库迁移,他们还选择将基于Elixir的服务放到阳光下,以有利于更现代化的语言。 现在,Rust 重写服务的第一批正在生产中,Naveed 和团队没有回头看:“Rust 很棒,速度很快,编译器迫使您提前编写安全记忆代码,而不是稍后调试垃圾收集问题。