亚马逊AWS官方博客

乐易游戏数据库最佳实践:超越原生Amazon DynamoDB自动弹性扩展的创新解决方案

概述

本文介绍乐易公司在游戏数据库的实践中,创新性地开发了一套Amazon DynamoDB弹性伸缩的精准控制方案,以面对其游戏应用特有的流量挑战,包括突发性流量峰值、极致的成本优化以及对毫秒级响应时间的严格要求。

关于乐易

深圳乐易网络股份有限公司成立于2011年,是一家专注海外手机游戏自主研发和自主运营的企业,致力于打造世界精品手游,凭借着专注极致的做事态度和对产品体验严苛的要求,公司的游戏屡创佳绩,在苹果和谷歌商店的排行长期名列前茅。缔造了包括《Blaze of Battle 》《Marsaction: Infinite Ambition》《Mad Survivor: Arid Warfire》《Mecha Fire》和《West Game》等系列游戏。

关于DynamoDB

Amazon DynamoDB是亚马逊云科技提供的完全托管的NoSQL数据库服务,于2012年推出。它是一个无服务器的分布式数据库,支持键值和文档数据模型,具有灵活的架构设计, DynamoDB专为需要在任何规模下保持一致性能的运营工作负载而设计和优化。无论是10个用户还是1亿用户,DynamoDB都能提供一致的个位数毫秒级性能。目前,全球各种规模、行业和地区的客户都在使用DynamoDB构建现代化的应用程序。

DynamoDB 的核心优势

1. 完全托管的无服务器架构

  • 零基础设施管理:无需配置服务器、安装软件或维护
  • 零停机维护:没有冷启动、没有版本升级、没有维护窗口
  • 自动化运维:亚马逊云科技处理所有基础设施管理,开发者可专注于应用构建

2. 卓越的性能表现

  • 可预测的低延迟:在任何规模下都能提供一致的个位数毫秒级响应时间
  • 无限扩展能力:支持几乎任意大小的表,同时保持一致的性能和高可用性
  • 高吞吐量:每天处理数万亿次请求,支持全球范围的应用

3. 弹性扩展能力

  • 即时扩展:可根据应用需求即时扩展,无需人工干预
  • 水平扩展:表可以水平扩展而不会出现性能下降
  • 按需付费:提供按请求付费的计费模式

4. 高可用性与持久性

  • 多可用区复制:数据自动跨多个可用区复制
  • 内置安全能力:默认静态数据加密
  • 备份与恢复:提供内置的备份和恢复选项,支持PITR

5. 灵活的数据模型

  • 支持多种数据结构:同时支持键值和文档数据模型
  • 无模式设计:灵活的架构允许每行拥有不同的列
  • 适用于多种场景:可存储和检索任意数量的数据,服务任意级别的请求流量

特别适合游戏行业的优势

DynamoDB特别适合游戏行业的原因包括:

  1. 应对突发流量:游戏发布、营销活动等场景的流量暴增可通过即时扩展能力轻松应对
  2. 一致的低延迟:个位数毫秒的响应时间确保流畅的游戏体验,这对实时游戏至关重要
  3. 全球化部署:支持构建可从小规模起步并扩展至全球的现代化应用
  4. 零运维负担:游戏团队可专注于游戏开发,而非数据库管理
  5. 成本优化:按需付费模式和预置容量模式的灵活选择,适合游戏业务的不确定性

背景与挑战

虽然DynamoDB非常适合游戏行业,但在一些特殊场景下,希望取得更好的性能与成本效益,需要结合业务的实际特点,利用DynamoDB提供的扩展与计费模式,能够更好的发挥DynamoDB的优势。

突发流量的挑战特征

游戏应用的流量特征呈现出几个显著特点。首先是突发性强,游戏发布、更新或口碑传播的营销事件等可能在短时间内产生巨大的流量冲击。一些大型游戏往往需要支持”高峰时期超30倍的工作负载”的极端流量波动。并且随着用户数量的爆发性增加,还需要考虑始终一致的极低的数据库访问延迟,而无需担心数据库的瓶颈和如何扩容。其次是读写比例特殊,游戏应用通常具有”高写入与读取比例(通常约为1:1)“,因为”玩家在游戏中执行的每个动作都会以某种方式改变他们的状态”。游戏中的定时活动创造了独特的流量挑战。如ZigZa Games的案例所示,“两款游戏都以在一天中特定时间发生的事件为中心——例如,Tokyo Debunker中的Raid功能,玩家可以合作击败boss——这会产生瞬间请求的爆发”。这种同步化的玩家行为模式对数据库系统造成了”热秒”问题,即大量请求在同一时间窗口内涌入。

