QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

使用 Amazon Aurora 升级游戏体验

  • 2019-10-12
  • 本文字数:3420 字

    阅读完需:约 11 分钟

使用 Amazon Aurora 升级游戏体验

Dhruv Thukral 是 Amazon Web Services 的一名解决方案架构师。


Amazon Aurora 正在快速成为全球一些大型和快速增长的游戏公司的首选关系数据库。美洲的 Zynga 和 Double-Down Interactive、亚太地区的 Grani 和 Gumi 等公司都在使用 Amazon Aurora。Aurora 既具有高端商用数据库的速度和可用性,又具有开源数据库的简单性和成本结构。


速度和成本的这种优势组合甚至让 Double-Down Interactive 等公司运行 Aurora 的成本比 MySQL 还低。Aurora 具有更高的性能,这意味着您可以经常使用比 MySQL 更少或更小的实例。如果像许多游戏公司一样运行分区式的 MySQL 环境,您潜在可以通过迁移到 Aurora 节约许多成本。此外,正如本博文后将讲到,您还可以获得两三倍的性能提升。其他潜在的优势还包括更高的可用性、更低的复制延迟和更少的分区,因为您可以整合现有的分区。


在本博文中,我们将讨论 Amazon Aurora 可以如何使用面向手机游戏的示例参考架构,帮助您构建可靠、可扩展的数据库层。此外,我们还将重点介绍已经将其现有数据库迁移到 Amazon Aurora 的游戏客户的经验。


选对数据库的价值


在设计大型应用程序的架构时,一个关键因素是数据库层。游戏负载的读取和写入负载极高,数据库层尤其重要。随着玩家的等级提升、打败敌人、收到游戏币、改变清单、解锁升级以及完成成绩等等,游戏数据在持续更新和读取。每个事件都必须写入您的数据库层,从而确保它不会丢失。在游戏中失去这一进步可能导致在 Twitter 中的负面帖子趋势,并在夜间被张贴出来。


游戏和 Web 应用程序开人员常常会将 MySQL 等开源关系数据库作为其数据库层,因为他们对它更为熟悉。查询的灵活性和游戏逻辑事务方面的 ACID 属性对许多开人员极具吸引力。扩展这一层级的传统方式,尤其是在使用 MySQL 时,是通过分区。在某些情况下,扩展也可通过将读取操作卸载到只读副本中来实现。虽然这种方法可让开发人员持续增加分区,维护这种基础设施却会带来开销。例如,如果一个分区中的存储耗尽,或者您的只读副本发生故障该怎么办? 或者,如果发生意外,您丢失了整个分区以及其中的数据该怎么办?


为什么游戏开发人员感觉 Aurora 是他们的正确选择?


1.内置 MySQL 兼容性:与 MySQL 的兼容性让游戏开发人员可以与 Aurora 集成,无需更改应用程序即可享受所有优势。他们只需修改应用程序中数据库配置的终端节点。他们可以继续使用原来使用的代码和工具。


2.无需决定要为数据库分配多少存储容量:决定要为数据库分配多少存储容量,尤其是为生产工作负载分配容量,是游戏开发人员(或者普通开发人员和数据库管理员)不想作出的决定之一。分配太少,您会在最需要的事后耗尽空间,让您不得不让游戏进入维护模式,等待升级完成。分配太多,又会浪费金钱。使用 Aurora 后,数据库存储在集群卷中,集群卷是一个使用固态磁盘 (SSD) 驱动器的单一虚拟卷。一个集群卷由跨一个区域中多个可用区的数据副本组成。Aurora 集群卷会自动随着数据库中数量的增长而增长。Aurora 集群卷可增长至 64 TB 的最大容量。表的大小受集群卷的大小限制。换言之,Aurora 数据库集群中表的最大容量为 64 TB。尽管 Aurora 集群卷最大可增长至 64 TB,但您仍只需为 Aurora 集群卷中使用的空间付费。您的起始卷容量可以低至 10 GB。


3.独特的只读副本:Aurora 的只读副本使用与主实例相同的底层集群卷。这种方法有利于减少复制延迟,即使在不同的可用区启动副本也不受影响。Aurora 最高支持 15 个副本,对写操作的性能影响极低。而 MySQL 最高仅支持 5 个副本,并且可能会影响写操作的性能,出现一些复制延迟。此外,Aurora 会自动将其副本作为故障转移目标,不会发生数据丢失。由于这些副本以同一底层存储作为主实例,它们相比主实例的延迟仅为数十毫秒,达到了近乎同步的性能。


