写点什么

视频游戏《光环 4》的 Actor 模型设计和实现

  • 2015-03-18
  • 本文字数:1257 字

    阅读完需:约 4 分钟

在开始设计光环(Halo)系列视频游戏的下一代——光环4 的时候,现有的游戏引擎与可用的服务已经无法满足游戏的需求了,因此开发者基于 Actor 模型设计了一套全新的解决方案,并使用 Orleans 框架完成了这套模型的实现。在 QCon 伦敦大会上, Caitie McCaffrey 在演讲中为听众介绍了他们设计与创建这个新游戏背后的服务的过程。

McCaffrey 原本在微软游戏工作室就职,目前则在 Twitter 担任分布式系统工程师的职位。他提到了在游戏开发过程中所遇到的一个架构上的挑战,是如何设计该游戏将要面对的海量访问的负载。在光环 4 上线当天,共有 100 万独立在线用户参与了游戏,这个数字在一周之内就上升到了 400 位,游戏时间总和超过了 3000 万小时。为了应对如此庞大的负载,该项目选择了在云端进行托管,更具体地说是托管在 Azure 上,毕竟光环 4 是微软所推出的游戏。其它的挑战还包括如何保证游戏能够始终在线运行,这就要求服务器永远保持可用状态,还要尽量降低延迟,并且提高并发能力。

在寻找能够满足该项目需求的解决方案过程中,项目组的目光投向了 Actor 模型。从本质上说,Actor(角色)是并发的基础,该模型的核心概念在于:作为并发计算的基元,每个 Actor 将通过异步消息发送的方式与另一个 Actor 进行通信。当某个 Actor 收到一条消息之后,它可以选择将消息发送给其它 Actor,或是创建一个新的 Actor,也可以修改它的内部状态。这样一来,就能够高效地将某个 Actor 的所有数据保存在同一个地方,因此 McCaffrey 和他的团队通过实现这些保持状态的服务,创建了一套能够保持状态的中间层,它一方面具有缓存的高性能优点,另一方面也不会产生由于并发造成的问题。

项目组在微软内部四处寻找可行的方案,他们最终发现了 Orleans 框架,这是一个用于创建基于 Actor 模型的分布式系统的运行时与编程模型。Orleans 框架与其它 Actor 模型框架最重要的不同之处在于它所独有的概念:虚拟 Actor。这个虚拟 Actor 永远不会被创建或是销毁,从逻辑上来说它是永远存在的。虚拟 Actor 所具有的关键思想,一是地址的透明性,即发送给某个 Actor 的消息会被自动路由至该 Actor,无论该 Actor 的地址在哪里;二是能够在不重新进行部署的情况下进行自动横向扩展。

McCaffrey 声称,在使用了新技术的全新架构中,服务器的 CPU 利用率能够持续稳定在 90% 的水平上,并且能够实现接近线性增长的可扩展性,能够轻易地应对负载的变量,这一点在访问量突发性增长的时刻相当实用,例如当游戏刚刚上线的时候。

McCaffrey 相信,如果没有 Orleans 这个框架,光环 4 的项目就不可能获得成功。由于 Orleans 能够为开发者编写在分布式环境中运行的代码提供极大的帮助,因此寻找合适的开发者也变得简单了许多。并且由于它提高了开发者的生产力,因此开发者能够专注于提高游戏的用户体验,让它的表现更加出色。

McCaffrey 在一篇较早的博客帖子中,曾经介绍了使用 Orleans创建RESTful 服务的过程。

对于实现Actor 模型的不同途径,InfoQ 之前曾经专门进行过讨论和报告

查看英文原文: Building Halo 4, a Video Game, Using Actor Model

2015-03-18 06:122921
用户头像

发布了 428 篇内容, 共 178.9 次阅读, 收获喜欢 38 次。

关注

评论

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

linux之dd命令

入门小站

Linux

架构实战营 模块八 作业

脉醉

#架构实战营

python 学习笔记:day2——基本数据类型

秦时明月

Python编程

【LeetCode】最后一个单词的长度Java题解

Albert

算法 LeetCode 9月日更

架构实战营-模块八作业

老实人Honey

Ember.js 项目开发之 Ember Data

devpoint

ember.js 9月日更

架构实战营-模块八作业

以吻封笺

Prometheus PushGateway 0.9 和 1.0 的区别

耳东@Erdong

Prometheus PushGateway 9月日更

消息队列数据存储设计案例-模块八

小牧ah

架构实战营

模块八作业

VE

架构实战营

zookeeper迁移实践

小江

zookeeper 迁移数据

模块八作业

king

消息队列:RocketMQ事务实现

正向成长

RocketMQ事务

手机测试岗位常见面试问题汇总(持续更新中)

IT蜗壳-Tango

9月日更

架构实战营模块8作业

zlz

数据仓库的数据从哪来?

奔向架构师

数据仓库 9月日更

你是一名技术管理者还是项目管理者?

菜根老谭

项目管理 技术管理

模块8作业

Geek_ywh40v

python学习笔记:day1——python入门了解

秦时明月

Python编程

架构训练营 模块七

小卷儿

架构实战营1期模块八作业——中间件设计

tt

架构实战营

【架构设计模块八】:设计消息队列存储消息数据的 MySQL 表格

Ryoma

作业8

柱林

中秋晴朗夜,我们与星月相见

脑极体

21. AI会让人类大量失业吗

Databri_AI

人工智能

JavaScript进阶(六)继承

Augus

JavaScript 9月日更

模块八作业

河马先生

架构实战营

网络攻防学习笔记 Day143

穿过生命散发芬芳

9月日更 虚拟化技术

在线SQL(Insert/Update)语句转JSON工具

入门小站

工具

机场做好这道题,才能万户千家共婵娟

脑极体

[架构实战营]模块八作业

xyu

#架构实战营

视频游戏《光环4》的Actor模型设计和实现_DevOps & 平台工程_Jan Stenberg_InfoQ精选文章