性能与成本的双重压力

游戏公司面临着性能与成本的双重压力。一方面,用户体验要求数据库响应时间保持在毫秒级别,任何延迟都可能影响玩家体验,甚至导致玩家流失。另一方面,游戏收入的季节性和不确定性对精细化成本控制带来技术挑战。面对这些挑战,传统的数据库扩展方案往往力不从心。使用按需模式的DynamoDB,虽然很大程度上可以满足这种极致的弹性需求,但是综合性价比来说,如果可以以预置容量模式使用DynamoDB,并配置适当的弹性伸缩策略,会是更理想的方案,同时还可以考虑购买长期的预留容量,进一步节省费用。但是使用预置模式,需要要求业务方提前规划容量,但游戏流量的不可预测性使得准确预估变得极其困难。过度预置导致成本浪费,预置不足则面临性能瓶颈和用户体验下降的风险。同时由于自动弹性伸缩扩展的判断逻辑不会很激进,相对会更平缓一些,因此在极端的扩展要求下,弹性扩展的响应还是会有滞后。

乐易公司的业务背景

作为游戏行业的重要参与者,乐易公司深刻理解这些挑战的复杂性。公司的游戏产品需要支持大规模并发用户,同时保持成本效益。游戏行业的快速发展和用户期望的不断提高,要求数据库基础设施必须具备更强的适应性和预测能力。传统的被动响应式扩展已经无法满足现代游戏应用的需求,主动预测和智能调整成为了技术发展的必然趋势。在实际运营中,亚马逊云科技的 DynamoDB帮助我们解决了游戏上线初期的各种流量挑战,也提供了长期稳定性,同时避免了传统数据库频繁版本升级和补丁更新造成的业务中断。随着业务的进一步发展, 我们也遇到成本的挑战,我们研究了DynamoDB原生自动扩展功能,根据其扩展的原则我们定制化了更加智能和灵活的自定义弹性伸缩解决方案,使性能和成本的诉求能够更好的得到解决。我们也非常愿意将这个经验分享给更多的游戏从业者,在享受DynamoDB带来的性能、稳定和免运维优势下,实现成本节约。

DynamoDB原生自动扩展机制分析

Amazon DynamoDB的原生自动扩展功能基于Amazon Application Auto Scaling服务构建,该服务能够”根据实际流量模式动态调整预置吞吐容量” 。这种机制使得表或全局二级索引(GSI)能够”增加其预置读写容量以处理突然的流量增长而不被限制,当工作负载减少时降低吞吐量以避免为未使用的预置容量付费”。DynamoDB自动扩展采用目标跟踪算法作为核心扩展策略,Application Auto Scaling使用目标跟踪算法”根据实际工作负载向上或向下调整表(或索引)的预置吞吐量,使实际容量利用率保持在目标利用率附近” 。

自动扩展的触发机制具有明确的时间要求。DynamoDB自动扩展在利用率超过目标(通常为70%)至少连续2分钟时增加预置容量,在利用率低于目标20%或更低,且连续15分钟时减少预置容量。这种机制确保了扩展决策的稳定性,避免因短暂波动导致的频繁调整。DynamoDB自动扩展还与Amazon CloudWatch深度集成,依赖CloudWatch指标进行扩展决策。系统输出一分钟周期的消耗预置吞吐量,当消耗容量连续两分钟突破配置的目标利用率时触发自动扩展。这种集成提供了全面的监控能力,但指标发布延迟也会造成扩缩不及时的潜在问题。

自动扩展功能允许用户配置详细的容量参数,定义读写容量自动扩展目标利用率值,范围在20%到90%之间。通过定义MinimumUnits、MaximumUnits和TargetValue(目标利用率百分比),可以确保DynamoDB在需求上升时自动增加容量,在需求下降时缩减容量。自动扩展功能不仅支持主表,还扩展到全局二级索引,每个全局二级索引都有与基础表不同的独立预置吞吐容量。这种设计允许对不同访问模式进行精细化的容量管理。