4.Amazon 为您管理数据库:游戏开发人员关心的是构建伟大的游戏,而不是处理维护和运行问题。Amazon Aurora 是一种托管服务,包含了运营支持和跨多个数据中心的高可用性。您无需担心软件安装或硬件故障问题。


5.性能提升:游戏客户已经报告在迁移到 Amazon Aurora 后,与现有的开源数据库相比,性能提升了两三倍。日本领先的社交游戏出版商 Grani 将其 MySQL 数据库迁移到了 Aurora 并分享了如下结果。第一段显示了他们原有系统的平均 Web 事务响应时间,按照总体堆栈中不同层级细分。



按照之前的架构,Grani 在 Amazon RDS 中 r3.4xl 实例类型上运行 MySQL 并启用了多可用区模式。他们的总数据库响应时间介于 15-22 毫秒之间,总体响应时间约为 50 毫秒。下图显示了迁移到 Amazon Aurora 后的结果。



他们迁移到一个类似的 r3.4xl 节点,含有一个主实例和一个只读副本。他们的总体响应时间降至 5.5 毫秒。下图显示了他们的平台数据库迁移前后的总体响应时间的完整情况。



Amazon Aurora 快速入门


为我们在 AWS 上运行的手机游戏和在线游戏更新旧版示例参考架构时,我们认识到像游戏客户推荐 Aurora 的重要性。下图为更新后的异步在线游戏参考架构,它演示了如何使用 AWS 来为大型手机游戏和在线游戏构建服务后端。此类工作负载天然适合在 AWS 上运行,因为其流量模式具有不可预期性,请求率要求极高。AWS 提供了极佳的灵活性,可以从小规模起步,然后根据玩家的需求扩展架构。架构可以向上扩展也可以向下收缩,从而确保您只需为推动游戏最佳体验的资源付费。使用我们针对流行缓存和数据库技术的托管服务,并借助当今在 AWS 上运行的大型游戏最佳实践的架构。



前述架构建议您在多个可用区部署 Aurora,建议的起始节点大小为 R3.2XL 和三个只读副本。我们建议采用这种配置,是因为我们假设您的游戏的读取操作要高于写入操作,可以从额外的只读副本中受益。此外,当您将 Aurora 副本作为故障转移的目标数据库时,您还可以受益于固有的高可用性优势。


在参考前述架构时要注意以下几点:


  • 分区配置:前述架构采用单一分区配置,拥有一个主实例和三个副本。为了平衡成本和高可用性,如果您的环境拥有多个分区,您可以将前述配置修改为每个分区一个 Aurora 主实例和两个只读副本。这种方法将允许您在发生故障转移事件时仍然有一个主实例和一个只读副本。

  • 重试逻辑:如果发生主实例故障,一个 Aurora 副本将会晋升为主实例。这时将发生短暂的中断,在此期间向主实例提出的读取和写入请求将因异常而失败。确保您的游戏可以从容处理这种情形,并且游戏客户端中拥有内置的重试逻辑,或有恰当的异常处理功能。

  • 连接池:假设您使用 c3p0、HikariCP、Apache DBCP 等流行的连接池库,并且希望支持大型连接池;如果属于这种情况,请注意 Aurora 线程池的工作原理与 MySQL 不同。Aurora 的线程池采用多重连接等功能,并且能够处理超过 5000 个并发会话,可扩展性远远高于 MySQL 线程池。同样,我们建议您对工作负载进行测试,以确保您获得游戏要求的性能。

  • 客户案例:Zynga


在使用 Amazon Aurora 前,Zynga 使用的是 RDS for MySQL。Zynga 当时在考虑将现有使用 Amazon EBS 卷的分区环境迁移到使用本地 SSD 的 i2 实例,以满足极高的 IOPS 需求。在他们考虑使用自我管理的 i2 实例时,他们在推出一项新服务前也开始平行测试 Aurora。经过八个月的生产运行后,Aurora 的表现超过了他们的预期。最繁忙的实例是一个 r3.2xl 实例,高峰时期它每秒要为一个 150 GB 的数据集处理大约 9000 条选择。Zynga 对 Aurora 实现了必要的性能但没有发生运行 MySQL 的开销这一事实非常满意。


此外,这种自动化机制让 Zynga 可以极高的敏捷性来应对运营事故。如果流量模式发生变化,导致某个 Aurora 实例的负载巨额突增,该实例将能够继续处理流量,尽管 CPU 利用率达到了 100%。此外,它们甚至还提高了吞吐量,将只读副本扩展为一个比原来大四倍的实例。然后它们通过故障转移切换到副本,然后观察它处理四倍的流量,所有这一切都只需在 RDS 控制台中进行几次点击。几天后,在他们发布防止事故再次发生的补丁后,他们使用同一流程缩减回较小的实例。


Zynga 的架构师 Chris Broglie 说:“在使用 Aurora 以前,我们必须让一位数据库管理员在线手动预置、复制和故障转移到较大的实例,或者尝试发出某个代码补丁以减少数据库的负载。手动更改一般更慢,风险更大,因为 Aurora 的自动化机制让我们的选项包得到一次巨大的补充,并且在此案中,问题在几分钟之内就解决了,而不是几小时。”


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/level-up-your-games-with-amazon-aurora-2/


2019-10-12 13:22643
用户头像

发布了 1855 篇内容, 共 122.1 次阅读, 收获喜欢 79 次。

关注

评论

发布
暂无评论
发现更多内容

Markdown文本编辑器Typora Mac使用教程

南屿

Typora Markdown 编辑器

HarmonyOS Codelab样例—弹窗基本使用

HarmonyOS开发者

HarmonyOS

termius使用ssh教程 【XShell的神器Termius】

南屿

SSH Termius

区块链去中化钱包开发方案,交易所钱包和元宇宙软件开发

V\TG【ch3nguang】

修旧利废,提升净资产收益率

用友BIP

资产管理

行云管家支持信创吗?是真的吗?

行云管家

信创 国产化 行云管家

软通咨询杨念农:咨询2.0是企业数字化转型的大脑

软通咨询

数字化转型 #人工智能 管理咨询 数字化转型咨询

FIL NEW算力挖矿系统开发

l8l259l3365

未来AI领域的颠覆性力量

百度开发者中心

自然语言 #人工智能 文心一言

慢SQL治理实践及落地成果分享 | 京东物流技术团队

京东科技开发者

数据库 sql 慢SQL 企业号9月PK榜

选择渲染农场的几个标准

Finovy Cloud

游戏制作 影视制作 渲染 云渲染 渲染农场

基于异常上线场景的实时拦截与问题分发策略

百度Geek说

大数据 实时计算 企业号9月PK榜 反混淆

详述 IntelliJ IDEA 中自动生成 serialVersionUID 的方法

南屿

IntelliJ IDEA IntelliJ IDEA 2023破解 Serializable

国庆机酒预订又快又便宜?内附华为Mate60负一屏抢购攻略

最新动态

文心一言 VS 讯飞星火 VS chatgpt (96)-- 算法导论9.3 1题

福大大架构师每日一题

福大大架构师每日一题

百度智能云引领建设智能云标准生态,第十二届云计算标准和应用大会成功召开

Baidu AICLOUD

智能云 大模型 AI 原生云

什么是高匿代理,与普匿和透明代理的区别是什么?它有什么作用?

巨量HTTP

代理IP http代理

强大但并非万能,智能客服之挑战

百度开发者中心

智能客服 #人工智能 千帆大模型平台

区块链数字货币交易所开发方案,去中化交易平台搭建

V\TG【ch3nguang】

百度集团副总裁吴甜:大语言模型面临三大技术挑战

飞桨PaddlePaddle

文心一言 文心大模型

快手发布文生图大模型“可图”,探索AI新玩法

Geek老T

短视频 AIGC

Rocketmq并发和顺序消费的失败重试机制

石臻臻的杂货铺

RocketMQ

市面上支持信创的堡垒机哪家好?为什么?

行云管家

网络安全 信创 数据安全 堡垒机

万能音视频转换器 Permute 3 for mac免激活中文版

mac大玩家j

Mac软件 音频格式转换器 音频转换

fastposter 新版本 v2.17.0 强势发布!让海报开发更简单

物有本末

图片处理 海报生成器 海报生成 海报小程序

Microsoft word 2019 for Mac v16.78 beta中文激活版

mac

windows 办公软件 苹果mac Word 2019 文字处理软件

主动写入流对@ResponseBody注解的影响 | 京东云技术团队

京东科技开发者

spring 注解 企业号9月PK榜 @ResponseBody

数字化转型与架构-架构设计篇|什么是架构风格和架构模式?

数字随行

数字化转型

专业级PDF编辑和管理 Acrobat Pro DC 2023 for Mac

胖墩儿不胖y

Mac软件 pdf编辑器 编辑pdf pdf工具

3步体验在DAYU200开发板上完成OpenHarmony对接华为云IoT

华为云开发者联盟

鸿蒙 物联网 华为云 华为云开发者联盟 企业号9月PK榜

专业开发区块链DAPP去中心化系统模式开发系统定制

V\TG【ch3nguang】

使用 Amazon Aurora 升级游戏体验_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章