写点什么

视频游戏《光环 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:123385
用户头像

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

关注

评论

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

Flink CEP 在抖音电商的业务实践

Apache Flink

大数据 flink 实时计算

前端如何实现将多页数据合并导出到Excel单Sheet页解决方案|内附代码

葡萄城技术团队

数据库 前端 架构分布式

应用部署初探:微服务的3大部署模式

SEAL安全

微服务 企业号 2 月 PK 榜

对话 ChatGPT:现象级 AI 应用,将如何阐释「研发效能管理」?

LigaAI

人工智能 研发效能 openai ChatGPT 企业号 2 月 PK 榜

十分钟用vitepress搭建项目文档

虎妞先生

前端 vite Vue 3

git中patch的用法

ModStart

如何用Apipost预执行脚本动态修改Query、Body、Header参数

不想敲代码

Postman 接口调试 API apipost

看海泰方圆类ChatGPT技术模型!

电子信息发烧客

我的2022,从紫竹院到通惠河畔

虎妞先生

学习 前端 成长 年终总结

银行零售如何更贴近客户?是时候升级你的客户旅程平台了

Kyligence

数据分析 客户旅程

给webpack提了一个pr之后......

虎妞先生

前端 webpack #开源

C++到Python全搞定,教你如何为FastDeploy贡献代码

飞桨PaddlePaddle

c++ paddle 飞桨

微信小程序底层框架实现原理|万字长文

虎妞先生

微信小程序 前端 原理 架构、

Python从0到1丨图像增强及运算:形态学开运算、闭运算和梯度运算

华为云开发者联盟

Python 人工智能 华为云 企业号 2 月 PK 榜 华为云开发者联盟

BSN-DDC基础网络详解(二):快速接入指南

BSN研习社

BSN-DDC

从零开始学习BOM&DOM

虎妞先生

前端 DOM

前端包管理工具 npm yarn cnpm npx

虎妞先生

前端 包管理工具 #面试

大型集团企业数据治理实践,推进全域数据资产体系建设 | 数字化标杆

袋鼠云数栈

探讨MySQL事务特性和实现原理

小小怪下士

Java MySQL 程序员 事务

2023年低代码发展新趋势

力软低代码开发平台

图片竟能直接生成逼真音效?这AI模型也太神奇了吧!

人称T客

云安全之浅谈密钥泄露

HummerCloud

云安全 密钥

谈谈干前端三年的几点感受

虎妞先生

前端 成长 代码人生

不常用但却常问的迭代器

虎妞先生

前端 ES6

Hi3861编译烧录更快捷

HarmonyOS开发者

HarmonyOS

非代码的贡献也能成为Committer,我与DolphinScheduler社区的故事

白鲸开源

开源 开源社区 开源文化 开源软件 大数据 开源

JVM性能调优,分享些好用的内存分析神器

Steven

干货|PCBA丝印位号与极性符号的组装性设计

华秋电子

PCB dfm

众生皆苦,我选pnpm

虎妞先生

npm 原理 前端工程化 pnpm

Vue3项目框架搭建封装,一次学习,终身受益【万字长文,满满干货】

虎妞先生

前端 前端架构 Vue 3 vue cli

畅销10年的数据库技术图书,当之无愧的霸主!还有谁?

博文视点Broadview

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