DynamoDB 还提供了容量暴增缓解的能力,为吞吐量调配提供一定的灵活性。如果您有未完全使用可用的吞吐量,DynamoDB 将为稍后的吞吐量爆增保留一部分未使用的容量,来应对用量峰值。利用容量暴增,可以减少意外的读取或写入请求被限制。DynamoDB 目前保留最多五分钟(300 秒)未使用的读取和写入容量。在读取或写入操作偶尔爆增期间,可以快速消耗这些额外容量单位,甚至比已经为表定义的每秒预置吞吐能力还快。

2024年11月,DynamoDB将按需吞吐量价格降低50%,全局表价格降低高达67%。此外还引入了按需模式的可配置最大吞吐量功能,提供“真正的无服务器体验,可以在不进行容量规划的情况下每秒处理数百万个请求”。

Amazon为自动扩展提供了合理的默认配置。如果使用管理控制台创建表或全局二级索引,DynamoDB自动扩展默认启用,您可以随时修改自动扩展设置。对于目标利用率设置,我们建议避免非常低的利用率目标(低于50%),因为这通常会导致未使用的容量和资源浪费。自动扩展功能本身不产生额外费用,您只需为运行应用程序所需的资源和Amazon CloudWatch监控费用付费,综上所述,大多数场景下,直接使用Amazon DynamoDB原生的自动扩展功能是一个成本效益非常高的解决方案。

标准自动扩展方案的局限

扩展响应时间延迟问题

DynamoDB原生自动扩展面临的最关键限制是响应时间延迟。因为DynamoDB的吞吐量限制是以秒为单位,但是自动扩展是依赖于1分钟的指标进行触发的,而且需要连续两次超过阈值才会触发,如果业务逻辑上有非常大的突发访问,例如营销事件,整点秒杀,不定期的全量数据拉取等,这个延迟会对当时的业务访问带来致命的影响。这种不匹配意味着实时流量峰值与用于扩展决策的平均指标之间存在时间差,导致扩展决策滞后于实际需求。

DynamoDB提供的突发容量机制,目前保留最多5分钟(300秒)的未使用读写容量,5分钟后突发容量会过期。但是对于游戏应用中经常出现的长时间高强度活动,这种短暂的突发容量支持远远不够。

游戏应用的流量特征与自动扩展的设计假设也可能存在根本的冲突。例如游戏公司如Epic Games经历“高峰时期高达30倍负载”的极端变化 ,建议“不要依赖DynamoDB自动扩展来处理偶发的短时间活动峰值,DynamoDB自动扩展在流量逐渐增加或减少时效果最佳”。

即使触发扩展,其幅度往往不足以应对游戏流量的剧烈变化。行业测试表明,如果访问曲线呈现指数级的增长,单次的自动扩展无法马上满足容量需求,则需要等待下一次自动扩展,在此期间仍然会有大量的限制操作。这种扩展不足直接导致用户体验下降。

游戏中的事件驱动流量模式对标准自动扩展构成特殊挑战。特发事件产生的”热秒”问题无法通过基于平均值的扩展机制有效解决。

标准自动扩展在成本优化方面也可能存在不足。游戏公司必须在过度预置(导致低流量期间成本过高)和接受限制(导致用户体验差)之间做出艰难选择。虽然2024年引入了按需模式的可配置最大吞吐量,并可以通过提前预热功能实现足够的吞吐能力,但会增加成本和并未完全解决预置容量模式的扩展延迟问题。

依赖CloudWatch指标平均化和发布延迟意味着当扩展决策做出时,流量峰值可能已经对用户造成了显著影响。当面对”每秒超过100,000个请求和数百万日活跃用户”的规模时,扩展延迟和幅度不足的问题被放大,可能同时影响数百万玩家的游戏体验。这促使精细运营的游戏公司实施能够更快响应流量变化的自定义监控和扩展解决方案。

业务逻辑结合

有些事件营销需要提前进行策划,并提前准备好预热的容量,但是自动弹性规则会根据负载情况,在负载低于最低阈值15分钟后,会进行自动缩容措施,但是往往这时营销事件还没有开始,造成很大的不确定性。

