How a team of just two engineers tackled real-time persisted events for hundreds of millions of players 只有两名工程师,Supercell承担了将其基本账户系统发展为连接数亿玩家的社交平台的艰难任务,账户管理,朋友请求,跨游戏促销,聊天,玩家存在跟踪和团队组建 - 所有这些都必须在他们的五大游戏中工作。 Supercell 的服务器工程师Edvard Fagerholm最近分享了他们强大的团队如何应对这一任务,继续阅读,了解他们如何将一个简单的帐户管理工具转化为全面的跨游戏社交网络基础设施,优先考虑操作简单性和高性能。 注意:如果你喜欢听到这样的工程成就,请加入我们 Monster Scale Summit(免费 + 虚拟)。从迪士尼+ / Hulu,Slack,Canva,Uber,Salesforce,Atlassian和更多的人将分享策略和案例研究。 斯。 笔记 : 如果你喜欢听到这样的工程成就,加入我们 怪物峰会 来自迪士尼+/Hulu、Slack、Canva、Uber、Salesforce、Atlassian等的工程师将分享策略和案例研究 笔记 怪物峰会 下一篇:谁是超级细胞? Supercell是位于芬兰的游戏Hay Day、Clash of Clans、Boom Beach、Clash Royale和Brawl Stars背后的公司,这些游戏的收入一生都达到了1万美元。 直到最近,为服务数亿月活跃用户的游戏,所有帐户管理功能都由两个工程师构建和管理。 超级细胞ID的起源 Supercell ID 作为一个基本的帐户系统诞生了 - 帮助用户恢复帐户并将其移动到新的设备。 爱德华解释说:“客户端可以向帐户API执行HTTP查询,这主要是返回了签名的代币,客户端可以向游戏服务器展示他们的身份,以证明他们的身份。一些操作,例如发送朋友请求,需要帐户API向另一个玩家发送通知。 进入双向沟通 在爱德华于2020年底加入Supercell ID项目后,他开始在通知后端工作 - 主要用于在他们的五场比赛中进行交叉促销。 客户端连接到一批代理服务器,然后一个路由机制将事件直接推向客户端(不通过游戏)。 他们意识到他们可以使用双向通信来显著增加Supercell ID系统的范围,爱德华解释说:“基本上,它允许我们实现以前是游戏服务器的一部分的功能,我们的目标是采用任何正在开发中的新游戏可能需要的功能,并将其包装到我们的系统中,从而加速其开发。 随着时间的推移,Supercell ID开始转变为一个跨游戏的社交网络,它支持朋友图表,组合,聊天和朋友状态跟踪等功能。 超级细胞ID演变为跨游戏社交网络 此时,后端的社交网络侧仍然是一个单人项目,所以他们用简单的思想设计了它。 寻找正确的抽象 “我们只想有一个简单的抽象,支持我们的所有用途,因此可以由一个单一的工程师设计和实施,”爱德华解释说,“换句话说,我们希望避免建立聊天系统,存在系统等。 找到正确的抽象是关键,并且具有Change Data Capture的等级关键值存储完全匹配了账单。 关键值存储中的顶级密钥是可以订阅的主题。 每个顶级密钥下有两层地图 - 地图(字符串,地图(字符串,字符串))。 最内在的地图中的值也被刻有时刻印。每个数据源控制了自己的时刻印,并定义了正确的顺序。 地图(字符串,字符串,字符串)) 数据的典型变化将是“等级等于10”变更为“等级等于11”。 找到合适的数据库 他们需要一个能够支持他们的技术要求和可管理的数据库,因为他们的小型团队。 处理低延迟的许多小写作 支持等级数据模型 管理备份和群集操作作为服务 ScyllaDB Cloud(ScyllaDB Cloud是ScyllaDB的完全管理版本,该数据库以提供可预测的低延迟而闻名)。 如何一切都发挥出来 要了解这在超级细胞游戏中如何发挥作用,让我们看看两个例子。 首先,考虑聊天消息. 一个简单的聊天消息可能在他们的数据模型中如下表示: 爱德华解释说:“订阅的顶级密钥是聊天室ID。下一级密钥是时刻印UID,所以我们有每个消息的排序,可以查询聊天历史。 接下来,让我们看看“存在”,这在Supercell的新游戏中被广泛使用,mo.co. 根据Edvard的说法,存在的目标:“当你为战斗组合时,你想实时看到你的外观者和你的朋友的当前构建 - 基本上是你的朋友的武器和设备,以及他们正在做什么。 Players’ state data is encoded into Supercell’s hierarchical map as follows: Note that: 顶层是玩家ID,第二层是类型,内部地图包含数据。 Supercell ID不需要理解数据,它只是将其传送给游戏客户端。 游戏客户端不需要知道朋友图表,因为路由由由Supercell ID处理。 深入系统架构 让我们以爱德华所提供的系统架构为结尾。 “后端分为API、代理和事件路由/存储服务器。主题生活在事件路由服务器上,并被分割在它们之间。客户端连接到代理,该客户端处理主题订阅。 每个主题都有一个主要和备份分片。如果主要分片下降,则主要分片保持每个消息的内存序列号,以检测丢失的消息。 次要分片将发送没有序列号的消息. 如果主要分片下降,则主要分片将触发客户端的状态更新以及重置序列号。 路由层的 API 是一个简单的事件后 RPC,包含一批主题、类型、密钥、值 tuples. 每个 API 的任务只是将数据重新写入上述 tuple 表示中。 在向订阅者发送之前,每个事件都写在 ScyllaDB 中。 我们的 API 是同步的,因为如果一个 API 呼叫成功响应,则消息在 ScyllaDB 中仍然存在。 多次发送相同的事件不会伤害,因为将更新应用到客户端是一种可行的操作,但可能有多个序列号将相同的消息映射到同一个消息。 连接时,代理会查找你的所有朋友并订阅他们的主题,对于你所属的聊天组也是如此.我们还订阅连接客户端的主题。 路由器重新启动会触发从代理程序中重新订阅主题。 我们使用Protocol Buffers来节省带宽成本。所有负载平衡都是在TCP级,以确保通过相同的HTTP/2连接的请求由相同的TCP接口处理。这使我们能够在初始收听时在内存中缓存某些信息,所以我们不需要对其他请求进行重复。我们有足够的同时客户端,我们不需要单独加载单个HTTP/2请求,因为流量无论如何均匀分布,并且请求在不同用户之间处理几乎同样昂贵。 但它不是游戏结束 如果你想观看完整的技术谈话,只需按下播放: 如果你想了解更多关于ScyllaDB在游戏世界中的作用,你也可能想阅读: Epic Games: Epic Games 如何在 NVMe 和 S3 之前使用 ScyllaDB 作为二进制缓存,以加速 Unreal Cloud DDC 使用的大型游戏资产的全球分布。 Tencent 游戏:如何使用 Pulsar 和 ScyllaDB 构建基于 CQRS 和事件采购模式的服务架构 Discord: Discord 如何利用 ScyllaDB 推动其巨大的增长,从一流的游戏平台转变为世界上最大的通信平台之一。 Epic 游戏: 腾讯游戏: 不同意: