Scaling Out最流行的社交游戏,FarmVille

2010 年 3 月 29 日

拥有每月8735 万活跃用户 Farmville 是 Facebook 上最流行的游戏,也是因特网上最流行的 web game 之一。为了支持 scale out,这一应用被部署在云中,广泛地使用了缓存,有能力在顶峰时期关闭一些功能,并很好的运用了性能监测和管理。

按照来自开发该游戏的 Zynga 公司的开发者 Luke Rajlich 的说法,FarmVille 于 2009 年 6 月上线,4 天之后就达到了 100 万的用户,60 天内就达到了 1000 万。拥有每月 8000 万的活跃用户,FarmVille 影响到了 20% 的 Facebook 用户以及超过总数 1% 的世界人口。要在这样短的时间内在这样的规模下 scaling out,需要一定的硬件和软件解决方案。

InfoQ 采访了 Luke Rajlich 以了解更多的架构信息。首先,这一应用运行在云中的虚拟 Linux 服务器上,所以它可以方便的请求和接受额外的计算资源。该应用运行在基本的 LAMP 栈上,这里的 P 指的是 PHP。该应用广泛的使用了缓存:

基于上来说我们的应用是面向对象的,MVC 应用,有一个定制的 DB/Cache 接口。我们对于缓存相当依赖,特别是 memcache,用以支持我们的负载。同时,我们也有水平分区 (shard) 的数据库。

为了应付峰值的流量,这一应用依赖于在短时间内增加额外的容量:

从架构上来说,我们能够快速的增加容量,因为应用的负载可以被划分到任意的层次 (负载均衡,web 服务器,memcache,数据库)。同时,我们对于在任意层次增加容量有专门的形式化的程序。因此,增加容量的操作很容易管理并且能快速的执行。同时我们运行于虚拟的环境之上,因此我们可以快速的增加容量而不用预备额外的硬件资源,这一点非常明显的减少了从我们决定增加容量到我们实际增加所必需的硬件资源之间的时间。我们逐步的采用了配置工具,比如 puppet,以此减少了增加额外硬件所需要的开销。剩下的困难的部分首先在于如何知道和发现应用的哪一部分会破坏性能。为了顾及这一考虑,我们对于前面所提的服务降级投入了许多时间,同时还花费了大量的精力投入到应用性能的监控上面。

这一游戏有好些个部件,当性能成为瓶颈的时候“我们可以有效的关闭在平台上使用的不太重要的功能”,以此缓解对应用的需求:

还有好些个其它的组件 [在游戏本身以外],比如朋友阶梯,送礼请求,等等。我们可以将这些元素从游戏本身剥去,因为游戏本身的基本部分不会受到这些组件性能的影响。这是至关重要的,因为我们的游戏主要是一个基于时间的游戏,用户在特定的时间回到游戏执行特定的操作。如果我们存在宕机时间这些特定的操作将会产生巨大的用户体验的影响,因此我们想要避免产生这种情况。

这一应用的读写比例高达 3:1,他们广泛地使用缓存来处理它,在跟 Todd Hoff 的采访中 Rajlich 揭示了其中的奥秘:

用户的状态包含了大量的数据,这些数据具有微妙而复杂的关系。举例来说,在一个农场中,物体相互之间不能冲突,所以如果一个用户在农场上建了一所房子,在后台需要检查在用户的农场不会有其它的物体占据了重叠的空间。与其它的大部分的主要是读操作的主流网站,比如 Google 或 Facebook 不同的是,FarmVille 有着相当重的写操作负载。数据读写的比例是 3:1,这是一个高得惊人的写比重。FarmVille 后端最主要的请求之一就是一些更改玩游戏的用户状态的请求,为了增强伸缩性,我们致力于使我们的应用主要与缓存部件交互。

FarmVille 与 Facebook 平台之间的顶峰流量达到了 3GB/s,所以客户端应用程序需要关闭一些对平台的请求来避免阻塞通信链接:

FarmVille 与 Facebook 平台之间的流量是巨大的:在顶峰时刻,两者之间的流量基本达到 3GB/s,同时在缓存集群和应用程序之间又有 1.5GB/s 的流量。此外,因为性能可以差异较大,应用程序具有动态的关闭任何到后台调用的能力。我们可以拨号进行微调,以关闭迅速增加的更多的对于后端平台的调用。此外我们还使得所有到后台的调用都避免阻塞应用本身的加载。这里的思想是,就算所有其它的都失效了,玩家至少仍可以玩游戏。

对于性能监控和管理“我们使用了 nagios 来警报,munin 来监控,以及 puppet 来做配置。我们极大地利用了系统内部状态来追踪程序所使用的服务的性能,比如 Facebook,DB,以及 Memcache。此外,当我们发现性能降低的时候,我们基于样本来调节一个请求的 IO 事件。”

附注一下,根据根据Inside Social Games 分析师Justin Smith 的说法,FarmVille 背后的公司Zynga,去年获得了4.9 亿美元的收入,今年有望超过8.35 亿。

查看英文原文: Scaling Out the Most Popular Social Game, FarmVille

2010 年 3 月 29 日 03:442550
用户头像

发布了 133 篇内容, 共 26.2 次阅读, 收获喜欢 1 次。

关注

评论

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

第十三周作业

极客大学架构师训练营

架构师训练营 week9 学习总结

花果山

极客大学架构师训练营

第四周系统架构作业

简简单单

两个周末整理的垃圾回收知识,我要吐血了

moon聊技术

JVM JVM垃圾回收原理

盘点2020 | 带领团队学习成长,干货总结

flyer0126

学习 盘点2020

架構師訓練營 week13 總結

ilake

第四周学习总结

简简单单

秒杀活动要点分析

落朽

大数据 2 第十三周作业「架构师训练营第 1 期」

天天向善

架构师训练营第四周作业

zamkai

第九周课后练习

晴空万里

极客大学架构师训练营

week9 性能优化(三)作业和学习总结

杨斌

第九周学习总结

晴空万里

极客大学架构师训练营

架构师训练营第一期第十三周作业

Leo乐

极客大学架构师训练营

架构师训练营第十三周学习总结

Gosling

极客大学架构师训练营

架构师训练营第 9 周学习总结

菜青虫

极客大学架构师训练营

架构师训练营第 9 周课后练习

菜青虫

极客大学架构师训练营

架构师训练营 week9 课后作业

花果山

极客大学架构师训练营

架构师训练营第13周总结

邓昀垚

架構師訓練營 week13 作業

ilake

架构师训练营 week10 课后作业

花果山

极客大学架构师训练营

面试官:Mybatis里的设计模式有哪些?我一口气答了8种

田维常

mybatis

架构师训练营第一期第十三周总结

Leo乐

极客大学架构师训练营

架构师训练营第13周作业

邓昀垚

架构师训练营第 1 期 - 第十三周总结

Todd-Lee

极客大学架构师训练营

架构师训练营第 1 期 - 第十三周作业

Todd-Lee

极客大学架构师训练营

海底光缆是如何铺设出来的?

网络技术平台

架构师训练营第十三周课后作业

Gosling

极客大学架构师训练营

分布式服务框架的选择-《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》

Man

分布式架构 中台架构

架构师训练营 week10 学习笔记

花果山

极客大学架构师训练营

LeetCode题解:18. 四数之和,双指针,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

Scaling Out最流行的社交游戏,FarmVille-InfoQ