如果停用自动扩容逻辑,会造成营销事件开始后,无法自动进行扩容,甚至在非预期流量到达时,出现流量限制。另一方面,在营销事件结束后,容量不会自动进行收缩,也造成了很大的浪费,因此结合业务情况,进行容量的自动管理,也是非常必要的核心功能。

乐易自定义弹性伸缩架构设计

代理服务架构的核心设计

乐易公司开发的自定义弹性伸缩解决方案采用了基于代理服务的创新架构设计。该架构的核心理念是在应用层和DynamoDB之间引入智能代理层,实现对数据库访问的精细化控制和优化。通过代理层可以轻松进行数据库访问的统计和管理,并在出现限流错误时,可以第一时间反馈到业务逻辑中,进行主动的扩容判断工作,从而实现迅速的容量响应,乐易的实际使用中,使用的是10秒间隔的紧急扩容策略,当遇到限流报错时,马上进行扩展,10秒内即可快速扩容,同时限流的请求还会自动进行重试,代理服务本身是分布式的,满足应用高可用要求。前端应用还使用缓存服务进行数据读取缓存。

乐易的创新在于引入了预测性的扩展能力,乐易的架构通过引入一个实时访问统计的组件,实现了全局的决策控制大脑,该组件充分利用Amazon CloudWatch监控里的DynamoDB指标历史数据,进行历史预测,并通过上述的代理架构,收集实时的指标数据,从而实现了快速的综合评估,并进行弹性扩展的决策。实时访问数据会每隔10秒进行汇总统计,然后每分钟执行一次决策,决策依据除了这个实时数据外,还会利用CloudWatch中最近一段时间的历史数据,基于不同时间区间的数据,推算出下一时刻会消耗的阈值。同时,为了应对突发负载集中在很短的时间(如几秒内),即使设置的阈值超过了平均消耗但依然发生限流错误的情况,我们利用了DynamoDB本身的“容量暴增”特性,在发现即将发生负载突增的情况下,更早地将阈值逐步调整到合适的值,在这个过程中逐渐累积未使用的额外容量,并以此来应对负载的冲击。这样该阈值同时拥有了实时弹性、每天固定高峰低谷以及周期性的活动规律(例如周末流量曲线,周中定期数据统计需求等)多重因素的共同影响,实现精准的预测。因此可以通过分析历史负载数据检测日常和周期性的流量模式,预测未来容量的需求,这种多尺度预测方法确保了系统在不同时间维度上都能做出准确的容量决策。

同时对于内部日常运营需要,乐易也提供了内部的计划任务安排接口,例如可以指定让DynamoDB在什么时间点进行扩容,并保持热度到一个指定时间,以实现一些有规划的事件营销。这样系统能够自动识别需要预热的时间窗口,并在适当的时机执行容量调整。并在容量保障期间,维持足够的热度,在结束保障之后,自动进行容量的缩减,以实现成本节省。

对于缩容的考虑,由于DynamoDB本身对于缩容次数的限制,客户会考虑使用更大的宽容度作为参考,并非预测需要降低就立刻响应,需要基于当前值低于一定比例后,例如只有当新计算出的阈值低于当前阈值的90%才会考虑进行缩容,同时还需要满足DynamoDb对于缩容时间上的要求。

除了以上核心规则,还可以根据不同游戏和运营需求,定制不同的策略,例如在新功能发布期间应用更高的安全系数,在常规游戏时间应用标准系数。这种动态调整机制确保了系统既能应对意外的流量激增,又能避免过度预置导致的成本浪费。

游戏服务维护后的流量恢复是另一个关键场景。当服务重新上线时,大量玩家会同时登录,产生瞬间的高并发访问。乐易的系统采用渐进式容量恢复策略,在维护结束前15分钟开始预热数据库容量,并在服务上线后的前30分钟内维持高容量配置,随后根据实际流量情况逐步调整至正常水平。虽然这些规则影响较小,但是可以作为更精细的管理规则实现更平滑和精准的预测。

另外还可以通过机器学习技术,分析大量的历史数据,识别复杂的流量模式和相关性。考虑包括时间序列模式、季节性变化、游戏内事件影响、外部因素(如节假日、竞品发布)等多种因素,系统的预测准确性随着时间的推移而不断提高,提供越来越精准的容量管理支持。

优化效果

扩展响应时间的显著改善

最显著的改进体现在扩展响应时间上。传统DynamoDB自动扩展的反应时间问题得到了根本性解决。乐易的紧急弹性策略保障扩展机制将响应时间缩短至10秒内,实现了83%的实时性提升。这一改进对于突发场景尤为重要。

成本效益的显著优化

通过精确的容量预测和智能的模式切换,乐易实现了35%的成本降低。成本优化不仅体现在直接的DynamoDB费用上,还包括了减少的运维成本和避免的性能问题损失等间接收益,总体ROI收益更可观,证明了自定义解决方案的商业价值。

预置容量利用率分析

乐易的监控数据显示,系统的预置容量利用率保持在80-90%的理想区间内。这一水平远高于行业平均的60-70%,高利用率的实现得益于智能预测算法对历史数据模式的深度分析,表明预测算法的有效性。系统能够准确预测容量需求,避免了传统方案中常见的过度预置或容量不足问题。

超限事件的统计分析

实施乐易解决方案后,超限事件(throttling events)的发生频率显著下降。月度统计显示,超限事件从实施前的每月4500次降低至个位数水平,这一改进直接转化为更稳定的游戏体验和更高的玩家满意度。

延迟性能的持续监控

系统延迟性能保持在单位数毫秒级别,符合游戏行业的严格要求。P95延迟保持在5毫秒以下,P99延迟保持在8毫秒以下,确保了即使在高负载情况下也能提供一致的低延迟体验。这一性能水平与行业领先企业相当,如DynamoDB在高峰时”保持单位数毫秒响应并达到1.46亿次请求每秒”。

未来优化方向与展望

机器学习进一步增强预测能力

乐易正在探索更先进的机器学习技术来提升预测准确性。计划引入深度学习模型来分析更复杂的流量模式,包括玩家行为的季节性变化、游戏内容更新的影响、以及外部事件(如节假日、竞品发布)对流量的影响。这些增强将使预测系统能够处理更复杂的场景并提供更准确的容量预测。

多区域智能调度优化

随着游戏业务的全球化扩展,乐易计划开发更智能的多区域调度算法。系统将能够根据全球玩家分布、网络延迟、成本因素等多维度指标,智能地在不同区域间分配和调度容量。这种全局优化方法将进一步降低成本并提升全球玩家的游戏体验。

边缘计算集成策略

考虑到游戏行业对低延迟的极致要求,乐易正在研究将边缘计算技术集成到弹性伸缩解决方案中。通过在边缘节点部署轻量级的预测和缓存服务,系统能够更接近玩家提供服务,进一步降低延迟并提高响应速度。这种边缘-云协同的架构将为下一代游戏应用提供更强的技术支撑。

总结

乐易的DynamoDB自定义弹性伸缩实践证明,通过深入理解业务特征和技术创新,企业能够显著超越标准解决方案的性能边界。对于面临类似挑战的游戏公司,建议采用渐进式的实施策略:首先建立完善的监控体系,然后逐步引入预测算法和智能调度机制,最终构建完整的自定义弹性伸缩解决方案。这种方法不仅能够获得显著的技术和商业收益,还能为企业在激烈的市场竞争中建立可持续的技术优势。

参考链接

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。

本篇作者

潘新

乐易游戏研发部平台中心后台负责人

刘天龙

负责支持客户完成各种Workload在AWS上的架构设计,加入AWS之前先后服务于运营商、电力、Microsoft和Citrix等企业,熟悉大型网络构建及优化,EDA及SAP等迁移上云解决方案。

汤力嘉

亚马逊云科技高级解决方案架构师,负责基于亚马逊云科技的云计算方案的架构设计,在游戏 , 多媒体方向有丰富部署实践经验。

罗伟潮

亚马逊云科技解决方案架构师,拥有多年互联网和游戏SRE/基础架构经验,专注于游戏应用现代化和生成式AI解决方案。

AWS 架构师中心: 云端创新的引领者

探索 AWS 架构师中心,获取经实战验证的最佳实践与架构指南,助您高效构建安全、可靠的云上应用